通过解释器变异混淆python字节码
实际上,Dropbox非常出色,他们能够保护以python制作的桌面应用程序;我对此进行了很多研究,但没有比混淆更好的好的解决方案了,这不是很安全的方法,您最终会看到将代码上传到某个地方。
我听了 Giovanni Bajo (PyInstaller创始人)的会议,他说Dropbox这样做:
- 通过重新编译CPython的解释器进行字节码加扰,这样,标准的CPython解释器将无法运行它,只能重新编译cpython解释器。
- 您需要做的就是将数字下方的数字打乱
define loadup 8
。
我从没看过Python的源代码,因此,我不会声称我完全理解上述词语。
我需要听听专家的声音:该怎么做?如果重新编译后,我能够使用PyInstaller等可用工具打包我的应用程序?
更新:
我对Dropbox如何进行这种混淆/突变进行了一些研究,发现了这一点:
根据哈根·弗里奇(Hagen
Fritsch)的说法,他们分两个阶段进行:
- 他们使用TEA密码以及由每个python模块的代码对象中的某些值播种的RNG。他们相应地调整了口译员,以便
a)解密模块并
b)防止访问解密的代码对象。
这本来是一条简单的路径,只是让保管箱解密所有内容并使用内置的编组器转储模块。
- 使用的另一个技巧是手动对操作码进行加扰。不幸的是,这只能是半自动修复的,因此就赢得时间而言,他们的单字母替换密码非常有效。
我仍然希望获得有关如何完成此操作的更多见解,而且,我不知道解密在此过程中是如何发生的……我希望所有专家的声音在这里……普通人你在哪里。
-
我想这是关于将数字洗牌
include/opcode.h
。#define loadup
不过,我看不到那里,但这也许是指某些旧的Python版本。我还没有尝试过。这会混淆您的
.pyc
文件,以使它们无法被识别普通.pyc
文件的任何工具检查。这可以帮助您在程序中隐藏一些安全措施。但是,攻击者可能能够(例如)从应用程序包中提取您的自定义Python解释器,并利用它来检查文件。(只需启动交互式解释器,并通过在模块上导入和使用dir开始调查)还要注意,您的软件包肯定会包含Python标准库中的某些模块。如果攻击者猜想您已经对操作码进行了改组,他可以在您的版本与标准模块的普通版本之间进行逐字节比较,并以此方式发现您的操作码。为了防止这种简单的攻击,可以使用适当的加密保护模块,并尝试在解释器中隐藏解密步骤,如更新的问题所述。这迫使攻击者使用机器代码调试来查找解密代码。
我不知道解密在这个过程中是如何发生的…
您将修改解释器的导入模块部分,并在其中插入解密C代码。