python-obfuscation-framework 1.9.3__tar.gz → 1.10.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 (183) hide show
  1. {python_obfuscation_framework-1.9.3/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.10.0}/PKG-INFO +39 -32
  2. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/README.md +38 -31
  3. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/cli_v2.py +0 -6
  4. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/main.py +6 -59
  5. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/__init__.py +2 -6
  6. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/controlflow/control_flow_flatten.py +1 -1
  7. python_obfuscation_framework-1.10.0/pof/obfuscator/junk/dead_code.py +358 -0
  8. python_obfuscation_framework-1.10.0/pof/obfuscator/names.py +401 -0
  9. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pyproject.toml +1 -1
  10. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0/python_obfuscation_framework.egg-info}/PKG-INFO +39 -32
  11. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/python_obfuscation_framework.egg-info/SOURCES.txt +2 -3
  12. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/conftest.py +16 -31
  13. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/fixtures/complex.py +31 -0
  14. python_obfuscation_framework-1.10.0/tests/obfuscator/fixtures/getattr.py +10 -0
  15. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/fixtures/multiline_strings.py +0 -8
  16. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/test_edge_cases.py +0 -6
  17. python_obfuscation_framework-1.9.3/pof/obfuscator/definitions.py +0 -356
  18. python_obfuscation_framework-1.9.3/pof/obfuscator/names.py +0 -490
  19. python_obfuscation_framework-1.9.3/pof/obfuscator/names_rope.py +0 -397
  20. python_obfuscation_framework-1.9.3/pof/obfuscator/variables.py +0 -116
  21. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/LICENSE +0 -0
  22. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/MANIFEST.in +0 -0
  23. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/__init__.py +0 -0
  24. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/__main__.py +0 -0
  25. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/cli.py +0 -0
  26. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/errors.py +0 -0
  27. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/__init__.py +0 -0
  28. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/argv.py +0 -0
  29. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/base.py +0 -0
  30. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/cpu/__init__.py +0 -0
  31. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/cpu/cpu_count.py +0 -0
  32. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/__init__.py +0 -0
  33. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/directory_exist.py +0 -0
  34. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/directory_list_exist.py +0 -0
  35. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/directory_list_missing.py +0 -0
  36. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/directory_missing.py +0 -0
  37. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/exec_method.py +0 -0
  38. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/executable_path.py +0 -0
  39. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/file_exist.py +0 -0
  40. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/file_list_exist.py +0 -0
  41. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/file_list_missing.py +0 -0
  42. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/file_missing.py +0 -0
  43. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/fs/tmp.py +0 -0
  44. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/hardware/__init__.py +0 -0
  45. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/hardware/ram_count.py +0 -0
  46. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/hooks/__init__.py +0 -0
  47. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/hooks/debugger.py +0 -0
  48. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/hooks/tracemalloc.py +0 -0
  49. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/human/__init__.py +0 -0
  50. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/human/p.py +0 -0
  51. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/human/prompt.py +0 -0
  52. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/integrity.py +0 -0
  53. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/multi.py +0 -0
  54. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/os/__init__.py +0 -0
  55. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/os/domain.py +0 -0
  56. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/os/hostname.py +0 -0
  57. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/os/uid.py +0 -0
  58. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/os/username.py +0 -0
  59. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/processes/__init__.py +0 -0
  60. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/processes/proc_count.py +0 -0
  61. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/time/__init__.py +0 -0
  62. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/time/expire.py +0 -0
  63. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/time/uptime.py +0 -0
  64. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/time/utc.py +0 -0
  65. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/evasion/utils.py +0 -0
  66. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/logger.py +0 -0
  67. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/boolean.py +0 -0
  68. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/builtins.py +0 -0
  69. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/cipher/__init__.py +0 -0
  70. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/cipher/deep_encryption.py +0 -0
  71. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/cipher/rc4.py +0 -0
  72. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/cipher/shift.py +0 -0
  73. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/cipher/xor.py +0 -0
  74. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/compression/__init__.py +0 -0
  75. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/compression/bz2.py +0 -0
  76. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/compression/gzip.py +0 -0
  77. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/compression/lzma.py +0 -0
  78. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/compression/zlib.py +0 -0
  79. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/constants.py +0 -0
  80. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/controlflow/__init__.py +0 -0
  81. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/__init__.py +0 -0
  82. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/a85.py +0 -0
  83. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/b16.py +0 -0
  84. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/b32.py +0 -0
  85. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/b32hex.py +0 -0
  86. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/b64.py +0 -0
  87. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/b85.py +0 -0
  88. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/binascii.py +0 -0
  89. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/snt.py +0 -0
  90. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/encoding/whitespace.py +0 -0
  91. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/esoteric/__init__.py +0 -0
  92. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/esoteric/call.py +0 -0
  93. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/esoteric/doc.py +0 -0
  94. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/esoteric/globals.py +0 -0
  95. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/esoteric/imports.py +0 -0
  96. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/extract_variables.py +0 -0
  97. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/junk/__init__.py +0 -0
  98. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/junk/add_comments.py +0 -0
  99. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/junk/add_newlines.py +0 -0
  100. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/numbers.py +0 -0
  101. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/other/__init__.py +0 -0
  102. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/other/tokens.py +0 -0
  103. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/__init__.py +0 -0
  104. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/comments.py +0 -0
  105. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/exceptions.py +0 -0
  106. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/indents.py +0 -0
  107. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/loggings.py +0 -0
  108. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/loggings_old.py +0 -0
  109. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/newline.py +0 -0
  110. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/remove/print.py +0 -0
  111. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/restructure.py +0 -0
  112. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/stegano/__init__.py +0 -0
  113. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/stegano/docstrings.py +0 -0
  114. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/stegano/ipv6encoding.py +0 -0
  115. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/stegano/macencoding.py +0 -0
  116. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/stegano/uuidencoding.py +0 -0
  117. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/obfuscator/strings.py +0 -0
  118. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/__init__.py +0 -0
  119. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/cipher/__init__.py +0 -0
  120. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/cipher/rc4.py +0 -0
  121. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/download.py +0 -0
  122. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/image.py +0 -0
  123. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/lots/__init__.py +0 -0
  124. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/lots/cl1pnet.py +0 -0
  125. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/lots/pastebin.py +0 -0
  126. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/lots/pasters.py +0 -0
  127. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/stager/quine.py +0 -0
  128. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/__init__.py +0 -0
  129. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/cipher/__init__.py +0 -0
  130. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/cipher/rc4.py +0 -0
  131. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/cipher/shift.py +0 -0
  132. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/compression/__init__.py +0 -0
  133. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/compression/bz2.py +0 -0
  134. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/compression/gzip.py +0 -0
  135. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/compression/lzma.py +0 -0
  136. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/compression/zlib.py +0 -0
  137. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/__init__.py +0 -0
  138. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/a85.py +0 -0
  139. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b16.py +0 -0
  140. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b3.py +0 -0
  141. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b32.py +0 -0
  142. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b32hex.py +0 -0
  143. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b64.py +0 -0
  144. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/b85.py +0 -0
  145. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/binascii.py +0 -0
  146. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/snt.py +0 -0
  147. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/encoding/whitespace.py +0 -0
  148. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/entropy.py +0 -0
  149. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/extract_names.py +0 -0
  150. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/format.py +0 -0
  151. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/__init__.py +0 -0
  152. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/advanced.py +0 -0
  153. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/base.py +0 -0
  154. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/basic.py +0 -0
  155. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/comments.py +0 -0
  156. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/comments.txt +0 -0
  157. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/names.txt +0 -0
  158. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/generator/unicode.py +0 -0
  159. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/se/__init__.py +0 -0
  160. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/se/homoglyphs.py +0 -0
  161. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/se/homoglyphs.txt +0 -0
  162. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/stegano/__init__.py +0 -0
  163. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/stegano/ipv6encoding.py +0 -0
  164. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/stegano/macencoding.py +0 -0
  165. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/stegano/uuidencoding.py +0 -0
  166. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/pof/utils/tokens.py +0 -0
  167. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
  168. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
  169. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/python_obfuscation_framework.egg-info/requires.txt +0 -0
  170. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
  171. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/setup.cfg +0 -0
  172. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/__init__.py +0 -0
  173. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/__init__.py +0 -0
  174. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/fixtures/__init__.py +0 -0
  175. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/fixtures/moderate.py +0 -0
  176. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/fixtures/simple.py +0 -0
  177. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/test_integration.py +0 -0
  178. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/obfuscator/utils.py +0 -0
  179. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/pyproject.toml +0 -0
  180. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/utils/__init__.py +0 -0
  181. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/utils/se/__init__.py +0 -0
  182. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/utils/se/test_homoglyphs.py +0 -0
  183. {python_obfuscation_framework-1.9.3 → python_obfuscation_framework-1.10.0}/tests/utils/test_generator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-obfuscation-framework
