IDA 7 无法正确识别/引用 Delphi 16 位字符串

逆向工程 艾达 字符串 德尔福
2021-07-10 12:13:13

我正在IDA 7.0 中使用XE3 Delphi应用程序,但无法让字符串表示正常工作:


字符串窗口中选择Delphi(16 位)时会产生正确的结果:

IDA 7 字符串窗口,Delphi 16 位


反汇编视图对字符串的引用失败

  • 下面是字符串定义.text:008717DC

在此处输入图片说明

  • 以下是对它的(失败)引用:

在此处输入图片说明


尝试将字符串类型更改Delphi(16 位)失败Command "SetStrlitStyle" failed

在此处输入图片说明


奇怪的是,并非所有字符串都被错误引用:

在此处输入图片说明

在此处输入图片说明


作为记录,IDR(交互式 Delphi 重构器)产生正确的表示:

在此处输入图片说明


在选项中将默认 字符串类型设置Delphi(16 位)

在此处输入图片说明


以下是编译器选项

在此处输入图片说明


欢迎大家帮忙,谢谢!

1个回答

这不仅是 Delphi 问题,还是 IDA 的通用 unicode 检测问题。我不能确定它究竟是如何工作的,但我觉得 IDA 在检测数据类型时有问题。这与地址表示优先于字符串文字有关。即,当它找到一些引用地址的指令时,它会尝试确定哪些数据位于该地址。在您的情况下,它找到了 mov eax,偏移量 8717E0,它在地址 8717E0 处读取了 4 个字节。它得到了 0x6F0053,它检查了 0x6F0053 看起来像一个地址吗?是的,在当前数据库中它是一个有效地址。然后进行所有进一步的检测,让我们将 8717E0 处的数据偏移到 loc_6F0053。如果没有0x6F0053这样的地址,就会进一步分析,最后得出的结论是,它是一个unicode字符串。

因此,要解决此问题,您需要在 process 模块中挂钩分析,并进行自己的类型检测。任何 IDA 设置都无法解决它。