通过解释器变异模糊python字节码

时间:2013-02-21 08:13:10

标签: python compiler-construction ctypes packaging cpython

实际上,Dropbox做得非常好,他们能够保护他们用python制作的桌面应用程序;我研究了很多,但没有比混淆更好的解决方案,这不是一种非常安全的方法,你最终会看到你的代码被上传到某个地方。

我听了 Giovanni Bajo (PyInstaller创始人)的一次会议,他说Dropbox这样做了:

  1. 通过重新编译CPython的解释器来加扰字节码,以及 这样,标准的CPython解释器将无法运行它, 只有重新编译的cpython解释器。
  2. 您需要做的就是将define loadup 8
  3. 下面的数字洗牌

    我从未经历过Python的源代码,因此,我不会声称我完全理解上述内容。

    我需要听听专家的声音:怎么做这样的事情?如果重新编译后,我将能够使用PyInstaller等可用工具打包我的应用程序?

    更新

    我对Dropbox如何进行这种混淆/变异做了一些研究,我发现了这个:

    根据Hagen Fritsch,他们分两个阶段进行:

    1. 他们使用TEA密码和RNG中的某些值接种的RNG 每个python模块的代码对象。他们调整了翻译 因此,它

      a)解密模块和

      b)阻止访问解密的代码对象。

      这就是让dropbox解密所有内容并使用内置编组器转储模块的简单路径。

    2. 使用的另一个技巧是手动加扰操作码。 不幸的是,这只能半自动修复,因此他们的 单字母替代密码证明是非常有效的 赢得一些时间。

    3. 我仍然想要了解如何做到这一点,更重要的是,我不知道解密在这个过程中是如何发生的......我希望所有专家的声音都在这里......普通人你在哪里。

1 个答案:

答案 0 :(得分:2)

我想这是关于改变include/opcode.h中的数字。虽然我没有看到#define loadup,但也许是指一些旧的Python版本。我没试过这个。

这将模糊您的.pyc文件,以便任何识别正常.pyc文件的工具都无法检查这些文件。这可以帮助您隐藏程序中的一些安全措施。但是,攻击者可能(例如)从您的应用程序包中提取您的自定义Python解释器并利用它来检查文件。 (只需启动交互式解释器并通过在模块上导入和使用dir开始调查)

另请注意,您的软件包肯定会包含Python标准库中的一些模块。如果攻击者猜测您已经改组了操作码,他可以在您的版本和标准模块的正常版本之间进行逐字节比较,并以这种方式发现您的操作码。为了防止这种简单的攻击,可以使用适当的加密保护模块,并尝试隐藏解释器中的解密步骤,如更新的问题中所述。这迫使攻击者使用机器代码调试来查找解密代码。


  

我不知道解密在这个过程中是如何发生的......

您可以修改导入模块的解释器部分并在那里插入解密C代码。