【问题标题】:Obfuscating python bytecode through interpreter mutation通过解释器突变混淆 python 字节码
【发布时间】:2013-02-21 08:13:10
【问题描述】:

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

我听了一个由 Giovanni Bajo(PyInstaller 创始人)制作的会话,他说 Dropbox 是这样做的:

  1. 通过重新编译 CPython 的解释器进行字节码加扰,以及 这样,标准的 CPython 解释器将无法运行它, 只有重新编译的 cpython 解释器。
  2. 您只需将define loadup 8 下方的数字随机排列即可。

我从来没有看过 Python 的源代码,所以,我不会声称我完全理解上面的话。

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

更新:

我对 Dropbox 如何进行这种类型的混淆/变异进行了一些研究,我发现了这一点:

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

  1. 他们使用 TEA 密码以及由 每个 python 模块的代码对象。他们调整了翻译 因此,它

    a) 解密模块并

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

    这本来就是让 Dropbox 解密所有内容并使用内置编组器转储模块的直接路径。

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

我仍然想要更多关于如何做到这一点的见解,此外,我不知道在这个过程中解密是如何发生的……我想要所有专家的声音……普通人你在哪里。

【问题讨论】:

  • 类似的,最近的问题:Undecompilable Python
  • 谢谢珍妮。与您所说的非常相似,除此之外,在新创建/改组的解释器中删除了自省模块。
  • 在一天结束时,字节码将从内存中提取出来,然后,攻击者可以将新洗牌的字节码与标准字节码进行比较,以了解洗牌的情况;但是,公平地说,不能同一个攻击者反编译用 C 编写的程序来获取源代码,没有什么是安全的,不能逆转,这是一种权衡......这就是我看待事物的方式,可能是我错了.

标签: python compiler-construction ctypes packaging cpython


【解决方案1】:

我想这是关于改组include/opcode.h 中的数字。不过,我在那里没有看到#define loadup,但可能是指一些旧的 Python 版本。这个我没试过。

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

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


不知道这个过程是怎么解密的……

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

【讨论】:

  • 嗯,就这些吗?我们只更改opcode.h中的数字,重新编译python解释器,打包我的应用程序,然后将其发送给客户?这会产生具有相同安全级别的类似 Dropbox 的应用程序吗?
  • @securecurve 扩展了我的答案。我不知道 Dropbox 应用的安全级别。
  • 此时,这些操作码的提取并不简单,攻击者将不得不使用反汇编/反编译器和调试工具来查看内存中的那些操作码......我说得对还是会这样发生不同的事情?
  • +1 用于更新答案 2 次以进行改进,但我现在不会勾选它以获得更多答案...
  • @securecurve 是的,如果有人对这个主题有更多的话,我也很感兴趣。
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 2016-01-08
  • 2018-09-18
  • 2011-05-08
  • 1970-01-01
相关资源
最近更新 更多