hookapidelphi怎么HOOK指定API函数!

hookapi  时间:2021-07-18  阅读:()

给以下结构体的说明以及参数说明(本人初学HOOK API)

你是IAT HOOK吧?

Inline Hook不比IAT的强吗?

第一个IMAGE_IMPORT_DESCRIPTOR是导入表,

第二个IMAGE_DOS_HEADER是PE文件DOS头

第三个IMAGE_OPTIONAL_HEADER是PE文件头

第四个IMAGE_THUNK_DATA 是导入函数.

这些结构在VC中windows.h有定义的,可以右键,GOTO...来查看.

进程内 API “Hook”应怎么写

GetCurrentProcess(...) WriteProcessMemory(...) 所以说他简单,是因为在这个程序里没有太多的计算相对地址的东西。

而且这个例子还有一个算是幸运的地方。

那就是当我得到一个函数的地址的时候,然后去调用它的机器码恰好是5个字节。

8B 45 F8 FF D0 这个与 E8 20 15 FF FF, call addr地址等长度。

我们这里以Hook 本进程内的WriteFile为例子。

我们声明一个和它同型的函数: BOOL WINAPI MyWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); 我们将要所有的WriteFile都先走我们的函数MyWriteFile,然后再执行真正的WriteFile实现部分。

于是我们首先要跟踪WriteFile的调用位置。

改写那里的机器码。

void* m = MyWriteFile; __asm { mov eax, m call eax } 我们先得到以上代码的Shellcode,就是8B 45 F8 FF D0; 我们写它到一个我们找到的固定地址, CHAR szBuffer[5] = { 0x8B, 0x45, 0xF8, 0xFF, 0xD0 }; DWORD d = 0; WriteProcessMemory(GetCurrentProcess(), (VOID*)0x7C810FA6, szBuffer, 5, &d); 这样,调用WriteFile的时候,就会跳转到MyWriteFile上了。

当然了,我们还要能够调用真正的WriteFile,我们只要在MyWriteFile的开始把那段机器码改回来就可以了。

这个和上面的方法是一样的。

BOOL WINAPI MyWriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped) { CHAR szBuffer[5] = { 0xe8, 0x20, 0x15, 0xff. 0xff }; DWORD d = 0; BOOL b = WriteProcessMemory(GetCurrentProcess(), (VOID*)0x7C810FA6, szBuffer, 5, &d); return WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped); } 这样就可以了,简单吧? 这么改来改去的好处是,你不用自己出来太多的栈指针的问题。

否则自己弄汇编来处理这些事情,既要写很多代码,又容易出现错误。

OK,全篇结束,这么做的价值不是很大,要是Hook 其他进程的API了,那就做屏幕取词好了。

呵呵。

但是原理都是相同的啊。

Hook API的主要应用领域是什么

Hook解释    Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。

在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。

  另一解释:    钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。

当消息到达后,在目标窗口处理函数之前处理它。

钩子机制允许应用程序截获处理window消息或特定事件。

   钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。

每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。

这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

  Hook原理    每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。

这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。

当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。

一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。

最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

   Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。

每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。

如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

  钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。

用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

  系统钩子与线程钩子    SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。

   线程勾子用于监视指定线程的事件消息。

线程勾子一般在当前线程或者当前线程派生的线程内。

   系统勾子监视系统中的所有线程的事件消息。

因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL) 中。

系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。

  几点说明:   (1)如果对于同一事件(如鼠标消息)既安装了线程勾子又安装了系统勾子,那么系统会自动先调用线程勾子,然后调用系统勾子。

  (2)对同一事件消息可安装多个勾子处理过程,这些勾子处理过程形成了勾子链。

当前勾子处理结束后应把勾子信息传递给下一个勾子函数。

  (3)勾子特别是系统勾子会消耗消息处理时间,降低系统性能。

只有在必要的时候才安装勾子,在使用完毕后要及时卸载。

  Hook的应用模式   观察模式   最为常用,像Windows提供的SetWindowHook就是典型地为这类应用准备的。

而且这也是最普遍的用法。

  这个模式的特点是,在事情发生的时候,发出一个通知信息。

观察者只可以查看过程中的信息,根据自己关心的内容处理自己的业务,但是不可以更改原来的流程。

  如全局钩子中,经常使用的鼠标消息、键盘消息的监视等应用。

金山词霸屏幕取词的功能是一个典型的应用(具体技术可以参考此类文章)。

  注入模式   这个模式和观察模式最大的不一样的地方在于,注入的代码是为了扩展原始代码的功能业务。

插件模式是此类模式的典型案例。

  不管瘦核心的插件系统(如Eclipse)还是胖核心的插件系统(如Delphi、Visual Studio等IDE环境),其对外提供的插件接口都是为了扩展本身系统的功能的。

  这种扩展的应用方式的典型特点,就是新的扩展代码和原来的代码会协调处理同类业务。

  替换模式   如果针对应用目的不同,可以叫修复模式或破解模式。

前者是为了修改系统中的BUG,后者是为了破解原有系统的限制。

  很多黑客使用此种模式,将访问加密锁的DLL中的导出表,替换成自己的函数,这样跳过对软件的控制代码。

这类应用的难点是,找出函数的参数。

  这类模式的特点是,原有的代码会被新的代码所替换。

  前面三个是基本模式,还有很多和实际应用相关的模式。

  集权模式   此类模式的出现,大都是为了在全部系统中,统一处理某类事情。

它的特点不在于注入的方式,而在于处理的模式。

  这个模式,大都应用到某类服务上,比如键盘服务,鼠标服务,打印机服务等等特定服务上。

