Python 代码混淆和加密技术

25次阅读

共计 743 个字符,预计需要花费 2 分钟才能阅读完成。

动机
Python 进行商业开发时, 需要有一定的安全意识, 为了不被轻易的逆向. 混淆和加密就有所必要了. 混淆
为了增加代码阅读的难度, 源代码的混淆非常必要, 一个在线的 Python 代码混淆网站. http://pyob.oxyry.com/ 同时需要注意的是, 这个混淆其实还是被很多人怀疑的, 因为即使混淆了, 也没有改变代码的结构. 这种方法只能”防君子,不防小人“所以, 必要的话, 在编程的时候, 可以故意做点提高逆向难度的事情: 结构稍微改变, 合并几个类到同一个文件. 面向对象的结构中, 偶尔穿插一些无伤大雅的范式编程风格. 加密
最基本的方法是发布 pyc 文件, 也就是将所有的.py 源文件转换成 pyc 对外发布. pyc 有一个局限性是依赖于 python 解析器的版本, 使用某一个版本的 python 解释器生成的 pyc 必须要在相同版本下的 python 解释器下才可以正常工作.
使用上述方法可以方便的生成 pyc, 初步的隐藏代码了. 不过 pyc 依然可以被容易的破解
另一种方案是借助 cython. Cython 是属于 PYTHON 的超集,cython 可以将 python 文件转换成 c, 并编译成 pyd 文件. 一般将核心模块编译成 pyd, 这样被破解的风险就大大降低了. 优势:资源丰富,适合快速开发。翻译成 C 后速度比较快。缺点是:无法支持 JIT 技术(导致纯 python 的执行速度比 JAVA、JAVASCRIPT 等要慢,于是有了 PyPy)
有一个经验之谈, 你可以将所有每个模块中的某个一个位置的变量抽出, 放到一个 python 文件中, 使用 cython 来处理这个文件. 这样就会增加破解者从其他 pyc 文件中移除 pyd 文件依赖的难度了. 总结
作为一门解释型的语言,加密的难度超级大的,开源代码是王道,但是遇到非加密不可情况,可以选择上面的加密方法或者混淆方法。

正文完
 0