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.
Files changed (188) hide show
  1. {python_obfuscation_framework-1.7.0/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.7.3}/PKG-INFO +263 -29
  2. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/README.md +259 -25
  3. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/cli.py +16 -16
  4. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/cli_v2.py +84 -83
  5. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/p.py +2 -3
  6. python_obfuscation_framework-1.7.3/pof/logger.py +19 -0
  7. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/main.py +4 -6
  8. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/builtins.py +3 -2
  9. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/deep_encryption.py +4 -4
  10. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/constants.py +3 -4
  11. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/definitions.py +29 -30
  12. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/doc.py +5 -9
  13. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/extract_variables.py +2 -2
  14. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/names.py +11 -8
  15. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/names_rope.py +21 -13
  16. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/numbers.py +6 -6
  17. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/exceptions.py +3 -2
  18. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/strings.py +8 -8
  19. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/image.py +5 -4
  20. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/rc4.py +3 -2
  21. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/format.py +2 -4
  22. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/unicode.py +4 -3
  23. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pyproject.toml +4 -4
  24. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3/python_obfuscation_framework.egg-info}/PKG-INFO +263 -29
  25. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/SOURCES.txt +9 -0
  26. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/requires.txt +3 -3
  27. python_obfuscation_framework-1.7.3/tests/obfuscator/test_a85.py +41 -0
  28. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b16.py +3 -1
  29. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b32.py +3 -1
  30. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b32hex.py +3 -1
  31. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b64.py +3 -1
  32. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_b85.py +3 -1
  33. python_obfuscation_framework-1.7.3/tests/obfuscator/test_binascii.py +40 -0
  34. python_obfuscation_framework-1.7.3/tests/obfuscator/test_call.py +40 -0
  35. python_obfuscation_framework-1.7.3/tests/obfuscator/test_doc.py +40 -0
  36. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_docstrings.py +3 -1
  37. python_obfuscation_framework-1.7.3/tests/obfuscator/test_ipv6encoding.py +41 -0
  38. python_obfuscation_framework-1.7.0/tests/obfuscator/test_a85.py → python_obfuscation_framework-1.7.3/tests/obfuscator/test_number.py +3 -1
  39. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_print.py +1 -0
  40. python_obfuscation_framework-1.7.3/tests/obfuscator/test_snt.py +40 -0
  41. python_obfuscation_framework-1.7.3/tests/obfuscator/test_tokens.py +40 -0
  42. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_xor.py +5 -2
  43. python_obfuscation_framework-1.7.3/tests/obfuscator/utils.py +11 -0
  44. python_obfuscation_framework-1.7.3/tests/utils/test_generator.py +88 -0
  45. python_obfuscation_framework-1.7.0/tests/utils/test_generator.py +0 -59
  46. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/LICENSE +0 -0
  47. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/MANIFEST.in +0 -0
  48. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/__init__.py +0 -0
  49. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/__main__.py +0 -0
  50. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/errors.py +0 -0
  51. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/__init__.py +0 -0
  52. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/argv.py +0 -0
  53. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/base.py +0 -0
  54. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/cpu/__init__.py +0 -0
  55. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/cpu/cpu_count.py +0 -0
  56. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/__init__.py +0 -0
  57. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_exist.py +0 -0
  58. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_list_exist.py +0 -0
  59. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_list_missing.py +0 -0
  60. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/directory_missing.py +0 -0
  61. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/exec_method.py +0 -0
  62. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/executable_path.py +0 -0
  63. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_exist.py +0 -0
  64. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_list_exist.py +0 -0
  65. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_list_missing.py +0 -0
  66. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/file_missing.py +0 -0
  67. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/fs/tmp.py +0 -0
  68. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hardware/__init__.py +0 -0
  69. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hardware/ram_count.py +0 -0
  70. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/__init__.py +0 -0
  71. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/debugger.py +0 -0
  72. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/hooks/tracemalloc.py +0 -0
  73. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/__init__.py +0 -0
  74. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/human/prompt.py +0 -0
  75. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/integrity.py +0 -0
  76. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/multi.py +0 -0
  77. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/__init__.py +0 -0
  78. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/domain.py +0 -0
  79. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/hostname.py +0 -0
  80. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/uid.py +0 -0
  81. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/os/username.py +0 -0
  82. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/processes/__init__.py +0 -0
  83. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/processes/proc_count.py +0 -0
  84. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/__init__.py +0 -0
  85. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/expire.py +0 -0
  86. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/uptime.py +0 -0
  87. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/time/utc.py +0 -0
  88. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/evasion/utils.py +0 -0
  89. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/__init__.py +0 -0
  90. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/__init__.py +0 -0
  91. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/rc4.py +0 -0
  92. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/shift.py +0 -0
  93. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/cipher/xor.py +0 -0
  94. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/__init__.py +0 -0
  95. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/bz2.py +0 -0
  96. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/gzip.py +0 -0
  97. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/lzma.py +0 -0
  98. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/compression/zlib.py +0 -0
  99. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/__init__.py +0 -0
  100. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/a85.py +0 -0
  101. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b16.py +0 -0
  102. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b32.py +0 -0
  103. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b32hex.py +0 -0
  104. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b64.py +0 -0
  105. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/b85.py +0 -0
  106. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/binascii.py +0 -0
  107. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/encoding/snt.py +0 -0
  108. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/__init__.py +0 -0
  109. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/call.py +0 -0
  110. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/globals.py +0 -0
  111. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/esoteric/imports.py +0 -0
  112. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/__init__.py +0 -0
  113. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/add_comments.py +0 -0
  114. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/junk/add_newlines.py +0 -0
  115. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/other/__init__.py +0 -0
  116. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/other/tokens.py +0 -0
  117. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/__init__.py +0 -0
  118. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/comments.py +0 -0
  119. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/indents.py +0 -0
  120. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/loggings.py +0 -0
  121. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/loggings_old.py +0 -0
  122. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/newline.py +0 -0
  123. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/remove/print.py +0 -0
  124. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/restructure.py +0 -0
  125. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/__init__.py +0 -0
  126. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/docstrings.py +0 -0
  127. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/ipv6encoding.py +0 -0
  128. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/macencoding.py +0 -0
  129. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/obfuscator/stegano/uuidencoding.py +0 -0
  130. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/__init__.py +0 -0
  131. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/cipher/__init__.py +0 -0
  132. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/cipher/rc4.py +0 -0
  133. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/download.py +0 -0
  134. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/__init__.py +0 -0
  135. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/cl1pnet.py +0 -0
  136. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/pastebin.py +0 -0
  137. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/lots/pasters.py +0 -0
  138. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/stager/quine.py +0 -0
  139. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/__init__.py +0 -0
  140. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/__init__.py +0 -0
  141. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/cipher/shift.py +0 -0
  142. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/__init__.py +0 -0
  143. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/bz2.py +0 -0
  144. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/gzip.py +0 -0
  145. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/lzma.py +0 -0
  146. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/compression/zlib.py +0 -0
  147. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/__init__.py +0 -0
  148. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/a85.py +0 -0
  149. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b16.py +0 -0
  150. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b3.py +0 -0
  151. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b32.py +0 -0
  152. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b32hex.py +0 -0
  153. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b64.py +0 -0
  154. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/b85.py +0 -0
  155. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/binascii.py +0 -0
  156. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/encoding/snt.py +0 -0
  157. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/entropy.py +0 -0
  158. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/extract_names.py +0 -0
  159. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/__init__.py +0 -0
  160. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/advanced.py +0 -0
  161. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/base.py +0 -0
  162. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/basic.py +0 -0
  163. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/comments.py +0 -0
  164. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/comments.txt +0 -0
  165. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/generator/names.txt +0 -0
  166. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/__init__.py +0 -0
  167. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/homoglyphs.py +0 -0
  168. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/se/homoglyphs.txt +0 -0
  169. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/__init__.py +0 -0
  170. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/ipv6encoding.py +0 -0
  171. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/macencoding.py +0 -0
  172. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/stegano/uuidencoding.py +0 -0
  173. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/pof/utils/tokens.py +0 -0
  174. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
  175. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
  176. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
  177. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/setup.cfg +0 -0
  178. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/__init__.py +0 -0
  179. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/__init__.py +0 -0
  180. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_comments.py +0 -0
  181. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_exceptions.py +0 -0
  182. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/code/out.py +0 -0
  183. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/code/source.py +0 -0
  184. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/obfuscator/test_names/test_names.py +0 -0
  185. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/pyproject.toml +0 -0
  186. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/utils/__init__.py +0 -0
  187. {python_obfuscation_framework-1.7.0 → python_obfuscation_framework-1.7.3}/tests/utils/se/__init__.py +0 -0
  188. {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.0
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>=24.10.0
32
+ Requires-Dist: black>=25.0.0
33
33
  Provides-Extra: dev
34
- Requires-Dist: ruff==0.8.0; extra == "dev"
35
- Requires-Dist: black==24.10.0; extra == "dev"
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 in the corresponding directory or bellow.
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
- #### DefinitionsObfuscator
391
+ #### ConstantsObfuscator
245
392
 
246
- Source:
393
+ Move every variable at the top of the file with random names.
247
394
 
248
395
  ```python
249
- def say_hello(t):
250
- print(t)
251
- say_hello("Hello, world")
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
- Obfuscated:
405
+ def get_random_letter():
406
+ """This is a docstring."""
407
+ return random.choice(string.ascii_lowercase)
255
408
 
256
- ```python
257
- def sczCWV(t):
258
- print(t)
259
- sczCWV('Hello, world')
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