讨论一个注入hook完成后的清理问题

rageliu 2016-09-26 10:45:51
问题描述:

采用全局钩子的方式将dll注入了目标进程,并成功hook了目标进程里的函数Fun。使其调用时会先进入我的函数Fun_My。这些都没有问题。但是在我要卸载钩子的时候,如果刚好代码执行在我的函数Fun_My的代码里。就会崩溃。因为我已经卸载了dll,也就是dll已经不在目标进程里了。这时候Fun_My也是无效的内容了,并不是以前的正确的代码段。所以目标进程就崩溃了。

这种情况下,在我的dll执行detach即将卸载的时候,如何确保代码并不在Fun_My里面执行呢。

当然我肯定是提前执行了对函数的unhook的,只是最后的一次hook到的函数,可能还在Fun_My里面执行,还没有执行完返回。这就出了问题。

大家有遇到过么,或是思考过这个问题,有啥好的处理方法啊,关于技术的意见建议讨论都欢迎。感谢。
...全文
1983 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mamengyu1 2016-12-26
  • 打赏
  • 举报
回复
我觉得没这么复杂吧,你在detach里边同步一下你的Fun_My函数不就行了,等待Fun_My函数执行完后再detach.
名牌大灰狼 2016-10-13
  • 打赏
  • 举报
回复
这种情况是没有办法的 而且你根本无法知道当时你的代码是否正在被执行 你的思路就不对 给你指个方向 jum到一块NEW出来的可执行内存片(为了方便描述以后这个地方就跳板吧) 然后在JMP到你的DLL中 当你的DLL被卸载前 你只要改一下跳板代码让程序在JMP回去直接执行 不要进你的DLL即可 之后在UNHOOK掉你的DLL 就OK了 关于JUMP跳板最好一开始就汇编写好向两个地方跳的代码 利用一个JNZ控制跳转方面(是去你的HOOK 还是回源函数继续执行) 这样你只要改一个BYTE就可以控制流向 大大降低UNHOOK时出错的情况
夜鹰 2016-09-27
  • 打赏
  • 举报
回复
建议到相应的开发板块咨询

9,506

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 安全技术/病毒
社区管理员
  • 安全技术/病毒社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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