首页
社区
课程
招聘
[原创]ConditionBP Plugin(自动下返回user领空的断点,call调用跟踪)
2016-5-9 09:59 16544

[原创]ConditionBP Plugin(自动下返回user领空的断点,call调用跟踪)

2016-5-9 09:59
16544
一、插件使用背景
1、OD跟踪时,给一些API下断点时,有时会断在系统的其他模块中,但这些我们是不想要的,于是一般会下条件断点,只有来自用户领空的调用才断下,为了方便该类断点添加了“CondditionBP”功能
2、分析某一类程序时,可能会对一类API感兴趣,因此希望每次在OD启动后,都能自动在这些感兴趣的API上下各类断点,CondditionBP提供配置文件,实现这个功能,免去每次都要挨个下断点的痛苦
3、跟踪某些程序时,可能有反调试,反VM的检测,程序很快就退出了,这时我们想知道这个代码运行的流程,而用“RUN 跟踪”功能记录太多,运行太慢,有时候还会不知道跑哪去了,于是CondditionBP提供了"Trace Call"功能,在每个call上自动下断点跟踪调用
4、插件名称是写第一个功能是起的,可能并不合适,大家自行忽略...

二、插件功能
1、可以配置断点,让OD启动时自动下断 点
2、可以配置条件断点,只有在用户领空的调用才断下 
3、可以跟踪程序call调用流程

三、ConditionBP
3.1 配置APIBP.ini

如果"ConditionBPAddr"为0,插件会计算调试进程的地址 ,并以此作为默认的user领空下条件断点

3.2 下只有用户调用的API断点(也可在选中的指令上按快捷键"Ctrl + 1")

 
四、TraceCall
在程序load后,选中"TraceCallByOD"或"TraceCallByMap",然后F9运行即可(如果设置了"AutoTrace",会自动运行)


4.1 TraceCallByOD
利用OD插件自带的call查找功能搜索call,找的call未经过过滤处理,call会很多,执行会略慢,log会比较大,但调用流程记录是最全的
 
4.2 TraceCallByMap(建议使用)
利用map文件导入call,一般通过IDA导出,call会经过过滤处理,只导入"fn_"或"sub_"开头的call,会省去大量识别出的运行库的call,call量少,执行快,log小,但有可能流程记录不够全

4.2.1 使用IDA脚本导出Map(建议使用)
用IDA打开要分析的程序,待IDA分析完毕后,运行附件中的IDA脚本“exportfunction.idc”,会自动导出map文件到要分析程序的同目录下,直接使用即可

4.2.2 直接使用IDA的map导出功能
1> 用IDA导出map文件,注意只选中"Dummy names"即可

2> 将导出的map文件放到要Trace的sample的同目录下,点击"TraceCallByMap"会自动导入,如果未找到会提示查找map文件位置

4.3 当程序执行结束后,会在"C:\ODPluginLog"(XP系统)下输出log记录,vista以上系统在“%AppData%\LocalLow\ODPluginLog”下,sub call会缩进2个空格,如果在vista以上系统还会显示reloc的call地址,方便在IDA中查看,同时会输出call调用的时间点(ms),如果是用map分析的模式,还会输出备注的函数名

4.4 TraceCall功能只能分析未加壳处理的正常程序,异常call或经过混淆处理的代码会使记录混乱甚至崩溃,请谨慎使用,当然如果能够跟踪到脱壳后的代码,然后抓dump经IDA分析后,再进行"CallTrace"也是可以的。

4.5 可参照IDA脚本“exportfunction.idc”解析出的map文件,增加或删除相关的跟踪call,已抓取自己感兴趣的call信息

五、插件及测试用例
ConditionBP_1.0.2.9.zip

1.0.2.10版(增加debug log实时输出,用DebugView过滤"[ODPluginLog]"即可):
ConditionBP_1.0.2.10.zip

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

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 657
活跃值: (454)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
organic 3 2016-5-9 10:07
2
0
标题打错字了("ConditionBP Plugin"),不能改了,请大家自行忽略
雪    币: 1176
活跃值: (1219)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
Tennn 5 2016-5-9 10:43
3
0
看起来似乎很强大啊~ 支持
雪    币: 6
活跃值: (1484)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjjhszs 2016-5-9 11:06
4
0
感觉上是高大上的东西,顶下,应该是用硬件断点跟踪的吧,现在很多R3的就是硬断都飞不知道东南西北了
雪    币: 657
活跃值: (454)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
organic 3 2016-5-9 11:28
5
0
软件断点,硬件断点数量太少,如果要做要结合IDA中的分支流程智能处理,看以后需要吧
雪    币: 80
活跃值: (922)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
暴强 2016-5-9 11:51
6
0
好东西啊!!!!!!!!!!!
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luskyc 2016-5-9 11:53
7
0
od插件,路过
雪    币: 319
活跃值: (2319)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2016-5-9 16:29
8
0
应该很实用!感谢楼主提供.
雪    币: 6
活跃值: (1484)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjjhszs 2016-5-9 17:59
9
0
哈 ,希望插件能一直更新下去
雪    币: 319
活跃值: (2319)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2016-5-11 15:04
10
0
建议楼主加个开关,需要时打开,不需要时关闭.这样方便操作.
雪    币: 657
活跃值: (454)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
organic 3 2016-5-11 18:24
11
0
有开关,在配置文件"APIBP.ini"中,和插件放到OD的plugin目录下即可
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
李富清 2016-5-11 21:20
12
0
建议楼主也在写入文件记录时 也outputdebug输出下 这样就实时看到调用
雪    币: 319
活跃值: (2319)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2016-5-12 08:21
13
0
噢,没注意看.不好意思!
雪    币: 657
活跃值: (454)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
organic 3 2016-5-13 22:15
14
0
已加,可以下1.0.2.10版
雪    币: 207
活跃值: (546)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lzgking 2016-10-14 00:25
15
0
好东西啊!!正需要
雪    币: 15921
活跃值: (1115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
killbr 2016-10-23 17:31
16
0
希望加入全局热 键 开关,否则有时一开就死了了。
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
akszhf 2017-8-12 16:38
17
0
thank  you  very  much  !
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
honghan 2017-8-12 17:08
18
0
谢谢分享     
游客
登录 | 注册 方可回帖
返回