我目前正在反向工程PEiD报告的用Borland Delphi 6.0-7.0编写的二进制文件。在IDA Pro中查看此二进制文件时,是否有建议使用的签名?我目前正在使用bds签名。谢谢!

#1 楼

重要的是要了解PEiD可能会识别出错误的Delphi版本。尽管Delphi 6/7非常相似(坦率地说,直到Delphi 2007一直很相似),但您可能正在查看使用Delphi 2009或更高版本创建的二进制文件。

这很重要,因为Delphi 2009引入了本机unicode字符串支持,并且默认情况下将通用类型string映射到UnicodeString,这会影响字符串分析。 Delphi 2007和更早版本没有对unicode字符串的本机支持。

为了使事情稍微复杂一点,Delphi XE2添加了64位编译支持。因此,在处理较新的Delphi编译二进制文件时,这可能是相关的。 (Delphi版本称为Delphi 1-7、2005、2006、2007、2009、2010,XE,XE2,XE3,XE4,最新版本为XE5)。 BDS代表“ Borland Developer Studio”,尽管Delphi后来被称为CodeGear Delphi,现在被正式称为Embarcadero Delphi。

事实上,在Delphi和C ++ Builder的路线图中,是将Delphi编译器迁移到Clang / LLVM的计划(他们的iOS和Android编译器当前正在使用LLVM,但Windows编译器未使用...)然而)。因此,请将这些琐事存储起来以备将来反编译之用。

我看过“ Detect it Easy” v0.78,RDG Packer Detector v0.7.1,PEid和Exeinfo PE 0.0.3.4 Beta,我发现只有Exeinfo PE才能正确检测到我的Delphi 2010编译可执行文件:


进行分析。一旦确定了正确的Delphi编译器,事情通常会更容易。 Delphi GUI程序使用称为“ VCL”(可视组件库)的GUI框架。只需在VCL上进行过滤,即可轻松找到合适的FLIRT签名:

另外,我也想在BDS上过滤FLIRT签名。在查看Delphi二进制文件时,我通常会添加“额外的Atl / ie库”和“ win32运行时”。



最后,因为Delphi创建了本机Windows二进制文件中,我始终确保同时添加了mssdk32 FLIRT签名。



祝你好运!

UPDATE

Detect It Easy v0.79和更高版本可以通过XE6正确检测Delphi版本。

#2 楼

您指的签名是快速库识别和识别技术,称为FLIRT。 IDA提供了最常见的Windows编译器,以及一些非Windows签名。

打开二进制文件时,IDA将尝试应用启动签名文件。显然,代码的入口点具有足够的指示性,能够识别用于给定二进制文件的编译器。如果IDA成功确定用于指定二进制文件的编译器,则它将加载相应编译器库的签名文件,并将其应用于其余代码。

IDA随附的签名大部分与专有编译器(例如Microsoft的Visual C ++和Borland Delphi)相关联。但是,为了进行精确的模式匹配,您将需要为库的每个不同版本生成签名文件。

为了克服这一障碍,Hex-Rays提供了一些工具,可让您从中生成自己的签名。静态库。身份识别快速库获取(FLAIR)工具集已分发给授权(许可)客户。 FLAIR的版本需要与IDA的版本相对应。签名创建过程很简单:


获取静态库的副本。
利用FLAIR解析器创建模式文件。
运行sigmake.exe可以将特征码文件转换为签名文件
通过复制到IDADIR / sig目录安装新的签名文件。

要手动应用签名文件,应转到File-> Load File-> FLIRT签名文件,将弹出一个对话框,其中所有签名文件均安装在IDADIR / sig目录中。选择您要使用的签名,然后单击“确定”。

#3 楼

IDR也是处理Delphi的一个功能强大的工具:IDR(交互式Delphi重构器)。

您可以导出此工具的结果以与IDA pro一起使用。不要忘记下载二进制文件的响应核心签名http://kpnc.org/idr32/en/download.htm

另请参阅此帖子