黑客能否在已编译的 exe Delphi VCL 应用程序中访问变量、方法、单元等的名称?

Can a hacker get access to the name of variables, methods, units, etc. inside a compiled exe Delphi VCL application?

我正在使用 Delphi 7 创建的软件的保护架构中工作,想知道我是否需要担心 functions/procedures 中使用的名称、变量等。[=13 可以吗? =] 在使用 Delphi 创建的已编译 exe VCL 应用程序中访问这些名称,而无需任何第三方保护(即混淆)?

Delphi 将其源代码编译成原始二进制文件——在合同中,例如Java 或 C#/.Net 编译成某种中间语言,可以很容易地反编译,并且通常需要混淆。 Delphi的反编译工具是very rough and ineffective - even the most sophisticated ones.

默认情况下,Delphi 可执行文件中没有添加任何调试信息。 Delphi 7 的 RTTI 集有限 - 它在 Delphi 2010 中得到了很大增强。人类可读的 RTTI 信息仅与枚举文本有关,published 类 的属性, interface 继承自 IInvokable。资料太少了。

所以几乎没有办法从典型的 Delphi 7 可执行文件中检索变量名和函数名。除非你将.map文件加入到可执行文件中(只有函数名和全局变量,没有局部变量)。

请注意,正如您所问,这是关于源代码的。对于 GUI/VCL 应用程序,.dfm 内容(即 TForm 布局)被序列化到可执行文件中,并且可以恢复。

与几乎每个 EXE 一样,您可以看到从哪些库(即 SHELL32.DLL 等)导入了哪些函数(即 CreateWindowA()SendMessageA() 等)。只需将您的 EXE 拖到文本编辑器中并搜索 .dll - 您可以在其周围看到可读文本。

通过函数索引链接可以避免通过函数名链接;恶意软件采用的一种方法(不让扫描器识别 "bad" 函数名称)是枚举库的所有导出函数名称,散列每个名称,然后将该散列与之前散列的文本进行比较。