何时以及如何混淆我的Delphi代码?

6

我应该了解Delphi中的代码混淆吗?

我是否应该使用它?

如何进行混淆,有没有好的工具(商业/免费)可以自动化?

5个回答

11

你为什么需要这样做呢?

总的来说,Delphi不像.NET那样可以反编译回去,所以虽然反编译总是有一定风险,但我从来没有发现过能真正有效地反编译的反编译器,很多地方都留下了汇编语言等。

如果有人想重新编写你的代码,无论如何,无论是否混淆,都可以这样做。有些程序员甚至写出几乎天然混淆的代码(我曾经和一些人共事过)。

因此,我的建议是不要费心了。除非有人能向我展示一个真正有效的Delphi反编译器,并且能够生成完整的可编译集合以及原始的所有Delphi,否则就不用担心了。


@BugFinder 我想让我的软件更难破解,而不是保护我的代码。我的意思是,如果我只有一种方法来检查序列号,那么它很容易被破解,所以我想混淆代码,使其更难一些。这样对吗? - JustMe
2
在机器码级别上,你试图以源代码级别混淆代码很容易被破解。你可能需要考虑使用打包工具对二进制代码进行加密,防止它在调试器下运行,但实际上没有保护方案可以长期不被破解。即使是最小的工具,在发布后几天就会被破解——这是一种体育或亚文化学科。你最终将会与极其有能力的骇客进行斗争,并耗尽资源。你越是试图保护,他们就会投入越多的精力。 - TheBlastOne
3
如果你想保护你的代码免受黑客攻击,那么请问这个问题。这不是你所问的! - mj2008
1
是的,@JustMe,这可能是一种方法。你在这里做的被称为XY问题 - Rob Kennedy
使用Delphi,坦白地说,代码混淆并不能像你想的那样改变最终的可执行文件...因为它会编译并完成相同的工作。你需要更加努力尝试。 - BugFinder
显示剩余3条评论

7

@JustMe,这个软件在最近的Delphi版本中无法运行。请参考 - FLASHCODER

6

编译器已经为您混淆代码,因此没有必要进行进一步的混淆。

从二进制文件中无法重新创建源代码。

组件可以以有用的方式进行分发,而无需分发源代码。

因此通常没有(技术上的)理由来分发源代码。


1
JustMe 可能认为在他的情况下分发源代码是强制性的,并且他想要隐藏“代码”。 - TheBlastOne
@TheBlastOne 哎呀,我只是一个 Delphi 新手,仅此而已。 - JustMe
请问您能否指点我更多关于Delphi编译器的信息? - JustMe
1
@JustMe,我并不想冒犯。现在我试图通过为David的答案添加更多细节来弥补任何不礼貌之处(一旦经过积极的同行评审就会显示出来)。 - TheBlastOne

6
您可以采取其他措施来降低攻击者禁用软件激活系统的能力,但在像Delphi这样的本地编译系统中,您无法从二进制文件中重新创建源代码。另一个答案(目前被接受的答案)恰好说到了这一点,还有人指出了一种有用的工具,可以混淆RTTI信息,以防止人们对软件内部的了解。
如果您真的想要阻止对系统进行修改,您可以尝试以下加固技术:
  1. 使用自修改代码,将关键函数(例如软件激活)分成各个级别的可互操作校验和、代码损坏和修复。
  2. 调试检测。您可以检测到调试器正在使用您的软件,并尝试阻止该软件在此情况下运行。
  3. 对磁盘上的PE二进制数据进行加密,并在加载时或运行之前即时解密,以便关键汇编代码不会轻易地被逆向工程回汇编语言。
正如其他人所述,黑客在处理您的软件时并不需要恢复原始源代码。他们会直接尝试修改您的二进制文件,并利用广泛的汇编语言知识来绕过您不希望他们绕过的东西。

0

您可以使用免费的 JCF(Jedi Code Formatter)来混淆您的源代码。然而,Pascal语法不允许强大的混淆,而且JCF甚至不能做到最好(毕竟,它是一个代码格式化工具,而不是混淆器!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接