python-obfuscation-framework 1.8.0__tar.gz → 1.9.1__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 (192) hide show
  1. {python_obfuscation_framework-1.8.0/python_obfuscation_framework.egg-info → python_obfuscation_framework-1.9.1}/PKG-INFO +30 -33
  2. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/README.md +26 -29
  3. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/main.py +9 -2
  4. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/__init__.py +2 -0
  5. python_obfuscation_framework-1.9.1/pof/obfuscator/variables.py +116 -0
  6. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pyproject.toml +4 -4
  7. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1/python_obfuscation_framework.egg-info}/PKG-INFO +30 -33
  8. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/python_obfuscation_framework.egg-info/SOURCES.txt +1 -0
  9. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/LICENSE +0 -0
  10. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/MANIFEST.in +0 -0
  11. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/__init__.py +0 -0
  12. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/__main__.py +0 -0
  13. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/cli.py +0 -0
  14. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/cli_v2.py +0 -0
  15. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/errors.py +0 -0
  16. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/__init__.py +0 -0
  17. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/argv.py +0 -0
  18. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/base.py +0 -0
  19. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/cpu/__init__.py +0 -0
  20. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/cpu/cpu_count.py +0 -0
  21. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/__init__.py +0 -0
  22. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/directory_exist.py +0 -0
  23. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/directory_list_exist.py +0 -0
  24. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/directory_list_missing.py +0 -0
  25. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/directory_missing.py +0 -0
  26. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/exec_method.py +0 -0
  27. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/executable_path.py +0 -0
  28. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/file_exist.py +0 -0
  29. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/file_list_exist.py +0 -0
  30. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/file_list_missing.py +0 -0
  31. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/file_missing.py +0 -0
  32. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/fs/tmp.py +0 -0
  33. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/hardware/__init__.py +0 -0
  34. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/hardware/ram_count.py +0 -0
  35. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/hooks/__init__.py +0 -0
  36. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/hooks/debugger.py +0 -0
  37. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/hooks/tracemalloc.py +0 -0
  38. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/human/__init__.py +0 -0
  39. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/human/p.py +0 -0
  40. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/human/prompt.py +0 -0
  41. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/integrity.py +0 -0
  42. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/multi.py +0 -0
  43. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/os/__init__.py +0 -0
  44. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/os/domain.py +0 -0
  45. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/os/hostname.py +0 -0
  46. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/os/uid.py +0 -0
  47. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/os/username.py +0 -0
  48. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/processes/__init__.py +0 -0
  49. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/processes/proc_count.py +0 -0
  50. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/time/__init__.py +0 -0
  51. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/time/expire.py +0 -0
  52. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/time/uptime.py +0 -0
  53. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/time/utc.py +0 -0
  54. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/evasion/utils.py +0 -0
  55. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/logger.py +0 -0
  56. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/boolean.py +0 -0
  57. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/builtins.py +0 -0
  58. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/cipher/__init__.py +0 -0
  59. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/cipher/deep_encryption.py +0 -0
  60. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/cipher/rc4.py +0 -0
  61. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/cipher/shift.py +0 -0
  62. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/cipher/xor.py +0 -0
  63. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/compression/__init__.py +0 -0
  64. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/compression/bz2.py +0 -0
  65. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/compression/gzip.py +0 -0
  66. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/compression/lzma.py +0 -0
  67. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/compression/zlib.py +0 -0
  68. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/constants.py +0 -0
  69. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/definitions.py +0 -0
  70. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/__init__.py +0 -0
  71. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/a85.py +0 -0
  72. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/b16.py +0 -0
  73. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/b32.py +0 -0
  74. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/b32hex.py +0 -0
  75. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/b64.py +0 -0
  76. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/b85.py +0 -0
  77. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/binascii.py +0 -0
  78. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/snt.py +0 -0
  79. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/encoding/whitespace.py +0 -0
  80. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/esoteric/__init__.py +0 -0
  81. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/esoteric/call.py +0 -0
  82. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/esoteric/doc.py +0 -0
  83. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/esoteric/globals.py +0 -0
  84. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/esoteric/imports.py +0 -0
  85. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/extract_variables.py +0 -0
  86. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/junk/__init__.py +0 -0
  87. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/junk/add_comments.py +0 -0
  88. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/junk/add_newlines.py +0 -0
  89. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/names.py +0 -0
  90. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/names_rope.py +0 -0
  91. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/numbers.py +0 -0
  92. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/other/__init__.py +0 -0
  93. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/other/tokens.py +0 -0
  94. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/__init__.py +0 -0
  95. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/comments.py +0 -0
  96. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/exceptions.py +0 -0
  97. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/indents.py +0 -0
  98. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/loggings.py +0 -0
  99. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/loggings_old.py +0 -0
  100. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/newline.py +0 -0
  101. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/remove/print.py +0 -0
  102. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/restructure.py +0 -0
  103. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/stegano/__init__.py +0 -0
  104. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/stegano/docstrings.py +0 -0
  105. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/stegano/ipv6encoding.py +0 -0
  106. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/stegano/macencoding.py +0 -0
  107. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/stegano/uuidencoding.py +0 -0
  108. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/obfuscator/strings.py +0 -0
  109. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/__init__.py +0 -0
  110. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/cipher/__init__.py +0 -0
  111. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/cipher/rc4.py +0 -0
  112. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/download.py +0 -0
  113. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/image.py +0 -0
  114. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/lots/__init__.py +0 -0
  115. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/lots/cl1pnet.py +0 -0
  116. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/lots/pastebin.py +0 -0
  117. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/lots/pasters.py +0 -0
  118. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/stager/quine.py +0 -0
  119. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/__init__.py +0 -0
  120. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/cipher/__init__.py +0 -0
  121. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/cipher/rc4.py +0 -0
  122. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/cipher/shift.py +0 -0
  123. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/compression/__init__.py +0 -0
  124. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/compression/bz2.py +0 -0
  125. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/compression/gzip.py +0 -0
  126. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/compression/lzma.py +0 -0
  127. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/compression/zlib.py +0 -0
  128. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/__init__.py +0 -0
  129. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/a85.py +0 -0
  130. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b16.py +0 -0
  131. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b3.py +0 -0
  132. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b32.py +0 -0
  133. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b32hex.py +0 -0
  134. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b64.py +0 -0
  135. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/b85.py +0 -0
  136. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/binascii.py +0 -0
  137. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/snt.py +0 -0
  138. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/encoding/whitespace.py +0 -0
  139. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/entropy.py +0 -0
  140. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/extract_names.py +0 -0
  141. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/format.py +0 -0
  142. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/__init__.py +0 -0
  143. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/advanced.py +0 -0
  144. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/base.py +0 -0
  145. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/basic.py +0 -0
  146. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/comments.py +0 -0
  147. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/comments.txt +0 -0
  148. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/names.txt +0 -0
  149. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/generator/unicode.py +0 -0
  150. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/se/__init__.py +0 -0
  151. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/se/homoglyphs.py +0 -0
  152. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/se/homoglyphs.txt +0 -0
  153. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/stegano/__init__.py +0 -0
  154. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/stegano/ipv6encoding.py +0 -0
  155. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/stegano/macencoding.py +0 -0
  156. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/stegano/uuidencoding.py +0 -0
  157. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/pof/utils/tokens.py +0 -0
  158. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/python_obfuscation_framework.egg-info/dependency_links.txt +0 -0
  159. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/python_obfuscation_framework.egg-info/entry_points.txt +0 -0
  160. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/python_obfuscation_framework.egg-info/requires.txt +0 -0
  161. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/python_obfuscation_framework.egg-info/top_level.txt +0 -0
  162. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/setup.cfg +0 -0
  163. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/__init__.py +0 -0
  164. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/__init__.py +0 -0
  165. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_a85.py +0 -0
  166. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_b16.py +0 -0
  167. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_b32.py +0 -0
  168. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_b32hex.py +0 -0
  169. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_b64.py +0 -0
  170. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_b85.py +0 -0
  171. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_binascii.py +0 -0
  172. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_boolean.py +0 -0
  173. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_call.py +0 -0
  174. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_comments.py +0 -0
  175. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_doc.py +0 -0
  176. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_docstrings.py +0 -0
  177. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_exceptions.py +0 -0
  178. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_ipv6encoding.py +0 -0
  179. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_names/code/out.py +0 -0
  180. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_names/code/source.py +0 -0
  181. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_names/test_names.py +0 -0
  182. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_number.py +0 -0
  183. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_print.py +0 -0
  184. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_snt.py +0 -0
  185. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_tokens.py +0 -0
  186. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/test_xor.py +0 -0
  187. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/obfuscator/utils.py +0 -0
  188. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/pyproject.toml +0 -0
  189. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/utils/__init__.py +0 -0
  190. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/utils/se/__init__.py +0 -0
  191. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/utils/se/test_homoglyphs.py +0 -0
  192. {python_obfuscation_framework-1.8.0 → python_obfuscation_framework-1.9.1}/tests/utils/test_generator.py +0 -0
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-obfuscation-framework
3
- Version: 1.8.0
3
+ Version: 1.9.1
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>
7
7
  License-Expression: GPL-3.0-or-later
