首页
社区
课程
招聘
[原创]最近写的IDA脚本loadmap 1.0(方便Delphi程序分析)
发表于: 2009-4-19 07:51 28422

[原创]最近写的IDA脚本loadmap 1.0(方便Delphi程序分析)

2009-4-19 07:51
28422

对于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

由于完成仓促,定有考虑不周之处, 若有,还请热心的朋友修正之, 谢谢!

脚本见附件.


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (29)
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
2
多谢提供,下一个看看。有空测试一下。
2009-4-19 23:15
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
看起来蛮不错,下载玩玩。
2009-4-20 06:13
0
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
4
两位大牛回帖了,好高兴   ,
可惜代码乱的一团糟,  
而且好像DeDe导出的map中,不能包含所有的函数, 使得IDA中某些sub_xx仍然要手改.
这次也算是比较失败了.
2009-4-20 08:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
下一个看看,感谢。
2009-4-20 14:58
0
雪    币: 222
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
下来试用看看,谢谢楼主
2009-4-21 10:47
0
雪    币: 230
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢分享,下来试试。
2009-4-21 13:07
0
雪    币: 496
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
超帅气。用了下,很满意。
2009-4-25 14:53
0
雪    币: 426
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kbs
9
nice work
2009-4-26 18:55
0
雪    币: 161
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
期待改良作品!
感恩.
2009-4-27 07:41
0
雪    币: 91
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
正打算看delphi的程序, 试一下.

非常感谢.
2009-4-29 10:17
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
多谢楼主的好脚本
2009-4-29 10:40
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
很诱人,收藏了
2009-5-2 10:05
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
14
支持楼主。。。。
2009-5-3 10:15
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
刚开始学DELPHI,现在还不知道怎么用脚本呢!
2009-5-5 12:11
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看起来是一个不错的东东,多谢楼主共享。
2009-5-8 13:20
0
雪    币: 559
活跃值: (587)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
支持一下楼主
2009-5-8 19:38
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不错不错,谢谢楼主的好脚本!
2009-5-10 15:28
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我的学基础
看不懂
看起来很有内涵
支持下
2009-5-30 17:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持原创的好东东,学习了
2009-5-31 19:31
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
有用,谢谢楼主了
2009-6-2 10:10
0
雪    币: 2307
活跃值: (1013)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
22
看雪的人太强了
2009-6-6 00:11
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
测试下!!
2009-6-13 15:53
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
很实用~~~
2009-8-31 09:34
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这个不错,希望大牛接着更新,造福我这样的菜鸟
2010-2-23 20:53
0
游客
登录 | 注册 方可回帖
返回
//