Awesome
Pyarmor
Pyarmor is a command-line tool designed for obfuscating Python scripts, binding obfuscated scripts to specific machines, and setting expiration dates for obfuscated scripts.
Key Features
- Seamless Replacement: Obfuscated scripts remain as standard
.py
files, allowing them to seamlessly replace the original Python scripts in most cases. - Balanced Obfuscation: Offers multiple ways to obfuscate scripts to balance security and performance.
- Irreversible Obfuscation: Renames functions, methods, classes, variables, and arguments.
- C Function Conversion: Converts some Python functions to C functions and compiles them into machine instructions using high optimization options for irreversible obfuscation.
- Script Binding: Binds obfuscated scripts to specific machines or sets expiration dates for obfuscated scripts.
- Themida Protection: Protects obfuscated scripts using Themida (Windows only).
Supported Platforms
- Python 2 and Python 31
- Windows
- Various Linux distributions, including embedded systems and Raspberry Pi
- Apple Intel and Apple Silicon
- Supported architectures: x86_64, aarch64, armv7, etc.2
For more information, check out the Pyarmor Environments.
Quick start
- Install Pyarmor:
pip install pyarmor
- Obfuscate the
foo.py
script:
pyarmor gen foo.py
This command generates an obfuscated script like this at dist/foo.py
:
from pyarmor_runtime import __pyarmor__
__pyarmor__(__name__, __file__, b'\x28\x83\x20\x58....')
- Run the obfuscated script:
python dist/foo.py
For more information, check out the getting started tutorial.
License
Pyarmor is published as shareware. The free trial version never expires, but has some limitations.
Refer to Pyarmor licenses for information on license types, features, limitations, and purchasing a Pyarmor license.
Please read the Pyarmor EULA.
Getting Help
- Consult the Pyarmor 8.0 Documentation.
- Check the FAQ for answers to common questions.
- Try the documentation index or the detailed table of contents.
- If you still can't find the information you need, see asking questions on GitHub.
- Report bugs following the issue template.
- For business and security inquiries, send an email to pyarmor@163.com.
Resources
中文资源
Changelog
Pyarmor 8.0 introduces significant changes. It has been rewritten and new features are implemented through the new commands:
gen
, reg
, cfg
. These commands only work for Python 3.7 and above.
Users of versions prior to 8.0 should read the Import Notes section to decide whether to upgrade Pyarmor.
Each major version comes with a separate changelog file, detailing fixed issues, new features, and compatibility issues between different versions.
Make sure to read the changelog carefully before upgrading Pyarmor:
Full changelogs at releases
Upcoming features at Pyarmor 8.x Release Plan
Important Notes for Users of Pyarmor Prior to 8.0
Going forward, only bug fixes will be provided for older commands, such as obfuscate
and licenses
.
No new features will be added to these commands, but they will continue to be usable.
Upon the release of Pyarmor 8.0, there are three scenarios for existing users:
1. Never upgrade to version 8.0+
-
SPP mode will not work
- To use SPP mode, you must upgrade Pyarmor to version 8.0 or later.
-
pyarmor register
command without arguments returns a404
error- This command was used to query registration information in earlier versions of Pyarmor. However, the license server no longer supports this web API. Use
pyarmor -v
to ensure you are not using a trial version.
- This command was used to query registration information in earlier versions of Pyarmor. However, the license server no longer supports this web API. Use
-
Registering Pyarmor with
pyarmor register pyarmor-regcode-xxxxxx.txt
is limited to 10 uses:- To use Pyarmor on a new machine, CI server, or Docker, refer to the second method described in the registration file "pyarmor-regcode-xxxxxx.txt":
Downloading "pyarmor-regfile-xxxxxx.zip" once, use this `.zip` file to register Pyarmor later.
2. Upgrade to version 8.0 but only use old features
By default, the pyarmor
command only accepts the new commands.
To continue using older commands like obfuscate
and licenses
, you can:
- Use
pyarmor-7
instead ofpyarmor
- Set the environment variable
PYARMOR_CLI=7
and continue usingpyarmor
- Call the entry point
pyarmor.pyarmor:main_entry
in any other way
3. Upgrade to version 8.0 and use new features
-
New EULA:
- Adhere to the new Pyarmor EULA. This is a significant change for users with old personal licenses, as the new license only allows one product.
-
License Upgrades:
- Not all old licenses can be freely upgraded to the new license. Please refer to the Pyarmor licenses for more information.
-
Internet Connection:
- Older commands do not require an internet connection, but new commands do.
-
Python Version Support:
- While older commands support Python 2.7-3.10, new commands only support Python 3.7+.