应用层钩子,对于懂编程的人来说应该都了解。他用HOOK API的方式使程序无法正常调用该API!
如果我们一定要用这个API来达到我们的目的呢?只能恢复此 API HOOK!
下面我们开始教程:
准备工具 : XT(网络自行下载),为了方便测试 我自己写了一个 HOOK LoadLibaryExW的小程序
1.打开测试程序,打开XT,点击XT的应用层钩子---选择进程钩子---点击测试程序进程名--右键---检测
2.点击 API钩子---右键---恢复。即可恢复此钩子,使API能正常调用!
我们虽然恢复了,但是利用工具来恢复终究不是王道,怎么用编程写出来呢?
1.首先我们来获取API的头部内存地址(类似CE查找API,我以前的教程有介绍):
我们用这两个API来获取地址:
nt = GetModuleHandle('ntdll.dll')
dizhi = Hex(GetProcAddress(nt, 'NtOpenProcess'))
2.我们获取内存地址(也就是dizhi)然后用 WriteProcessMemory 这个API 来写入数值:88 FF 55 8B EC(XT获取的挂钩处原始值)
代码如下:
gamebase = Val('&H' & dizhi)
ReadProcessMemory 进程句柄, ByVal gamebase, 136, 1, 0& ''''注意88为16进制,需要转换为十进制也就是136,,下面一样!
ReadProcessMemory 进程句柄, ByVal CLng(gamebase + 1), 255, 1, 0&
ReadProcessMemory 进程句柄, ByVal CLng(gamebase + 2), 85, 1, 0&
ReadProcessMemory 进程句柄, ByVal CLng(gamebase + 3), 139, 1, 0&
ReadProcessMemory 进程句柄, ByVal CLng(gamebase + 4),236, 1, 0&
这样我们就用代码恢复了API HOOK 是不是很简单呢?
联系客服