【问题标题】:When and how should I obfuscate my Delphi code?我应该何时以及如何混淆我的 Delphi 代码?
【发布时间】:2011-06-03 09:06:59
【问题描述】:

关于 Delphi 中的代码混淆,我应该知道些什么?

我应该还是不应该这样做?

它是如何完成的,是否有任何好的工具(商业/免费)来自动化它?

【问题讨论】:

    标签: delphi delphi-2010 obfuscation


    【解决方案1】:

    为什么需要?

    作为一个整体 Delphi 不会反编译回来,不像 .net,所以,虽然反编译总是有点风险,但我从来没有找到一个真正有用的反编译器,很多地方都留下了汇编器和以此类推。

    如果人们想要修改你的工作,他们可以,不管是否混淆,见鬼,一些编码人员编写几乎自然混淆的代码(与少数人合作过)

    因此,我的投票不应该打扰。除非有人可以向我展示一个真正有效的 delphi 反编译器,并生成完整的可编译集,以及原来的所有 delphi,否则我不会担心任何问题。

    【讨论】:

    • @BugFinder 我希望我的软件更难破解,而不是保护我的代码。我的意思是,如果我只有一种检查序列的方法,那么很容易破解它,所以我想混淆代码以使其更难一些。对吗?
    • 在机器代码级别,您在源代码级别混淆代码的尝试太容易破解了。您可能想查看加密二进制文件的打包程序,并保护它不被调试器执行,但实际上没有任何保护方案可以长期保持不变。即使是最小的实用程序在发布后的几天内也会被破解——这是一种运动或亚文化学科。你最终只是与非常有能力的饼干战斗,资源耗尽。您尝试保护的越多,他们就会投入越多。
    • @justme 如果你想保护你的代码免受破解者的攻击,那就问这个问题。你问的不是这个!
    • @mj2008 对不起,我认为代码混淆是保护我的软件免受破解的方法之一 :( 我的意思是:vmpsoft.com/support/user-manual/introduction/…
    • 是的,@JustMe,这可能是一种方式。您在这里所做的称为 XY 问题
    【解决方案2】:

    Pythia 是一个可以混淆使用 Delphi 或 C++ Builder 创建的二进制文件(不是源代码)的程序。 Source code for Pythia is here.

    之前

    之后

    【讨论】:

    • 谢谢@Mick,这正是我想要的
    • @JustMe,这个软件在最新版本的 Delphi 中不起作用。 See
    【解决方案3】:

    没有必要混淆,因为编译器已经为你做了。

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

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

    因此分发源代码通常没有(技术)原因。

    【讨论】:

    • JustMe 可能认为分发源代码对于他的案例是强制性的,他想隐藏“teh codez”。
    • @TheBlastOne Geez,我只是一个 Delphi 菜鸟,仅此而已
    • 您能好心告诉我有关Delphi编译器的更多信息吗?
    • @JustMe,不想冒犯。现在试图通过在 David 的答案中添加更多细节来弥补任何不礼貌(只要得到同行评审的肯定就可见)。
    【解决方案4】:

    例如,您可以采取其他措施来降低攻击者禁用您的软件激活系统的能力,但在像 Delphi 这样的本机编译系统中,您无法从二进制文件重新创建源代码。另一个答案(目前被接受的答案)正好说明了这一点,并且其他人指出了一种有用的工具来混淆人们可能用来深入了解您的软件内部的 RTTI 信息。

    如果您真的想要,您可以研究以下强化技术来阻止修改您的系统:

    1. 自修改代码,具有门控逻辑,可将代码的关键功能(如软件激活)划分为不同级别的互操作校验和以及代码损坏和修复。

    2. 调试检测。您可以检测到您的软件上正在使用的调试器,并尝试阻止该软件在这种情况下运行。

    3. 加密磁盘上的 PE 二进制数据,并在加载时或运行前及时解密,这样关键的汇编代码就不会那么容易被逆向工程回汇编语言。

    正如其他人所说,在您的软件上工作的黑客无需恢复原始资源即可对其进行修改。如果他们尝试过,他们会尝试直接修改您的二进制文件,并将使用详细而广泛的汇编语言知识来规避您可能不希望他们这样做的事情。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-15
        • 2020-08-22
        • 1970-01-01
        • 1970-01-01
        • 2014-04-14
        • 2019-03-16
        • 2015-04-02
        • 2021-01-01
        相关资源
        最近更新 更多