3
- Version: 1.9.3
3
+ Version: 1.10.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>
@@ -320,53 +320,44 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
320
320
 
321
321
  ### Obfuscator
322
322
 
323
- `VariablesObfuscator` the most basic obfuscator will rename variables.
323
+ `NamesObfuscator` obfuscator is renaming variables, classes, and functions.
324
324
 
325
325
  Source in `examples/source.py`.
326
326
 
327
327
  ```python
328
328
  import os
329
329
 
330
- def get_linux_release_info():
330
+ def BJM4FaQJf1():
331
331
  """Get Linux release info from /etc/os-release."""
332
- uggNx = '/etc/os-release'
333
- if not os.path.exists(uggNx):
332
+ h77 = '/etc/os-release'
333
+ if not os.path.exists(h77):
334
334
  print('OS release file not found. This might not be a Linux system.')
335
335
  return None
336
- LY3mN = {}
336
+ jkFr = {}
337
337
  try:
338
- with open(uggNx, 'r') as kj0:
339
- for Stv9o in kj0:
340
- if not Stv9o or '=' not in Stv9o:
338
+ with open(h77, 'r') as LfQ:
339
+ for GIVt40c7RR in LfQ:
340
+ if not GIVt40c7RR or '=' not in GIVt40c7RR:
341
341
  continue
342
- l0j, QE5kCKYwMe = Stv9o.strip().split('=', 1)
343
- QE5kCKYwMe = QE5kCKYwMe.strip('"\'\n')
344
- LY3mN[l0j] = QE5kCKYwMe
342
+ KPO5j, RQvTXmL = GIVt40c7RR.strip().split('=', 1)
343
+ RQvTXmL = RQvTXmL.strip('"\'\n')
344
+ jkFr[KPO5j] = RQvTXmL
345
345
  print('\nLinux Release Information:')
346
- print(f"Distribution: {LY3mN.get('NAME', 'Unknown')}")
347
- print(f"Version: {LY3mN.get('VERSION', 'Unknown')}")
348
- print(f"Version ID: {LY3mN.get('VERSION_ID', 'Unknown')}")
349
- print(f"Pretty Name: {LY3mN.get('PRETTY_NAME', 'Unknown')}")
350
- return LY3mN
351
- except Exception as e:
352
- print(f'Error reading release file: {e}')
346
+ print(f"Distribution: {jkFr.get('NAME', 'Unknown')}")
347
+ print(f"Version: {jkFr.get('VERSION', 'Unknown')}")
348
+ print(f"Version ID: {jkFr.get('VERSION_ID', 'Unknown')}")
349
+ print(f"Pretty Name: {jkFr.get('PRETTY_NAME', 'Unknown')}")
350
+ return jkFr
351
+ except Exception as LzYLqi_:
352
+ print(f'Error reading release file: {LzYLqi_}')
353
353
  return None
354
354
  if __name__ == '__main__':
355
355
  if os.name == 'posix' and os.path.exists('/etc/os-release'):
356
- E_R72 = get_linux_release_info()
356
+ yv4HAqmn = BJM4FaQJf1()
357
357
  else:
358
358
  print('This script is designed for Linux systems.')
359
359
  ```
