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 转换代码

1
2to3 -w .

若没有2to3,安装即可

1
sudo apt install 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

检查是否安装成功

1
pyminifier --version

显示版本号即表示安装成功

使用

基础压缩 (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 包