我编写了这段代码,通过更改IAT和EAT:http://pastebin.com/7d9N1J2c中的地址来挂接API函数。
当我想挂接"recv“或"connect”时,这个方法工作得很好。然而,由于某些未知的原因,当尝试挂钩"gethostbyname“时,我的挂钩函数从未被调用过。
我试图通过获取wsock32.dll模块的基地址+ 0x375e在调试器中查找"gethostbyname“,这是wsock32.dll的序号52显示为偏移量的地方。但这只会让我在一些随机的asm代码中结束,而不是在函数的开头。然而,同样的方法可以很好地找到"recv“入口点。
有没有人看到我做错了什么?
发布于 2010-11-16 03:55:01
我推荐这个工具:http://www.moduleanalyzer.com/
它们执行完全相同的操作,并显示与该API连接的url。问题在于,有不止一个API可以将url转换为地址。您正在挂接的应用程序可能正在使用您未截获的另一个版本的API。
发布于 2010-11-12 01:10:50
运行像IDA这样的反汇编程序并附加到你的进程中。在你挂接了这个函数之后,ida会在附加和播放过程中应用更改,并检查哪里出了问题。
在其他方面,你有很多库可以用来钩子,像微软的曲折,NCodeHook等。
https://stackoverflow.com/questions/4157002
复制相似问题