我目前正在对 PEiD 报告的用 Borland Delphi 6.0-7.0 编写的二进制文件进行逆向工程。在 IDA Pro 中查看此二进制文件时是否有推荐的签名?我目前正在使用 bds 签名。谢谢 !
PEiD 中报告的 Borland Delphi 6.0-7.0 二进制文件应该使用哪个 IDA Pro 签名?
了解 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。
StackOverflow上还有一个很好的答案,它涵盖了不同 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 签名。
祝你好运!
更新
Detect It Easy v0.79 和更新版本可以正确检测到 XE6 的 Delphi 版本
您所指的签名是快速图书馆识别和识别技术,即FLIRT。IDA 提供了最常见的 Windows 编译器,以及几个非 Windows 签名。
当二进制文件被打开时,IDA 将尝试应用启动签名文件。显然,代码的入口点足以指示用于给定二进制文件的编译器。如果 IDA 成功确定用于指定二进制文件的编译器,则它将加载相应编译器库的签名文件并将其应用于代码的其余部分。
IDA 附带的签名大部分与专有编译器相关,例如 Microsoft 的 Visual C++ 和 Borland Delphi。但是,对于精确的模式匹配,您需要为库的每个不同版本生成签名文件。
为了克服这个障碍,Hex-Rays 提供了一些工具,允许您从静态库生成自己的签名。Fast Library Acquisition for Identification and Recognition (FLAIR)工具集分发给授权(许可)客户。FLAIR的版本需要对应IDA的版本。签名创建过程很简单:
- 获取静态库的副本。
- 利用 FLAIR 解析器创建模式文件。
- 运行sigmake.exe将模式文件转换为签名文件
- 通过复制到IDADIR/sig目录来安装新的签名文件。
为了手动应用签名文件,您应该进入文件->加载文件->FLIRT签名文件,这将弹出对话框,其中将所有签名文件安装到IDADIR/sig目录中。选择您要使用的签名,然后单击“确定”。
处理 Delphi 时还有一个强大的工具是 IDR:IDR(交互式 Delphi 重构器)。
您可以导出此工具的结果以与 IDA pro 一起使用。
只是不要忘记为您的二进制文件下载相应的签名http://kpnc.org/idr32/en/download.htm
另见这篇文章