8
- Project-URL: Homepage, https://github.com/deoktr/pof
9
- Project-URL: Bug Reports, https://github.com/deoktr/pof/issues
10
- Project-URL: Source, https://github.com/deoktr/pof/
8
+ Project-URL: Homepage, https://github.com/deoktr/Python-Obfuscation-Framework
9
+ Project-URL: Bug Reports, https://github.com/deoktr/Python-Obfuscation-Framework/issues
10
+ Project-URL: Source, https://github.com/deoktr/Python-Obfuscation-Framework/
11
11
  Keywords: cybersecurity,obfuscation,obfuscator,stager,payload
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Intended Audience :: Developers
@@ -43,13 +43,13 @@ Requires-Dist: twine; extra == "build"
43
43
  Requires-Dist: check-manifest; extra == "build"
44
44
  Dynamic: license-file
45
45
 
46
- # pof
46
+ # Python Obfuscation Framework - pof
47
47
 
48
48
  [![python-obfuscation-framework-pypi](https://img.shields.io/pypi/v/python-obfuscation-framework.svg)](https://pypi.org/project/python-obfuscation-framework)
49
49
 
50
50
  Test it at [pof.run](https://pof.run).
51
51
 
52
- Python Obfuscation Framework, a complete Python offensive security toolkit to generate staged obfuscated payloads.
52
+ Python Obfuscation Framework (pof), a complete Python offensive security toolkit to generate staged obfuscated payloads.
53
53
 
54
54
  pof will allow you to:
55
55
 
@@ -313,51 +313,48 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
313
313
 
314
314
  ### Obfuscator
315
315
 
316
- `NamesObfuscator` the most basic obfuscator is renaming variables, classes, functions, and imports.
316
+ `VariablesObfuscator` the most basic obfuscator will rename variables.
317
317
 
318
318
  Source in `examples/source.py`.
319
319
 
320
320
  ```python
321
- import os as pT2Ic6
321
+ import os
322
322
 
323
- def SeIpTxc():
323
+ def get_linux_release_info():
324
324
  """Get Linux release info from /etc/os-release."""
325
- pDkFbLZO = '/etc/os-release'
326
- if not pT2Ic6.path.exists(pDkFbLZO):
325
+ uggNx = '/etc/os-release'
326
+ if not os.path.exists(uggNx):
327
327
  print('OS release file not found. This might not be a Linux system.')
328
328
  return None
329
- rDq = {}
329
+ LY3mN = {}
330
330
  try:
331
- with open(pDkFbLZO, 'r') as bpBm:
332
- for UOFvQ in bpBm:
333
- if not UOFvQ or '=' not in UOFvQ:
331
+ with open(uggNx, 'r') as kj0:
332
+ for Stv9o in kj0:
333
+ if not Stv9o or '=' not in Stv9o:
334
334
  continue
335
- aSFP, UUka_V_7 = UOFvQ.ObwKdQ6LVz().g54Qp('=', 1)
336
- UUka_V_7 = UUka_V_7.ObwKdQ6LVz('"\'\n')
337
- rDq[aSFP] = UUka_V_7
335
+ l0j, QE5kCKYwMe = Stv9o.strip().split('=', 1)
336
+ QE5kCKYwMe = QE5kCKYwMe.strip('"\'\n')
337
+ LY3mN[l0j] = QE5kCKYwMe
338
338
  print('\nLinux Release Information:')
339
- print(f"Distribution: {rDq.IDiXt2('NAME', 'Unknown')}")
340
- print(f"Version: {rDq.IDiXt2('VERSION', 'Unknown')}")
341
- print(f"Version ID: {rDq.IDiXt2('VERSION_ID', 'Unknown')}")
342
- print(f"Pretty Name: {rDq.IDiXt2('PRETTY_NAME', 'Unknown')}")
343
- return rDq
344
- except Exception as FXfc:
345
- print(f'Error reading release file: {FXfc}')
339
+ print(f"Distribution: {LY3mN.get('NAME', 'Unknown')}")
340
+ print(f"Version: {LY3mN.get('VERSION', 'Unknown')}")
341
+ print(f"Version ID: {LY3mN.get('VERSION_ID', 'Unknown')}")
342
+ print(f"Pretty Name: {LY3mN.get('PRETTY_NAME', 'Unknown')}")
343
+ return LY3mN
344
+ except Exception as e:
345
+ print(f'Error reading release file: {e}')
346
346
  return None
347
347
  if __name__ == '__main__':
348
- if pT2Ic6.name == 'posix' and pT2Ic6.path.exists('/etc/os-release'):
349
- Sd65C = SeIpTxc()
348
+ if os.name == 'posix' and os.path.exists('/etc/os-release'):
349
+ E_R72 = get_linux_release_info()
350
350
  else:
351
351
  print('This script is designed for Linux systems.')
352
352
  ```
353
353
 
354
- > [!WARNING]
355
- > Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`.
354
+ `DefinitionsObfuscator` obfuscate function names.
356
355
 
357
- An alternative is `DefinitionsObfuscator`, that will only obfuscate function declarations.
358
-
359
- > [!NOTE]
360
- > 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.
356
+ > [!WARNING]
357
+ > `NamesObfuscator` obfuscator is renaming variables, classes, functions, and imports. Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`. 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.
361
358
 
362
359
  Other very basic obfuscation functions are done by specific obfuscators like:
363
360
 
@@ -1,10 +1,10 @@
1
- # pof
1
+ # Python Obfuscation Framework - pof
2
2
 
3
3
  [![python-obfuscation-framework-pypi](https://img.shields.io/pypi/v/python-obfuscation-framework.svg)](https://pypi.org/project/python-obfuscation-framework)
4
4
 
5
5
  Test it at [pof.run](https://pof.run).
6
6
 
7
- Python Obfuscation Framework, a complete Python offensive security toolkit to generate staged obfuscated payloads.
7
+ Python Obfuscation Framework (pof), a complete Python offensive security toolkit to generate staged obfuscated payloads.
8
8
 
9
9
  pof will allow you to:
10
10
 
@@ -268,51 +268,48 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
268
268
 
269
269
  ### Obfuscator
270
270
 
271
- `NamesObfuscator` the most basic obfuscator is renaming variables, classes, functions, and imports.
271
+ `VariablesObfuscator` the most basic obfuscator will rename variables.
272
272
 
273
273
  Source in `examples/source.py`.
274
274
 
275
275
  ```python
276
- import os as pT2Ic6
276
+ import os
277
277
 
278
- def SeIpTxc():
278
+ def get_linux_release_info():
279
279
  """Get Linux release info from /etc/os-release."""
280
- pDkFbLZO = '/etc/os-release'
281
- if not pT2Ic6.path.exists(pDkFbLZO):
280
+ uggNx = '/etc/os-release'
281
+ if not os.path.exists(uggNx):
282
282
  print('OS release file not found. This might not be a Linux system.')
283
283
  return None
284
- rDq = {}
284
+ LY3mN = {}
285
285
  try:
286
- with open(pDkFbLZO, 'r') as bpBm:
287
- for UOFvQ in bpBm:
288
- if not UOFvQ or '=' not in UOFvQ:
286
+ with open(uggNx, 'r') as kj0:
287
+ for Stv9o in kj0:
288
+ if not Stv9o or '=' not in Stv9o:
289
289
  continue
290
- aSFP, UUka_V_7 = UOFvQ.ObwKdQ6LVz().g54Qp('=', 1)
291
- UUka_V_7 = UUka_V_7.ObwKdQ6LVz('"\'\n')
292
- rDq[aSFP] = UUka_V_7
290
+ l0j, QE5kCKYwMe = Stv9o.strip().split('=', 1)
291
+ QE5kCKYwMe = QE5kCKYwMe.strip('"\'\n')
292
+ LY3mN[l0j] = QE5kCKYwMe
293
293
  print('\nLinux Release Information:')
294
- print(f"Distribution: {rDq.IDiXt2('NAME', 'Unknown')}")
295
- print(f"Version: {rDq.IDiXt2('VERSION', 'Unknown')}")
296
- print(f"Version ID: {rDq.IDiXt2('VERSION_ID', 'Unknown')}")
297
- print(f"Pretty Name: {rDq.IDiXt2('PRETTY_NAME', 'Unknown')}")
298
- return rDq
299
- except Exception as FXfc:
300
- print(f'Error reading release file: {FXfc}')
294
+ print(f"Distribution: {LY3mN.get('NAME', 'Unknown')}")
295
+ print(f"Version: {LY3mN.get('VERSION', 'Unknown')}")
296
+ print(f"Version ID: {LY3mN.get('VERSION_ID', 'Unknown')}")
297
+ print(f"Pretty Name: {LY3mN.get('PRETTY_NAME', 'Unknown')}")
298
+ return LY3mN
299
+ except Exception as e:
300
+ print(f'Error reading release file: {e}')
301
301
  return None
302
302
  if __name__ == '__main__':
303
- if pT2Ic6.name == 'posix' and pT2Ic6.path.exists('/etc/os-release'):
304
- Sd65C = SeIpTxc()
303
+ if os.name == 'posix' and os.path.exists('/etc/os-release'):
304
+ E_R72 = get_linux_release_info()
305
305
  else:
306
306
  print('This script is designed for Linux systems.')
307
307
  ```
308
308
 
309
- > [!WARNING]
310
- > Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`.
309
+ `DefinitionsObfuscator` obfuscate function names.
311
310
 
312
- An alternative is `DefinitionsObfuscator`, that will only obfuscate function declarations.
313
-
314
- > [!NOTE]
315
- > 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.
311
+ > [!WARNING]
312
+ > `NamesObfuscator` obfuscator is renaming variables, classes, functions, and imports. Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`. 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.
316
313
 
317
314
  Other very basic obfuscation functions are done by specific obfuscators like:
318
315
 
@@ -56,6 +56,7 @@ from pof.obfuscator import (
56
56
  NumberObfuscator,
57
57
  PrintObfuscator,
58
58
  StringsObfuscator,
59
+ VariablesObfuscator,
59
60
  XORObfuscator,
60
61
  )
61
62
  from pof.stager import ImageStager, RC4Stager
@@ -178,6 +179,8 @@ class Obfuscator(BaseObfuscator):
178
179
  # In this context, `baz` would be obfuscated, but it shouldn't because
179
180
  # the function is part of the `foo` imported module
180
181
  # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
182
+ # TODO (deoktr): use alternative variable obfuscator using the AST
183
+ # tokens = VariablesObfuscator().obfuscate_tokens(tokens)
181
184
 
182
185
  tokens = GlobalsObfuscator().obfuscate_tokens(tokens)
183
186
  tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
@@ -238,7 +241,9 @@ class Obfuscator(BaseObfuscator):
238
241
  tokens = self._get_tokens(source)
239
242
  tokens = CommentsObfuscator().obfuscate_tokens(tokens)
240
243
  generator = BasicGenerator.alphabet_generator()
241
- tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
244
+ # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
245
+ tokens = VariablesObfuscator(generator=generator).obfuscate_tokens(tokens)
246
+ tokens = DefinitionsObfuscator(generator=generator).obfuscate_tokens(tokens)
242
247
  tokens = IndentsObfuscator().obfuscate_tokens(tokens)
243
248
  tokens = NewlineObfuscator().obfuscate_tokens(tokens)
244
249
  return self._untokenize(tokens)
@@ -313,7 +318,9 @@ class Obfuscator(BaseObfuscator):
313
318
  # # FIXME (deoktr): breaks if obf_builtins_rate=1 with NamesObfuscator
314
319
  # obf_builtins_rate=0,
315
320
  # ).obfuscate_tokens(tokens)
316
- tokens = NamesObfuscator(generator=generator).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)
317
324
  tokens = ConstantsObfuscator(
318
325
  generator=generator,
319
326
  obf_number_rate=1,
@@ -57,6 +57,7 @@ from .stegano.ipv6encoding import IPv6Obfuscator
57
57
  from .stegano.macencoding import MACObfuscator
58
58
  from .stegano.uuidencoding import UUIDObfuscator
59
59
  from .strings import StringsObfuscator
60
+ from .variables import VariablesObfuscator
60
61
 
61
62
  __all__ = [
62
63
  "ASCII85Obfuscator",
@@ -100,6 +101,7 @@ __all__ = [
100
101
  "StringsObfuscator",
101
102
  "TokensObfuscator",
102
103
  "UUIDObfuscator",
104
+ "VariablesObfuscator",
103
105
  "WhitespaceObfuscator",
104
106
  "XORObfuscator",
105
107
  "ZlibObfuscator",
@@ -0,0 +1,116 @@
1
+ # POF, a free and open source Python obfuscation framework.
2
+ # Copyright (C) 2022 - 2026 Deoktr
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
+ import ast
18
+ import io
19
+ from tokenize import generate_tokens, untokenize
20
+
21
+ from pof.logger import logger
22
+ from pof.utils.generator import BasicGenerator
23
+
24
+
25
+ class AstVarCollector(ast.NodeVisitor):
26
+ def __init__(self, reserved=None):
27
+ if reserved is None:
28
+ reserved = []
29
+ self.reserved = reserved
30
+
31
+ self.assigned = set()
32
+ self.globals = set()
33
+ self.args = set()
34
+
35
+ def is_valid(self, var) -> bool:
36
+ return var not in self.reserved
37
+
38
+ def visit_Global(self, node):
39
+ var = node.names
40
+ if not self.is_valid(var):
41
+ return
42
+
43
+ logger.debug("found globals variables to obfuscate: %s", var)
44
+ self.globals.update(var)
45
+
46
+ def visit_Name(self, node):
47
+ if not isinstance(node.ctx, ast.Store):
48
+ return
49
+
50
+ var = node.id
51
+ if not self.is_valid(var):
52
+ return
53
+
54
+ logger.debug("found variables names to obfuscate: %s", var)
55
+ self.assigned.add(var)
56
+
57
+ def visit_arg(self, node):
58
+ self.args.add(node.arg)
59
+ self.assigned.add(node.arg)
60
+
61
+
62
+ class AstVarRenamer(ast.NodeTransformer):
63
+ def __init__(self, assigned, args, globals_, generator=None):
64
+ self.rename = set(assigned) - set(args) - set(globals_)
65
+
66
+ if generator is None:
67
+ generator = BasicGenerator.alphabet_generator()
68
+ self.generator = generator
69
+
70
+ self.new_names = {}
71
+
72
+ def generate_new_name(self):
73
+ return next(self.generator)
74
+
75
+ def get_new_name(self, name):
76
+ if name not in self.new_names:
77
+ new_name = self.generate_new_name()
78
+ self.new_names.update({name: new_name})
79
+ return self.new_names[name]
80
+
81
+ def visit_Name(self, node):
82
+ if node.id in self.rename:
83
+ node.id = self.get_new_name(node.id)
84
+ return node
85
+
86
+
87
+ class VariablesObfuscator:
88
+ """Obfuscate local variables names using the AST."""
89
+
90
+ def __init__(self, generator=None, reserved=None) -> None:
91
+ if generator is None:
92
+ generator = BasicGenerator.alphabet_generator()
93
+ self.generator = generator
94
+
95
+ if reserved is None:
96
+ reserved = []
97
+ self.reserved = reserved
98
+
99
+ def obfuscate_tokens(self, tokens):
100
+ source = untokenize(tokens)
101
+ tree = ast.parse(source)
102
+
103
+ vc = AstVarCollector(reserved=self.reserved)
104
+ vc.visit(tree)
105
+
106
+ tree = AstVarRenamer(
107
+ vc.assigned,
108
+ vc.args,
109
+ vc.globals,
110
+ generator=self.generator,
111
+ ).visit(tree)
112
+ ast.fix_missing_locations(tree)
113
+
114
+ source = ast.unparse(tree)
115
+ io_obj = io.StringIO(source)
116
+ return list(generate_tokens(io_obj.readline))
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python-obfuscation-framework"
7
- version = "1.8.0"
7
+ version = "1.9.1"
8
8
  description = "Python Obfuscation Framework"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.5"
@@ -53,9 +53,9 @@ build = [
53
53
  ]
54
54
 
55
55
  [project.urls]
56
- "Homepage" = "https://github.com/deoktr/pof"
57
- "Bug Reports" = "https://github.com/deoktr/pof/issues"
58
- "Source" = "https://github.com/deoktr/pof/"
56
+ "Homepage" = "https://github.com/deoktr/Python-Obfuscation-Framework"
57
+ "Bug Reports" = "https://github.com/deoktr/Python-Obfuscation-Framework/issues"
58
+ "Source" = "https://github.com/deoktr/Python-Obfuscation-Framework/"
59
59
 
60
60
  [project.scripts]
61
61
  pof = "pof.cli:_cli"
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-obfuscation-framework
3
- Version: 1.8.0
3
+ Version: 1.9.1
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>
7
7
  License-Expression: GPL-3.0-or-later
8
- Project-URL: Homepage, https://github.com/deoktr/pof
9
- Project-URL: Bug Reports, https://github.com/deoktr/pof/issues
10
- Project-URL: Source, https://github.com/deoktr/pof/
8
+ Project-URL: Homepage, https://github.com/deoktr/Python-Obfuscation-Framework
9
+ Project-URL: Bug Reports, https://github.com/deoktr/Python-Obfuscation-Framework/issues
10
+ Project-URL: Source, https://github.com/deoktr/Python-Obfuscation-Framework/
11
11
  Keywords: cybersecurity,obfuscation,obfuscator,stager,payload
12
12
  Classifier: Development Status :: 4 - Beta
13
13
  Classifier: Intended Audience :: Developers
@@ -43,13 +43,13 @@ Requires-Dist: twine; extra == "build"
43
43
  Requires-Dist: check-manifest; extra == "build"
44
44
  Dynamic: license-file
45
45
 
46
- # pof
46
+ # Python Obfuscation Framework - pof
47
47
 
48
48
  [![python-obfuscation-framework-pypi](https://img.shields.io/pypi/v/python-obfuscation-framework.svg)](https://pypi.org/project/python-obfuscation-framework)
49
49
 
50
50
  Test it at [pof.run](https://pof.run).
51
51
 
52
- Python Obfuscation Framework, a complete Python offensive security toolkit to generate staged obfuscated payloads.
52
+ Python Obfuscation Framework (pof), a complete Python offensive security toolkit to generate staged obfuscated payloads.
53
53
 
54
54
  pof will allow you to:
55
55
 
@@ -313,51 +313,48 @@ echo "print('Hello, world')" | pof -f obfuscator -k UUIDObfuscator | python
313
313
 
314
314
  ### Obfuscator
315
315
 
316
- `NamesObfuscator` the most basic obfuscator is renaming variables, classes, functions, and imports.
316
+ `VariablesObfuscator` the most basic obfuscator will rename variables.
317
317
 
318
318
  Source in `examples/source.py`.
319
319
 
320
320
  ```python
321
- import os as pT2Ic6
321
+ import os
322
322
 
323
- def SeIpTxc():
323
+ def get_linux_release_info():
324
324
  """Get Linux release info from /etc/os-release."""
325
- pDkFbLZO = '/etc/os-release'
326
- if not pT2Ic6.path.exists(pDkFbLZO):
325
+ uggNx = '/etc/os-release'
326
+ if not os.path.exists(uggNx):
327
327
  print('OS release file not found. This might not be a Linux system.')
328
328
  return None
329
- rDq = {}
329
+ LY3mN = {}
330
330
  try:
331
- with open(pDkFbLZO, 'r') as bpBm:
332
- for UOFvQ in bpBm:
333
- if not UOFvQ or '=' not in UOFvQ:
331
+ with open(uggNx, 'r') as kj0:
332
+ for Stv9o in kj0:
333
+ if not Stv9o or '=' not in Stv9o:
334
334
  continue
335
- aSFP, UUka_V_7 = UOFvQ.ObwKdQ6LVz().g54Qp('=', 1)
336
- UUka_V_7 = UUka_V_7.ObwKdQ6LVz('"\'\n')
337
- rDq[aSFP] = UUka_V_7
335
+ l0j, QE5kCKYwMe = Stv9o.strip().split('=', 1)
336
+ QE5kCKYwMe = QE5kCKYwMe.strip('"\'\n')
337
+ LY3mN[l0j] = QE5kCKYwMe
338
338
  print('\nLinux Release Information:')
339
- print(f"Distribution: {rDq.IDiXt2('NAME', 'Unknown')}")
340
- print(f"Version: {rDq.IDiXt2('VERSION', 'Unknown')}")
341
- print(f"Version ID: {rDq.IDiXt2('VERSION_ID', 'Unknown')}")
342
- print(f"Pretty Name: {rDq.IDiXt2('PRETTY_NAME', 'Unknown')}")
343
- return rDq
344
- except Exception as FXfc:
345
- print(f'Error reading release file: {FXfc}')
339
+ print(f"Distribution: {LY3mN.get('NAME', 'Unknown')}")
340
+ print(f"Version: {LY3mN.get('VERSION', 'Unknown')}")
341
+ print(f"Version ID: {LY3mN.get('VERSION_ID', 'Unknown')}")
342
+ print(f"Pretty Name: {LY3mN.get('PRETTY_NAME', 'Unknown')}")
343
+ return LY3mN
344
+ except Exception as e:
345
+ print(f'Error reading release file: {e}')
346
346
  return None
347
347
  if __name__ == '__main__':
348
- if pT2Ic6.name == 'posix' and pT2Ic6.path.exists('/etc/os-release'):
349
- Sd65C = SeIpTxc()
348
+ if os.name == 'posix' and os.path.exists('/etc/os-release'):
349
+ E_R72 = get_linux_release_info()
350
350
  else:
351
351
  print('This script is designed for Linux systems.')
352
352
  ```
353
353
 
354
- > [!WARNING]
355
- > Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`.
354
+ `DefinitionsObfuscator` obfuscate function names.
356
355
 
357
- An alternative is `DefinitionsObfuscator`, that will only obfuscate function declarations.
358
-
359
- > [!NOTE]
360
- > 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.
356
+ > [!WARNING]
357
+ > `NamesObfuscator` obfuscator is renaming variables, classes, functions, and imports. Right now this obfuscator can fail under very specific circumstances, see `pof/obfuscator/names.py`. 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.
361
358
 
362
359
  Other very basic obfuscation functions are done by specific obfuscators like:
363
360
 
@@ -59,6 +59,7 @@ pof/obfuscator/names_rope.py
59
59
  pof/obfuscator/numbers.py
60
60
  pof/obfuscator/restructure.py
61
61
  pof/obfuscator/strings.py
62
+ pof/obfuscator/variables.py
62
63
  pof/obfuscator/cipher/__init__.py
63
64
  pof/obfuscator/cipher/deep_encryption.py
64
65
  pof/obfuscator/cipher/rc4.py