6

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

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

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

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

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

更新:

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

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

  1. 他们使用 TEA 密码以及由每个 python 模块的代码对象中的一些值播种的 RNG。他们相应地调整了口译员,使其

    a) 解密模块和

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

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

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

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

4

1 回答 1

2

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

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

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


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

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

于 2013-02-21T08:32:13.827 回答