python-obfuscation-framework 1.5.1__tar.gz → 1.6.0__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.5.1 → python_obfuscation_framework-1.6.0}/LICENSE +2 -2
- {python_obfuscation_framework-1.5.1/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.6.0}/PKG-INFO +54 -23
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/README.md +44 -18
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/__init__.py +1 -1
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/__main__.py +1 -1
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/cli.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/cli_v2.py +16 -0
- python_obfuscation_framework-1.6.0/pof/errors.py +19 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/__init__.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/argv.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/base.py +16 -0
- {python_obfuscation_framework-1.5.1/tests → python_obfuscation_framework-1.6.0/pof/evasion/cpu}/__init__.py +1 -1
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/cpu/cpu_count.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/fs/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/pof/evasion/fs/directory_exist.py +45 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/directory_list_exist.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/directory_list_missing.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/fs/directory_missing.py +44 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/exec_method.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/executable_path.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/fs/file_exist.py +45 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/file_list_exist.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/file_list_missing.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/fs/file_missing.py +47 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/tmp.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/hardware/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/hardware/ram_count.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/hooks/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/hooks/debugger.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/hooks/tracemalloc.py +39 -0
- python_obfuscation_framework-1.6.0/pof/evasion/human/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/human/p.py +17 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/human/prompt.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/integrity.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/multi.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/os/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/pof/evasion/os/domain.py +43 -0
- python_obfuscation_framework-1.6.0/pof/evasion/os/hostname.py +43 -0
- python_obfuscation_framework-1.6.0/pof/evasion/os/uid.py +44 -0
- python_obfuscation_framework-1.6.0/pof/evasion/os/username.py +43 -0
- python_obfuscation_framework-1.6.0/pof/evasion/processes/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/processes/proc_count.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/time/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/time/expire.py +20 -4
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/time/uptime.py +16 -0
- python_obfuscation_framework-1.6.0/pof/evasion/time/utc.py +42 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/utils.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/main.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/__init__.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/builtins.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/cipher/deep_encryption.py +17 -4
- python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/rc4.py +38 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/shift.py +35 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/cipher/xor.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/compression/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/compression/bz2.py +38 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/compression/gzip.py +38 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/compression/lzma.py +38 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/compression/zlib.py +38 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/constants.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/definitions.py +19 -3
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/a85.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b16.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b32.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b32hex.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b64.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b85.py +41 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/binascii.py +38 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/snt.py +39 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/esoteric/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/call.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/doc.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/globals.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/imports.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/extract_variables.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/junk/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/junk/add_comments.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/junk/add_newlines.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/names.py +17 -4
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/names_rope.py +17 -1
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/numbers.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/other/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/other/tokens.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/remove/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/comments.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/exceptions.py +17 -7
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/indents.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/loggings.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/loggings_old.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/newline.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/print.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/restructure.py +31 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/stegano/docstrings.py +16 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/ipv6encoding.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/macencoding.py +37 -0
- python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/uuidencoding.py +37 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/strings.py +78 -3
- python_obfuscation_framework-1.6.0/pof/stager/__init__.py +33 -0
- python_obfuscation_framework-1.6.0/pof/stager/cipher/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/cipher/rc4.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/download.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/image.py +18 -8
- python_obfuscation_framework-1.6.0/pof/stager/lots/__init__.py +17 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/cl1pnet.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/pastebin.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/pasters.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/quine.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/pof/utils/cipher/__init__.py +23 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/cipher/rc4.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/cipher/shift.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/compression/__init__.py +27 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/bz2.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/gzip.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/lzma.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/zlib.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/encoding/__init__.py +35 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/a85.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/encoding/b16.py +46 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/b3.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/encoding/b32.py +46 -0
- python_obfuscation_framework-1.6.0/pof/utils/encoding/b32hex.py +46 -0
- python_obfuscation_framework-1.6.0/pof/utils/encoding/b64.py +46 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/b85.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/binascii.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/snt.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/entropy.py +40 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/extract_names.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/generator/__init__.py +33 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/advanced.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/base.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/basic.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/unicode.py +17 -1
- python_obfuscation_framework-1.6.0/pof/utils/se/__init__.py +19 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/se/homoglyphs.py +16 -0
- python_obfuscation_framework-1.6.0/pof/utils/stegano/__init__.py +21 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/ipv6encoding.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/macencoding.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/uuidencoding.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/tokens.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pyproject.toml +7 -2
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0/python_obfuscation_framework.egg-info}/PKG-INFO +54 -23
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/requires.txt +5 -0
- python_obfuscation_framework-1.6.0/tests/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_a85.py +38 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_b16.py +38 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_b32.py +38 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_b32hex.py +38 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_b64.py +38 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_b85.py +38 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_comments.py +16 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_docstrings.py +38 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_exceptions.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/test_names.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_print.py +16 -0
- python_obfuscation_framework-1.6.0/tests/obfuscator/test_xor.py +41 -0
- python_obfuscation_framework-1.6.0/tests/utils/__init__.py +15 -0
- python_obfuscation_framework-1.6.0/tests/utils/se/__init__.py +15 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/utils/se/test_homoglyphs.py +16 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/utils/test_generator.py +16 -0
- python_obfuscation_framework-1.5.1/pof/errors.py +0 -2
- python_obfuscation_framework-1.5.1/pof/evasion/cpu/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/fs/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/fs/directory_exist.py +0 -29
- python_obfuscation_framework-1.5.1/pof/evasion/fs/directory_missing.py +0 -28
- python_obfuscation_framework-1.5.1/pof/evasion/fs/file_exist.py +0 -29
- python_obfuscation_framework-1.5.1/pof/evasion/fs/file_missing.py +0 -31
- python_obfuscation_framework-1.5.1/pof/evasion/hardware/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/hooks/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/hooks/tracemalloc.py +0 -23
- python_obfuscation_framework-1.5.1/pof/evasion/human/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/os/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/os/domain.py +0 -27
- python_obfuscation_framework-1.5.1/pof/evasion/os/hostname.py +0 -27
- python_obfuscation_framework-1.5.1/pof/evasion/os/uid.py +0 -28
- python_obfuscation_framework-1.5.1/pof/evasion/os/username.py +0 -27
- python_obfuscation_framework-1.5.1/pof/evasion/processes/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/time/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/evasion/time/utc.py +0 -26
- python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/rc4.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/shift.py +0 -19
- python_obfuscation_framework-1.5.1/pof/obfuscator/compression/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/compression/bz2.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/compression/gzip.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/compression/lzma.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/compression/zlib.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/a85.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b16.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b32.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b32hex.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b64.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b85.py +0 -25
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/binascii.py +0 -22
- python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/snt.py +0 -23
- python_obfuscation_framework-1.5.1/pof/obfuscator/esoteric/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/junk/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/other/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/remove/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/restructure.py +0 -15
- python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/ipv6encoding.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/macencoding.py +0 -21
- python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/uuidencoding.py +0 -21
- python_obfuscation_framework-1.5.1/pof/stager/__init__.py +0 -17
- python_obfuscation_framework-1.5.1/pof/stager/cipher/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/stager/lots/__init__.py +0 -1
- python_obfuscation_framework-1.5.1/pof/utils/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/pof/utils/cipher/__init__.py +0 -7
- python_obfuscation_framework-1.5.1/pof/utils/compression/__init__.py +0 -11
- python_obfuscation_framework-1.5.1/pof/utils/encoding/__init__.py +0 -19
- python_obfuscation_framework-1.5.1/pof/utils/encoding/b16.py +0 -30
- python_obfuscation_framework-1.5.1/pof/utils/encoding/b32.py +0 -30
- python_obfuscation_framework-1.5.1/pof/utils/encoding/b32hex.py +0 -30
- python_obfuscation_framework-1.5.1/pof/utils/encoding/b64.py +0 -30
- python_obfuscation_framework-1.5.1/pof/utils/entropy.py +0 -24
- python_obfuscation_framework-1.5.1/pof/utils/generator/__init__.py +0 -17
- python_obfuscation_framework-1.5.1/pof/utils/se/__init__.py +0 -3
- python_obfuscation_framework-1.5.1/pof/utils/stegano/__init__.py +0 -5
- python_obfuscation_framework-1.5.1/tests/obfuscator/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_a85.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_b16.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_b32.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_b32hex.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_b64.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_b85.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_docstrings.py +0 -22
- python_obfuscation_framework-1.5.1/tests/obfuscator/test_xor.py +0 -25
- python_obfuscation_framework-1.5.1/tests/utils/__init__.py +0 -0
- python_obfuscation_framework-1.5.1/tests/utils/se/__init__.py +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/MANIFEST.in +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/names.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/se/homoglyphs.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/SOURCES.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/setup.cfg +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/code/out.py +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/code/source.py +0 -0
- {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/pyproject.toml +0 -0
|
@@ -632,7 +632,7 @@ state the exclusion of warranty; and each file should have at least
|
|
|
632
632
|
the "copyright" line and a pointer to where the full notice is found.
|
|
633
633
|
|
|
634
634
|
POF, a free and open source Python obfuscation framework.
|
|
635
|
-
Copyright (C) 2022-
|
|
635
|
+
Copyright (C) 2022 - 2025 POF Team
|
|
636
636
|
|
|
637
637
|
This program is free software: you can redistribute it and/or modify
|
|
638
638
|
it under the terms of the GNU General Public License as published by
|
|
@@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail.
|
|
|
652
652
|
If the program does terminal interaction, make it output a short
|
|
653
653
|
notice like this when it starts in an interactive mode:
|
|
654
654
|
|
|
655
|
-
POF Copyright (C) 2022-
|
|
655
|
+
POF Copyright (C) 2022 - 2025 POF Team
|
|
656
656
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
657
657
|
This is free software, and you are welcome to redistribute it
|
|
658
658
|
under certain conditions; type `show c' for details.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: python-obfuscation-framework
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.6.0
|
|
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>
|
|
@@ -638,7 +638,7 @@ License: GNU GENERAL PUBLIC LICENSE
|
|
|
638
638
|
the "copyright" line and a pointer to where the full notice is found.
|
|
639
639
|
|
|
640
640
|
POF, a free and open source Python obfuscation framework.
|
|
641
|
-
Copyright (C) 2022-
|
|
641
|
+
Copyright (C) 2022 - 2025 POF Team
|
|
642
642
|
|
|
643
643
|
This program is free software: you can redistribute it and/or modify
|
|
644
644
|
it under the terms of the GNU General Public License as published by
|
|
@@ -658,7 +658,7 @@ License: GNU GENERAL PUBLIC LICENSE
|
|
|
658
658
|
If the program does terminal interaction, make it output a short
|
|
659
659
|
notice like this when it starts in an interactive mode:
|
|
660
660
|
|
|
661
|
-
POF Copyright (C) 2022-
|
|
661
|
+
POF Copyright (C) 2022 - 2025 POF Team
|
|
662
662
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
663
663
|
This is free software, and you are welcome to redistribute it
|
|
664
664
|
under certain conditions; type `show c' for details.
|
|
@@ -685,7 +685,7 @@ Project-URL: Source, https://github.com/deoktr/pof/
|
|
|
685
685
|
Keywords: cybersecurity,obfuscation,obfuscator,stager,payload
|
|
686
686
|
Classifier: Development Status :: 4 - Beta
|
|
687
687
|
Classifier: Intended Audience :: Developers
|
|
688
|
-
Classifier: License :: OSI Approved ::
|
|
688
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
689
689
|
Classifier: Natural Language :: English
|
|
690
690
|
Classifier: Programming Language :: Python :: 3
|
|
691
691
|
Classifier: Programming Language :: Python :: 3.5
|
|
@@ -711,6 +711,11 @@ Requires-Dist: pyinstrument; extra == "dev"
|
|
|
711
711
|
Provides-Extra: test
|
|
712
712
|
Requires-Dist: pytest; extra == "test"
|
|
713
713
|
Requires-Dist: pytest-cov; extra == "test"
|
|
714
|
+
Provides-Extra: build
|
|
715
|
+
Requires-Dist: build; extra == "build"
|
|
716
|
+
Requires-Dist: twine; extra == "build"
|
|
717
|
+
Requires-Dist: check-manifest; extra == "build"
|
|
718
|
+
Dynamic: license-file
|
|
714
719
|
|
|
715
720
|
# pof
|
|
716
721
|
|
|
@@ -735,7 +740,7 @@ print('Hello, world')
|
|
|
735
740
|
Run:
|
|
736
741
|
|
|
737
742
|
```bash
|
|
738
|
-
pof
|
|
743
|
+
pof in.py -o out.py
|
|
739
744
|
```
|
|
740
745
|
|
|
741
746
|
Output:
|
|
@@ -789,7 +794,7 @@ git clone https://github.com/deoktr/pof
|
|
|
789
794
|
cd pof
|
|
790
795
|
python -m venv venv
|
|
791
796
|
source ./venv/bin/activate
|
|
792
|
-
|
|
797
|
+
pip install .
|
|
793
798
|
```
|
|
794
799
|
|
|
795
800
|
This will install pof inside a virtual env, so you'll need to activate it every time you want to use it.
|
|
@@ -800,13 +805,13 @@ This will install pof inside a virtual env, so you'll need to activate it every
|
|
|
800
805
|
git clone https://github.com/deoktr/pof
|
|
801
806
|
cd pof
|
|
802
807
|
docker build -t pof .
|
|
803
|
-
docker run --rm
|
|
808
|
+
docker run --rm pof --help
|
|
804
809
|
```
|
|
805
810
|
|
|
806
811
|
Run inside Docker from a local file `in.py`:
|
|
807
812
|
|
|
808
813
|
```bash
|
|
809
|
-
docker run --rm -v $(pwd):/tmp
|
|
814
|
+
docker run --rm -v $(pwd):/tmp pof /tmp/in.py -o /tmp/out.py
|
|
810
815
|
```
|
|
811
816
|
|
|
812
817
|
### 4. Nix
|
|
@@ -879,7 +884,10 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
|
|
|
879
884
|
print('dlrow ,olleH'[::-1])
|
|
880
885
|
|
|
881
886
|
# Replace
|
|
882
|
-
|
|
887
|
+
print('Helnelemd'.replace('nelem','lo, worl'))
|
|
888
|
+
|
|
889
|
+
# One on n
|
|
890
|
+
print("".join([d if g%3==0 else""for g,d in enumerate('H9IesYlvJl5loU4,dK nDw51ovsrozl0UdoI!jL')]))
|
|
883
891
|
|
|
884
892
|
# Unicode
|
|
885
893
|
print('\u0048\u0065\u006c\u006c\u006f\u002c\u0020\u0077\u006f\u0072\u006c\u0064')
|
|
@@ -963,13 +971,14 @@ t4Bo(vVlJ)
|
|
|
963
971
|
|
|
964
972
|
Extract variables in the same context level, meaning if inside a function will add the variable at the beginning of it.
|
|
965
973
|
|
|
966
|
-
Note that right now this function is broken and can fail.
|
|
967
|
-
|
|
968
974
|
```python
|
|
969
975
|
var='Hello, world'
|
|
970
976
|
print(var)
|
|
971
977
|
```
|
|
972
978
|
|
|
979
|
+
> [!WARNING]
|
|
980
|
+
> Right now this function is broken and can fail.
|
|
981
|
+
|
|
973
982
|
#### CallObfuscator
|
|
974
983
|
|
|
975
984
|
```python
|
|
@@ -1051,8 +1060,6 @@ exec(rc4decrypt('7zSRE6YHmdwpx2zT1Q2xPoPwzztXRZNQSKeX2LFIKBhl7uJMAs9jj0Hlec6y3wj
|
|
|
1051
1060
|
|
|
1052
1061
|
#### XORObfuscator
|
|
1053
1062
|
|
|
1054
|
-
Warning: like for the RC4 cipher the XOR obfuscator shouldn't be used for security purposes, its main goal is to evade common security tools, not protect the information! Plus the XOR cipher is really weak and easy to crack.
|
|
1055
|
-
|
|
1056
1063
|
```python
|
|
1057
1064
|
from base64 import b64decode
|
|
1058
1065
|
|
|
@@ -1067,6 +1074,9 @@ def decrypt(cipher,key):
|
|
|
1067
1074
|
exec(decrypt( b'RkNfWkAcHnxTXVpbGBROW0RdUhMdPg==', b'61644494').decode())
|
|
1068
1075
|
```
|
|
1069
1076
|
|
|
1077
|
+
> [!WARNING]
|
|
1078
|
+
> Like for the RC4 cipher the XOR obfuscator shouldn't be used for security purposes, its main goal is to evade common security tools, not protect the information! Plus the XOR cipher is really weak and easy to crack.
|
|
1079
|
+
|
|
1070
1080
|
#### Compression
|
|
1071
1081
|
|
|
1072
1082
|
```python
|
|
@@ -1407,31 +1417,37 @@ from pof.utils.generator import AdvancedGenerator, BaseGenerator, BasicGenerator
|
|
|
1407
1417
|
|
|
1408
1418
|
|
|
1409
1419
|
class ExampleObfuscator(BaseObfuscator):
|
|
1410
|
-
def obfuscate(self, source):
|
|
1420
|
+
def obfuscate(self, source: str):
|
|
1421
|
+
# tokenize Python source code
|
|
1411
1422
|
tokens = self._get_tokens(source)
|
|
1412
1423
|
|
|
1413
1424
|
# get all the names and add them to the RESERVED_WORDS for the generators
|
|
1414
1425
|
reserved_words_add = NameExtract.get_names(tokens)
|
|
1415
1426
|
BaseGenerator.extend_reserved(reserved_words_add)
|
|
1416
1427
|
|
|
1428
|
+
# remove comments
|
|
1417
1429
|
tokens = CommentsObfuscator().obfuscate_tokens(tokens)
|
|
1430
|
+
|
|
1431
|
+
# replace logging message with reversable random code
|
|
1418
1432
|
tokens = LoggingObfuscator().obfuscate_tokens(tokens)
|
|
1433
|
+
|
|
1434
|
+
# remove print statements
|
|
1419
1435
|
tokens = PrintObfuscator().obfuscate_tokens(tokens)
|
|
1420
|
-
|
|
1436
|
+
|
|
1437
|
+
# replace exceptions with reversable random names
|
|
1421
1438
|
tokens = ExceptionObfuscator(
|
|
1422
1439
|
add_codes=True,
|
|
1423
|
-
generator=
|
|
1440
|
+
generator=BasicGenerator.number_name_generator(),
|
|
1424
1441
|
).obfuscate_tokens(tokens)
|
|
1425
1442
|
|
|
1426
|
-
# configure generator
|
|
1427
|
-
|
|
1443
|
+
# configure global generator
|
|
1444
|
+
generator = AdvancedGenerator.multi_generator({
|
|
1428
1445
|
86: AdvancedGenerator.realistic_generator(),
|
|
1429
1446
|
10: BasicGenerator.alphabet_generator(),
|
|
1430
1447
|
4: BasicGenerator.number_name_generator(length=random.randint(2, 5)),
|
|
1431
|
-
}
|
|
1432
|
-
generator = AdvancedGenerator.multi_generator(gen_dict)
|
|
1448
|
+
})
|
|
1433
1449
|
|
|
1434
|
-
#
|
|
1450
|
+
# extract values and function to make them constant
|
|
1435
1451
|
tokens = ConstantsObfuscator(
|
|
1436
1452
|
generator=generator,
|
|
1437
1453
|
obf_number_rate=0.7,
|
|
@@ -1442,7 +1458,10 @@ class ExampleObfuscator(BaseObfuscator):
|
|
|
1442
1458
|
# FIXME: broken for the moment
|
|
1443
1459
|
# tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
|
|
1444
1460
|
|
|
1461
|
+
# obfuscate function calls by calling `globals()` instead
|
|
1445
1462
|
tokens = GlobalsObfuscator().obfuscate_tokens(tokens)
|
|
1463
|
+
|
|
1464
|
+
# obfuscate builtins in many different ways
|
|
1446
1465
|
tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
|
|
1447
1466
|
|
|
1448
1467
|
b64decode_name = next(generator)
|
|
@@ -1453,16 +1472,26 @@ class ExampleObfuscator(BaseObfuscator):
|
|
|
1453
1472
|
b64decode_name=b64decode_name,
|
|
1454
1473
|
b85decode_name=b85decode_name,
|
|
1455
1474
|
)
|
|
1475
|
+
|
|
1476
|
+
# obfuscate strings in many different ways
|
|
1456
1477
|
tokens = string_obfuscator.obfuscate_tokens(tokens)
|
|
1478
|
+
|
|
1479
|
+
# for futur usage of `string_obfuscator` don't re-import base64 and 85
|
|
1457
1480
|
string_obfuscator.import_b64decode = False
|
|
1458
1481
|
string_obfuscator.import_b85decode = False
|
|
1459
1482
|
|
|
1483
|
+
# obfuscate numbers twice in a row in many different ways
|
|
1460
1484
|
for _ in range(2):
|
|
1461
1485
|
tokens = NumberObfuscator().obfuscate_tokens(tokens)
|
|
1486
|
+
|
|
1487
|
+
# obfuscate builtins once again
|
|
1462
1488
|
tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
|
|
1489
|
+
|
|
1490
|
+
# obfuscate strings two more times
|
|
1463
1491
|
for _ in range(2):
|
|
1464
1492
|
tokens = string_obfuscator.obfuscate_tokens(tokens)
|
|
1465
1493
|
|
|
1494
|
+
# and produce Python source code from tokens
|
|
1466
1495
|
return self._untokenize(tokens)
|
|
1467
1496
|
|
|
1468
1497
|
|
|
@@ -1541,7 +1570,8 @@ ruff check .
|
|
|
1541
1570
|
Test build package:
|
|
1542
1571
|
|
|
1543
1572
|
```bash
|
|
1544
|
-
pip install build
|
|
1573
|
+
pip install -e .[build]
|
|
1574
|
+
|
|
1545
1575
|
check-manifest --ignore "tests/**"
|
|
1546
1576
|
python3 -m build
|
|
1547
1577
|
python3 -m twine check dist/*
|
|
@@ -1553,6 +1583,7 @@ No effort is made to support Python 2, most obfuscator, stagers, and evasion sho
|
|
|
1553
1583
|
|
|
1554
1584
|
## TODO
|
|
1555
1585
|
|
|
1586
|
+
- Fix `NamesObfuscator`
|
|
1556
1587
|
- Add option to prepend a shebang, and add ability to customize it
|
|
1557
1588
|
- Fix multi line strings
|
|
1558
1589
|
|
|
@@ -21,7 +21,7 @@ print('Hello, world')
|
|
|
21
21
|
Run:
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
|
-
pof
|
|
24
|
+
pof in.py -o out.py
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
Output:
|
|
@@ -75,7 +75,7 @@ git clone https://github.com/deoktr/pof
|
|
|
75
75
|
cd pof
|
|
76
76
|
python -m venv venv
|
|
77
77
|
source ./venv/bin/activate
|
|
78
|
-
|
|
78
|
+
pip install .
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
This will install pof inside a virtual env, so you'll need to activate it every time you want to use it.
|
|
@@ -86,13 +86,13 @@ This will install pof inside a virtual env, so you'll need to activate it every
|
|
|
86
86
|
git clone https://github.com/deoktr/pof
|
|
87
87
|
cd pof
|
|
88
88
|
docker build -t pof .
|
|
89
|
-
docker run --rm
|
|
89
|
+
docker run --rm pof --help
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
Run inside Docker from a local file `in.py`:
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
|
-
docker run --rm -v $(pwd):/tmp
|
|
95
|
+
docker run --rm -v $(pwd):/tmp pof /tmp/in.py -o /tmp/out.py
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
### 4. Nix
|
|
@@ -165,7 +165,10 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
|
|
|
165
165
|
print('dlrow ,olleH'[::-1])
|
|
166
166
|
|
|
167
167
|
# Replace
|
|
168
|
-
|
|
168
|
+
print('Helnelemd'.replace('nelem','lo, worl'))
|
|
169
|
+
|
|
170
|
+
# One on n
|
|
171
|
+
print("".join([d if g%3==0 else""for g,d in enumerate('H9IesYlvJl5loU4,dK nDw51ovsrozl0UdoI!jL')]))
|
|
169
172
|
|
|
170
173
|
# Unicode
|
|
171
174
|
print('\u0048\u0065\u006c\u006c\u006f\u002c\u0020\u0077\u006f\u0072\u006c\u0064')
|
|
@@ -249,13 +252,14 @@ t4Bo(vVlJ)
|
|
|
249
252
|
|
|
250
253
|
Extract variables in the same context level, meaning if inside a function will add the variable at the beginning of it.
|
|
251
254
|
|
|
252
|
-
Note that right now this function is broken and can fail.
|
|
253
|
-
|
|
254
255
|
```python
|
|
255
256
|
var='Hello, world'
|
|
256
257
|
print(var)
|
|
257
258
|
```
|
|
258
259
|
|
|
260
|
+
> [!WARNING]
|
|
261
|
+
> Right now this function is broken and can fail.
|
|
262
|
+
|
|
259
263
|
#### CallObfuscator
|
|
260
264
|
|
|
261
265
|
```python
|
|
@@ -337,8 +341,6 @@ exec(rc4decrypt('7zSRE6YHmdwpx2zT1Q2xPoPwzztXRZNQSKeX2LFIKBhl7uJMAs9jj0Hlec6y3wj
|
|
|
337
341
|
|
|
338
342
|
#### XORObfuscator
|
|
339
343
|
|
|
340
|
-
Warning: like for the RC4 cipher the XOR obfuscator shouldn't be used for security purposes, its main goal is to evade common security tools, not protect the information! Plus the XOR cipher is really weak and easy to crack.
|
|
341
|
-
|
|
342
344
|
```python
|
|
343
345
|
from base64 import b64decode
|
|
344
346
|
|
|
@@ -353,6 +355,9 @@ def decrypt(cipher,key):
|
|
|
353
355
|
exec(decrypt( b'RkNfWkAcHnxTXVpbGBROW0RdUhMdPg==', b'61644494').decode())
|
|
354
356
|
```
|
|
355
357
|
|
|
358
|
+
> [!WARNING]
|
|
359
|
+
> Like for the RC4 cipher the XOR obfuscator shouldn't be used for security purposes, its main goal is to evade common security tools, not protect the information! Plus the XOR cipher is really weak and easy to crack.
|
|
360
|
+
|
|
356
361
|
#### Compression
|
|
357
362
|
|
|
358
363
|
```python
|
|
@@ -693,31 +698,37 @@ from pof.utils.generator import AdvancedGenerator, BaseGenerator, BasicGenerator
|
|
|
693
698
|
|
|
694
699
|
|
|
695
700
|
class ExampleObfuscator(BaseObfuscator):
|
|
696
|
-
def obfuscate(self, source):
|
|
701
|
+
def obfuscate(self, source: str):
|
|
702
|
+
# tokenize Python source code
|
|
697
703
|
tokens = self._get_tokens(source)
|
|
698
704
|
|
|
699
705
|
# get all the names and add them to the RESERVED_WORDS for the generators
|
|
700
706
|
reserved_words_add = NameExtract.get_names(tokens)
|
|
701
707
|
BaseGenerator.extend_reserved(reserved_words_add)
|
|
702
708
|
|
|
709
|
+
# remove comments
|
|
703
710
|
tokens = CommentsObfuscator().obfuscate_tokens(tokens)
|
|
711
|
+
|
|
712
|
+
# replace logging message with reversable random code
|
|
704
713
|
tokens = LoggingObfuscator().obfuscate_tokens(tokens)
|
|
714
|
+
|
|
715
|
+
# remove print statements
|
|
705
716
|
tokens = PrintObfuscator().obfuscate_tokens(tokens)
|
|
706
|
-
|
|
717
|
+
|
|
718
|
+
# replace exceptions with reversable random names
|
|
707
719
|
tokens = ExceptionObfuscator(
|
|
708
720
|
add_codes=True,
|
|
709
|
-
generator=
|
|
721
|
+
generator=BasicGenerator.number_name_generator(),
|
|
710
722
|
).obfuscate_tokens(tokens)
|
|
711
723
|
|
|
712
|
-
# configure generator
|
|
713
|
-
|
|
724
|
+
# configure global generator
|
|
725
|
+
generator = AdvancedGenerator.multi_generator({
|
|
714
726
|
86: AdvancedGenerator.realistic_generator(),
|
|
715
727
|
10: BasicGenerator.alphabet_generator(),
|
|
716
728
|
4: BasicGenerator.number_name_generator(length=random.randint(2, 5)),
|
|
717
|
-
}
|
|
718
|
-
generator = AdvancedGenerator.multi_generator(gen_dict)
|
|
729
|
+
})
|
|
719
730
|
|
|
720
|
-
#
|
|
731
|
+
# extract values and function to make them constant
|
|
721
732
|
tokens = ConstantsObfuscator(
|
|
722
733
|
generator=generator,
|
|
723
734
|
obf_number_rate=0.7,
|
|
@@ -728,7 +739,10 @@ class ExampleObfuscator(BaseObfuscator):
|
|
|
728
739
|
# FIXME: broken for the moment
|
|
729
740
|
# tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
|
|
730
741
|
|
|
742
|
+
# obfuscate function calls by calling `globals()` instead
|
|
731
743
|
tokens = GlobalsObfuscator().obfuscate_tokens(tokens)
|
|
744
|
+
|
|
745
|
+
# obfuscate builtins in many different ways
|
|
732
746
|
tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
|
|
733
747
|
|
|
734
748
|
b64decode_name = next(generator)
|
|
@@ -739,16 +753,26 @@ class ExampleObfuscator(BaseObfuscator):
|
|
|
739
753
|
b64decode_name=b64decode_name,
|
|
740
754
|
b85decode_name=b85decode_name,
|
|
741
755
|
)
|
|
756
|
+
|
|
757
|
+
# obfuscate strings in many different ways
|
|
742
758
|
tokens = string_obfuscator.obfuscate_tokens(tokens)
|
|
759
|
+
|
|
760
|
+
# for futur usage of `string_obfuscator` don't re-import base64 and 85
|
|
743
761
|
string_obfuscator.import_b64decode = False
|
|
744
762
|
string_obfuscator.import_b85decode = False
|
|
745
763
|
|
|
764
|
+
# obfuscate numbers twice in a row in many different ways
|
|
746
765
|
for _ in range(2):
|
|
747
766
|
tokens = NumberObfuscator().obfuscate_tokens(tokens)
|
|
767
|
+
|
|
768
|
+
# obfuscate builtins once again
|
|
748
769
|
tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
|
|
770
|
+
|
|
771
|
+
# obfuscate strings two more times
|
|
749
772
|
for _ in range(2):
|
|
750
773
|
tokens = string_obfuscator.obfuscate_tokens(tokens)
|
|
751
774
|
|
|
775
|
+
# and produce Python source code from tokens
|
|
752
776
|
return self._untokenize(tokens)
|
|
753
777
|
|
|
754
778
|
|
|
@@ -827,7 +851,8 @@ ruff check .
|
|
|
827
851
|
Test build package:
|
|
828
852
|
|
|
829
853
|
```bash
|
|
830
|
-
pip install build
|
|
854
|
+
pip install -e .[build]
|
|
855
|
+
|
|
831
856
|
check-manifest --ignore "tests/**"
|
|
832
857
|
python3 -m build
|
|
833
858
|
python3 -m twine check dist/*
|
|
@@ -839,6 +864,7 @@ No effort is made to support Python 2, most obfuscator, stagers, and evasion sho
|
|
|
839
864
|
|
|
840
865
|
## TODO
|
|
841
866
|
|
|
867
|
+
- Fix `NamesObfuscator`
|
|
842
868
|
- Add option to prepend a shebang, and add ability to customize it
|
|
843
869
|
- Fix multi line strings
|
|
844
870
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# POF, a free and open source Python obfuscation framework.
|
|
2
|
-
# Copyright (C) 2022-
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# POF, a free and open source Python obfuscation framework.
|
|
2
|
-
# Copyright (C) 2022-
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
import argparse
|
|
2
18
|
import logging
|
|
3
19
|
import sys
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
# ruff: noqa: F405, C901, PLR0912, PLR0915
|
|
2
18
|
|
|
3
19
|
import argparse
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class PofError(Exception):
|
|
19
|
+
pass
|
{python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/__init__.py
RENAMED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
from .argv import ArgvEvasion
|
|
2
18
|
from .cpu.cpu_count import CPUCountEvasion
|
|
3
19
|
from .fs.directory_exist import DirectoryExistEvasion
|
{python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/argv.py
RENAMED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
from tokenize import NAME, NUMBER, OP, STRING
|
|
2
18
|
|
|
3
19
|
from pof.evasion.base import BaseEvasion
|
{python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/base.py
RENAMED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
from tokenize import DEDENT, INDENT, LPAR, NAME, NEWLINE, OP, RPAR, STRING
|
|
2
18
|
|
|
3
19
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# POF, a free and open source Python obfuscation framework.
|
|
2
|
-
# Copyright (C) 2022-
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
from tokenize import LPAR, NAME, NUMBER, OP, RPAR
|
|
2
18
|
|
|
3
19
|
from pof.evasion.base import BaseEvasion
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
17
|
+
from tokenize import LPAR, NAME, OP, RPAR, STRING
|
|
18
|
+
|
|
19
|
+
from pof.evasion.base import BaseEvasion
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class DirectoryExistEvasion(BaseEvasion):
|
|
23
|
+
def __init__(self, directory) -> None:
|
|
24
|
+
self.directory = directory
|
|
25
|
+
|
|
26
|
+
@staticmethod
|
|
27
|
+
def import_tokens():
|
|
28
|
+
return [
|
|
29
|
+
(NAME, "import"),
|
|
30
|
+
(NAME, "os"),
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
def check_tokens(self):
|
|
34
|
+
"""`not os.path.isdir('/tmp/a')`."""
|
|
35
|
+
return [
|
|
36
|
+
(NAME, "not"),
|
|
37
|
+
(NAME, "os"),
|
|
38
|
+
(OP, "."),
|
|
39
|
+
(NAME, "path"),
|
|
40
|
+
(OP, "."),
|
|
41
|
+
(NAME, "isdir"),
|
|
42
|
+
(LPAR, "("),
|
|
43
|
+
(STRING, repr(self.directory)),
|
|
44
|
+
(RPAR, ")"),
|
|
45
|
+
]
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# POF, a free and open source Python obfuscation framework.
|
|
2
|
+
# Copyright (C) 2022 - 2025 POF Team
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
|
+
|
|
1
17
|
import io
|
|
2
18
|
from tokenize import LPAR, NAME, OP, RPAR, generate_tokens
|
|
3
19
|
|