对于Delphi程序的分析, 好多人选择DeDe, 我也认为DeDe对Delphi的分析很好, 但在像我这样的菜鸟看来,DeDe有一个地方没有IDA做的好.
IDA的"鼠标单击处同时高亮"这个功能是我最喜欢的, 某些时候,在分析程序时,我们通过这些高亮的东西之间的关系流程,可以很轻易很快速的知道这部分代码在干什么, 而DeDe却只能整行选择, 我们只有通过肉眼慢慢的看. DeDe另外一个我个人觉得不是太好的地方是:在它的反汇编中,每个Reference都占了3行,这有时候打乱了代码的整洁性,阅读起来没有IDA舒服. 虽然用DeDe也能达到目的, 但对于我这样的菜鸟来说要多花不少时间.
所以我一直想能否让IDA最大限度的完成或优化DeDe的功能了? (其实我不是很明白为什么IDA不对Delphi的某些函数进行自动分析)
我在看雪上搜索了一圈, 发现有的朋友是直接使用DeDe分析; 有的朋友是先使用DeDe导出map文件, 然后使用map2sym插件将map转换为sym符号文件, 然后再用IDA的loadsym脚本来装载刚才的sym文件.我试了一下, 发现效果并不好.原因是loadsym只是简单在每个地址前面加上一个标签, 基本上就是把DeDe的Reference搬过来了,我个人觉得它把代码打乱了.
其实DeDe的给我们的信息中,无外乎以下几种:
1. 控件ID.(如 Edit1:TEdit)
2. 系统函数.(如 system.@LStrCmp;)
3. 窗体事件或子过程.(如 TfrmReg@BitBtn1Click)
4. 这种函数.(controls.TControl.GetText(TControl):TCaption;)
再加上其他的一些特殊函数.
那我所想做的就是在IDA中对这些事件,函数,控件ID等正确的命名. 以达到代码简洁便于阅读的目的.我花了一些时间,写了这个很烂的idc, 名为loadmap.idc . 版本1.0 . 因为完全是为了写这个脚本才去学习了一下idc的编写. 所以代码写的很烂, 大家在使用的过程中如果发现了错误或者不好的地方,希望可以提出来,或者自己修改下发布出来共享给看雪里的各位兄弟.
P.S:我一直在担心我这个loadmap脚本写出来到底会不会有用, 因为很有可能其他的人就写过类似的东西来处理Delphi的程序,只是我不知道而已. 不过我想就当是自己熟练一下idc也好. 当然我希望这个超级简单的脚本能给大家带来一点用处, 毕竟编写及测试还是花了些时间的.
工作原理: 这个脚本主要是通过在IDA中增加名字,增加函数,增加注释这三种途径来达到我的目的的. 下面我贴三段代码来对比一下:
1.直接IDA反汇编:(取控件文本)-->信息不清.
CODE:0048254B 8D 55 FC lea edx, [ebp-4]
CODE:0048254E 8B 83 E0 02 00 00 mov eax, [ebx+2E0h]
CODE:00482554 E8 4F 00 FB FF call sub_4325A8 2.使用IDA自带的loadsym.(取控件文本)-->代码分散,看着不舒服.
CODE:00453905 Edit1_TEdit:
CODE:00453905 8B 83 F8 02 00 00 mov eax, [ebx+2F8h]
CODE:0045390B
CODE:0045390B Controls_TControl_GetText:
CODE:0045390B E8 3C F1 FD FF call sub_432A4C 3.使用loadmap之后:(取控件文本)-->这样看就好多了.
CODE:0048254B 8D 55 FC lea edx, [ebp+var_4]
CODE:0048254E 8B 83 E0 02 00 00 mov eax, [ebx+2E0h] ; Edit1:TEdit
CODE:00482554 E8 4F 00 FB FF call TControl_GetText ; controls.TControl.GetText(TControl):TCaption; 当然,其他的各种函数也能很好的显示. 如
窗体事件(内置的以及自定义的等)
CODE:00482528
CODE:00482528 ; =============== S U B R O U T I N E =======================================
CODE:00482528
CODE:00482528 ; TfrmReg@BitBtn2Click
CODE:00482528
CODE:00482528 TfrmReg@BitBtn2Click proc near
CODE:00482528 call TCustomForm_Close ; TfrmReg@BitBtn2Click
CODE:0048252D retn
CODE:0048252D TfrmReg@BitBtn2Click endp 由于完成仓促,定有考虑不周之处, 若有,还请热心的朋友修正之, 谢谢!
脚本见附件.
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
上传的附件: