首页
社区
课程
招聘
[原创]调试器实现_消息断点
发表于: 2009-9-13 20:47 5979

[原创]调试器实现_消息断点

2009-9-13 20:47
5979

前几天和一位前辈聊天,觉得不应该在调试器的实现上过多模仿OD的设计。

但是,在看过OD实现消息断点的方式后,觉得确实有借鉴之处,所以,暂时用了OD设置消息断点的过程,但是,我并不打算在我的调试器可以成型后继续用这个方法作为消息断点。

OD的消息断点,实际上就是一个自动产生的条件断点。借用它的帮助文档里面的话:利用GetWindowLong获取所有窗口过程的地址。然后在对应地址生成这样[ESP+4]==00001234 && [ESP+8] IN (0F0..0F7,135)之类的条件,并且下一个int3断点,断下对应消息。

由于我是模仿OD的实现,所以,就不多做介绍了,OD的帮助文档里面有。
就只是对我模仿时候的一些改动和问题告诉大家,希望对同是设计调试器的朋友有一些帮助。

GetWindowLong获取对应窗口过程的地址,以及ID等等信息,肯定要在被调试程序的进程空间进行。所以,需要注入到被调试空间。在OD 实现的时候,由于作者觉得注入代码不是很安全,所以,只有在被调试程序挂起时候才进行注入。而需要得到信息的窗体我就不太清楚OD是怎么搞出来的。我用的是EnumChildWindows这个函数,得到被调试程序的窗体句柄。在注入的时候,我开始也用的直接writeprocessmemory然后创建远程线程完成。但是,问题很多,后来就改用了CreateRemoteThread和Loadlibrary的方式了,而且在我测试的时候,即使不挂起程序,也可以完成注入(仅仅是我测试的那几个程序可以,其他的我无法保证)。获取窗体的信息。

设计过程中,遇到的问题不是很多(都是windows编程的问题,网上优秀的文章很多,我就不多说了)

1,注意注入时候权限的设置。

2,调试器和被调试器进程间的数据传递是个需要小心考虑的问题了。(我用的DLL共享传递的)

浪费我时间最多的问题……  得感谢figo和慵懒的午后。具体是什么,就不好意思提了(个人的大意),相信不会有人也这么倒霉,遇到这样的问题。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 153
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Loadlibrary?
自己的DLL肯定就调用了其他的API了吧,万一事先下了一个断点在这些API上,调试器一通知我们,我们怎么判断是自己DLL引起的动作还是原来程序引起的动作啊?
2009-9-14 10:09
0
游客
登录 | 注册 方可回帖
返回
//