Python 源码混淆与加密

本文介绍了保护 Python 源码的多种方法,包括代码混淆、编译为 pyc 文件、使用 PyInstaller 打包、PyArmor 加密以及编译为 pyd 文件。详细探讨了每种方法的优缺点,对于需要源码保护的场景,如商业软件、免杀等,提供了实用的保护策略。
摘要由CSDN通过智能技术生成

Python 是一种解释型语言,没有编译过程,发布程序的同时就相当于公开了源码,这也是其作为开源语言的一个特性。但在某些场景下,我们的源码是不想被别人看到的,例如开发商业软件、编写 0day 漏洞 POC/EXP、免杀 shellcode 等。

多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤

QQ群:1057034340

以免杀为例,如果打包的源码没做任何处理,安全研究人员在捕获到样本后连分析的过程都省掉了,直接通过源码锁定特征,很快免杀就会失效,这显然不是我们想看到的。因此对源码做相应的保护还是有必要的。

注:本文代码只为介绍源码保护方法,不涉及免杀姿势。

目前保护 Python 代码主要有以下几种方式:

  • 对代码进行混淆以降低源码可读性

  • 将 py 文件编译为二进制 pyc 文件

  • 使用 Pyinstaller 打包源码为二进制可执行文件

  • 使用 PyArmor 加密脚本

  • 将 py/pyc 文件使用 AES 加密为 pye 文件

  • 将 py 文件转为 c 文件后编译为动态链接库文件

代码混淆

代码混淆是指在不改变代码逻辑的情况下,对代码结构进行变换,通过一些带有混淆性质的命名、注释等,使代码变得晦涩难懂,从而达到保护代码的作用。这里提供两种代码混淆的方式:

代码混淆库 pyobfuscate

pyobfuscate 会对代码中用户定义的类、函数、变量等进行重命名、更改代码缩进(默认1)、移除注释、添加不影响逻辑的代码语句,最终起到混淆的作用。不过 pyobfuscate 使用 Python2 编写,无法解析 Python3 中的 f-string 等特殊语法,因此使用前需要将源码进行一定程度的修改,当然也可以直接修改 pyobfuscate 库,增加对 Python3 版本的支持。

样例 (对 malicious.py 文件进行混淆):

python2 pyobfuscate.py malicious.py > malicious_obfuscated.py

效果如下图所示,左侧为一段从云端获取 shellcode 加载进内存执行的代码,右图为其混淆后的结果。

可以看出代码虽然进行了一定程度的变换,但代码结构基本还是原来的样子,并不能很有效的增加破解难度。

利用 AST 混淆源码

AST,即抽象语法树,它可以将源代码以树状结构表示。Python 内置了 ast 模块,该模块通过内置函数 compile() 和 parse() 将  Python 源代码解析为 AST,之后可以利用 ast 模块内的方法对 ast 节点进行

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值