Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time

Support Platforms

The core of PyArmor is written by C, the prebuilt dynamic libraries include the common platforms and some embeded platforms.

Some of them are distributed with PyArmor source package. In these platforms, pyarmor could run without downloading anything:

windows.x86
windows.x86_64
linux.x86
linux.x86_64
darwin.x86_64

For the other platforms, when first run pyarmor, it will download the corresponding dynamic library from the remote server automatically, and save it to ~/.pyarmor/platforms/SYSTEM/ARCH/N/, SYSTEM.ARCH is one of Standard Platform Names. N is features number, which explained below. Here list all the other supported platforms:

darwin.aarch64
ios.aarch64
linux.arm
linux.armv6
linux.armv7
linux.aarch32
linux.aarch64
linux.ppc64
android.aarch64
android.armv7
android.x86
android.x86_64
uclibc.armv7
centos6.x86_64
freebsd.x86_64
musl.x86_64
musl.arm
musl.mips32
musl.aarch64
poky.x86

For Linux platforms, the first identifier stands for libc used in this platform. linux stands for glibc, centos6 for glibc < 2.14, android for static libc, musl and uclibc as it is. Note that Docker based on Alpine Linux, its identifier is musl, not linux.

:ref:`Super mode` uses the extension module pytransform directly, and it will be saved in the path ~/.pyarmor/platforms/SYSTEM/ARCH/N/pyXY. For example, linux/x86_64/11/py38.

Table-3. The Prebuilt Extensions For Super Mode
Name Arch Feature Python Versions Remark
darwin x86_64 11 27, 37, 38, 39, 310  
darwin aarch64 11 38, 39, 310 Apple Silicon
ios aarch64 11 38, 39  
linux x86_64 11 27, 37, 38, 39, 310  
linux x86, aarch64, aarch32, armv7 11 27, 37, 38, 39  
centos6 x86_64 11 27 Linux with glibc < 2.14 and UCS2
windows x86_64 11 27, 37, 38, 39, 310  
windows x86 11, 25 27, 37, 38, 39  
windows x86_64 25 27, 37, 38, 39  

In some platforms, pyarmor doesn't know its standard name, just download the right one and save it in the path ~/.pyarmor/platforms/SYSTEM/ARCH/N/. Run the command pyarmor -d download in this platform, and check the output log, it can help you find where to save the download file.

If you're not sure this dynamic library is right for this platform, check it by ldd to print the dependent system libraries. For example:

ldd /path/to/_pytransform.so

If there is no anyone available and you'd like to run pyarmor in this platform, click here submit a feature request for new platform

Features

There may be serveral dynamic libraries with different features in each platform. The platform name with feature number combines an unique name.

Each feature has its own bit

  • 1: Anti-Debug
  • 2: JIT
  • 4: ADV, advanced mode
  • 8: SUPER, super mode
  • 16: VM, vm protection mode

For example, windows.x86_64.7 means anti-debug(1), JIT(2) and advanced mode(4) supported, its feature number is 7 = 1 + 2 + 4. windows.x86_64.0 means no any feature, so highest speed.

For :ref:`Super mode`, there is an extra part to mark Python version. For example, windows.x86.11.py37, feature number 11 = 1 + 2 + 8

Note that zero feature dynamic library isn't compatible with any featured library. For security reason, the zero feature library uses different alogrithm to obfuscate the scripts. So the platform windows.x86_64.7 can not share the same obfuscated scripts with platform linux.armv7.0.

Note

In Apple M1, dynamic libraris with feature 2 JIT will be killed by Python interpreter. Try to resign executable with com.apple.security.cs.allow-jit entitlement, it may fix the problem. Refer to

https://developer.apple.com/documentation/security/hardened_runtime

Standard Platform Names

These names are used in the command :ref:`obfuscate`, :ref:`build`, :ref:`runtime`, :ref:`download` to specify platform.

  • windows.x86
  • windows.x86_64
  • linux.x86
  • linux.x86_64
  • darwin.x86_64
  • vs2015.x86
  • vs2015.x86_64
  • linux.arm
  • linux.armv6
  • linux.armv7
  • linux.aarch32
  • linux.aarch64
  • android.aarch64
  • android.armv7
  • android.x86
  • android.x86_64
  • uclibc.armv7
  • linux.ppc64
  • darwin.arm64
  • freebsd.x86_64
  • musl.x86_64
  • musl.arm
  • musl.mips32
  • linux.mips64
  • linux.mips64el
  • poky.x86

