首页
社区
课程
招聘
[求助]想自己写个调试器,遇到一些问题
发表于: 2011-9-5 15:52 7036

[求助]想自己写个调试器,遇到一些问题

2011-9-5 15:52
7036
在论坛看到科锐的前辈们写调试器,自己也想动手实践下,在写的时候遇到一些问题希望各位大牛给点指点
1.调试有SMC的程序时怎么做到及时更新反汇编列表中显示的反汇编代码。我记得OD是按照exe文件进行的反汇编,但是在脱壳时却可以即时显示修改后的反汇编代码,他是如何知道程序哪部分代码被修改过了而跟信了这部分反汇编代码的呢?
2.对于int 3断点所在位置如果被SMC修改过,OD会有什么处理吗?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 349
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
SMC,可能是判断mov或pop操作的是否是代码段,以及代码段是否可写。
关于int3,我的测试是:对其SMC,OD的显示不变,但是断点已经失效了。
2011-9-6 11:56
0
雪    币: 152
活跃值: (588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢楼上的提示,但是如果是判断之林操作的是否是代码段是不是太麻烦了?
而且我试了下用CE之类的内存修改器修改程序的话,OD还是会在你切换回OD的时候更正反汇编代码,这个如何做到呢?
2011-9-7 00:56
0
雪    币: 113
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
因为OD分析的是内存
2011-9-7 04:41
0
雪    币: 152
活跃值: (588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也知道他更新显示的时候是照着进程内存的数据更新的,但是他如何知道更新那一部分呢?难道要每次中断到调试器之后都把所有的反汇编数据都更新一遍?
2011-9-7 13:14
0
雪    币: 120
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
hook WriteProcessMemory(debuggeePID)等->捕获->判断->刷新UI
2011-9-18 10:48
0
雪    币: 152
活跃值: (588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
进程要修改自身的代码不用WriteProcessMemory,只要段可写,用mov指令就可以了呀
2011-9-18 21:15
0
雪    币: 435
活跃值: (1317)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
8
eip或者cpu窗口指向哪里 就实时分析那一段的内存
cpu窗口以外的内存 可以暂时不分析,反正也看不到
2011-9-18 21:32
0
雪    币: 435
活跃值: (1317)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
9
第二个问题 对于cc断点 od只记录位置 如果断点位置内存被修改那断点就失效了
因为od自己不能拦截判断这种修改,内存访问软断点的代价太大了
断点检测就是这个原理
2011-9-18 21:38
0
雪    币: 120
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
近一年没接触逆向工程了,那些都不清楚了
楼上说的挺不错,只刷新eip附近一条或几条代价就比较小了;OD是不是全刷新
期待老手再抽时间再把OD这部分逆出来
2011-9-19 10:09
0
雪    币: 152
活跃值: (588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
十分感谢bitt前辈的指导
2011-9-19 13:37
0
游客
登录 | 注册 方可回帖
返回
//