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

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

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

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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