刚接触HOOK,有不理解的地方,请大家帮助,谢谢。
说明:D*f台服游戏客户Duan,需要HOOK指定地址取出EAX,完成字符串的替换。
流程:
1.备份原字节集,申请内存,将原字节集写入此内存,末尾加上跳回起始地址。
2.修改起始地址,跳转到我的子程序。
3.在执行完我的子程序后,跳转到新申请的内存处。
问题:
第一步和第二步没出现问题,但是我不理解怎么在我的子程序里跳回到原地址。
看别人源码,是CALL回地址,我复制粘贴后崩溃了。
跟踪以后,也不理解崩溃的原因,其实这个CALL我也不太懂,如果能讲解一下那就太好了……
请大家帮忙,很感谢!
我的源码
HOOK.起始跳转位置 = 19173504 HOOK.中转代码位置 = 真实地址 (&HOOK回调 )HOOK.原字节集 = 指针到字节集 (HOOK.起始跳转位置, 5 ) HOOK.回跳还原位置 = 申请内存 (32, 真)VirtualProtect (HOOK.回跳还原位置, 32, #PAGE_EXECUTE_READWRITE, 0 )内存_修改内存 (HOOK.回跳还原位置, HOOK.原字节集 + { 233 } + 到字节集 (到整数 (HOOK.起始跳转位置 - HOOK.回跳还原位置 - 5 )), 10 ) HOOK.新字节集 = { 233 } + 到字节集 (到整数 (HOOK.中转代码位置 - HOOK.起始跳转位置 - 5 )) 内存_修改内存 (HOOK.起始跳转位置, HOOK.新字节集, 5 ) 信息框 (“起始:” + 进制_十到十六 (HOOK.起始跳转位置 ) + #换行符 + “中转:” + 进制_十到十六 (HOOK.中转代码位置 ) + #换行符 + “返回:” + 进制_十到十六 (HOOK.回跳还原位置 ), 0, , ) 置入代码 ({ 96 })返回地址 = Call_ (HOOK.回跳还原位置 )置入代码 ({ 97 })置入代码 ({ 139, 69, 252, 139, 229, 93, 195 }) 返回 (返回地址 )置入代码 ({ 83, 81, 139, 69, 8, 64, 139, 8, 128, 249, 232, 117, 248, 139, 72, 1, 141, 92, 8, 5, 139, 11, 193, 225, 8, 129, 249, 0, 85, 139, 236, 141, 64, 4, 117, 225, 139, 195, 89, 91, 201, 194, 4, 0 })返回 (0 )|
Call_ | 整数型 | | |
地址 | 整数型 | | | | 参数1 | 整数型 | | | | 参数2 | 整数型 | | | | 参数3 | 整数型 | | | | 参数4 | 整数型 | | | | 参数5 | 整数型 | | | | 参数6 | 整数型 | | | | 参数7 | 整数型 | | | | 参数8 | 整数型 | | | | 参数9 | 整数型 | | | | 参数10 | 整数型 | | | | 参数11 | 整数型 | | | | 参数12 | 整数型 | | | | 参数13 | 整数型 | | | | 参数14 | 整数型 | | | | 参数15 | 整数型 | | | | 置入代码 ({ 86, 190, 15, 0, 0, 0, 141, 77, 8, 141, 76, 241, 252, 139, 65, 4, 133, 192, 116, 2, 255, 49, 78, 131, 233, 8, 133, 246, 117, 239, 255, 85, 8, 94, 201, 194, 124, 0 })返回 (0 )
开始跳转
|