首页
社区
课程
招聘
[求助]inline hook,当全局hook挂钩以后,资源管理器偶尔崩溃
发表于: 2009-7-7 22:25 7249

[求助]inline hook,当全局hook挂钩以后,资源管理器偶尔崩溃

2009-7-7 22:25
7249
inline hook,当全局hook挂钩以后,资源管理器偶尔崩溃
我用dbgview看调试信息,OutputDebugString输出,提示是堆栈溢出  stack overflow

其他的很多程序就没有崩溃,如IE7啊,记事本啊等。。。。就偶尔会让所有在hook前点开的文件夹全部崩溃掉。。。。。也不是说一定崩溃

也用od跟过hook部分的代码,没有发现堆栈不平衡啊。。。。抓狂ing
用的是Hook Api Library 0.2[Ring0]& LDE32引擎[Ring0] For Delphi ,下面是链接
http://bbs.pediy.com/showthread.php?t=63986

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是用Delphi搞的HOOK吗?好像C++的资料要多点吧?应该都是相通的,你可以看看C++方面的做法是怎么样的。做个标记等高手来了好好学习了。。。
2009-7-7 23:05
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,我不知道是不是 inline hook的先天不足 还是我的程序本身有bug
我hook的是系统调用非常频繁的,如user32.dll中的GetWindowText
2009-7-7 23:13
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
把主要代码贴出来就知道了
2009-7-8 11:25
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
inline的确不好控制。。。。容易出问题
2009-7-8 13:59
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
召唤达人。。。。
2009-7-8 15:40
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
没看到的inline Hook时的动作,只看到Hook以后的动作,HookCode里面的代码才是重点。
但是根据你提供的代码推测,应该是存在问题。
你inline Hook以后,没有还原inline Hook掉的几个字节,就直接调OldGetCursorPos,这样最终结果还是调了HookGetCursorPos,也就是递归调用,最终堆栈溢出。当然如果你是根据API函数前几个字节的mov edi, edi来修改,那就另当别论了。
至于是不是我推测的原因,你可以自己写一个程序,第一句MessageBox以便钩子注入,第二句GetCursorPos,不出意外程序就挂了。
2009-7-8 17:16
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢楼上的兄弟,我是抄袭的人家的这个代码,有链接的
这个是不需要恢复原有api,不需要inline hook了才恢复api。。。。网上有人说这是多线程版本的APIHOOK,呵呵

共同学习下这个代码,挺不错的东西
http://bbs.pediy.com/showthread.php?t=63986
2009-7-8 17:33
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
如果你的这个apihook会自动拷贝头部的代码,那么或许就不是我想的原因了。
不过既然你要调试,那么只要有找出问题的可能性,都可以试试。你可以先写一个MessageBox+GetCursorPos的程序试试会不会挂掉。
如果其他程序都没有问题,那么在DllMain里面GetModuleHandle判断一下是否是Explorer.exe,如果是的话,再做apihook,并在你的HookProc第一句写一个DebugBreak或者内联汇编int 3,这样程序会运行出错,然后用的项目去附加调试,继续跟踪下面的代码。能调试总会找出问题所在的,祝你好运!
2009-7-9 10:19
0
游客
登录 | 注册 方可回帖
返回
//