首页
社区
课程
招聘
[原创]用IDA SDK开发的Delphi字符串(string类型)识别插件(plugins
发表于: 2009-4-15 23:11 14014

[原创]用IDA SDK开发的Delphi字符串(string类型)识别插件(plugins

2009-4-15 23:11
14014

用IDA SDK开发的Delphi字符串(string类型)识别插件(plugins)

功能:
AutoDelphiString.plw可以用于识别所有Delphi字符串。

Delphi字符串的数据存储格式为:
0FFFFFFFFh      // Delphi 字符串标志
string_length   // 字符串长度(不包括尾部的字节0)
C-style_string  // 以字节0为结尾的C语言字符串

例如,在Delphi中有一个字符串'Delphi String', 编译后在可执行文件中的结果为:
dd 0FFFFFFFFh
dd 0Dh
db 'Delphi String',0

当IDA能够自动识别时,其形式如下:
CODE:00455948 dd 0FFFFFFFFh           ; _top
CODE:00455948 dd 13                   ; Len
CODE:00455948 db 'Delphi String',0    ; Text

它实际上是一个结构体:
_strings        struc ; (sizeof=0x8, variable size)
_top            dd ?                    ; base 16
Len             dd ?                    ; base 10
Text            db 0 dup(?)             ; string(C)
_strings        ends

但有相当多的Delphi字符串并没有识别出来(特别是中文字符串),而且即便识别为如上形式,在程序引用时也不够直观,其一般形式为
    mov     edx, offset stru_455948.Text

还不如将其改为如下形式:
CODE:00455948                 dd 0FFFFFFFFh, 0Dh
CODE:00455950 aPascalString   db 'Pascal String',0

这时在程序中的引用形式为
    mov     edx, offset aPascalString ; "Pascal String"
这样字符串的引用就更加直观,便于阅读。

AutoDelphiString.plw能对整个程序的所有Delphi字符串进行成片地识别。可以从光标当前地址开始到文件结尾,也可以从文件开始到文件结尾。

使用:
将AutoDelphiString.plw复制到IDA5.2的安装文件夹plugins下,用IDA PRO 5.2打开一个用Delphi编译的32-bit可执行文件,然后按快捷键
“Ctrl-Alt-P”运行AutoDelphiString.plw,这时会出现对话框选择从哪里开始:0表示从程序的起始地址开始识别整个文件;1表示从当前光标所在地址开始识别到文结束。默认选项为0。单击OK按钮后将提示是否要将识别信息存盘,单击Yes即可存盘。等识别结束后,如果没有错误,即可在已经打开文件的当前文件夹下找到一个.log信息记录文件。根据该文件提供的地址在IDA中找到相应位置(用G命令,然后输入该地址),这时即可看到识别结果了。

操作:
以自己用Delphi开发的小程序cdsize.exe为例给出操作过程,见附件中的“AutoDelphiString操作说明.pdf”。

限制:
只能在IDA 5.2下运行,识别没有加壳的(或脱过壳的)Delphi程序。

举例:
某个加壳程序脱壳后的一小段识别结果对比:

识别前的情况
.text:00589F1C                 dd 0FFFFFFFFh, 4
.text:00589F24 dword_589F24    dd 0E5CCDABAh, 0      
.text:00589F2C                 dd 0FFFFFFFFh, 6
.text:00589F34 aTitle1         db 'Title1',0      
.text:00589F3B                 align 4
.text:00589F3C                 dd 0FFFFFFFFh, 6
.text:00589F44 aTitle2         db 'Title2',0   
.text:00589F4B                 align 4
.text:00589F4C byte_589F4C     db 0   
.text:00589F4D                 align 10h
.text:00589F50                 dd 0FFFFFFFFh, 0Bh
.text:00589F58 dword_589F58    dd 0E5CCACBFh, 3242475Fh, 323133h, 0FFFFFFFFh, 6
.text:00589F6C aTitle3         db 'Title3',0      
.text:00589F73                 align 4
.text:00589F74                 dd 0FFFFFFFFh, 5
.text:00589F7C aText1          db 'Text1',0     
.text:00589F82                 align 4
.text:00589F84                 dd 0FFFFFFFFh, 5
.text:00589F8C aText2          db 'Text2',0   

识别后的结果
.text:00589F1C                 dd 0FFFFFFFFh, 4
.text:00589F24 asc_589F24      db '黑体',0        
.text:00589F29                 align 4
.text:00589F2C                 dd 0FFFFFFFFh, 6
.text:00589F34 aTitle1         db 'Title1',0      
.text:00589F3B                 align 4
.text:00589F3C                 dd 0FFFFFFFFh, 6
.text:00589F44 aTitle2         db 'Title2',0      
.text:00589F4B                 align 4
.text:00589F4C byte_589F4C     db 0   
.text:00589F4D                 align 10h
.text:00589F50                 dd 0FFFFFFFFh, 0Bh
.text:00589F58 aMX_gb2312      db '楷体_GB2312',0  
.text:00589F64                 dd 0FFFFFFFFh, 6
.text:00589F6C aTitle3         db 'Title3',0   
.text:00589F73                 align 4
.text:00589F74                 dd 0FFFFFFFFh, 5
.text:00589F7C aText1          db 'Text1',0
.text:00589F82                 align 4
.text:00589F84                 dd 0FFFFFFFFh, 5
.text:00589F8C aText2          db 'Text2',0

本插件的识别率非常高,但也难免会有bug,请多提宝贵意见。


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
2
多谢提供。下载试用一下。楼主前面发的 Delphi 对象识别插件不错。
2009-4-15 23:29
0
雪    币: 141
活跃值: (1135)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
3
对兼容性调整了一下,现在可以在IDA4.9至IDA5.2版本下运行,但在IDA4.9Free版本下不能运行。
上传的附件:
2009-4-19 22:13
0
雪    币: 264
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不错的工具,谢谢楼主~~~~~~~
2009-4-20 10:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错,下载试用一下。
2009-4-20 14:56
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
呵呵。拿回去试试
2009-4-30 10:54
0
雪    币: 547
活跃值: (2200)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
支持下载学习
2009-4-30 21:31
0
雪    币: 1493
活跃值: (1885)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
下载收藏,感谢分享
2009-5-10 23:39
0
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
9
谢谢LZ...
2009-5-13 16:27
0
雪    币: 97697
活跃值: (200839)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
Thanks for share.
2009-5-16 23:48
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
支持下。
2009-6-2 10:33
0
雪    币: 200
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
哈哈,好东西啊,谢谢LZ。
一直没注意到这个
2009-6-4 12:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
嗯,不错!!!
2009-6-9 20:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这个好用~支持
2009-9-10 09:46
0
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了
2009-9-15 15:55
0
游客
登录 | 注册 方可回帖
返回
//