【问题标题】:Remove classes string name from compiled release exe从已编译的发布 exe 中删除类字符串名称
【发布时间】:2013-07-18 20:00:37
【问题描述】:

我编译我的应用程序项目的发布版本。当我用二进制编辑器查看我编译的最终 exe 时,我可以看到我自己创建的对象的所有类名,例如:TPolygon、TRectangle 等...,作为 exe 中的二进制文本数据。

如何从 exe 中删除此信息。我尝试在 dpr 中删除禁用 RTTI:

{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

但不是运气,任何提示。

【问题讨论】:

  • 您可以尝试使用加密和/或混淆 exe 的工具,而不是删除类名。
  • @RRUZ,我尝试使用一些加壳程序进行混淆,但是在 exe 运行并转储内存快照后,类名在内存流中。
  • 如果你只想隐藏一些名字,任何优秀的黑客都会破解你的应用程序。如果他们能够检查内存中解压缩的可执行文件,那么他们将能够完成剩下的工作。这个问题似乎有些变化。
  • 不要挣扎。在 GPL 下发布。

标签: delphi security rtti delphi-xe3


【解决方案1】:

如果您要从可执行文件中删除类名,那么您的应用程序将停止工作。编译到应用程序中的 .dfm 文件包含类名。运行时流式传输框架需要能够在类注册表中查找这些类,如果没有名称,您的表单及其属性将无法流式传输。

最重要的是,正如 AlexSC 指出的那样,TObject.ClassName 的实现需要类的名称出现在可执行文件中。

【讨论】:

  • 除此之外,这些字符串也由方法 TObject.ClassName 返回。所以,正如大卫所说,这些名称必须在 .EXE 文件中继续存在。
  • 给那个类起一个非描述性的名字
  • 或者,碰巧,我看到了一个应用程序,他们使用专有指令和预处理器,例如{#ENCRYPT+}TFindSeqForm{#ENCRYPT-} = class(TForm)
  • 应该混淆的符号名称被 {#ENCRYPT+} ... {#ENCRYPT-} 块包围,以简化解析过程。在下一阶段,所有源文件中的所有此类块都将被解析,并将符号名称更改为神秘名称。结果被保存到临时文件中,使用命令行编译器从中构建 exe。
  • @David:正如我所写:我看到了,没用过……但我不这么认为:恕我直言,这取决于想象:您可以使用字典生成混淆名称来重新识别真实姓名,例如用于生成 TPF1957SpeedButton 的表单
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2018-10-25
  • 1970-01-01
  • 2011-02-21
  • 2023-02-13
  • 2021-12-03
  • 1970-01-01
  • 2021-09-11
相关资源
最近更新 更多