admin 管理员组

文章数量: 887192


2024年1月28日发(作者:java设计模式没有用)

易语言HookAPI 技巧

易语言Hook的代码有很多,Hook的跳转代码也很简单,不多说,主要注意的有:

1. 可以保存原API函数的API头到自己申请的地址,Hook跳转的地址仍然是自己的子程序,但如果保存了API头,就可以 call addr 实现不恢复Hook调用原函数。

.版本 2

.如果真 (FuncAddress = 0 或 HookFuncAddr = 0)

返回 (0)

.如果真结束

hHook = VirtualAlloc (0, 14, 位或 (#MEM_COMMIT, #MEM_RESERVE),

#PAGE_EXECUTE_READWRITE)

.如果真 (hHook = 0)

返回 (0)

.如果真结束

RtlMoveMemory_1 (hHook, 到字节集 (FuncAddress), 4)

JmpCode = hHook + 4

RtlMoveMemory (JmpCode, FuncAddress, 5)

RtlMoveMemory_1 (JmpCode + 5, { 233 } + 到字节集 (到整数 (FuncAddress + 5 -

JmpCode - 10)), 5)

VirtualProtect (FuncAddress, 5, #PAGE_EXECUTE_READWRITE, OldProtect)

RtlMoveMemory_1 (FuncAddress, { 233 } + 到字节集 (到整数 (HookFuncAddr -

FuncAddress - 5)), 5)

VirtualProtect (FuncAddress, 5, OldProtect, 0)

返回 (JmpCode)

2. Hook recv函数等的技巧,这类函数的特点是,某个参数是具有缓冲区性质的,并在函数调用完成后参数会直接传递数据,所以结合上面的代码,就可以这样了:

ret=Call(jmpcode,para1,)

这时候,再对参数para1等进行处理,才可以获得数据

3. Anti-Hook的躲避技巧,部分程序会有检测API头5字节,所以我们只需要在Hookaddr上面加上一段偏移(大于5)即可躲避。更深入地,如果检测的是整个API头,我们就需要深入API的调用过程,Hook核心函数或其他流程来躲避。由于校验所有API头hash值需要大量的CPU占用及时间,所以一般也只会对重点函数进行检测。


本文标签: 参数 函数 调用 检测 需要