pyminifier
项目地址
Pyminifier 是一个 Python 代码压缩器、混淆器和压缩器
https://github.com/liftoff/pyminifier
安装
这里以Ubuntu为例(在虚拟环境下)
下载源码包
1 2 3
| wget https://files.pythonhosted.org/packages/source/p/pyminifier/pyminifier-2.1.tar.gz tar -xzvf pyminifier-2.1.tar.gz cd pyminifier-2.1
|
手动运行 2to3 转换代码
若没有2to3,安装即可
修改setup.py代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import sys import pyminifier from setuptools import setup from distutils.command.install import INSTALL_SCHEMES
for scheme in list(INSTALL_SCHEMES.values()): scheme['data'] = scheme['purelib']
setup( name="pyminifier", version=pyminifier.__version__, description="Python code minifier, obfuscator, and compressor", author=pyminifier.__author__, author_email="daniel.mcdougall@liftoffsoftware.com", url="https://github.com/liftoff/pyminifier", license="Proprietary", py_modules=["pyminifier"], packages=['pyminifier'], classifiers=[ "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "License :: OSI Approved :: GNU Affero General Public License v3", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules", ], provides=['pyminifier'], entry_points = { 'console_scripts': [ 'pyminifier = pyminifier.pyminifier:main' ] }, )
|
手动安装
1
| python3 setup.py install
|
检查是否安装成功
显示版本号即表示安装成功
使用
基础压缩 (Minify)
这是默认模式,它会移除注释、文档字符串 (docstrings) 和多余的空行,但不会修改变量名
1 2 3 4 5
| # 直接输出到终端查看 pyminifier flag.py
# 保存到新文件 pyminifier -o flag_min.py flag.py
|

代码混淆 (Obfuscate)
它会将变量名、函数名、类名替换为无意义的短字符(如 a, b, A)。
-O (大写字母 O): 启用所有混淆选项。
--replacement-length=1: 指定替换后的变量名长度(默认为 1)
1 2 3 4 5
| # 混淆并输出 pyminifier -O flag.py
# 建议:指定替换后的变量长度为 2,增加混淆难度 pyminifier -O --replacement-length=2 flag.py
|

恢复可以直接丢给ai分析推理大概
变态混淆模式 (Non-Latin)
这个功能利用 Python 3 支持 Unicode 变量名的特性,使用非拉丁字符(如希腊字母、中文字符等)来命名变量。这会让代码看起来像乱码,非常难以调试。
1
| pyminifier --nonlatin flag.py
|
压缩为自执行脚本
这会将你的脚本压缩成二进制数据,然后包装在一个 Python 脚本中。运行时它会自我解压并执行
1 2
| # 使用 gzip 压缩 pyminifier --gzip flag.py
|
参数
| 参数 |
作用 |
-o <file> |
将结果输出到指定文件 |
-O |
开启混淆(重命名变量、函数、类) |
--nonlatin |
使用非拉丁字符进行混淆(极难阅读) |
--replacement-length=N |
设置混淆后的变量名长度 |
--gzip |
将脚本压缩为自解压执行的 gzip 包 |