360
360
 
361
- `DefinitionsObfuscator` obfuscate function names.
362
-
363
- > [!WARNING]
364
- > `NamesObfuscator` obfuscator is renaming variables, classes, functions, and
365
- > imports. Right now this obfuscator can fail under very specific circumstances,
366
- > see `pof/obfuscator/names.py`. There is an alternative implementation at
367
- > `NamesRopeObfuscator` that uses `rope`, it's a work in progress and currently
368
- > does not obfuscate variables declared inside functions.
369
-
370
361
  Other very basic obfuscation functions are done by specific obfuscators like:
371
362
 
372
363
  - Removing comments with `CommentsObfuscator`.
@@ -873,6 +864,21 @@ def greet(name):
873
864
  > [!NOTE]
874
865
  > Functions containing `yield`, `async`, or `try/except` are skipped and left unchanged.
875
866
 
867
+ #### DeadCodeObfuscator
868
+
869
+ Insert dead (unreachable/unused) code blocks into the source.
870
+
871
+ Source: `print('Hello, world')`
872
+
873
+ ```python
874
+ while False:
875
+ Etb4inx6B1=[21,7,46,2]
876
+ agw_QLOu=283-42
877
+ FwQ2='msg'
878
+
879
+ print('Hello, world')
880
+ ```
881
+
876
882
  ### Stager
