代码之家  ›  专栏  ›  技术社区  ›  Vladislav Rastrusny

Delphi:防止方法名出现在可执行文件中

  •  14
  • Vladislav Rastrusny  · 技术社区  · 14 年前

    我正在编写一个类来处理可执行文件中的安全性(检查序列、测试日期检查等)。编译可执行文件后(即使在版本中,所有调试和RTTI生成都已关闭),当我在记事本中打开它并在原始数据中搜索方法名称时,我可以看到组装类的所有方法的名称。代码库中的任何类中都没有已发布的成员。

    目标可执行文件中任何类的任何方法都可能以文本形式存储在可执行文件中。显然,这是由Delphi2010中所有类的扩展RTTI默认打开引起的。

    4 回复  |  直到 9 年前
        1
  •  15
  •   Jim McKeeth    14 年前

    如果您询问Delphi 2010中的扩展RTTI,可以通过

    {$RTTI显式方法([])属性([])字段([])}

    另见 docwiki

        2
  •  6
  •   Remko    14 年前

    此外,在项目的dpr文件中处理以下内容:

    {$IFDEF RELEASE}
      // Leave out Relocation Table in Release version
      {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED}
    {$ENDIF RELEASE}
    
        3
  •  6
  •   Marco van de Voort    14 年前

        4
  •  -1
  •   Ritsaert Hornstra    14 年前

    您可能会看到作为资源的表单定义(例如项目的DFM文件的二进制表示)。

    如果您不想显示这些表单(对于序列信息屏幕等),您应该“在代码中”创建这些表单。例如,创建一个TForm,放置一个TButton并在其上TEdit,在代码中附加事件处理程序。

    要以简便的方式完成这一点:从一个表单开始,创建DFM。在查看表单时,从上下文菜单中选择View as text,您将知道应该将哪些内容复制到代码中。并且确保不要将任何varaiablereferences放在depublished下(始终将public/protected/private放在类定义的第一行)。