PyProtect
PyProtect 2.0 测试版发布!

2020 - 01 - 03. 时隔3年, 本工具终于迎来了一次较大规模的更新: PyProtect 2.0.

此版本与之前的版本相比差异相当大, 可谓是1.0版本的完全重构产物, 更是没有使用1.0的任何一行代码.

之所以做出这么大的改动, 是因为有部分用户反应本站加密的Python代码存在兼容性问题, 在一些很特殊的情况下无法正常加载. 且由于本站的出现给很多爱好者们带来了极高的兴趣, 在大家的一致研究下, 出于兴趣爱好而开发的PyProtect 1.0显然有些强度不够.

但是即使是这样, 也有相当多不知名的朋友们在使用着我的这个小工具. 就像您现在这样, 乐此不疲的加密自己的Python代码.

为此, 我结合了这几年来一直在计科领域积累的经验, 也结合了大家所有人提出的技术意见, 对PyProtect进行了一次大规模的代码重构. 让这个本是兴趣而写下的小项目, 真正成为一个保护Python代码的利器.

当然, 当前发布的版本仍然在测试和完善当中, 在PyProtect 2.0版本中可能还会存在着一些兼容性问题, 我们也会逐渐的修复和改进.

架构改变

在PyProtect 1.0时代, PyProtect一直是使用了简单的压缩加壳与壳头混淆的方式. 这种方式在过去一段时间内确实是给大家带来了很棒的代码加密效果. 但是它毕竟仅仅是短时间内快速开发的产物, 加密强度仍然非常有限.

而PyProtect 2.0完全摒弃了这样的做法, 在2.0版本中, PyProtect将引入更复杂的混淆算法, 将过程流完全打碎, 加入更多变形的花指令. 这意味着, 对PyProtect 2.0处理过后的代码进行分析要相当困难了.

而这并不是PyProtect 2.0的全部. 最为重点的, 是接下来要介绍的 AVM Protect 代码虚拟化保护技术.

AVM Protect 代码虚拟化技术

在PyProtect 2.0中, 您的每个函数都可以被代码虚拟化技术保护.

而要使用这个技术, 您只需要在要保护的函数中的任意位置加入一行宏指令即可: AVM = "==--AVMPROTECTFUNCTION--=="

AVM Protect是一个无需第三方dll/so组件的高强度加密虚拟机. 它的工作原理是将您的Python代码编译成完全不通用的私有指令集, 并在AVM加密虚拟机中执行.

这样的加密技术, 直接在架构上无法让现有的反编译工具分析.

逆向人员如果要对被保护的代码进行分析, 则首先要分析AVM加密虚拟机, 弄清楚虚拟机本身是如何工作的. 而加密虚拟机拥有大量的混淆、自校验、反调试、破坏图灵完全、防篡改、随机化等安全策略, 对加密虚拟机进行分析是非常困难且耗费时间的.

而每个函数都有一个完全不同的加密虚拟机, 即使是相同的函数, 每次加密生成的加密虚拟机也是完全不同的. 因此, 即使是某个加密虚拟机被攻破, 也无法还原程序的完整流程. 但若要攻破所有的加密虚拟机, 所需要的时间和技术成本将是指数级增长的.

提示帮助

1. AVM Protect技术本质上是在Python当中再实现了一个虚拟机, 因此将会带来较大的性能损失. 请不要对经常调用、包含大量循环指令的函数使用本功能, 以免造成性能问题.

2. 默认情况下, PyProtect 2.0是对函数进行混淆乱序, 不会主动使用AVM Protect虚拟机. 乱序插花让逆向分析更为困难, 且无法直接反编译. 造成的性能损失可以忽略不计, 也不会有任何兼容性问题. 但相对的, 常量表、变量名等信息也不会被处理.

3. 若您要对加密后的pyc文件进行混淆, 以至于文件用记事本打开不能发现明显的变量名、字符串等特征, 则可以在模块最外层代码 (也就是所有函数和class之外的地方, 比如文件第一行) 中插入AVM Protect宏指令, 这样文件最外层Python代码将会被保护, 从而达到不能直接搜索文件的目的.

4. AVM Protect由于是虚拟执行, 因此不支持Python的traceback模块. 这点尤其要注意, 但是仍然是支持try - except语句的.

5. 如果您的文件加密后无法执行, 则请尝试删除一部分AVM Protect虚拟机宏指令之后再试. 您可以将这个问题反馈给我.

PyProtect: 混淆、加密、压缩你的Python文件!

PyProtect © pyprotect.angelic47.com all rights reserved. 2016-2020