EasyHook的使用

在函数调用下钩子的做法,在制作非想天则对战平台以及Vorbis版的东方弹幕游戏,以及数据文件压缩版的东方非想天则的时候都做过了。无非也就是两种做法,一个是修改IAT,编译器在生成调用DLL里函数的代码的时候,用的是JMP DWORD [mm32]这样的语句,Windows在把EXE读入内存以后,查找它引用的DLL里的函数,然后加载这些DLL,然后把函数的地址填入一个表(数组)中,mm32就是这样的函数地址被填入的地方。那么只要修改这个地址,就能修改调用DLL中的函数的时候真正调用的函数。另一做法是修改函数入口处的机器代码,改为一个JMP rel32这样的语句,使得调用指定函数的时候会直接JUMP到自己的函数里面。这两种做法都要注意自己要调用真实函数的时候不要受影响就好了:导入表是以模块区分的,一个进程中的各个模块的导入表互不影响,所以如果是一个DLL把EXE的导入表改了,那么只要这个DLL的导入表是正常的,那么这个DLL中就可以随意调用原函数不受影响;修改入口处机器代码的做法,因为只修改了一个入口,所以能够执行入口处的几条指令,然后跳转到没有修改的地方继续执行下去,问题就能解决了。

继续阅读EasyHook的使用