我目前正在Delphi中开发一个应用程序,我必须在源代码中隐藏(混淆)一个字符串str := 'Example String'.
为什么?因为如果我在文本编辑器中打开EXE并搜索Example String我会在第二个中找到该字符串...
我尝试使用基本的HEX转录,#$65#$78#$61#$6d#$70#$6c#$65但它在编译时被清楚地重新转录.
我找了包装工,但这不是最好的解决方案(PECompact可以被检测为误报恶意软件,UPX太容易de-UPX,......).我希望在我的内部代码中有一个想法......
有人会让我走上正确的道路.
我曾经使用Pythia来混淆我的D6程序.但似乎Pythia不再适用于我的D2007.这是Pythia的链接(自2007年初以来没有更新):http://www.the-interweb.com/serendipity/index.php?/ archives/86-Pythia-1.1.html
从上面的链接,这是我想要实现的

我打开Delphi IDE并创建一个新项目。这是该应用程序的全部代码:
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
begin
end.
Run Code Online (Sandbox Code Playgroud)
我生成了应用程序,然后在EXE中搜索“ tMyEnum”。找到了。这并不奇怪,因为我在链接器选项中将“调试信息”设置为“开”。
我关闭调试信息。我重建。我再次搜索EXE,现在没有提及tMyEnum。到目前为止,一切都如预期。
然后,我更改代码。我添加一个变量。
program EnumSymbolsInExeTest1;
type
tMyEnum = ( A );
var
Z : tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
我重建。仍然没有惊喜。我得到一个未使用变量的提示,而EXE仍然没有提及TMyEnum。
然后,我进行另一个小更改:
type
tMyEnum = ( A );
var
Z : array of tMyEnum;
begin
end.
Run Code Online (Sandbox Code Playgroud)
我将变量更改为数组。我重建。我搜索EXE,发现tMyEnumEXE文件中现在出现“ ”。
我的问题是:为什么?
我该如何阻止它?我不希望任何内部标识符出现在发送给客户的可执行文件中。
我正在使用Delphi 10.2
为了响应David Heffernan,我添加了这些编译器指令。
program EnumSymbolsInExeTest1;
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
type
tMyEnum = ( A );
var
Z : array …Run Code Online (Sandbox Code Playgroud)