通过统一接管此类服务的访问,限制或者协调对服务的访问。

  比如键盘锁功能的实现,就是暂时关闭键盘的所有应用。

  这类模式的特点主要会和特点服务有关联。

  修复模式   替换模式的一种,这里强调的是其应用的目的是为了修复或扩展原有系统的功能。

  破解模式   替换模式的一种,这里强调的是其应用的目的是为了跳过原有系统的一部分代码。

如加密检测代码,网络检测代码等等。

  插件模式   注入模式的一种,在系统的内部直接依靠HOOK机制进行扩展业务功能。

  共享模式   这类应用中,经常是为了获取对方的数据。

必然我希望获取对方系统中,所有字符串的值。

可以通过替换对方的内存管理器,导出所有字符串。

  这个应用比较特殊。

不过其特点在于,目的是达到系统之间的数据共享。

  其实现,可能是观察模式,也可能是替换模式。

全局hook api

两个方法: 1、全局钩子注入dll,hook应用层的OpenProcess,具体请百度“C++ 全局钩子” 2、写驱动hook内核API,NtOpenProcess,可以试试SSDT hook,具体请百度“SSDT hook” 前者是应用层编程,估计比较适合你,后者是驱动编程,光是前期的编程环境调试环境等等的搭建已经足够消耗你很大的耐心,如果你有足够的耐心,你也可以试一试。

C#hookapi

#include <windows.h> #include "APIHook.h" extern CAPIHook g_OpenProcess; // 自定义OpenProcess函数 #pragma data_seg("YCIShared") HHOOK g_hHook = NULL; DWORD dwCurrentProcessId=0; #pragma data_seg() HANDLE WINAPI Hook_OpenProcess(DWORD ess, BOOL bInheritHandle, DWORD dwProcessId) { typedef HANDLE (WINAPI *PFNTERMINATEPROCESS)(DWORD, BOOL,DWORD); if(dwProcessId != dwCurrentProcessId) { return ((PFNTERMINATEPROCESS)(PROC)g_OpenProcess)(ess,bInheritHandle,dwProcessId); } return 0; } // 挂钩OpenProcess函数 CAPIHook g_OpenProcess("kernel32.dll", "OpenProcess", (PROC)Hook_OpenProcess);

delphi怎么HOOK指定API函数!

API钩子很简单,源码我没有,如果你会用API的话,我给你讲一下实现的过程吧:先用GetModuleHandle函数获取dll的模块句柄,再用GetProcAddress函数获取要HOOK的函数地址, 下一步用VirtualProtect函数将要HOOK的函数所在地址的属性设置为可写,最后一步,将新函数地址(用于替换原函数)写到原函数入口地址替换掉原函数地址,这样就实现了API钩子功能了

星梦云-100G高防4H4G21M月付仅99元,成都/雅安/德阳

商家介绍:星梦云怎么样,星梦云好不好,资质齐全,IDC/ISP均有,从星梦云这边租的服务器均可以备案,属于一手资源,高防机柜、大带宽、高防IP业务,一手整C IP段,四川电信,星梦云专注四川高防服务器,成都服务器,雅安服务器,。活动优惠促销:1、成都电信夏日激情大宽带活动机(封锁UDP,不可解封):机房CPU内存硬盘带宽IP防护流量原价活动价开通方式成都电信优化线路2vCPU2G40G+60G21...

Sharktech:美国/荷兰独立服务器,10Gbps端口/不限流量/免费DDoS防护60G,319美元/月起

sharktech怎么样?sharktech (鲨鱼机房)是一家成立于 2003 年的知名美国老牌主机商,又称鲨鱼机房或者SK 机房,一直主打高防系列产品,提供独立服务器租用业务和 VPS 主机,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹,所有产品均提供 DDoS 防护。此文只整理他们家10Gbps专用服务器,此外该系列所有服务器都受到高达 60Gbps(可升级到 100Gbps)的保护。...

CloudCone(1.99美元),可以额外选择Voxility高防IP

CloudCone 商家也是比较有特点的,和我们熟悉的DO、Vultr、Linode商家均是可以随时删除机器开通的小时计费模式。这个对于有需要短租服务器的来说是比较有性价比的。但是,他们还有一个缺点就是机房比较少,不同于上面几个小时计费服务商可以有多机房可选,如果有这个多机房方案的话,应该更有特点。这次我们可以看到CloudCone闪购活动提供洛杉矶三个促销方案,低至月付1.99美元。商家也可以随...

hookapi为你推荐
windowsphone手机Windows Phone 手机有哪些呼叫中心搭建如何建立适合自己的呼叫中心百度创业史百度成立的历史windows7系统要求windows7的系统盘要求最低是多少催收软件哪个好我也欠了好多都是七天贷款高利息的,没钱还,今天开始催收,还爆了我的通讯录,弄得我想死的心都有了!flv转换avi怎样把视频flv格式转换成avi 、 mp4格式handoff怎么用如何令Yosemite使用iPhone的通话功能和Handoff设置计算机编程基础计算机编程需要有哪些基础杀戮空间联机杀戮空间2怎么联机川普竞选网站遭攻击网站被攻击怎么回应
vps是什么意思 n点虚拟主机管理系统 diahosting 腾讯云数据库 patcha qq数据库 合肥鹏博士 爱奇艺vip免费试用7天 ftp免费空间 怎么建立邮箱 免费外链相册 登陆空间 阿里云官方网站 我的世界服务器ip 空间申请 域名和主机 卡巴斯基试用版下载 黑科云 七牛云存储 xshell5注册码 更多