HOOK及指令问题

mygame0302 2014-03-21 10:30:08
某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个字节指令编码,所解析出来的指令却不一样?请教各路大牛这是为啥??
...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-03-24
  • 打赏
  • 举报
回复
想像是美好的, 现实是残酷的. 有没有想过顺序可能不是你想的那个样子呢? 有可能它在hook的时候比你先, 又或者它是每次调用都hook, 然后再解hook呢? 除非测试确定这样的调用顺序, 并且保证线程安全.
Saleayas 2014-03-24
  • 打赏
  • 举报
回复
我估计,他是很简单的考虑到了 send 函数。 没有考虑函数的跳转问题。 也就是说,不是所有的函数开始都是CALL 或 JMP 指令的。 这样,仅仅可能就是复制这几个字节而已,如果有跳转指令,需要修改跳转指令的跳转代码的。 这既是一个 BUG, 也是一种保护哦 。 所以最好的办法就是,你是最后一个 Detour.
gomez44944 2014-03-24
  • 打赏
  • 举报
回复
路过,帮顶!!!
mygame0302 2014-03-24
  • 打赏
  • 举报
回复
原来是hook使用了近跳转指令,对应机器码e9,操作数都是相对于(E)IP的偏移。它后面hook的时候直接备份了原来5个字节的编码,但是EIP不一样了,所以就出问题了。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