【发布时间】:2013-02-21 08:13:10
【问题描述】:
实际上,Dropbox 做得很好,他们能够保护用 python 制作的桌面应用程序;我对此进行了很多研究,但没有比混淆更好的解决方案,这不是很安全的方法,你最终会看到你的代码上传到某个地方。
我听了一个由 Giovanni Bajo(PyInstaller 创始人)制作的会话,他说 Dropbox 是这样做的:
- 通过重新编译 CPython 的解释器进行字节码加扰,以及 这样,标准的 CPython 解释器将无法运行它, 只有重新编译的 cpython 解释器。
- 您只需将
define loadup 8下方的数字随机排列即可。
我从来没有看过 Python 的源代码,所以,我不会声称我完全理解上面的话。
我需要听到专家的声音:这样的事情怎么办?如果在重新编译后我将能够使用 PyInstaller 等可用工具打包我的应用程序?
更新:
我对 Dropbox 如何进行这种类型的混淆/变异进行了一些研究,我发现了这一点:
根据Hagen Fritsch,他们分两个阶段进行:
-
他们使用 TEA 密码以及由 每个 python 模块的代码对象。他们调整了翻译 因此,它
a) 解密模块并
b) 防止访问已解密的代码对象。
这本来就是让 Dropbox 解密所有内容并使用内置编组器转储模块的直接路径。
使用的另一个技巧是手动加扰操作码。 不幸的是,这只能半自动修复,因此他们的 单字母替换密码在以下方面被证明是非常有效的 赢得一些时间。
我仍然想要更多关于如何做到这一点的见解,此外,我不知道在这个过程中解密是如何发生的……我想要所有专家的声音……普通人你在哪里。
【问题讨论】:
-
类似的,最近的问题:Undecompilable Python
-
谢谢珍妮。与您所说的非常相似,除此之外,在新创建/改组的解释器中删除了自省模块。
-
在一天结束时,字节码将从内存中提取出来,然后,攻击者可以将新洗牌的字节码与标准字节码进行比较,以了解洗牌的情况;但是,公平地说,不能同一个攻击者反编译用 C 编写的程序来获取源代码,没有什么是安全的,不能逆转,这是一种权衡......这就是我看待事物的方式,可能是我错了.
标签: python compiler-construction ctypes packaging cpython