If not sure which platform it is, download this helper script get_platform_name.py and run it in the target machine:

python get_platform_name.py

Note

New platforms in different versions

  • v5.9.3: android.armv7
  • v5.9.4: uclibc.armv7
  • v6.3.1: musl.x86_64, musl.arm, musl.mips32, linux.mips64, linux.mips64el
  • v6.6.1: android.x86, android.x86_64

Downloading Dynamic Library By Manual

If the machine is not connected to internet, use command :ref:`download` to the corresponding dynamic libraries in other machine, then copy them in the right location. By default all the download files are stored in the ~/.pyarmor/platforms, copy the whole folder to target machine.

Important

The following way only work before v6.7.0. Since v6.7.0, the trial version could not download the latest version.

First make sure there is platform index file platforms/index.json. If not, run any pyarmor command in target machine, it raises exception. For example:

pyarmor.py o --advanced 2 foo.py

INFO     PyArmor Version 6.4.2
INFO     Target platforms: Native
INFO     Getting remote file: https://github.com/dashingsoft/pyarmor-core/raw/r34.8/platforms/index.json
INFO     Could not get file from https://github.com/dashingsoft/pyarmor-core/raw/r34.8/platforms: <urlopen error timed out>
INFO     Getting remote file: https://pyarmor.dashingsoft.com/downloads/r34.8/index.json
INFO     Could not get file from https://pyarmor.dashingsoft.com/downloads/r34.8: <urlopen error timed out>
ERROR    No platform list file /data/user/.pyarmor/platforms/index.json found

There are 2 available urls in the log message, download one of them from other machine, for example:

https://pyarmor.dashingsoft.com/downloads/r34.8/index.json

And copy it to the prompt path in target machine:

/data/user/.pyarmor/platforms/index.json

Next run pyarmor command in target machine again, this time it will prompt the download file and target path. For example:

pyarmor o --advanced 2 foo.py

...
INFO Use capsule: /root/.pyarmor/.pyarmor_capsule.zip
INFO Output path is: /root/supervisor/dist
INFO Taget platforms: []
INFO Update target platforms to: [u'linux.x86_64.11.py27']
INFO Generating super runtime library to dist
INFO Search library for platform: linux.x86_64.11.py27
INFO Found available libraries: [u'linux.x86_64.11.py27']
INFO Target path for linux.x86_64.11.py27: /home/jondy/.pyarmor/platforms/linux/x86_64/11/py27
INFO Downloading library file for linux.x86_64.11.py27 ...
INFO Getting remote file: https://github.com/dashingsoft/pyarmor-core/raw/r34.8/platforms/linux.x86_64.11.py27/pytransform.so
INFO Could not get file from https://github.com/dashingsoft/pyarmor-core/raw/r34.8/platforms: <urlopen error [Errno 111] Connection refused>
INFO Getting remote file: https://pyarmor.dashingsoft.com/downloads/r34.8/linux.x86_64.11.py27/pytransform.so
INFO Could not get file from https://pyarmor.dashingsoft.com/downloads/r34.8: <urlopen error [Errno 111] Connection refused>
ERROR Download library file failed

Download it as before, for example

https://github.com/dashingsoft/pyarmor-core/raw/r34.8/platforms/linux.x86_64.11.py27/pytransform.so

And copy it to the path in the line INFO Target path. Here it is:

/home/jondy/.pyarmor/platforms/linux/x86_64/11/py27

Before PyArmor 6.5.5, no target path line. Save it to ~/.pyarmor/platforms/ plus platform path. For example, the target path of platform linux.x86_64.11.py27 is ~/.pyarmor/platforms/linux/x86_64/11/py27.

All the available dynamic libraries are stored in the repos pyarmor-core

https://github.com/dashingsoft/pyarmor-core

Each pyarmor version has the corresponding tag, for example, PyArmor 6.4.2 -> tag "r34.8". Switch this tag and download fiels from platforms.