877
883
 
878
884
  #### DownloadStager
@@ -1268,9 +1274,12 @@ interesting strings in Python source code. To check rules against source files
1268
1274
  and/or obfuscated files run:
1269
1275
 
1270
1276
  ```bash
1271
- yara --no-warnings yara/python.yar file.py
1277
+ yara --no-warnings yara/python.yar examples/out/custom_complete_format.py
1272
1278
  ```
1273
1279
 
1280
+ > [!NOTE]
1281
+ > The rules are far from perfect, but they are a starting point.
1282
+
1274
1283
  ## Development
1275
1284
 
1276
1285
  Project directory structure:
@@ -1363,8 +1372,6 @@ Other Python obfuscation projects:
1363
1372
 
1364
1373
  ## TODO
1365
1374
 
1366
- - Add control flow obfuscation, add dead code, opaque predicates, control flow
1367
- flattening.
1368
1375
  - Fix `NamesObfuscator`.
1369
1376
  - Add option to prepend a shebang, and add ability to customize it.
1370
1377
 
@@ -275,53 +275,44 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
275
275
 
276
276
  ### Obfuscator
277
277
 
278
- `VariablesObfuscator` the most basic obfuscator will rename variables.
278
+ `NamesObfuscator` obfuscator is renaming variables, classes, and functions.
279
279
 
280
280
  Source in `examples/source.py`.
281
281
 
282
282
  ```python
283
283
  import os
284
284
 
285
- def get_linux_release_info():
285
+ def BJM4FaQJf1():
286
286
  """Get Linux release info from /etc/os-release."""
287
- uggNx = '/etc/os-release'
288
- if not os.path.exists(uggNx):
287
+ h77 = '/etc/os-release'
288
+ if not os.path.exists(h77):
289
289
  print('OS release file not found. This might not be a Linux system.')
290
290
  return None
291
- LY3mN = {}
291
+ jkFr = {}
292
292
  try:
293
- with open(uggNx, 'r') as kj0:
294
- for Stv9o in kj0:
295
- if not Stv9o or '=' not in Stv9o:
293
+ with open(h77, 'r') as LfQ:
294
+ for GIVt40c7RR in LfQ:
295
+ if not GIVt40c7RR or '=' not in GIVt40c7RR:
296
296
  continue
297
- l0j, QE5kCKYwMe = Stv9o.strip().split('=', 1)
298
- QE5kCKYwMe = QE5kCKYwMe.strip('"\'\n')
299
- LY3mN[l0j] = QE5kCKYwMe
297
+ KPO5j, RQvTXmL = GIVt40c7RR.strip().split('=', 1)
298
+ RQvTXmL = RQvTXmL.strip('"\'\n')
299
+ jkFr[KPO5j] = RQvTXmL
300
300
  print('\nLinux Release Information:')
301
- print(f"Distribution: {LY3mN.get('NAME', 'Unknown')}")
302
- print(f"Version: {LY3mN.get('VERSION', 'Unknown')}")
303
- print(f"Version ID: {LY3mN.get('VERSION_ID', 'Unknown')}")
304
- print(f"Pretty Name: {LY3mN.get('PRETTY_NAME', 'Unknown')}")
305
- return LY3mN
306
- except Exception as e:
307
- print(f'Error reading release file: {e}')
301
+ print(f"Distribution: {jkFr.get('NAME', 'Unknown')}")
302
+ print(f"Version: {jkFr.get('VERSION', 'Unknown')}")
303
+ print(f"Version ID: {jkFr.get('VERSION_ID', 'Unknown')}")
304
+ print(f"Pretty Name: {jkFr.get('PRETTY_NAME', 'Unknown')}")
305
+ return jkFr
306
+ except Exception as LzYLqi_:
307
+ print(f'Error reading release file: {LzYLqi_}')
308
308
  return None
309
309
  if __name__ == '__main__':
310
310
  if os.name == 'posix' and os.path.exists('/etc/os-release'):
311
- E_R72 = get_linux_release_info()
311
+ yv4HAqmn = BJM4FaQJf1()
312
312
  else:
313
313
  print('This script is designed for Linux systems.')
314
314
  ```
