用导入表方式拦截API, 我要拦截的是getprocaddress函数!被拦截的程序是动态调用getprocaddress(getmodulehandle('xx.dll'),'function')来获得function函数的地址!我要把我的DLL注入到被拦截程序里,然后拦截getprocaddress到mygetpeocaddress函数里,这样被拦截的程序加载getprocaddress函数就会转到我的mygetprocaddress函数里处理,然后在mygetpeocaddress里把我自己的myfunction地址赋值给mygetpeocaddress函数的返回值,这样被拦截的程序就会认为myfunction的地址就是function的地址!但是如果被拦截的程序要是先运行,然后在运行我的拦截程序!那么在没有注入DLL前,被拦截的程序就已经调用了getprocaddress函数,并且已经取得了function函数的地址了!这样的话,即使在拦截getprocaddress也没有用了!请问如果被拦截的程序先运行,那么我该怎么替换function函数的地址呢?
那么恐怕没有什么好办法了。当然也可以暴力搜索目标程序地址空间,查找有没有目标函数地址,有则替换之...但这样也不可靠。我想解决办法一是用jmp修改dll,二是把你的拦截程序做成目标程序的调试器(以便在其启动的第一时间内完成拦截动作)。
jmp其实属于系统级的拦截了,可以拦截整个系统范围内的对此函数的调用。
就是把目标函数地址头几个字节改成一个jmp语句,跳到自己的函数中来。
当然要保存原来的地址。
到网上找一找吧,这样的例子很多,我这里就有一个从网上down的屏幕取词的例子,就是利用jmp跳转。若找不到可以发给你。