更新:尽管上面提到:问题已经有了答案,链接问题中的解决方案在Delphi XE6中不起作用
只是注意到使用Delphi生成的所有可执行文件(包括发行版)都包含该可执行文件使用的所有类型的名称以及它们所属的单元的名称.如果您不小心删除RTTI信息,那么它还包含类方法,字段和属性名称.
这些字符串用于什么(特别是在发布版本中)?
有没有办法防止类型和单位名称被写入可执行文件?
重现这一步的步骤:
定义一个类
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
type TPerson = class
private
FName: string;
public
constructor Create(Name: string);
destructor Destroy; override;
end;
constructor TPerson.Create(Name: string);
begin
inherited Create;
FName := Name;
end;
destructor TPerson.Destroy;
begin
inherited Destroy;
end;
Run Code Online (Sandbox Code Playgroud)创建该类的对象,以便引用/使用该类.
var person: TPerson;
begin
person := TPerson.Create('John Doe');
person.Free;
end;
Run Code Online (Sandbox Code Playgroud)在发布模式下编译项目.
如何防止类名写入可执行文件?
也:
如何在项目级别删除RTTI,这样就不需要手动遍历每个包含的单元并添加{$ RTTI EXPLICIT METHODS([])PROPERTIES([])FIELDS([])}子句?
我尝试在.dpr文件的顶部添加$ RTTI EXPLICIT METHODS([])PROPERTIES([])FIELDS([])}但这在Delphi XE6中不起作用.
Pythia是一个可以混淆用Delphi或C++ Builder创建的二进制文件的程序.
但是,请记住,一个称职的逆向工程师只会因为这种混淆而略微减速,所以我只会用它来防止粗略的篡改/检查.
下载编译的v1.1程序:http://www.the-interweb.com/serendipity/index.php?/ archives/86-Pythia-1.1.html
浏览源代码:https: //github.com/sporst/Pythia
之前:

后:

| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |