事实上,Dropbox 做得非常好,他们能够保护用 python 制作的桌面应用程序;我对此进行了很多研究,但没有比混淆更好的解决方案,这不是很安全的方法,您最终会看到您的代码上传到某个地方。
我听了一个会议乔瓦尼·巴霍(PyInstaller 创始人),他说 Dropbox 是这样做的:
- 通过重新编译 CPython 的解释器来扰乱字节码,以及
这样,标准 CPython 解释器将无法运行它,
只有重新编译的cpython解释器。
- 您需要做的就是将下面的数字打乱
define
loadup 8
.
我从来没有看过Python的源代码,所以,我不会声称我完全理解上面的话。
我需要听听专家的声音:这样的事情怎么办?如果重新编译后我将能够使用 PyInstaller 等可用工具打包我的应用程序?
Update:
我对 Dropbox 如何进行这种类型的混淆/突变进行了一些研究,我发现了这一点:
根据哈根·弗里奇,他们分两个阶段进行:
-
他们使用 TEA 密码以及由一些值作为种子的 RNG
每个Python模块的代码对象。他们调整了翻译
相应地使得它
a) 解密模块并
b) 阻止访问解密的代码对象。
这将是一个简单的路径,只需让 dropbox 解密所有内容并使用内置编组器转储模块即可。
使用的另一个技巧是手动加扰操作码。
不幸的是,这只能半自动修复,因此他们的
单字母替换密码被证明在以下方面非常有效
赢得一些时间。
我仍然想要更多关于如何做到这一点的见解,而且,我不知道解密是如何在这个过程中发生的......我希望这里所有专家的声音......普通人你在哪里。
我想这是关于洗牌中的数字include/opcode.h
。我没有看到#define loadup
不过,这可能是指某些旧的 Python 版本。我没有尝试过这个。
这会混淆你的.pyc
文件,以便任何识别正常的工具都无法检查它们.pyc
文件。这可以帮助您在程序中隐藏一些安全措施。但是,攻击者可能能够(例如)从应用程序包中提取自定义 Python 解释器,并利用它来检查文件。 (只需启动交互式解释器并通过在模块上导入和使用 dir 来开始调查)
另请注意,您的包肯定会包含 Python 标准库中的一些模块。如果攻击者猜测您已经打乱了操作码,他可以在您的版本和标准模块的正常版本之间进行逐字节比较,并以这种方式发现您的操作码。为了防止这种简单的攻击,可以使用适当的加密来保护模块,并尝试隐藏解释器中的解密步骤,如更新的问题中所述。这迫使攻击者使用机器代码调试来寻找解密代码。
我不知道这个过程中解密是如何发生的......
您可以修改解释器导入模块的部分,并在其中插入解密 C 代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)