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.
Files changed (246) hide show
  1. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/LICENSE +2 -2
  2. {python_obfuscation_framework-1.5.1/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.6.0}/PKG-INFO +54 -23
  3. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/README.md +44 -18
  4. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/__init__.py +1 -1
  5. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/__main__.py +1 -1
  6. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/cli.py +16 -0
  7. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/cli_v2.py +16 -0
  8. python_obfuscation_framework-1.6.0/pof/errors.py +19 -0
  9. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/__init__.py +16 -0
  10. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/argv.py +16 -0
  11. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/base.py +16 -0
  12. {python_obfuscation_framework-1.5.1/tests → python_obfuscation_framework-1.6.0/pof/evasion/cpu}/__init__.py +1 -1
  13. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/cpu/cpu_count.py +16 -0
  14. python_obfuscation_framework-1.6.0/pof/evasion/fs/__init__.py +15 -0
  15. python_obfuscation_framework-1.6.0/pof/evasion/fs/directory_exist.py +45 -0
  16. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/directory_list_exist.py +16 -0
  17. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/directory_list_missing.py +16 -0
  18. python_obfuscation_framework-1.6.0/pof/evasion/fs/directory_missing.py +44 -0
  19. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/exec_method.py +16 -0
  20. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/executable_path.py +16 -0
  21. python_obfuscation_framework-1.6.0/pof/evasion/fs/file_exist.py +45 -0
  22. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/file_list_exist.py +16 -0
  23. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/file_list_missing.py +16 -0
  24. python_obfuscation_framework-1.6.0/pof/evasion/fs/file_missing.py +47 -0
  25. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/fs/tmp.py +16 -0
  26. python_obfuscation_framework-1.6.0/pof/evasion/hardware/__init__.py +15 -0
  27. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/hardware/ram_count.py +16 -0
  28. python_obfuscation_framework-1.6.0/pof/evasion/hooks/__init__.py +15 -0
  29. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/hooks/debugger.py +16 -0
  30. python_obfuscation_framework-1.6.0/pof/evasion/hooks/tracemalloc.py +39 -0
  31. python_obfuscation_framework-1.6.0/pof/evasion/human/__init__.py +15 -0
  32. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/human/p.py +17 -0
  33. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/human/prompt.py +16 -0
  34. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/integrity.py +16 -0
  35. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/multi.py +16 -0
  36. python_obfuscation_framework-1.6.0/pof/evasion/os/__init__.py +15 -0
  37. python_obfuscation_framework-1.6.0/pof/evasion/os/domain.py +43 -0
  38. python_obfuscation_framework-1.6.0/pof/evasion/os/hostname.py +43 -0
  39. python_obfuscation_framework-1.6.0/pof/evasion/os/uid.py +44 -0
  40. python_obfuscation_framework-1.6.0/pof/evasion/os/username.py +43 -0
  41. python_obfuscation_framework-1.6.0/pof/evasion/processes/__init__.py +15 -0
  42. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/processes/proc_count.py +16 -0
  43. python_obfuscation_framework-1.6.0/pof/evasion/time/__init__.py +15 -0
  44. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/time/expire.py +20 -4
  45. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/time/uptime.py +16 -0
  46. python_obfuscation_framework-1.6.0/pof/evasion/time/utc.py +42 -0
  47. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/evasion/utils.py +16 -0
  48. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/main.py +16 -0
  49. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/__init__.py +16 -0
  50. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/builtins.py +16 -0
  51. python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/__init__.py +15 -0
  52. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/cipher/deep_encryption.py +17 -4
  53. python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/rc4.py +38 -0
  54. python_obfuscation_framework-1.6.0/pof/obfuscator/cipher/shift.py +35 -0
  55. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/cipher/xor.py +16 -0
  56. python_obfuscation_framework-1.6.0/pof/obfuscator/compression/__init__.py +15 -0
  57. python_obfuscation_framework-1.6.0/pof/obfuscator/compression/bz2.py +38 -0
  58. python_obfuscation_framework-1.6.0/pof/obfuscator/compression/gzip.py +38 -0
  59. python_obfuscation_framework-1.6.0/pof/obfuscator/compression/lzma.py +38 -0
  60. python_obfuscation_framework-1.6.0/pof/obfuscator/compression/zlib.py +38 -0
  61. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/constants.py +16 -0
  62. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/definitions.py +19 -3
  63. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/__init__.py +15 -0
  64. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/a85.py +37 -0
  65. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b16.py +37 -0
  66. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b32.py +37 -0
  67. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b32hex.py +37 -0
  68. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b64.py +37 -0
  69. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/b85.py +41 -0
  70. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/binascii.py +38 -0
  71. python_obfuscation_framework-1.6.0/pof/obfuscator/encoding/snt.py +39 -0
  72. python_obfuscation_framework-1.6.0/pof/obfuscator/esoteric/__init__.py +15 -0
  73. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/call.py +16 -0
  74. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/doc.py +16 -0
  75. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/globals.py +16 -0
  76. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/esoteric/imports.py +16 -0
  77. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/extract_variables.py +16 -0
  78. python_obfuscation_framework-1.6.0/pof/obfuscator/junk/__init__.py +15 -0
  79. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/junk/add_comments.py +16 -0
  80. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/junk/add_newlines.py +16 -0
  81. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/names.py +17 -4
  82. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/names_rope.py +17 -1
  83. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/numbers.py +16 -0
  84. python_obfuscation_framework-1.6.0/pof/obfuscator/other/__init__.py +15 -0
  85. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/other/tokens.py +16 -0
  86. python_obfuscation_framework-1.6.0/pof/obfuscator/remove/__init__.py +15 -0
  87. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/comments.py +16 -0
  88. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/exceptions.py +17 -7
  89. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/indents.py +16 -0
  90. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/loggings.py +16 -0
  91. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/loggings_old.py +16 -0
  92. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/newline.py +16 -0
  93. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/remove/print.py +16 -0
  94. python_obfuscation_framework-1.6.0/pof/obfuscator/restructure.py +31 -0
  95. python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/__init__.py +15 -0
  96. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/stegano/docstrings.py +16 -0
  97. python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/ipv6encoding.py +37 -0
  98. python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/macencoding.py +37 -0
  99. python_obfuscation_framework-1.6.0/pof/obfuscator/stegano/uuidencoding.py +37 -0
  100. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/obfuscator/strings.py +78 -3
  101. python_obfuscation_framework-1.6.0/pof/stager/__init__.py +33 -0
  102. python_obfuscation_framework-1.6.0/pof/stager/cipher/__init__.py +15 -0
  103. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/cipher/rc4.py +16 -0
  104. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/download.py +16 -0
  105. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/image.py +18 -8
  106. python_obfuscation_framework-1.6.0/pof/stager/lots/__init__.py +17 -0
  107. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/cl1pnet.py +16 -0
  108. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/pastebin.py +16 -0
  109. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/lots/pasters.py +16 -0
  110. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/stager/quine.py +16 -0
  111. python_obfuscation_framework-1.6.0/pof/utils/__init__.py +15 -0
  112. python_obfuscation_framework-1.6.0/pof/utils/cipher/__init__.py +23 -0
  113. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/cipher/rc4.py +16 -0
  114. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/cipher/shift.py +16 -0
  115. python_obfuscation_framework-1.6.0/pof/utils/compression/__init__.py +27 -0
  116. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/bz2.py +16 -0
  117. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/gzip.py +16 -0
  118. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/lzma.py +16 -0
  119. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/compression/zlib.py +16 -0
  120. python_obfuscation_framework-1.6.0/pof/utils/encoding/__init__.py +35 -0
  121. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/a85.py +16 -0
  122. python_obfuscation_framework-1.6.0/pof/utils/encoding/b16.py +46 -0
  123. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/b3.py +16 -0
  124. python_obfuscation_framework-1.6.0/pof/utils/encoding/b32.py +46 -0
  125. python_obfuscation_framework-1.6.0/pof/utils/encoding/b32hex.py +46 -0
  126. python_obfuscation_framework-1.6.0/pof/utils/encoding/b64.py +46 -0
  127. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/b85.py +16 -0
  128. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/binascii.py +16 -0
  129. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/encoding/snt.py +16 -0
  130. python_obfuscation_framework-1.6.0/pof/utils/entropy.py +40 -0
  131. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/extract_names.py +16 -0
  132. python_obfuscation_framework-1.6.0/pof/utils/generator/__init__.py +33 -0
  133. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/advanced.py +16 -0
  134. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/base.py +16 -0
  135. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/basic.py +16 -0
  136. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/unicode.py +17 -1
  137. python_obfuscation_framework-1.6.0/pof/utils/se/__init__.py +19 -0
  138. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/se/homoglyphs.py +16 -0
  139. python_obfuscation_framework-1.6.0/pof/utils/stegano/__init__.py +21 -0
  140. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/ipv6encoding.py +16 -0
  141. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/macencoding.py +16 -0
  142. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/stegano/uuidencoding.py +16 -0
  143. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/tokens.py +16 -0
  144. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pyproject.toml +7 -2
  145. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0/python_obfuscation_framework.egg-info}/PKG-INFO +54 -23
  146. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/requires.txt +5 -0
  147. python_obfuscation_framework-1.6.0/tests/__init__.py +15 -0
  148. python_obfuscation_framework-1.6.0/tests/obfuscator/__init__.py +15 -0
  149. python_obfuscation_framework-1.6.0/tests/obfuscator/test_a85.py +38 -0
  150. python_obfuscation_framework-1.6.0/tests/obfuscator/test_b16.py +38 -0
  151. python_obfuscation_framework-1.6.0/tests/obfuscator/test_b32.py +38 -0
  152. python_obfuscation_framework-1.6.0/tests/obfuscator/test_b32hex.py +38 -0
  153. python_obfuscation_framework-1.6.0/tests/obfuscator/test_b64.py +38 -0
  154. python_obfuscation_framework-1.6.0/tests/obfuscator/test_b85.py +38 -0
  155. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_comments.py +16 -0
  156. python_obfuscation_framework-1.6.0/tests/obfuscator/test_docstrings.py +38 -0
  157. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_exceptions.py +16 -0
  158. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/test_names.py +16 -0
  159. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_print.py +16 -0
  160. python_obfuscation_framework-1.6.0/tests/obfuscator/test_xor.py +41 -0
  161. python_obfuscation_framework-1.6.0/tests/utils/__init__.py +15 -0
  162. python_obfuscation_framework-1.6.0/tests/utils/se/__init__.py +15 -0
  163. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/utils/se/test_homoglyphs.py +16 -0
  164. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/utils/test_generator.py +16 -0
  165. python_obfuscation_framework-1.5.1/pof/errors.py +0 -2
  166. python_obfuscation_framework-1.5.1/pof/evasion/cpu/__init__.py +0 -0
  167. python_obfuscation_framework-1.5.1/pof/evasion/fs/__init__.py +0 -0
  168. python_obfuscation_framework-1.5.1/pof/evasion/fs/directory_exist.py +0 -29
  169. python_obfuscation_framework-1.5.1/pof/evasion/fs/directory_missing.py +0 -28
  170. python_obfuscation_framework-1.5.1/pof/evasion/fs/file_exist.py +0 -29
  171. python_obfuscation_framework-1.5.1/pof/evasion/fs/file_missing.py +0 -31
  172. python_obfuscation_framework-1.5.1/pof/evasion/hardware/__init__.py +0 -0
  173. python_obfuscation_framework-1.5.1/pof/evasion/hooks/__init__.py +0 -0
  174. python_obfuscation_framework-1.5.1/pof/evasion/hooks/tracemalloc.py +0 -23
  175. python_obfuscation_framework-1.5.1/pof/evasion/human/__init__.py +0 -0
  176. python_obfuscation_framework-1.5.1/pof/evasion/os/__init__.py +0 -0
  177. python_obfuscation_framework-1.5.1/pof/evasion/os/domain.py +0 -27
  178. python_obfuscation_framework-1.5.1/pof/evasion/os/hostname.py +0 -27
  179. python_obfuscation_framework-1.5.1/pof/evasion/os/uid.py +0 -28
  180. python_obfuscation_framework-1.5.1/pof/evasion/os/username.py +0 -27
  181. python_obfuscation_framework-1.5.1/pof/evasion/processes/__init__.py +0 -0
  182. python_obfuscation_framework-1.5.1/pof/evasion/time/__init__.py +0 -0
  183. python_obfuscation_framework-1.5.1/pof/evasion/time/utc.py +0 -26
  184. python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/__init__.py +0 -0
  185. python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/rc4.py +0 -22
  186. python_obfuscation_framework-1.5.1/pof/obfuscator/cipher/shift.py +0 -19
  187. python_obfuscation_framework-1.5.1/pof/obfuscator/compression/__init__.py +0 -0
  188. python_obfuscation_framework-1.5.1/pof/obfuscator/compression/bz2.py +0 -22
  189. python_obfuscation_framework-1.5.1/pof/obfuscator/compression/gzip.py +0 -22
  190. python_obfuscation_framework-1.5.1/pof/obfuscator/compression/lzma.py +0 -22
  191. python_obfuscation_framework-1.5.1/pof/obfuscator/compression/zlib.py +0 -22
  192. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/__init__.py +0 -0
  193. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/a85.py +0 -21
  194. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b16.py +0 -21
  195. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b32.py +0 -21
  196. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b32hex.py +0 -21
  197. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b64.py +0 -21
  198. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/b85.py +0 -25
  199. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/binascii.py +0 -22
  200. python_obfuscation_framework-1.5.1/pof/obfuscator/encoding/snt.py +0 -23
  201. python_obfuscation_framework-1.5.1/pof/obfuscator/esoteric/__init__.py +0 -0
  202. python_obfuscation_framework-1.5.1/pof/obfuscator/junk/__init__.py +0 -0
  203. python_obfuscation_framework-1.5.1/pof/obfuscator/other/__init__.py +0 -0
  204. python_obfuscation_framework-1.5.1/pof/obfuscator/remove/__init__.py +0 -0
  205. python_obfuscation_framework-1.5.1/pof/obfuscator/restructure.py +0 -15
  206. python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/__init__.py +0 -0
  207. python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/ipv6encoding.py +0 -21
  208. python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/macencoding.py +0 -21
  209. python_obfuscation_framework-1.5.1/pof/obfuscator/stegano/uuidencoding.py +0 -21
  210. python_obfuscation_framework-1.5.1/pof/stager/__init__.py +0 -17
  211. python_obfuscation_framework-1.5.1/pof/stager/cipher/__init__.py +0 -0
  212. python_obfuscation_framework-1.5.1/pof/stager/lots/__init__.py +0 -1
  213. python_obfuscation_framework-1.5.1/pof/utils/__init__.py +0 -0
  214. python_obfuscation_framework-1.5.1/pof/utils/cipher/__init__.py +0 -7
  215. python_obfuscation_framework-1.5.1/pof/utils/compression/__init__.py +0 -11
  216. python_obfuscation_framework-1.5.1/pof/utils/encoding/__init__.py +0 -19
  217. python_obfuscation_framework-1.5.1/pof/utils/encoding/b16.py +0 -30
  218. python_obfuscation_framework-1.5.1/pof/utils/encoding/b32.py +0 -30
  219. python_obfuscation_framework-1.5.1/pof/utils/encoding/b32hex.py +0 -30
  220. python_obfuscation_framework-1.5.1/pof/utils/encoding/b64.py +0 -30
  221. python_obfuscation_framework-1.5.1/pof/utils/entropy.py +0 -24
  222. python_obfuscation_framework-1.5.1/pof/utils/generator/__init__.py +0 -17
  223. python_obfuscation_framework-1.5.1/pof/utils/se/__init__.py +0 -3
  224. python_obfuscation_framework-1.5.1/pof/utils/stegano/__init__.py +0 -5
  225. python_obfuscation_framework-1.5.1/tests/obfuscator/__init__.py +0 -0
  226. python_obfuscation_framework-1.5.1/tests/obfuscator/test_a85.py +0 -22
  227. python_obfuscation_framework-1.5.1/tests/obfuscator/test_b16.py +0 -22
  228. python_obfuscation_framework-1.5.1/tests/obfuscator/test_b32.py +0 -22
  229. python_obfuscation_framework-1.5.1/tests/obfuscator/test_b32hex.py +0 -22
  230. python_obfuscation_framework-1.5.1/tests/obfuscator/test_b64.py +0 -22
  231. python_obfuscation_framework-1.5.1/tests/obfuscator/test_b85.py +0 -22
  232. python_obfuscation_framework-1.5.1/tests/obfuscator/test_docstrings.py +0 -22
  233. python_obfuscation_framework-1.5.1/tests/obfuscator/test_xor.py +0 -25
  234. python_obfuscation_framework-1.5.1/tests/utils/__init__.py +0 -0
  235. python_obfuscation_framework-1.5.1/tests/utils/se/__init__.py +0 -0
  236. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/MANIFEST.in +0 -0
  237. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/generator/names.txt +0 -0
  238. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/pof/utils/se/homoglyphs.txt +0 -0
  239. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/SOURCES.txt +0 -0
  240. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
  241. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
  242. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
  243. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/setup.cfg +0 -0
  244. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/code/out.py +0 -0
  245. {python_obfuscation_framework-1.5.1 → python_obfuscation_framework-1.6.0}/tests/obfuscator/test_names/code/source.py +0 -0
  246. {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-2024 POF Team
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-2024 POF Team
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.2
1
+ Metadata-Version: 2.4
2
2
  Name: python-obfuscation-framework
3
- Version: 1.5.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-2024 POF Team
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-2024 POF Team
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 :: MIT License
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 src.py > out.py
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
- ./setup.py install
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 -it pof --help
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 -it pof /tmp/in.py -o /tmp/out.py
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
- rint('Helnelemd'.replace('nelem','lo, worl'))
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
- ex_generator = BasicGenerator.number_name_generator()
1436
+
1437
+ # replace exceptions with reversable random names
1421
1438
  tokens = ExceptionObfuscator(
1422
1439
  add_codes=True,
1423
- generator=ex_generator,
1440
+ generator=BasicGenerator.number_name_generator(),
1424
1441
  ).obfuscate_tokens(tokens)
1425
1442
 
1426
- # configure generator
1427
- gen_dict = {
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
- # core obfuscation
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 twine check-manifest
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 src.py > out.py
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
- ./setup.py install
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 -it pof --help
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 -it pof /tmp/in.py -o /tmp/out.py
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
- rint('Helnelemd'.replace('nelem','lo, worl'))
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
- ex_generator = BasicGenerator.number_name_generator()
717
+
718
+ # replace exceptions with reversable random names
707
719
  tokens = ExceptionObfuscator(
708
720
  add_codes=True,
709
- generator=ex_generator,
721
+ generator=BasicGenerator.number_name_generator(),
710
722
  ).obfuscate_tokens(tokens)
711
723
 
712
- # configure generator
713
- gen_dict = {
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
- # core obfuscation
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 twine check-manifest
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-2024 POF Team
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-2024 POF Team
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
@@ -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
@@ -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
@@ -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-2024 POF Team
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