繁体   English   中英

如果使用调试编译器设置编译exe文件,是否更容易逆向工程或破坏Delphi程序?

[英]Is it easier to reverse engineer or break a Delphi program if the exe file was compiled with debug compiler settings?

如果我在发布程序之前意外忘记切换到发布配置,那么对我的代码进行反编译或反向工程更容易吗?

例如,如果我不小心使用以下调试编译器选项:

1. Compiling:
    - StackFrames = True

2.  Debugging
    - Debug information = Debug information
    - Local Symbols = True
    - Symbol Reference info = Reference Info

3.  Linking
    - Map File = Detailed

我已经阅读了帮助,除了地图文件也以某种方式与二进制文件一起发布之外,我可以告诉它没有多大区别,所以我想知道如果有人有地图文件会有多大差异?

让我们逐一澄清你提到的选项:

  • 编译>堆栈帧 :堆栈帧仅用于调试(并且可能生成用于错误报告的堆栈跟踪,如@DavidHeffernan在评论中所述)。 即使您在发布版本中启用它,这对逆向工程也没有多大帮助。
  • 调试>调试信息 :设置此选项后,将在DCU内编译调试信息,以帮助在IDE内部进行调试。 它没有链接到exe,所以很明显它不会帮助逆向工程。
  • 调试>本地符号 :设置此选项后,编译器在调试信息中包含基本符号信息,但同样,它仅在IDE上进行调试时才有用,并且它没有链接到最终的exe。
  • 调试>符号参考信息>参考信息 :除了上一个选项之外,还包括有关单元局部符号(变量,常量,类等)的详细信息,以帮助调试。 它们也没有与最终的exe相关联。
  • 链接>映射文件>详细 :设置此选项后,链接器将创建一个详细的.map文件,其中包含有关程序符号的所有信息(类型,名称,地址,大小等),因此,当然它会对逆向工程如果您将此文件与您的exe一起分发(如评论中@RemyLebeau所述)。

还有生成远程调试符号的选项,正如@dummzeuch指出的那样:

  • 链接器>包含远程调试符号 :此选项告诉链接器生成.rsm文件,它是Delphi等效于Microsoft的.pdb 程序数据库文件 如果您分发此文件,则可能会遇到麻烦,因为您可以轻松地调试应用程序,可视化符号,函数和过程,单步执行代码等等。

另外,我认为重要的是说.map文件不等同于.pdb文件。 对于Delphi Win32, .rsm是等效的。 我多年没有使用过Delphi,但据我记忆,没有Delphi Win32版本可以生成.pdb文件。 只有Delphi for .NET才能。

那就是说,让我们回到你的问题:

我想知道如果有人有地图文件会有多大的不同?

使用.map文件可以更容易地进行逆向工程。 我见过一些工具,甚至可以将.map文件转换为.dbg文件,以便与调试器一起使用。

如果使用调试编译器设置编译exe文件,是否更容易逆向工程或破坏Delphi程序?

好吧,Debug构建的一个重要(也许是最引人注目的)特性是更大的exe大小。 这主要是因为在Debug配置中,编译器禁用了许多代码优化,以便于代码调试。 还有许多调试条件代码(例如:内部{$IFDEF DEBUG}指令)被链接到exe。

作为副作用,Debug构建生成的代码更容易进行逆向工程,因为它更容易理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM