Pyarmor Changelog

What's new in Pyarmor 8.5.8 Source

May 1, 2024
  • New Feature:
  • Option --pack support specfile. If plain script could be packed by one .spec file, it could be used by --pack to pack the obfuscated script. For example, pyarmor gen --pack foo.spec foo.py
  • Fix issues:
  • Fix pack issues with extra PyInstaller options
  • Fix pack issue: some special binary extensions are missed in the final bundle
  • Fix pack issue: in Windows case insensitive path does not work
  • Fix issue #1758: --pack could not work with --enable-rft, --assert-import or assert-call
  • Fix issue #1756: Match case which form is Class.Name wont work with --obf-code 2

New in Pyarmor 8.5.6 Source (Apr 23, 2024)

  • Fix issue pack with PyInstaller 6.6 raises exception.

New in Pyarmor 8.5.5 Source (Apr 23, 2024)

  • New feature:
  • Support new configuration item runtime:patch_extension to enable/disable patching extension pyarmor_runtime, the main purpose is to solve code sign issue in Darwin
  • Option --pack supports new value FC, DC to clean output path without prompt
  • Fix issues:
  • Refine pack output log to make it clear

New in Pyarmor 8.5.4 Source (Apr 22, 2024)

  • New feature:
  • Option --pack support constant onefile and onedir, both of them work for PyInstaller 6.0+.

New in Pyarmor 8.5.3 Source (Apr 19, 2024)

  • The behaviour of option --private is changed:
  • In previous versions the plain script could NOT import the module obfuscated by --private. Now the plain script could import this obfuscated module, but could not visit module attribute __dict__.
  • If still need keep old behaviours, run command pyarmor cfg private_module_as_restrict=1 once before generating the obfuscated scripts.
  • Fix issues:
  • Fix issue #1712: Group license does't work in Windows.x86
  • Fix issue: registering Pyarmor failed if firewall blocks extension pytransform3

New in Pyarmor 8.5.2 Source (Mar 29, 2024)

  • Fix issues:
  • pyarmor man raises normpath issuse

New in Pyarmor 8.5.1 Source (Mar 17, 2024)

  • Fix issues:
  • In some Windows x86 platform it raises exception: unsupported arch "x86"
  • Fix Python 3.12 issue #1710: ModuleNotFoundError: No module named 'distutils'

New in Pyarmor 8.5.0 Source (Mar 7, 2024)

  • Upgrade notes:
  • Change option -e/--expired behaviour. In the previous versions, it checks internet time, but now it will check local time by default. After run pyarmor cfg nts="pool.ntp.org", it will be same as previous versions.
  • When something is wrong with pyarmor, it will print suggestion solutions in the console
  • New features:
  • Add new plugin post_script which could be used to patch each obfuscated script
  • Runtime key could be obfuscated if config option obf_key_mode is set by pyarmor cfg obf_key_mode=1
  • Support binding obfuscated script by machine id, refer to option -b/--bind-device in the man page
  • Add new command man, pyarmor man could help Pyarmor users to learn and use Pyarmor by web-ui, quickly find solutions when something is wrong, and report issues in standard form
  • Fix issues:
  • --private doesn't work with --pack (PyInstaller), if scripts are obfuscated by --private, the executable bundle will raise protection error unauthorized use of script
  • Fix Python 3.12 issue: pyarmor raise exception no module named 'distutils'

New in Pyarmor 8.4.7 Source (Jan 27, 2024)

  • Fix issues:
  • Fix issue #1585: some special modules could be imported by plain script even if --restrict option is used
  • Fix issue #1647: Raise error invalid co header size when obfuscating special scripts
  • Fix issue #1668: Raise error invalid device info "xxxxxx" when binding to too short harddisk serial number
  • Fix bug: pyarmor.cli.hdinfo could not get "Multiple Mac addresses", it raises error Unsupported hardware type with name

New in Pyarmor 8.4.6 Source (Dec 18, 2023)

  • New features:
  • Print hardware infomation by python -m pyarmor.cli.hdinfo
  • Protect private module attribute __dict__ which could be got from plain scripts
  • Fix issues:
  • Fix issue #1606: when run pip install pyarmor in FreeBSD, the dependent package pyarmor.cli.core.freebsd is not installed automatically
  • Fix issue #1610: private module could be imported by plain scripts
  • Fix issue #1628: pyarmor reg pyarmor-regfile-xxxx.zip may raise error invalid license token in some Linux network, for example, some AWS cloud runners

New in Pyarmor 8.4.5 Source (Dec 12, 2023)

  • Fixed:
  • When using pyarmor group license in docker container to obfuscate big project, it may raise error RuntimeError: invalid license token
  • When run pip install pyarmor in FreeBSD, the dependent package pyarmor.cli.core.freebsd is not installed automatically
  • Private module could be imported by plain scripts
  • BCC mode doesn't work for numpy array comparison operation, the obfuscated script raises ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
  • Shebang line is removed from the obfuscated scripts, it should be reserved
  • Private module attribute __dict__ could be got from plain scripts

New in Pyarmor 8.4.4 Source (Nov 25, 2023)

  • Fix issues:
  • Fix issue #1581: outer key with comment lines doesn't work
  • Fix issue #1582: raises error request license token failed (3) when registering Pyarmor in some special networks
  • Fix issue #1587: raises error from __future__ imports must occur at the beginning of the file when using --mix-str to obfuscate module which has doc string
  • Fix issue #1598: RFT mode changes the imported names defined in module attribute __all__
  • Fix issue #1601: pip fails to install pyarmor source zip package with error missing keyword "license"

New in Pyarmor 8.4.3 Source (Nov 8, 2023)

  • Fix issues:
  • Fix Python 3.12 error invalid v8 code
  • Fix issue: when using --use-runtime, pyarmor raises error byte must be in range(0, b256)
  • Fix issue #1564: raise error invalid device info when binding to hard disk with special serial number
  • Fix Darwin issue: it requires /usr/local/opt/gettext/lib/libintl.8.dylib for Python 3.10+ (need reinstall package pyarmor.cli.core)
  • Fix Windows issue: the obfuscated scripts raise encoding error when the registration information includes non-ascii string in Windows
  • Fix issue: local variable 'pyarmor_core_445' referenced before assignment

New in Pyarmor 8.4.1 Source (Oct 20, 2023)

  • Change logs:
  • When installing package pyarmor.cli by pip, it will create console command pyarmor-auth
  • Fix issues:
  • Fix issue #1542: group license does not work in docker container, pyarmor gen in docker container raises error invalid license token and pyarmor-auth crashed in docker host

New in Pyarmor 8.4.0 Source (Oct 18, 2023)

  • Change logs:
  • Change group license default machine flag to 22
  • Fix issues:
  • Fix issue: on_error=1 does't work for outer license
  • Fix issue: group license may not work if there are NAT networks in Windows. For example, docker NAT network
  • Fix issue: group license may not work if there are multiple network cards

New in Pyarmor 8.3.11 Source (Oct 13, 2023)

  • Change logs:
  • Show more hints if registering group device license failed
  • Print machine id in console when generating group device file by pyarmor reg -g N
  • Check PyInstaller version and show error message if PyInstaller >= 6.0 which still not supported by Pyarmor
  • Fix issues:
  • Fix issue #1509: RFT mode does not work with statement import a.b.c as abc
  • Fix issue #1513: RFT mode faild to import names from packages when input path is current path "."
  • Fix issue #1525: --no-wrap and --mix-str results in NameError: name '__assert_armored__' is not defined
  • Fix issue #1526: when enable trace, --mix-str with non-ascii string may raise encoding error
  • Fix issue #1528: could not register group license in docker container, it raises UnboundLocalError

New in Pyarmor 8.3.10 Source (Oct 4, 2023)

  • Change logs:
  • Fix issue #1512: BCC mode will ignore invalid co object instead raise exception
  • The command pyarmor-auth supports option -d as short form of --debug
  • Fix issues:
  • Fix issue #1493: --outer can not work with multiple --platform, the obfuscated script raises exception bad argument to internal function
  • Fix issue #1509: RFT mode does not work with statement import a.b.c as abc
  • Fix issue #1511: MultiPythonPlugin saves runtime package to wrong path when there is only one cross platform

New in Pyarmor 8.3.8 Source (Sep 22, 2023)

  • Change logs:
  • Change group license default flag to l
  • Fix issues:
  • Fix group license doesn't work when there are more than one network card

New in Pyarmor 8.3.6 Source (Sep 13, 2023)

  • Change logs:
  • Support http proxy to verify license by setting enviornment http_proxy
  • Change group license default flag to i which ignores computer name
  • Fix issues:
  • NameError: name '__assert_armored__' is not defined when there is docstring in the function and the script is obfuscated by both --enable-bcc and --mix-str
  • When using --enable-rft, configuration items bcc:excludes, bcc:includes, assert.call:includes and assert.call:excludes do not work

New in Pyarmor 8.3.5 Source (Aug 28, 2023)

  • Change logs:
  • Change core version to 4.3.2
  • Change default group device flag from 16 to 20
  • Show more error message when request license token failed
  • Fix issues:
  • Fix merge bug: SyntaxError: unexpected character after line continuation character
  • Fix issue #1443: BCC mode raises error not all arguments converted during string formatting
  • Fix issue #1446: Group license does not work after reboot

New in Pyarmor 8.3.4 Source (Aug 21, 2023)

  • Change BCC mode filter function, refer to Ignore module or function
  • Support new configuration item bcc:includes to handle specified functions
  • The configuration item bcc:excludes supports new format Class.method, in previous version it can't include .
  • Fix issue #1430: builtin DarwinUniversalPlugin failed with option -i

New in Pyarmor 8.3.3 Source (Aug 15, 2023)

  • Fix issue #1422: --enable-bcc can't handle non-ascii script
  • pyarmor-auth supports old machine id

New in Pyarmor 8.3.2 Source (Aug 14, 2023)

  • Fix issue #1410: if there is dot in script name, the obfuscated script will be stored to unexpected path.
  • Fix group license could not run unlimited docker bug

New in Pyarmor 8.3.1 Source (Aug 3, 2023)

  • Fix issue #1407: pyarmor reg failed to register group license
  • Fix RFT mode bug: two words class name like BigBar could not be recognized.
  • pyarmor gen key will return runtime key data if --output is set to special value pipe. This feature is mainly used by web api to generate runtime key
  • Add new plugin DarwinUniversalPlugin to merge extensions of darwin.x86_64 and darwin.arm64 to fat binary by lipo

New in Pyarmor 8.3.0 Source (Aug 1, 2023)

  • EULA changed for trial license:
  • Increase file size limitation for trial license
  • Allow trial version used to commercial product if the total sale income of this product is less than 30x license fees
  • New features:
  • Support new platform linux.loongarch64
  • Rebuild extensions pytransform3.so and pyarmor_runtime.so so they need not search CPython library (libpythonX.Y.so in Linux and libpythonX.Y.dylib in Darwin when importing them
  • Add new machine id algorithm for group license
  • Fix bugs:
  • Fix issue #1369 RFT mode could not rename attributes of imported classes
  • Fix issue #1358 MatchPattern doesn't work with --mix-str
  • Fix group license doesn't work when network cable plugin/out or adding/removing virtual network interface
  • Add more informations to group device file
  • Fix issue #1387: BCC mode failed in arm64 for big scripts
  • Fix segment fault issues in Darwin platforms

New in Pyarmor 8.2.9 Source (Jul 1, 2023)

  • Fix issue #1331: using both --enable-bcc and --assert-call results in protection error
  • Fix issue #1340: using option --peroid raises exception
  • Fix issue #1349: install package pyarmor.cli failed because of invalid entry point
  • Add new command pyarmor-auth to support unlimited docker for group license, it equals python -m pyarmor.cli.docker, refer to using Pyarmor License
  • Document usage of option --exclude, refer to man page
  • Refine folder structure of package, change source path from src to pyarmor

New in Pyarmor 8.2.8 Source (Jun 23, 2023)

  • Fix issue: windows pack bug
  • Fix issue: no found prebuilt runtime extension for platform "freebsd.amd64"
  • Fix issue: group license support unlimited docker container, refer to run unlimited dockers in offline device

New in Pyarmor 8.2.6 Source (Jun 15, 2023)

  • Fix issue: bind to multiple machines doesn't work
  • Fix issue: windows repack bug [Errno 13] Permission denied
  • Fix Darwin repack bug: the bundle codesign results in crash
  • Fix Windows bug: expired scripts may hang when something is wrong with network time server, now report error and quit.

New in Pyarmor 8.2.5 Source (Jun 8, 2023)

  • Fix cross platform issues
  • Fix [BUG] In Windows using --enable-themida results in error The system cannot find the path specified #1299
  • Fix [BUG] When using --obf-code=2 raises 'AttributedDict' object has no attribute '__end'` #1300

New in Pyarmor 8.2.3 Source (Jun 5, 2023)

  • Support multiple Python versions, refer to Obfuscating scripts for multiple Python versions
  • Support special hook script
  • Support new platforms: alpine.x86_64, alpine.aarch64, freebsd.x86_64, android.x86_64, android.x86, android.aarch64, android.armv7, refer to support platforms
  • Implement --enable-themida
  • Fixed:
  • RFT mode missed names in statement nonlocal and global
  • RFT mode missed names with type hint (ast.AnnAssign)
  • --obf-code 2 bugs

New in Pyarmor 8.2.1 Source (May 20, 2023)

  • Fix bugs:
  • Multi-platform runtime loader does not work for relative imports #1238
  • Error 'pywin32_system32 in win10 enterprise ltsc #1239
  • using --pack in MacOS, the final bundle raises error Library not loaded: @loader_path/../libpython3.7.dylib #1243
  • 'Builder' object has no attribute 'generate_runtime' #1249

New in Pyarmor 8.2 Source (May 10, 2023)

  • New features:
  • Full documentation
  • Support plugins and hooks
  • BCC mode support windows.x86, linux.x86, linux.armv7
  • Variable runtime package name for non trial version by pyarmor cfg package_name_format "xxxx"
  • Cleare frame locals by pyarmor cfg clear_frame_locals 1
  • Improve wrap mode security by pyarmor cfg wrap_mode 2
  • Option --obf-code has new value 2 to improve security for code object
  • Improve security of pack bundle
  • Group License Available:
  • Doc how to use group license
  • Changed options for command pyarmor reg
  • Remove option --confirm
  • Add option --device for group license
  • Bug fixed:
  • Fix issue #1095: bcc mode decorator bug
  • Fix issue #1215: cannot import name 'PYZ_TYPE_PKG' when packing with pyinstaller
  • Fix issue #1218: When using multiple --platform options, only the last one will work.

New in Pyarmor 8.1.0 Source (Apr 10, 2023)

  • New features:
  • Support Apple Silicon, Linux aarch64
  • Support Windows x86, Linux x86 and Linux armv7 without bcc mode

New in Pyarmor 8.1 Source Pre-release (Apr 2, 2023)

  • Support Apple Silicon, Linux aarch64
  • Support Windows x86, Linux x86 and Linux armv7 without bcc mode

New in Pyarmor 8.0 Source (Mar 8, 2023)

  • New features:
  • Support Python 3.11
  • Introduce 3 new commands: gen, cfg, reg
  • Introduce BCC Mode, an irreversible obfuscation method
  • Introduce RFT mode, an irreversible obfuscation method
  • Localize and internationalize runtime error messages
  • Check expired date by NTP server
  • Fix bugs for old modes:
  • Fix bug (#908): --mix-str of command obfuscate doesn't work if there is encoding line

New in Pyarmor 7.7.4 Source (Dec 11, 2022)

  • Fix bug: pyinstaller option --upx-dir doesn't work in the command pack
  • Fix bug (#884): "insert one redundant line" doesn't work in Python 3.10 for super mode

New in Pyarmor 7.7.3 Source (Nov 20, 2022)

  • Fix bug(#882, #883): pack command fails when using any extra pyinstaller option

New in Pyarmor 7.7.1 Source (Nov 18, 2022)

  • Fix bug(#853): pack command fails when passing the --upx-dir flag to PyInstaller
  • Fix bug(#860): --exact flag doesn't work in the option -x of pack command
  • Fix bug(#878): For pyinstaller 5.6.2, pack command fails with error win32ctypes.pywin32.pywintypes.error: (2, 'LoadLibraryEx', 'The system cannot find the file specified')

New in Pyarmor 7.7.0 Source (Sep 29, 2022)

  • Fix bug(#814): --mix-str results in from __future__ import xxx error
  • Change core version to r52.6
  • Remove duplicated mac addresses when printing all mac addresses
  • Fix super mode crash bug in aarch64 platform
  • Change spp build library version to r4
  • Fix spp mode bug: RuntimeError: Init spp mode failed when function name starts with lambda_
  • Fix spp mode crash bugs

New in Pyarmor 7.6.1 Source (Aug 13, 2022)

  • Fix bug: ImportError: dynamic module does not define module export function (PyInit_pytransform_vax_xxxxxx)

New in Pyarmor 7.6.0 Source (Jul 28, 2022)

  • For command obfuscate add option --mix-str to obfuscate the string value
  • For command config add option --mixin, only avaliable mixin is str now
  • Project add new attribute mixins to support option --mixin
  • Change core version to r51.5
  • Change spp build library version to r2
  • Fix spp mode crash bugs because of the same list/dict/set constants conflicts
  • Fix spp mode crash bugs because cellvars and freevars are freed even they are still used by other lambda/functions.

New in Pyarmor 7.5.1 Source (Jun 28, 2022)

  • Fix spp mode bug (#758): from __future__ imports must occur at the beginning of the file
  • Fix spp mode bug (#760): 'Set' object has no attribute 'ctx'
  • Fix spp mode bug (#760): redefinition of _listcomp_326_1
  • Fix spp mode bug: Can not import XXX from MMM
  • Fix spp mode bug: using PYTHONOPTIMIZE may results in sppmode fails.
  • Fix spp mode bugs regarding to with/lambda/comprehension

New in Pyarmor 7.5.0 Source (Jun 6, 2022)

  • Fix command pack issue: if using --src in the option --xoptions, pyarmor raises excpetion no entry script found
  • Change core version and spp library version to r50.4
  • Support sppmode for Python3.7~3.10 in platforms: darwin.aarch64, linux.aarch64
  • Support sppmode for Python 3.10 in platforms: windows.x86_64, linux.x86_64, darwin.x86_64, darwin.aarch64, linux.aarch64
  • Fix sppmode bug: the result of inplace op for attribute is not right. For example, after self.a += 1, self.a isn't increased in old version.
  • Fix sppmode bug: AnnAssign is ignored. For example, after x: int = 3, x still is undefined in old version.

New in Pyarmor 7.4.3 Source (Apr 30, 2022)

  • Fix pack issue: pass duplicated extra options to PyInstaller

New in Pyarmor 7.4.2 Source (Apr 18, 2022)

  • Fix inline option no-spp-mode issue.

New in Pyarmor 7.4.1 Source (Mar 12, 2022)

  • Fix encoding issue when generating entry script (#712)
  • Fix example scripts obfuscate-app.bat and obfuscate-pkg.bat bugs (#713)

New in Pyarmor 7.4.0 Source (Mar 2, 2022)

  • Change core version to r49.3
  • Fix centos6 issue: GLIBC 2.14 not found
  • Fix python3.10 super mode crash issue (#686)
  • Support new platform musl.aarch64
  • Add new super mode darwin.aarch64 for Python 3.10

New in Pyarmor 7.3.6 Source (Feb 7, 2022)

  • Refine register function.
  • In Darwin support option --platform darwin.aarch64,darwin.x86_64 to create universal runtime binary when obfuscationg the scripts.

New in Pyarmor 7.3.3 Source (Jan 29, 2022)

  • Fix issue: pyarmor register doesn't show register information for Python3
  • In Darwin codesign the runtime binary file to avoid the obfuscated scripts killed by Apple M1

New in Pyarmor 7.3.0 Source (Jan 2, 2022)

  • Change core version to r48.2
  • Fix Apple Silcon crash issue: use darwin.aarch64.0 as default library
  • Add 2 super mode libraries: darwin.aarch64.8.py38, darwin.aarch64.8.py39

New in Pyarmor 7.2.4 Source (Dec 27, 2021)

  • Fix typo in contact email when printing registration information.
  • Support pip config to pass extra option when building pyarmored wheel.

New in Pyarmor 7.2.3 Source (Dec 15, 2021)

  • Fix issue: build pyarmored wheel with the corresponding python tag and platform tag
  • Fix issue: build wheel failed

New in Pyarmor 7.2.0 Source (Dec 10, 2021)

  • Enhancement(#641): pyarmor as build-backend in pyproject.toml. Refer to building pyarmored wheel

New in Pyarmor 7.1.0 Source (Dec 1, 2021)

  • Check the conflicts of option --restrict 0 and --with-license
  • Fix issue (#628): super plus mode crashes if any function is patched
  • Fix link errors in documentation
  • Change core version to r47.1
  • Support Python 3.10. For super mode, now only 3 platforms: windows.x86_64, linux.x86_64, darwin.x86_64

New in Pyarmor 7.0.2 Source (Nov 2, 2021)

  • Fix bug: there is no error message to run pack command with common debug option -d.

New in Pyarmor 7.0.1 Source (Nov 1, 2021)

  • Fix issue: failed to run pyarmor in Cygwin
  • Add sppmode, refer to Super Plus Mode

New in Pyarmor 6.8.1 Source (Oct 2, 2021)

  • Fix issue (#571): In Linux/Darwin super mode with --enable-suffix doesn't work
  • Fix issue (#584): In Cygwin pyarmor doesn't work

New in Pyarmor 6.8.0 Source (Sep 1, 2021)

  • Fix issue (#557): Invalid platform name for VM mode
  • Change core version to r45.19

New in Pyarmor 6.7.4 Source (Aug 1, 2021)

  • Fix issue (#547): in MacOS the repack script fails if the executable is signed.
  • Add option --code-identity for repack script
  • Fix issue (#549): refine repack script to wait for the termination of objcopy
  • Change core version to r44.18
  • Fix issue: in super mode object.__del__ raises exception NameError: name '__armor_wrap__' is not defined
  • Fix issue (#530): in non-super mode object.__del__ raises exception NameError: name '__armor_enter__' is not defined. Note that for Python 3.7 and later, this issue still exists in non-super mode. Use super mode for these Python versions to solve this issue.
  • Add restrict mode 100+, refer to Restrict Mode
  • Check sys.PYARMOR_LICENSE for outer license, and refine outer license search policy. Refer to :ref:How to use outer license file
  • Fix issue (#539): runtime command generates wrong protection code for super mode
  • Fix issue (#550): memory leak of builtin function locals in super mode

New in Pyarmor 6.7.3 Source (Jul 2, 2021)

  • Add option -e to set the entry script for helper.repack
  • The entension of entry script could be .pyw
  • Change core version to r44.18
  • Fix issue: in super mode object.__del__ raises exception NameError: name '__armor_wrap__' is not defined
  • Fix issue (#530): in non-super mode object.__del__ raises exception NameError: name '__armor_enter__' is not defined. Note that for Python 3.7 and later, this issue still exists in non-super mode. Use super mode for these Python versions to solve this issue.

New in Pyarmor 6.7.2 Source (Jun 7, 2021)

  • Fix issue (#518): remove platform part from extension name for super mode, now the final name is always pytransform.so or pytransform.pyd
  • Change core version to r43.17
  • Fix issue: the platform "android.aarch64" always raises exception Check license failed, Invalid input packet

New in Pyarmor 6.7.1 Source (May 20, 2021)

  • Support environment variable PYARMOR_TIMEOUT to set the timeout of any network connection.
  • Fix issue (#503): repack complains of too many pytransform
  • Support platform isilon onefs, alias of freebsd
  • Print the version of Python in the console when running pyarmor sub-command

New in Pyarmor 6.7.0 Source (Apr 28, 2021)

  • There is a big change in this version is that the trial version could not download the latest extra core libraries. Except the core libraries distributed with soure package, for trial version all the other core libraries will always use the ones same as v6.6.2 (tag: r41.15).
  • Changes:
  • Remove platform data file index.json from source package
  • The trial version could not download the latest platform libraries, it always uses core version r41.15
  • Fix super mode for Python39-32 in Windows issue(#489): Dll load failed (The specified procedure could not be found)
  • Only fixed in purchased version:
  • Improve the security of check_armored for super mode
  • Fix memory leak issue for core dynamic libraries

New in Pyarmor 6.6.2 Source (Mar 1, 2021)

  • Improve the security of restrict mode and assert_armored for super mode
  • Add new api pytransform.check_armored for super mode, it could be used to check module/function/method
  • https://pyarmor.readthedocs.io/en/latest/pytransform.html#check_armored
  • Build super mode core libraries with rpath dependent in MacOS
  • Fix Python3.9 pack issue for MacOS: check_lib_pytransform failed
  • Fix Apple Silicon platform issue: the binary libraries doesn't work
  • Fix issue (#471): in super mode get_license_info can't get the updated license information.

New in Pyarmor 6.6.1 Source (Feb 1, 2021)

  • Fix issue (#429): the new license doesn't work if replace the old license with it in enable-period-mode
  • Fix extension filenames conflict for multiple platforms in super mode
  • Fix issue (#442): the target platforms in the runtime settings is read as a list
  • Fix issue (#452): when enable suffix for super mode in Linux, the obfuscated scripts raise ImportError: dynamic module does not define module export function
  • Fix issue (#460): the obfuscated scripts crash if they're obfucated by --advanced 2 and --obf-code 0
  • Add new platforms: android.x86, android.x86_64

New in Pyarmor 6.6.0 Source (Jan 4, 2021)

  • Add helper script buildext.py to build obfuscated scripts to extension modules, refer to
  • https://pyarmor.readthedocs.io/en/latest/advanced.html#build-obfuscated-scripts-to-extensions
  • Add super mode libraries for platform musl.x86_64
  • Fix python3.8/3.9 crash issues

New in Pyarmor 6.5.6 Source (Dec 27, 2020)

  • Rename option --runtime-path to -rpath in command config
  • Fix issue (#403): the obfuscated scripts raise unexpected exception in Python 2.7 (non-super mode)
  • Add new platform centos6.x86_64.11.py27 for Python 2.7 built with UCS2 and platform glibc < 2.14
  • Add new command help to open online documentation in the web browser
  • Fix issue (#408): undefined symbol PyUnicodeUCS2_AsUTF8String in arm platforms for Python 2.7
  • Rename platform name darwin.arm64 to darwin.aarch64
  • Add new platform darwin.aarch64.3, darwin.aarch64.11.py38 and darwin.aarch64.11.py39
  • In project copy non .py files to output directly if they're specified in the project manifest
  • Fix issue (#414): repack doesn't patch the final bundle in some platforms
  • Fix issue (#415): when repacking an executable where the embedded PKG archive contains subdirectories, the repack script fails

New in Pyarmor 6.5.3 Source (Nov 16, 2020)

  • Refine output message when checking registration information by command pyarmor register
  • Runtime function get_hd_info accepts keyword parameters name to get hardware information of named device
  • Command hdinfo accepts optional parameter name
  • Command licenses could bind obfuscated scripts to named hard disk
  • Print pretty error message if checking license or loading core dynamic library fails when running non-super mode obfuscated scripts
  • Fix issue (#387): exception Function does not end with "):" is raised when obfuscating the scripts

New in Pyarmor 6.5.2 Source (Nov 9, 2020)

  • The command register also could register any text file only if it includes registration code in one single line
  • Add new option --buy for command register, which used to open shopping cart of PyArmor: pyarmor register --buy

New in Pyarmor 6.5.1 Source (Oct 30, 2020)

  • Fix issue: it raises exception to register a code by Python 2.7

New in Pyarmor 6.5.0 Source (Oct 28, 2020)

  • Support super mode for Python3.9
  • Show deprecation warning for --advanced 1 and --advanced 3 if super mode is available, use --advanced 2 and --advanced 4 instead.
  • The command register supports new form of registration code

New in Pyarmor 6.4.4 Source (Oct 20, 2020)

  • Fix issue (#355): the obfuscated script raises DeprecationWarning when getting user data from license file in super mode with Python3.8
  • Fix issue (#357): Python3.9 doesn't work, the obfuscated scripts raise unknow opcode 53/88 and segmentation fault

New in Pyarmor 6.4.3 Source (Oct 10, 2020)

  • Fix issue(#337): project can't be configured with outer license
  • Fix issue(#342): in Windows command pack doesn't work if the project isn't in the same drive of entry script

New in Pyarmor 6.4.2 Source (Sep 20, 2020)

  • Support binding multiple Mac addresses by format <Mac1,Mac2,Mac3...> in Windows and Linux
  • For platform linux.x86_64 and linux.x86, the core libraries are linked to Python2.7 with usc4, the old ones are linked to ucs2
  • Fix pack command issue: outer license may not work in some cases
  • The platform linux.armv6 supports super mode

New in Pyarmor 6.4.1 Source (Sep 17, 2020)

  • Fix bug: for big endian platform, it raises RuntimeError: Invalid extension, no data found when obfuscating scripts (#323)
  • Fix bug: when obfuscating some special scripts in super mode, it raises RuntimeError: Patch function "xxx" failed (#326)
  • Fix serial number of hard disk issue in Windows: the last character is missed in some special case

New in Pyarmor 6.4.0 Source (Aug 27, 2020)

  • Command obfuscate accepts multiple arguments as entry scripts
  • Fix restrict mode crash issue for Python3.5~3.8 in 32-bit Windows
  • Fix super mode issue: attempted relative import beyond top-level package
  • Improve security of restrict mode
  • For restrict mode 2, do not protect module attributes for performance
  • Add restrict mode 5 to protect globals in functions
  • Refine the documentation of restrict mode: https://pyarmor.readthedocs.io/en/latest/mode.html#restrict-mode
  • Fix platform centos6.x86_64 not found issue (#312)
  • On Linux for command licenses the option --bind-mac supports new format: IfName/MacAddress, for example, eth0/00:28:54:af:28

New in Pyarmor 6.3.7 Source (Aug 14, 2020)

  • A big improvement for restrict mode, the plain script couldn't visit any module attribute if this module is obfuscated by restrict mode 2, 3 or 4
  • Add option --runtime for command obfuscate, build
  • In command runtime, deprecate option --super-mode and --vm-mode, use --advanced instead.
  • Fix encoding issue: couldn't get the right encoding if source encoding is in the second line
  • Refine example scripts

New in Pyarmor 6.3.6 Source (Aug 5, 2020)

  • Fix pack issue: if pyi-makespec could not be found, it will complain of OSError: [WinError 2] The system cannot find the file specified.
  • Fix PYTHONOPTIMIZE=2 doesn't work issue
  • Fix super mode issue: auto patch failed if there are multiple lines in function header
  • Fix command register issue: it could not show registration information even if register successfully. It's introduced in v6.3.5.

New in Pyarmor 6.3.5 Source (Aug 2, 2020)

  • Fix pack project issue: not all the scripts in the project are re-obfuscated when packing the project again.
  • Clean license.lic in the pyarmor package if option --home isn't used

New in Pyarmor 6.3.4 source code (Jul 24, 2020)

  • Fix option --home issue: the file license.lic in this path doesn't work
  • Improve the security of core dynamic libraries

New in Pyarmor 3.3.1 (Jan 19, 2018)

  • Remove unused files in distribute package

New in Pyarmor 3.3.0 (Jan 17, 2018)

  • In this version, new obfuscate mode 7 and 8 are introduced. The main
  • difference is that obfuscated script now is a normal python file (.py)
  • other than compiled script (.pyc), so it can be used as common way.
  • Refer to src/mechanism.md
  • Introduce new mode: 7, 8
  • Change default mode from 3 to 8
  • Change benchmark.py to test new mode
  • Update webapp and tutorial
  • Update usage
  • Fix issue of py2exe, now py2exe can work with python scripts obfuscated by pyarmor
  • Fix issue of odoo, now odoo can load python modules obfuscated by pyarmor

New in Pyarmor 3.2.1 (Jan 11, 2018)

  • Fix issue: the traceback of an exception contains the name "" instead of the correct module name
  • Fix issue: all the constant, co_names include function name, variable name etc still are in clear text.
  • Refer to #5

New in Pyarmor 3.2.0 (Nov 22, 2017)

  • From this version, a new obfuscation mode is introduced. By this way, no import hooker, no setprofile, no settrace required. The performance of running or importing obfuscation python scripts has been remarkably improved. It's significant for Pyarmor. Refer to src/mechanism.md
  • Use this new mode as default way to obfuscate python scripts.
  • Add new script "benchmark.py" to check performance in target machine: python benchmark.py
  • Change option "--bind-disk" in command "license", now it must be have a value

New in Pyarmor 3.1.7 (Nov 20, 2017)

  • Add option "--bind-mac", "--bind-ip", "--bind-domain" for command "license"
  • Command "hdinfo" show more information(serial number of hdd, mac address, ip address, domain name)
  • Fix the issue of dev name of hdd for Banana Pi

New in Pyarmor 3.1.6 (Nov 12, 2017)

  • Fix serial number of harddisk doesn't work in mac osx.

New in Pyarmor 3.1.5 (Nov 7, 2017)

  • Support macosx

New in Pyarmor 3.1.4 (Oct 10, 2017)

  • Fix issue: load _pytransfrom failed in linux x86_64 by subprocess.Popen
  • Fix typo in error messge when load _pytransfrom failed.

New in Pyarmor 2.6.1 (Aug 17, 2017)

  • Fix encrypted scripts don’t work in multi-thread framework (Django).

New in Pyarmor 2.5.3 (Mar 17, 2017)

  • Fix problem when script has line “from __future__ import with_statement”
  • Fix error when running pyarmor by 32bit python on the 64bits Windows.
  • (Experimental)Support darwin_15-x86_64 platform by adding extensions/pytransform-2.3.3.darwin_15.x86_64-py2.7.so

New in Pyarmor 2.5.2 (Dec 9, 2015)

  • License file can mix expire-date with fix file or fix key.
  • Fix log error: not enough arguments for format string

New in Pyarmor 2.5.1 (Dec 7, 2015)

  • New feature:
  • License file can bind to ssh private key file or any other fixed file.

New in Pyarmor 2.4.1 (Sep 18, 2015)

  • Change default extension ”.pyx” to ”.pye”, because it confilcted with CPython.
  • Custom the extension of encrypted scripts by os environment variable: PYARMOR_EXTRA_CHAR
  • Block the hole by which to get bytescode of functions.

New in Pyarmor 2.3.4 (Jun 26, 2015)

  • The trial license will never be expired (But in trial version, the key used to encrypt scripts is fixed).

New in Pyarmor 2.3.3 (Jun 26, 2015)

  • Refine the document

New in Pyarmor 2.3.2 (Jun 26, 2015)

  • Fix error data in examples of wizard

New in Pyarmor 2.3.1 (Jun 26, 2015)

  • Implement Run function in the GUI wizard
  • Make license works in trial version

New in Pyarmor 2.2.1 (Jun 26, 2015)

  • Add a GUI wizard
  • Add examples to show how to use pyarmor

New in Pyarmor 2.1.2 (Jun 26, 2015)

  • Fix syntax-error when run/import encrypted scripts in linux x86_64

New in Pyarmor 2.1.1 (Jun 26, 2015)

  • Support armv6

New in Pyarmor 2.0.1 (Jun 26, 2015)

  • Add option ‘–path’ for command ‘encrypt’
  • Support script list in the file for command ‘encrypt’
  • Fix issue to encrypt an empty file result in pytransform crash

New in Pyarmor 1.7.7 (Jun 26, 2015)

  • Add option ‘–expired-date’ for command ‘license’
  • Fix undefined ‘tfm_desc’ for arm-linux
  • Enhance security level of scripts

New in Pyarmor 1.7.6 (Jun 26, 2015)

  • Print exactaly message when pyarmor couldn’t load extension “pytransform”
  • Fix problem “version ‘GLIBC_2.14’ not found”
  • Generate “license.lic” which could be bind to fixed machine.