我正在为使用 Delphi 7 创建的软件使用保护模式,想知道我是否需要担心函数/过程、变量等中使用的名称。“黑客”能否在编译的 exe VCL 应用程序中访问这些名称用 Delphi 创建而没有任何第三方保护(即混淆)?
2 回答
Delphi 将其源代码编译成原始二进制文件——例如编译成 Java 或 C#/.Net,这些文件编译成一些中间语言,这些语言很容易被反编译,并且经常需要混淆。Delphi 的反编译工具非常粗糙和低效——即使是最复杂的工具也是如此。
默认情况下,Delphi 可执行文件中没有添加调试信息。而且 Delphi 7 有一组有限的 RTTI - 它在 Delphi 2010 中得到了很大的增强。人类可读的 RTTI 信息仅涉及枚举文本、published
类的属性、interface
继承自IInvokable
. 所以信息很少。
所以几乎没有办法从典型的 Delphi 7 可执行文件中检索变量名和函数名。除非您将.map
文件加入可执行文件(只有函数名和全局变量,而不是局部变量)。
请注意,这是关于源代码的 - 正如您所要求的那样。对于 GUI/VCL 应用程序,.dfm 内容(即 TForm 布局)被序列化为可执行文件,并且可以恢复。
与几乎每个 EXE 一样,您可以看到从哪些库(ieCreateWindowA()
等)导入了哪些函数(ie等)。只需将您的 EXE 拖入文本编辑器并搜索- 您可以在其周围看到可读文本。SendMessageA()
SHELL32.DLL
.dll
可以通过链接函数索引来避免链接函数名称;恶意软件的一种方法(不让扫描程序识别“坏”函数名称)是枚举库的所有导出函数名称,对每个名称进行散列,然后将该散列与之前的散列文本进行比较。