HOOK及指令有关问题

HOOK及指令问题
本帖最后由 mygame0302 于 2014-03-21 22:35:00 编辑
某exe程序启动后自身会hook  ws2_32.dll的send函数,使用的是inline hook,修改了send函数入口的5个字节,并将原来的5个字节缓存在了exe的某个地址空间,可以使用pchunter扫到。

现在自己写了一个dll,在exe启动时做了注入,并同样hook了send函数,这样我比exe早hook了send函数。我也是使用了inline hook修改前5个字节,jmp到我的dll中,这样在exe hook send函数时,它缓存的就是我修改的那5个字节的指令编码,但是这样一来,问题出现了,它执行完它的jmp之后,会去执行缓存的5个指令编码,然而此时缓存的我修改的这5个指令编码不是跳转到我的dll了,而变成跳转到一个非法的地址,导致进程崩溃。

现在不明白的地方是同样的5个字节指令编码,所解析出来的指令却不一样?请教各路大牛这是为啥??HOOK及指令有关问题
------解决方案--------------------
路过,帮顶!!!
------解决方案--------------------
我估计,他是很简单的考虑到了 send 函数。
没有考虑函数的跳转问题。
也就是说,不是所有的函数开始都是CALL 或 JMP 指令的。
这样,仅仅可能就是复制这几个字节而已,如果有跳转指令,需要修改跳转指令的跳转代码的。

这既是一个 BUG, 也是一种保护哦 。
所以最好的办法就是,你是最后一个 Detour.

------解决方案--------------------
想像是美好的, 现实是残酷的.
有没有想过顺序可能不是你想的那个样子呢?
有可能它在hook的时候比你先, 又或者它是每次调用都hook, 然后再解hook呢?
除非测试确定这样的调用顺序, 并且保证线程安全.