315
315
 
316
- `DefinitionsObfuscator` obfuscate function names.
317
-
318
- > [!WARNING]
319
- > `NamesObfuscator` obfuscator is renaming variables, classes, functions, and
320
- > imports. Right now this obfuscator can fail under very specific circumstances,
321
- > see `pof/obfuscator/names.py`. There is an alternative implementation at
322
- > `NamesRopeObfuscator` that uses `rope`, it's a work in progress and currently
323
- > does not obfuscate variables declared inside functions.
324
-
325
316
  Other very basic obfuscation functions are done by specific obfuscators like:
326
317
 
327
318
  - Removing comments with `CommentsObfuscator`.
@@ -828,6 +819,21 @@ def greet(name):
828
819
  > [!NOTE]
829
820
  > Functions containing `yield`, `async`, or `try/except` are skipped and left unchanged.
830
821
 
822
+ #### DeadCodeObfuscator
823
+
824
+ Insert dead (unreachable/unused) code blocks into the source.
825
+
826
+ Source: `print('Hello, world')`
827
+
828
+ ```python
829
+ while False:
830
+ Etb4inx6B1=[21,7,46,2]
831
+ agw_QLOu=283-42
832
+ FwQ2='msg'
833
+
834
+ print('Hello, world')
835
+ ```
836
+
831
837
  ### Stager
832
838
 
833
839
  #### DownloadStager
@@ -1223,9 +1229,12 @@ interesting strings in Python source code. To check rules against source files
1223
1229
  and/or obfuscated files run:
1224
1230
 
1225
1231
  ```bash
1226
- yara --no-warnings yara/python.yar file.py
1232
+ yara --no-warnings yara/python.yar examples/out/custom_complete_format.py
1227
1233
  ```
1228
1234
 
1235
+ > [!NOTE]
1236
+ > The rules are far from perfect, but they are a starting point.
1237
+
1229
1238
  ## Development
1230
1239
 
1231
1240
  Project directory structure:
@@ -1318,8 +1327,6 @@ Other Python obfuscation projects:
1318
1327
 
1319
1328
  ## TODO
1320
1329
 
1321
- - Add control flow obfuscation, add dead code, opaque predicates, control flow
1322
- flattening.
1323
1330
  - Fix `NamesObfuscator`.
1324
1331
  - Add option to prepend a shebang, and add ability to customize it.
1325
1332
 
@@ -92,9 +92,6 @@ def add_obfuscation(tokens, args):
92
92
  if args.obf_constants:
93
93
  logger.debug("obfuscating constants")
94
94
  tokens = ConstantsObfuscator().obfuscate_tokens(tokens)
95
- if args.obf_definitions:
96
- logger.debug("obfuscating definitions")
97
- tokens = DefinitionsObfuscator().obfuscate_tokens(tokens)
98
95
  if args.obf_a85:
99
96
  logger.debug("obfuscating a85")
100
97
  tokens = ASCII85Obfuscator().obfuscate_tokens(tokens)
@@ -146,9 +143,6 @@ def add_obfuscation(tokens, args):
146
143
  if args.obf_names:
147
144
  logger.debug("obfuscating names")
148
145
  tokens = NamesObfuscator().obfuscate_tokens(tokens)
149
- if args.obf_names_rope:
150
- logger.debug("obfuscating names_rope")
151
- tokens = NamesRopeObfuscator().obfuscate_tokens(tokens)
152
146
  if args.obf_numbers:
153
147
  logger.debug("obfuscating numbers")
154
148
  tokens = NumberObfuscator().obfuscate_tokens(tokens)
@@ -45,7 +45,6 @@ from pof.obfuscator import (
45
45
  BuiltinsObfuscator,
46
46
  CommentsObfuscator,
47
47
  ConstantsObfuscator,
48
- DefinitionsObfuscator,
49
48
  DocstringObfuscator,
50
49
  ExceptionObfuscator,
51
50
  GlobalsObfuscator,
@@ -56,7 +55,6 @@ from pof.obfuscator import (
56
55
  NumberObfuscator,
57
56
  PrintObfuscator,
58
57
  StringsObfuscator,
59
- VariablesObfuscator,
60
58
  XORObfuscator,
61
59
  )
62
60
  from pof.stager import ImageStager, RC4Stager
@@ -123,8 +121,6 @@ class Obfuscator(BaseObfuscator):
123
121
  generator=ex_generator,
124
122
  ).obfuscate_tokens(tokens)
