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