如何保护我的 delphi 应用程序不被反编译?我知道有一些像themida这样的软件我认为会这样做,但是受保护的exe会触发防病毒软件。
8 回答
这取决于你的目标是什么。
如果真的只是保护源头,那就已经做到了!如果您不包含调试和符号信息并添加一些繁重的内联,那么祝您从反汇编 exe 中重建一些可用的 Pascal 代码。
如果它阻止人们看到它的功能和破解它,那么你必须包括一些反拆卸保护。这更难但可行。通常作为反盗版保护的抵押品。
CPU 可以读取的所有内容,也都可以“反编译”,因此没有最终的安全性。但是通常反编译编译好的 Delphi 代码是相当困难的,当然,几乎所有的标识符和所有的注释都不见了。
已发布的类、DFM 文件信息和常量(包括字符串常量)部分以易于阅读的方式存在于 exe 文件中。您可以通过加密字符串而不使用已发布和不使用 DFM 文件来减少此问题。但是,所有信息仍将存在于您的 exe 文件中,因此通常这只是一项艰苦的工作,没有真正的安全性。
如果你只是想让你的部分源代码难以阅读,让你的算法变得困难......
最后,一切都可以被黑客入侵。避免您的应用程序被反编译的唯一真正方法是将 exe 文件远离那些可以执行此操作的人,例如将其部署在自己的服务器上而不是客户的服务器上。
如果您使用的是 Delphi Prism,那么众多 .Net 反编译工具之一将使访问(表单)源代码成为一项微不足道的任务。
唯一的解决方案是使用众多 .Net 混淆工具之一。不幸的是,我无法提出建议,因为我从来没有使用过,但谷歌应该会告诉你方法......
如果您要编译为本机 Win32,那么任何形式的混淆,甚至是反调试机制,都是浪费时间。有些人可以像您或我阅读我们的母语一样轻松阅读汇编。这些事情只会在一定程度上减缓逆向工程过程(而且只是几乎没有)。
几年前,我不得不重写一个应用程序,它的开发人员已经放弃了。
我可以从 DFM-s 中恢复所有东西,Forms(带有组件)存储在 TxyzQueries 中的查询字符串,图像列表中的位图,带有反编译器的一些字符串,但无法恢复应用程序逻辑,只能恢复带有 asm 源的方法名称。
有加载程序(如 UPX http://upx.sourceforge.net),将加密的压缩应用程序提取到内存并在启动时加载它,但 AV 通常将此类应用程序标记为受感染。:(
你可以写一个这样的小应用程序,一些提示:
www.codeproject.com/KB/cs/LoadExeIntoAssembly.aspx (.net) www.joachim-bauch.de/tutorials/load_dll_memory.html(用于 dll-s)
只有使用被盗Themida 密钥保护的应用程序才能触发防病毒软件(例如卡巴斯基检测到的 Win32.Black)。
通常,您无法真正保护您的代码免于反编译。但是,通过使用Code Virtualizer等工具,您可以保护关键区域,例如安装代码解码器。虚拟化的代码要慢得多,并且有一定的限制,但它为临时黑客的麻烦增加了一个合适的障碍。这最好在构建脚本中完成,以便一致地添加它以进行发布 - 这样您就可以确保每次都得到适当的保护。
我建议将安装代码与保护 BTW 分开,这样您就可以随时切换保护而不必担心现有用户。
最后,Delphi 表单很容易访问,但它们通常无用更改。
我认为对于本机 Win 平台,永远无法实现完整的反汇编。如果您在编译期间不包含调试符号等或使用某些工具隐藏这些符号,则您的 exe 不太可能被解码。不知道 .NET 的事情。
保护可执行文件的一种简单方法是在 Internet 服务器上将其作为 Web 应用程序运行。使用 Delphi 和Ajax库(例如基于 extpascal的ExtJS,或用于 Web 的 IntraWeb/VCL),可以将桌面和客户端/服务器应用程序转换为 Web 应用程序。(示例) - 这也使该应用程序可用于其他操作系统和移动设备。