125
123
 
126
- tokens = DefinitionsObfuscator().obfuscate_tokens(tokens)
127
-
128
124
  # configure generator
129
125
  # generator = alphabet_generator()
130
126
  gen_dict = {
@@ -145,42 +141,7 @@ class Obfuscator(BaseObfuscator):
145
141
  obf_builtins_rate=0.3,
146
142
  ).obfuscate_tokens(tokens)
147
143
 
148
- # FIXME (deoktr): breaks !
149
- # for detailed explanation just consider the following:
150
- # ```
151
- # import module
152
- # class Bar:
153
- # def __init__(self):
154
- # self.foo = getattr(config, "FOO", True)
155
- # module.imported.function(self.foo)
156
- # ```
157
- # in this case the first instance of `foo` will successfully be
158
- # obfuscated (as it should) but then with the getattr it's marked has
159
- # "imported" because it's the result of a builtin function, but notice
160
- # that it's not a "simple" variable but rather it's a class attribute
161
- # and has a 'self' behind it, so if the variable is marked has imported
162
- # and a `.` is placed behind it, it won't be changed, this is the case
163
- # in the function call, which is itself imported, and thus set the
164
- # imported attribute for itself and all the parameters given to it
165
- # this is because we don't keep track of the level of the imported
166
- #
167
- # FIXME (deoktr): breaks !
168
- # Another problem is related to result of function, this is, ofc very
169
- # hard to deal with, but if a function returns an object, such has for
170
- # example an object of an imported class, which attribute are not
171
- # obfuscatable, then it breaks.
172
- # ```
173
- # import foo
174
- # def a():
175
- # return foo.bar()
176
- # x = a()
177
- # x.baz()
178
- # ```
179
- # In this context, `baz` would be obfuscated, but it shouldn't because
180
- # the function is part of the `foo` imported module
181
- # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
182
- # TODO (deoktr): use alternative variable obfuscator using the AST
183
- # tokens = VariablesObfuscator().obfuscate_tokens(tokens)
144
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
184
145
 
185
146
  tokens = GlobalsObfuscator().obfuscate_tokens(tokens)
186
147
  tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
@@ -241,9 +202,7 @@ class Obfuscator(BaseObfuscator):
241
202
  tokens = self._get_tokens(source)
242
203
  tokens = CommentsObfuscator().obfuscate_tokens(tokens)
243
204
  generator = BasicGenerator.alphabet_generator()
244
- # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
245
- tokens = VariablesObfuscator(generator=generator).obfuscate_tokens(tokens)
246
- tokens = DefinitionsObfuscator(generator=generator).obfuscate_tokens(tokens)
205
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
247
206
  tokens = IndentsObfuscator().obfuscate_tokens(tokens)
248
207
  tokens = NewlineObfuscator().obfuscate_tokens(tokens)
249
208
  return self._untokenize(tokens)
@@ -309,18 +268,7 @@ class Obfuscator(BaseObfuscator):
309
268
  tokens = CommentsObfuscator().obfuscate_tokens(tokens)
310
269
  tokens = ExceptionObfuscator(generator=generator).obfuscate_tokens(tokens)
311
270
  tokens = LoggingObfuscator(generator=generator).obfuscate_tokens(tokens)
