The Differences of Obfuscated Scripts¶
There are something changed after Python scripts are obfuscated:
The major version of Python in build machine should be same as in target machine. Because the scripts will be compiled to byte-code before they’re obfuscated, so the obfuscated scripts can’t be run by all the Python versions as the original scripts could. Especially for Python 3.6, it introduces word size instructions, and it’s totally different from Python 3.5 and before. It’s recommeded to run the obfuscated scripts with same major version of Python.
If Python interpreter is compiled with Py_TRACE_REFS or Py_DEBUG, it will crash to run obfuscated scripts.
The callback function set by
threading.setprofilewill be ignored by obfuscated scripts.
__file__of code object in the obfuscated scripts will be
<frozen name>other than real filename. So in the traceback, the filename is shown as
__file__of moudle is still filename. For example, obfuscate the script
foo.pyand run it:
def hello(msg): print(msg) # The output will be 'foo.py' print(__file__) # The output will be '<frozen foo>' print(hello.__file__)