我正在为一个使用Delphi 7创建的软件设计保护机制,想知道我是否需要担心函数/过程、变量等中使用的名称。在没有任何第三方保护(如混淆)的情况下,黑客能否访问Delphi创建的已编译exe VCL应用程序中使用的这些名称?
我正在为一个使用Delphi 7创建的软件设计保护机制,想知道我是否需要担心函数/过程、变量等中使用的名称。在没有任何第三方保护(如混淆)的情况下,黑客能否访问Delphi创建的已编译exe VCL应用程序中使用的这些名称?
Delphi将其源代码编译为原始二进制文件,与Java或C#/.Net不同,后者会编译为一些中间语言,这些语言很容易被反编译,通常需要混淆。对于Delphi而言,反编译工具非常粗糙而且效果不佳,即使是最复杂的工具。
默认情况下,Delphi可执行文件中没有添加调试信息。Delphi 7只有一个有限的RTTI集合 - 它在Delphi 2010中得到了大量增强。人类可读的RTTI信息仅关于枚举文本,类的published
属性和继承自IInvokable
的interface
。因此,提供的信息非常少。
因此,从典型的Delphi 7可执行文件中检索变量名和函数名几乎没有办法。除非将.map
文件与可执行文件连接在一起(仅包含函数名和全局变量,不包括局部变量)。
几乎每个EXE都可以看到导入的函数(例如CreateWindowA()
,SendMessageA()
等)以及它们来自哪些库(例如SHELL32.DLL
等)。只需将您的EXE拖到文本编辑器中并搜索.dll
- 您就可以看到可读的文本。
通过函数名称链接可以通过链接函数索引来避免;恶意软件采用的一种方法(不让扫描器识别“坏”函数名称)是枚举库的所有导出函数名称,对每个名称进行哈希处理,然后将该哈希与先前哈希的文本进行比较。