312
- # FIXME (deoktr): when placed BEFORE NamesObfuscator it breaks the code
313
- # tokens = ConstantsObfuscator(
314
- # generator=generator,
315
- # obf_number_rate=1,
316
- # # FIXME (deoktr): breaks if obf_string_rate=1 with NamesObfuscator
317
- # obf_string_rate=0,
318
- # # FIXME (deoktr): breaks if obf_builtins_rate=1 with NamesObfuscator
319
- # obf_builtins_rate=0,
320
- # ).obfuscate_tokens(tokens)
321
- # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
322
- tokens = VariablesObfuscator(generator=generator).obfuscate_tokens(tokens)
323
- tokens = DefinitionsObfuscator(generator=generator).obfuscate_tokens(tokens)
271
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
324
272
  tokens = ConstantsObfuscator(
325
273
  generator=generator,
326
274
  obf_number_rate=1,
@@ -384,10 +332,9 @@ class Obfuscator(BaseObfuscator):
384
332
  # tokens = ConstantsObfuscator(generator=generator).obfuscate_tokens(tokens)
385
333
 
386
334
  tokens = CommentsObfuscator().obfuscate_tokens(tokens)
387
- # tokens = DeepEncryptionEvasion().add_evasion(tokens) # TODO (deoktr): fix
388
- # tokens = NamesObfuscator(
389
- # generator=AdvancedGenerator.fixed_length_generator(),
390
- # ).obfuscate_tokens(tokens)
335
+ tokens = NamesObfuscator(
336
+ generator=AdvancedGenerator.fixed_length_generator(),
337
+ ).obfuscate_tokens(tokens)
391
338
  tokens = BooleanObfuscator().obfuscate_tokens(tokens)
392
339
  tokens = IndentsObfuscator().obfuscate_tokens(tokens)
393
340
  tokens = NewlineObfuscator().obfuscate_tokens(tokens)
@@ -26,7 +26,6 @@ from .compression.lzma import LzmaObfuscator
26
26
  from .compression.zlib import ZlibObfuscator
27
27
  from .constants import ConstantsObfuscator
28
28
  from .controlflow.control_flow_flatten import ControlFlowFlattenObfuscator
29
- from .definitions import DefinitionsObfuscator
30
29
  from .encoding.a85 import ASCII85Obfuscator
31
30
  from .encoding.b16 import Base16Obfuscator
32
31
  from .encoding.b32 import Base32Obfuscator
@@ -43,8 +42,8 @@ from .esoteric.imports import ImportsObfuscator
43
42
  from .extract_variables import ExtractVariablesObfuscator
44
43
  from .junk.add_comments import AddCommentsObfuscator
45
44
  from .junk.add_newlines import AddNewlinesObfuscator
45
+ from .junk.dead_code import DeadCodeObfuscator
46
46
  from .names import NamesObfuscator
47
- from .names_rope import NamesRopeObfuscator
48
47
  from .numbers import NumberObfuscator
49
48
  from .other.tokens import TokensObfuscator
50
49
  from .remove.comments import CommentsObfuscator
@@ -58,7 +57,6 @@ from .stegano.ipv6encoding import IPv6Obfuscator
58
57
  from .stegano.macencoding import MACObfuscator
59
58
  from .stegano.uuidencoding import UUIDObfuscator
60
59
  from .strings import StringsObfuscator
61
- from .variables import VariablesObfuscator
62
60
 
63
61
  __all__ = [
64
62
  "ASCII85Obfuscator",
@@ -78,8 +76,8 @@ __all__ = [
78
76
  "CommentsObfuscator",
79
77
  "ConstantsObfuscator",
80
78
  "ControlFlowFlattenObfuscator",
79
+ "DeadCodeObfuscator",
81
80
  "DeepEncryptionObfuscator",
82
- "DefinitionsObfuscator",
83
81
  "DocstringObfuscator",
84
82
  "ExceptionObfuscator",
85
83
  "ExtractVariablesObfuscator",
@@ -93,7 +91,6 @@ __all__ = [
93
91
  "LzmaObfuscator",
94
92
  "MACObfuscator",
95
93
  "NamesObfuscator",
96
- "NamesRopeObfuscator",
97
94
  "NewlineObfuscator",
98
95
  "NumberObfuscator",
99
96
  "PrintObfuscator",
@@ -103,7 +100,6 @@ __all__ = [
103
100
  "StringsObfuscator",
104
101
  "TokensObfuscator",
105
102
  "UUIDObfuscator",
106
- "VariablesObfuscator",
107
103
  "WhitespaceObfuscator",
108
104
  "XORObfuscator",
109
105
  "ZlibObfuscator",
@@ -67,7 +67,7 @@ class ControlFlowFlattenObfuscator:
67
67
 
68
68
  dispatcher_cases: list[ast.If | None] = []
69
69
 
70
- for idx, (state_num, stmt) in enumerate(zip(block_states, body)):
70
+ for idx, (state_num, stmt) in enumerate(zip(block_states, body, strict=True)):
71
71
  next_state = block_states[idx + 1] if idx + 1 < num_blocks else exit_state
72
72
 
73
73
  case_body: list[ast.stmt] = []