Skip to content

Latest commit

 

History

History
108 lines (70 loc) · 3.49 KB

security.rst

File metadata and controls

108 lines (70 loc) · 3.49 KB

Highest security and performance

Contents

console

pyarmor gen

What's the most security pyarmor could do?

The following options could improve security

  • --enable-rft almost doesn't impact performance
  • --enable-bcc may be a little faster than a plain script, but it consumes more memory to load binary code
  • --enable-jit prevents static decompilation
  • --enable-themida prevents most of debuggers, only available in Windows, and reduces performance remarkably
  • --mix-str protects string constants in the script
  • pyarmor cfg mix_argnames=1 may broken annotations
  • --obf-code 2 could make it more difficult to reverse byte code

The following options hide module attributes

  • --private for script or --restrict for package

The following options prevent functions or modules from being replaced by hack code

  • --assert-call
  • --assert-import

What's the best performance pyarmor could do?

Using default options and the following settings

  • --obf-code 0
  • --obf-module 0
  • pyarmor cfg restrict_module=0

With these options, the security is almost the same as .pyc

In order to improve security, and doesn't reduce performance, also enable RFT mode

  • --enable-rft

If there are sensitive strings, enable mix-str with filter

  • pyarmor cfg mix.str:includes "/regular expression/"
  • --mix-str

Without the filter, all of the string constants in the scripts are encrypted, which may reduce performance. Using filter only encrypt the sensitive string may balance security and performance.

For Django application or serving web request

If RFT mode is safe enough, you can check the transformed scripts to make a decision, using these options

  • --enable-rft
  • --obf-code 0
  • --obf-module 0
  • --mix-str with filter

If RFT mode is not safe enough, using these options

  • --enable-rft
  • --no-wrap
  • --mix-str with filter

For most applications and packages

If RFT mode and BCC mode are available

  • --enable-rft
  • --enable-bcc
  • --mix-str with filter
  • --assert-import

If RFT mode and BCC mode are not available

  • --enable-jit
  • --private for scripts, or --restrict for packages
  • --mix-str with filter
  • --assert-import
  • --obf-code 2

If care about monkey trick, also

  • --assert-call with inline marker to make sure all the key functions are protected

If it's not performance sensitive, using --enable-themida prevent from debuggers

Reforming scripts to improve security

Move main script module level code to other module

Pyarmor will clear the module level code after the module is imported, the injected code could not get any module level code because it's gone.

But the main script module level code is never cleared, so moving unnecessary code here to another module could improve security.