python-obfuscation-framework 1.7.0__tar.gz → 1.7.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_obfuscation_framework-1.7.0/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.7.3}/PKG-INFO +263 -29
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/README.md +259 -25
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/cli.py +16 -16
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/cli_v2.py +84 -83
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/p.py +2 -3
- python_obfuscation_framework-1.7.3/pof/logger.py +19 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/main.py +4 -6
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/builtins.py +3 -2
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/deep_encryption.py +4 -4
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/constants.py +3 -4
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/definitions.py +29 -30
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/doc.py +5 -9
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/extract_variables.py +2 -2
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/names.py +11 -8
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/names_rope.py +21 -13
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/numbers.py +6 -6
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/exceptions.py +3 -2
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/strings.py +8 -8
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/image.py +5 -4
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/rc4.py +3 -2
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/format.py +2 -4
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/unicode.py +4 -3
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pyproject.toml +4 -4
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3/python_obfuscation_framework.egg-info}/PKG-INFO +263 -29
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/SOURCES.txt +9 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/requires.txt +3 -3
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_a85.py +41 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b16.py +3 -1
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b32.py +3 -1
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b32hex.py +3 -1
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b64.py +3 -1
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b85.py +3 -1
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_binascii.py +40 -0
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_call.py +40 -0
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_doc.py +40 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_docstrings.py +3 -1
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_ipv6encoding.py +41 -0
- python_obfuscation_framework-1.7.0/tests/obfuscator/test_a85.py → python_obfuscation_framework-1.7.3/tests/obfuscator/test_number.py +3 -1
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_print.py +1 -0
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_snt.py +40 -0
- python_obfuscation_framework-1.7.3/tests/obfuscator/test_tokens.py +40 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_xor.py +5 -2
- python_obfuscation_framework-1.7.3/tests/obfuscator/utils.py +11 -0
- python_obfuscation_framework-1.7.3/tests/utils/test_generator.py +88 -0
- python_obfuscation_framework-1.7.0/tests/utils/test_generator.py +0 -59
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/LICENSE +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/MANIFEST.in +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/__main__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/errors.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/argv.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/base.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/cpu/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/cpu/cpu_count.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_exist.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_list_exist.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_list_missing.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_missing.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/exec_method.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/executable_path.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_exist.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_list_exist.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_list_missing.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_missing.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/tmp.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hardware/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hardware/ram_count.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/debugger.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/tracemalloc.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/prompt.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/integrity.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/multi.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/domain.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/hostname.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/uid.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/username.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/processes/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/processes/proc_count.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/expire.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/uptime.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/utc.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/utils.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/rc4.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/shift.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/xor.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/bz2.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/gzip.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/lzma.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/zlib.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/a85.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b16.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b32.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b32hex.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b64.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b85.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/binascii.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/snt.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/call.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/globals.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/imports.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/add_comments.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/add_newlines.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/other/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/other/tokens.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/comments.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/indents.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/loggings.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/loggings_old.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/newline.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/print.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/restructure.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/docstrings.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/ipv6encoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/macencoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/uuidencoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/cipher/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/cipher/rc4.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/download.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/cl1pnet.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/pastebin.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/pasters.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/quine.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/shift.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/bz2.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/gzip.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/lzma.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/zlib.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/a85.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b16.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b3.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b32.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b32hex.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b64.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b85.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/binascii.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/snt.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/entropy.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/extract_names.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/advanced.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/base.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/basic.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/comments.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/comments.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/names.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/homoglyphs.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/homoglyphs.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/ipv6encoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/macencoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/uuidencoding.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/tokens.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/setup.cfg +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_comments.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_exceptions.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/code/out.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/code/source.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/test_names.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/pyproject.toml +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/utils/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/utils/se/__init__.py +0 -0
- {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/utils/se/test_homoglyphs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-obfuscation-framework
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.3
|
|
4
4
|
Summary: Python Obfuscation Framework
|
|
5
5
|
Author-email: deoktr <35725720+deoktr@users.noreply.github.com>
|
|
6
6
|
Maintainer-email: deoktr <35725720+deoktr@users.noreply.github.com>
|
|
@@ -29,10 +29,10 @@ Description-Content-Type: text/markdown
|
|
|
29
29
|
License-File: LICENSE
|
|
30
30
|
Requires-Dist: rope>=1.0.0
|
|
31
31
|
Requires-Dist: Pillow>=10.0.0
|
|
32
|
-
Requires-Dist: black>=
|
|
32
|
+
Requires-Dist: black>=25.0.0
|
|
33
33
|
Provides-Extra: dev
|
|
34
|
-
Requires-Dist: ruff==0.
|
|
35
|
-
Requires-Dist: black==
|
|
34
|
+
Requires-Dist: ruff==0.14.4; extra == "dev"
|
|
35
|
+
Requires-Dist: black==25.9.0; extra == "dev"
|
|
36
36
|
Requires-Dist: pyinstrument; extra == "dev"
|
|
37
37
|
Provides-Extra: test
|
|
38
38
|
Requires-Dist: pytest; extra == "test"
|
|
@@ -58,6 +58,10 @@ pof will allow you to:
|
|
|
58
58
|
- **Prevent dynamic analysis** by detecting debugging or tracing via malloc.
|
|
59
59
|
- **Enable automation** to produce numerous variant of the same payload.
|
|
60
60
|
|
|
61
|
+
The main benefit of POF is customizability, you can generate your payload however you want, choose the obfuscation you want and combine them.
|
|
62
|
+
|
|
63
|
+
Most obfuscation work very well when combined. For example obfuscating an int from `42` to `int("42")` allows the string obfuscator to obfuscate it, turning it into `int("".join([chr(ord(i)-3)for i in'75']))`. And we now have multiple int and strings that we can once again obfuscate.
|
|
64
|
+
|
|
61
65
|
Example obfuscation:
|
|
62
66
|
|
|
63
67
|
```python
|
|
@@ -72,6 +76,101 @@ from base64 import b85decode as _5269
|
|
|
72
76
|
globals()["".join([chr(ord(i)-3)for i in'bbvqlwolxebb'[::-1]])].__dict__[_5269('').decode().join([chr(ord(i)-3)for i in"".join([chr(ord(i)-3)for i in'mruhgry'])])]()[_5269(''[::-1]).decode().join([globals()[''[::-1].join([chr(ord(i)-3)for i in expected_data('YmJleGxvd2xxdmJi').decode()])].__dict__["".join([chr(ord(i)-3)for i in"".join([chr(ord(i)-3)for i in'inx'])])](__builtins__.__dict__.__getitem__("".join([chr(ord(i)-3)for i in'']).join([chr(ord(i)-3)for i in expected_data('cnVn').decode()]))(i)-(__name__.__len__().__class__(__builtins__.__dict__.__getitem__(_5269('X>N1').decode())("".join([chr(ord(i)-3)for i in'3\u007b5']),0)+__builtins__.__getattribute__('egapraeytamrofel'[::-1].replace('egapraeytamrof'[::-1],expected_data('bg==').decode()))(expected_data("".join([chr(ord(i)-3)for i in']j@@'])).decode()))))for i in"".join([chr(ord(i)-3)for i in'eeh{olsy7bdgguvtyee']).replace(_5269('X>fKlUtwfqa&r').decode(),_5269('Z+C0').decode())])].__dict__[''[::-1].join([chr(ord(i)-3)for i in''[::-1]]).join([globals()[expected_data('XordinalidWlsdGlucordinalf'.replace('ordinal','19')).decode()].__dict__[expected_data('yh2Y'[::-1]).decode()](globals()[_5269(expected_data('VXRlTiVYPjQ/OVpnWEU+').decode()).decode()].__dict__[_5269('fold_countV'.replace('fold_count','Z*p')).decode()](i)-__builtins__.__getattribute__(expected_data("".join([chr(ord(i)-3)for i in'dZ83'])).decode())('quaencode_7or8bits'.replace('encode_7or8bit','ntile').replace("".join([chr(ord(i)-3)for i in'txdqwlohv']),"".join([chr(ord(i)-3)for i in'6']))))for i in expected_data('').decode().join([chr(ord(i)-3)for i in'ztoxv'[::-1]])])](expected_data(_5269('Q%6>FVKQQ0ad38HZFp+').decode().replace('pq_b2a'[::-1],'\u0062\u00478\u0073\u0049\u0048\u0064')).decode())
|
|
73
77
|
```
|
|
74
78
|
|
|
79
|
+
<details>
|
|
80
|
+
<summary>Same output formatted:</summary>
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from base64 import b64decode as expected_data
|
|
84
|
+
from base64 import b85decode as _5269
|
|
85
|
+
|
|
86
|
+
globals()["".join([chr(ord(i) - 3) for i in "bbvqlwolxebb"[::-1]])].__dict__[
|
|
87
|
+
_5269("")
|
|
88
|
+
.decode()
|
|
89
|
+
.join([chr(ord(i) - 3) for i in "".join([chr(ord(i) - 3) for i in "mruhgry"])])
|
|
90
|
+
]()[
|
|
91
|
+
_5269(""[::-1])
|
|
92
|
+
.decode()
|
|
93
|
+
.join(
|
|
94
|
+
[
|
|
95
|
+
globals()[
|
|
96
|
+
""[::-1].join(
|
|
97
|
+
[
|
|
98
|
+
chr(ord(i) - 3)
|
|
99
|
+
for i in expected_data("YmJleGxvd2xxdmJi").decode()
|
|
100
|
+
]
|
|
101
|
+
)
|
|
102
|
+
].__dict__[
|
|
103
|
+
"".join(
|
|
104
|
+
[chr(ord(i) - 3) for i in "".join([chr(ord(i) - 3) for i in "inx"])]
|
|
105
|
+
)
|
|
106
|
+
](
|
|
107
|
+
__builtins__.__dict__.__getitem__(
|
|
108
|
+
"".join([chr(ord(i) - 3) for i in ""]).join(
|
|
109
|
+
[chr(ord(i) - 3) for i in expected_data("cnVn").decode()]
|
|
110
|
+
)
|
|
111
|
+
)(i)
|
|
112
|
+
- (
|
|
113
|
+
__name__.__len__().__class__(
|
|
114
|
+
__builtins__.__dict__.__getitem__(_5269("X>N1").decode())(
|
|
115
|
+
"".join([chr(ord(i) - 3) for i in "3\u007b5"]), 0
|
|
116
|
+
)
|
|
117
|
+
+ __builtins__.__getattribute__(
|
|
118
|
+
"egapraeytamrofel"[::-1].replace(
|
|
119
|
+
"egapraeytamrof"[::-1], expected_data("bg==").decode()
|
|
120
|
+
)
|
|
121
|
+
)(
|
|
122
|
+
expected_data(
|
|
123
|
+
"".join([chr(ord(i) - 3) for i in "]j@@"])
|
|
124
|
+
).decode()
|
|
125
|
+
)
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
)
|
|
129
|
+
for i in "".join([chr(ord(i) - 3) for i in "eeh{olsy7bdgguvtyee"]).replace(
|
|
130
|
+
_5269("X>fKlUtwfqa&r").decode(), _5269("Z+C0").decode()
|
|
131
|
+
)
|
|
132
|
+
]
|
|
133
|
+
)
|
|
134
|
+
].__dict__[
|
|
135
|
+
""[::-1]
|
|
136
|
+
.join([chr(ord(i) - 3) for i in ""[::-1]])
|
|
137
|
+
.join(
|
|
138
|
+
[
|
|
139
|
+
globals()[
|
|
140
|
+
expected_data(
|
|
141
|
+
"XordinalidWlsdGlucordinalf".replace("ordinal", "19")
|
|
142
|
+
).decode()
|
|
143
|
+
].__dict__[expected_data("yh2Y"[::-1]).decode()](
|
|
144
|
+
globals()[
|
|
145
|
+
_5269(expected_data("VXRlTiVYPjQ/OVpnWEU+").decode()).decode()
|
|
146
|
+
].__dict__[_5269("fold_countV".replace("fold_count", "Z*p")).decode()](
|
|
147
|
+
i
|
|
148
|
+
)
|
|
149
|
+
- __builtins__.__getattribute__(
|
|
150
|
+
expected_data("".join([chr(ord(i) - 3) for i in "dZ83"])).decode()
|
|
151
|
+
)(
|
|
152
|
+
"quaencode_7or8bits".replace("encode_7or8bit", "ntile").replace(
|
|
153
|
+
"".join([chr(ord(i) - 3) for i in "txdqwlohv"]),
|
|
154
|
+
"".join([chr(ord(i) - 3) for i in "6"]),
|
|
155
|
+
)
|
|
156
|
+
)
|
|
157
|
+
)
|
|
158
|
+
for i in expected_data("")
|
|
159
|
+
.decode()
|
|
160
|
+
.join([chr(ord(i) - 3) for i in "ztoxv"[::-1]])
|
|
161
|
+
]
|
|
162
|
+
)
|
|
163
|
+
](
|
|
164
|
+
expected_data(
|
|
165
|
+
_5269("Q%6>FVKQQ0ad38HZFp+")
|
|
166
|
+
.decode()
|
|
167
|
+
.replace("pq_b2a"[::-1], "\u0062\u00478\u0073\u0049\u0048\u0064")
|
|
168
|
+
).decode()
|
|
169
|
+
)
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
</details>
|
|
173
|
+
|
|
75
174
|
More examples and usage can be found in `examples/` or in the section bellow.
|
|
76
175
|
|
|
77
176
|
## Install
|
|
@@ -115,6 +214,12 @@ Run inside Docker from a local file `in.py`:
|
|
|
115
214
|
docker run --rm -v $(pwd):/tmp ghcr.io/deoktr/pof:latest /tmp/in.py -o /tmp/out.py
|
|
116
215
|
```
|
|
117
216
|
|
|
217
|
+
Or pipe input and output:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
cat in.py | docker run --rm -i ghcr.io/deoktr/pof:latest > out.py
|
|
221
|
+
```
|
|
222
|
+
|
|
118
223
|
### 4. Docker Source
|
|
119
224
|
|
|
120
225
|
```bash
|
|
@@ -171,7 +276,7 @@ pof in.py -f obfuscator -k BuiltinsObfuscator |\
|
|
|
171
276
|
pof -f stager -k PasteRsStager > out.py
|
|
172
277
|
```
|
|
173
278
|
|
|
174
|
-
You can also use the Python API directly, you can find examples
|
|
279
|
+
You can also use the Python API directly, you can find examples or see API usage bellow.
|
|
175
280
|
|
|
176
281
|
## Examples
|
|
177
282
|
|
|
@@ -193,6 +298,48 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
|
|
|
193
298
|
|
|
194
299
|
### Obfuscator
|
|
195
300
|
|
|
301
|
+
`NamesObfuscator` the most basic obfuscator is renaming variables, classes, functions, and imports.
|
|
302
|
+
|
|
303
|
+
Source in `examples/source.py`.
|
|
304
|
+
|
|
305
|
+
```python
|
|
306
|
+
import random as dZoHe5KQ5T
|
|
307
|
+
import string as BOu1uhdV
|
|
308
|
+
|
|
309
|
+
def hrEnWnn_d():
|
|
310
|
+
"""This is a docstring."""
|
|
311
|
+
return dZoHe5KQ5T.choice(BOu1uhdV.ascii_lowercase)
|
|
312
|
+
|
|
313
|
+
def a_D(wYKTr7D5Ex):
|
|
314
|
+
JfQdd = hrEnWnn_d()
|
|
315
|
+
for kEw73z in range(wYKTr7D5Ex - 1):
|
|
316
|
+
JfQdd += hrEnWnn_d()
|
|
317
|
+
return JfQdd
|
|
318
|
+
|
|
319
|
+
def VLBQn3():
|
|
320
|
+
mxO = a_D(8)
|
|
321
|
+
tBceS = 'My pet is name: ' + mxO
|
|
322
|
+
print(tBceS)
|
|
323
|
+
VLBQn3()
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
> [!WARNING]
|
|
327
|
+
> Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`.
|
|
328
|
+
|
|
329
|
+
An alternative is `DefinitionsObfuscator`, that will only obfuscate function declarations.
|
|
330
|
+
|
|
331
|
+
> [!NOTE]
|
|
332
|
+
> There is an alternative implementation at `NamesRopeObfuscator` that uses `rope`, it's a work in progress and currently does not obfuscate variables declared inside functions.
|
|
333
|
+
|
|
334
|
+
Other very basic obfuscation functions are done by specific obfuscators like:
|
|
335
|
+
|
|
336
|
+
- Removing comments with `CommentsObfuscator`.
|
|
337
|
+
- Replacing exception messages with `ExceptionObfuscator`.
|
|
338
|
+
- Reducing indentation to a single space with `IndentsObfuscator`.
|
|
339
|
+
- Replace log messages with `LoggingObfuscator` or remove them with `LoggingRemoveObfuscator`.
|
|
340
|
+
- Remove empty lines with `NewlineObfuscator`.
|
|
341
|
+
- Remove print statements with `PrintObfuscator`.
|
|
342
|
+
|
|
196
343
|
#### StringsObfuscator
|
|
197
344
|
|
|
198
345
|
```python
|
|
@@ -241,22 +388,37 @@ print(len('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'))
|
|
|
241
388
|
print((True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True+True))
|
|
242
389
|
```
|
|
243
390
|
|
|
244
|
-
####
|
|
391
|
+
#### ConstantsObfuscator
|
|
245
392
|
|
|
246
|
-
|
|
393
|
+
Move every variable at the top of the file with random names.
|
|
247
394
|
|
|
248
395
|
```python
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
396
|
+
gfdd_j=print
|
|
397
|
+
uVu8Mq=8
|
|
398
|
+
GqTsw9ZK="My pet is name: "
|
|
399
|
+
u4F5X=range
|
|
400
|
+
rSO2F=1
|
|
401
|
+
# source file that will be obfuscated
|
|
402
|
+
import random
|
|
403
|
+
import string
|
|
253
404
|
|
|
254
|
-
|
|
405
|
+
def get_random_letter():
|
|
406
|
+
"""This is a docstring."""
|
|
407
|
+
return random.choice(string.ascii_lowercase)
|
|
255
408
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
409
|
+
def get_random_name(name_len):
|
|
410
|
+
# this is a comment
|
|
411
|
+
name=get_random_letter()
|
|
412
|
+
for _ in u4F5X(name_len-rSO2F):
|
|
413
|
+
name+=get_random_letter()
|
|
414
|
+
return name
|
|
415
|
+
|
|
416
|
+
def present_my_pet():
|
|
417
|
+
pet_name=get_random_name(uVu8Mq)
|
|
418
|
+
message=GqTsw9ZK+pet_name
|
|
419
|
+
gfdd_j(message)
|
|
420
|
+
|
|
421
|
+
present_my_pet()
|
|
260
422
|
```
|
|
261
423
|
|
|
262
424
|
#### BuiltinsObfuscator
|
|
@@ -273,16 +435,6 @@ globals()['__builtins__'].__dict__['print']('Hello, world')
|
|
|
273
435
|
__builtins__.__dict__.__getitem__('print')('Hello, world')
|
|
274
436
|
```
|
|
275
437
|
|
|
276
|
-
#### ConstantsObfuscator
|
|
277
|
-
|
|
278
|
-
Move every variable at the top of the file.
|
|
279
|
-
|
|
280
|
-
```python
|
|
281
|
-
vVlJ='Hello, world'
|
|
282
|
-
t4Bo=print
|
|
283
|
-
t4Bo(vVlJ)
|
|
284
|
-
```
|
|
285
|
-
|
|
286
438
|
#### ExtractVariablesObfuscator
|
|
287
439
|
|
|
288
440
|
Extract variables in the same context level, meaning if inside a function will add the variable at the beginning of it.
|
|
@@ -301,6 +453,35 @@ print(var)
|
|
|
301
453
|
print.__call__('Hello, world')
|
|
302
454
|
```
|
|
303
455
|
|
|
456
|
+
#### GlobalsObfuscator
|
|
457
|
+
|
|
458
|
+
Replaces call of global functions with `globals()['func_name']()`.
|
|
459
|
+
|
|
460
|
+
Source in `examples/source.py`.
|
|
461
|
+
|
|
462
|
+
```python
|
|
463
|
+
import random
|
|
464
|
+
import string
|
|
465
|
+
|
|
466
|
+
def get_random_letter():
|
|
467
|
+
"""This is a docstring."""
|
|
468
|
+
return random.choice(string.ascii_lowercase)
|
|
469
|
+
|
|
470
|
+
def get_random_name(name_len):
|
|
471
|
+
# this is a comment
|
|
472
|
+
name=globals()['get_random_letter']()
|
|
473
|
+
for _ in range(name_len-1):
|
|
474
|
+
name+=globals()['get_random_letter']()
|
|
475
|
+
return name
|
|
476
|
+
|
|
477
|
+
def present_my_pet():
|
|
478
|
+
pet_name=globals()['get_random_name'](8)
|
|
479
|
+
message="My pet is name: "+pet_name
|
|
480
|
+
print(message)
|
|
481
|
+
|
|
482
|
+
globals()['present_my_pet']()
|
|
483
|
+
```
|
|
484
|
+
|
|
304
485
|
#### ShiftObfuscator
|
|
305
486
|
|
|
306
487
|
```python
|
|
@@ -480,6 +661,25 @@ Source: `print('h')`
|
|
|
480
661
|
print(oct.__doc__[8])
|
|
481
662
|
```
|
|
482
663
|
|
|
664
|
+
#### AddCommentsObfuscator
|
|
665
|
+
|
|
666
|
+
```python
|
|
667
|
+
# This is a random comment
|
|
668
|
+
print("Hello, world!")
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
The list of comments available is inside a file, all the comments have been extracted from Python standard library.
|
|
672
|
+
|
|
673
|
+
#### AddNewlinesObfuscator
|
|
674
|
+
|
|
675
|
+
Add random new lines everywhere it's possible.
|
|
676
|
+
|
|
677
|
+
```python
|
|
678
|
+
|
|
679
|
+
print("Hello, world!")
|
|
680
|
+
|
|
681
|
+
```
|
|
682
|
+
|
|
483
683
|
### Stager
|
|
484
684
|
|
|
485
685
|
#### DownloadStager
|
|
@@ -681,7 +881,6 @@ Yes they are valid Python variable name.
|
|
|
681
881
|
Usage:
|
|
682
882
|
|
|
683
883
|
```python
|
|
684
|
-
|
|
685
884
|
from pof.utils.generator import UnicodeGenerator
|
|
686
885
|
|
|
687
886
|
gen = UnicodeGenerator().katakana_generator()
|
|
@@ -689,6 +888,21 @@ for _ in range(4):
|
|
|
689
888
|
print(next(gen))
|
|
690
889
|
```
|
|
691
890
|
|
|
891
|
+
You can also combine generators to pick randomly but with weights associated:
|
|
892
|
+
|
|
893
|
+
```python
|
|
894
|
+
from pof.utils.generator import *
|
|
895
|
+
|
|
896
|
+
gen_dict = {
|
|
897
|
+
86: AdvancedGenerator.realistic_generator(),
|
|
898
|
+
10: BasicGenerator.alphabet_generator(),
|
|
899
|
+
4: BasicGenerator.number_name_generator(length=random.randint(2, 5)),
|
|
900
|
+
}
|
|
901
|
+
gen = AdvancedGenerator.multi_generator(gen_dict)
|
|
902
|
+
for _ in range(4):
|
|
903
|
+
print(next(gen))
|
|
904
|
+
```
|
|
905
|
+
|
|
692
906
|
### Homoglyphs
|
|
693
907
|
|
|
694
908
|
[Homoglyphs](https://en.wikipedia.org/wiki/Homoglyph) are glyphs that have the same shape and appear identical. There is a generator to help create them.
|
|
@@ -889,7 +1103,6 @@ pytest
|
|
|
889
1103
|
Format:
|
|
890
1104
|
|
|
891
1105
|
```bash
|
|
892
|
-
black .
|
|
893
1106
|
ruff format .
|
|
894
1107
|
```
|
|
895
1108
|
|
|
@@ -914,11 +1127,32 @@ python3 -m twine check dist/*
|
|
|
914
1127
|
|
|
915
1128
|
No effort is made to support Python 2, most obfuscator, stagers, and evasion should work out of the box, but they are not tested.
|
|
916
1129
|
|
|
1130
|
+
## Alternatives
|
|
1131
|
+
|
|
1132
|
+
Other Python obfuscation projects:
|
|
1133
|
+
|
|
1134
|
+
- [0x-Apollyon/Papyrus](https://github.com/0x-Apollyon/Papyrus)
|
|
1135
|
+
- [Hnfull/Intensio-Obfuscator](https://github.com/Hnfull/Intensio-Obfuscator)
|
|
1136
|
+
- [lepotekil/MsfMania](https://github.com/lepotekil/MsfMania)
|
|
1137
|
+
- [billythegoat356/Hyperion](https://github.com/billythegoat356/Hyperion)
|
|
1138
|
+
- [spyboy-productions/ObfuXtreme](https://github.com/spyboy-productions/ObfuXtreme)
|
|
1139
|
+
- [chris-rands/emojify](https://github.com/chris-rands/emojify)
|
|
1140
|
+
- [0sir1ss/Anubis](https://github.com/0sir1ss/Anubis)
|
|
1141
|
+
- [0sir1ss/Carbon](https://github.com/0sir1ss/Carbon)
|
|
1142
|
+
- [billythegoat356/Apollyon](https://github.com/billythegoat356/Apollyon)
|
|
1143
|
+
- [billythegoat356/Berserker](https://github.com/billythegoat356/Berserker)
|
|
1144
|
+
- [brandonasuncion/Python-Code-Obfuscator](https://github.com/brandonasuncion/Python-Code-Obfuscator)
|
|
1145
|
+
- [CSM-BlueRed/Impostor](https://github.com/CSM-BlueRed/Impostor)
|
|
1146
|
+
- [ImInTheICU/ExtraLayer](https://github.com/ImInTheICU/ExtraLayer)
|
|
1147
|
+
- [root4031/pyobfuscate](https://github.com/root4031/pyobfuscate)
|
|
1148
|
+
- [therealOri/PolyLock](https://github.com/therealOri/PolyLock)
|
|
1149
|
+
- [FlorianREGAZ/PyObfuscator](https://github.com/FlorianREGAZ/PyObfuscator)
|
|
1150
|
+
|
|
917
1151
|
## TODO
|
|
918
1152
|
|
|
919
1153
|
- Fix `NamesObfuscator`.
|
|
920
|
-
- Add option to prepend a shebang, and add ability to customize it.
|
|
921
1154
|
- Fix multi line strings.
|
|
1155
|
+
- Add option to prepend a shebang, and add ability to customize it.
|
|
922
1156
|
|
|
923
1157
|
## License
|
|
924
1158
|
|