python-obfuscation-framework 1.4.1__py3-none-any.whl

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 (147) hide show
  1. pof/__init__.py +21 -0
  2. pof/__main__.py +22 -0
  3. pof/cli.py +187 -0
  4. pof/errors.py +2 -0
  5. pof/evasion/__init__.py +57 -0
  6. pof/evasion/argv.py +44 -0
  7. pof/evasion/base.py +48 -0
  8. pof/evasion/cpu/__init__.py +0 -0
  9. pof/evasion/cpu/cpu_count.py +27 -0
  10. pof/evasion/fs/__init__.py +0 -0
  11. pof/evasion/fs/directory_exist.py +29 -0
  12. pof/evasion/fs/directory_list_exist.py +46 -0
  13. pof/evasion/fs/directory_list_missing.py +45 -0
  14. pof/evasion/fs/directory_missing.py +28 -0
  15. pof/evasion/fs/exec_method.py +51 -0
  16. pof/evasion/fs/executable_path.py +66 -0
  17. pof/evasion/fs/file_exist.py +29 -0
  18. pof/evasion/fs/file_list_exist.py +46 -0
  19. pof/evasion/fs/file_list_missing.py +45 -0
  20. pof/evasion/fs/file_missing.py +31 -0
  21. pof/evasion/fs/tmp.py +112 -0
  22. pof/evasion/hardware/__init__.py +0 -0
  23. pof/evasion/hardware/ram_count.py +50 -0
  24. pof/evasion/hooks/__init__.py +0 -0
  25. pof/evasion/hooks/debugger.py +36 -0
  26. pof/evasion/hooks/tracemalloc.py +23 -0
  27. pof/evasion/human/__init__.py +0 -0
  28. pof/evasion/human/p.py +45 -0
  29. pof/evasion/human/prompt.py +69 -0
  30. pof/evasion/integrity.py +129 -0
  31. pof/evasion/multi.py +41 -0
  32. pof/evasion/os/__init__.py +0 -0
  33. pof/evasion/os/domain.py +27 -0
  34. pof/evasion/os/hostname.py +27 -0
  35. pof/evasion/os/uid.py +28 -0
  36. pof/evasion/os/username.py +27 -0
  37. pof/evasion/processes/__init__.py +0 -0
  38. pof/evasion/processes/proc_count.py +47 -0
  39. pof/evasion/time/__init__.py +0 -0
  40. pof/evasion/time/expire.py +75 -0
  41. pof/evasion/time/uptime.py +48 -0
  42. pof/evasion/time/utc.py +26 -0
  43. pof/evasion/utils.py +198 -0
  44. pof/main.py +369 -0
  45. pof/obfuscator/__init__.py +86 -0
  46. pof/obfuscator/builtins.py +482 -0
  47. pof/obfuscator/cipher/__init__.py +0 -0
  48. pof/obfuscator/cipher/deep_encryption.py +194 -0
  49. pof/obfuscator/cipher/rc4.py +22 -0
  50. pof/obfuscator/cipher/shift.py +19 -0
  51. pof/obfuscator/cipher/xor.py +121 -0
  52. pof/obfuscator/compression/__init__.py +0 -0
  53. pof/obfuscator/compression/bz2.py +22 -0
  54. pof/obfuscator/compression/gzip.py +22 -0
  55. pof/obfuscator/compression/lzma.py +22 -0
  56. pof/obfuscator/compression/zlib.py +22 -0
  57. pof/obfuscator/constants.py +294 -0
  58. pof/obfuscator/definitions.py +341 -0
  59. pof/obfuscator/encoding/__init__.py +0 -0
  60. pof/obfuscator/encoding/a85.py +21 -0
  61. pof/obfuscator/encoding/b16.py +21 -0
  62. pof/obfuscator/encoding/b32.py +21 -0
  63. pof/obfuscator/encoding/b32hex.py +21 -0
  64. pof/obfuscator/encoding/b64.py +21 -0
  65. pof/obfuscator/encoding/b85.py +25 -0
  66. pof/obfuscator/encoding/binascii.py +22 -0
  67. pof/obfuscator/encoding/snt.py +23 -0
  68. pof/obfuscator/esoteric/__init__.py +0 -0
  69. pof/obfuscator/esoteric/call.py +49 -0
  70. pof/obfuscator/esoteric/doc.py +237 -0
  71. pof/obfuscator/esoteric/globals.py +62 -0
  72. pof/obfuscator/esoteric/imports.py +55 -0
  73. pof/obfuscator/extract_variables.py +297 -0
  74. pof/obfuscator/junk/__init__.py +0 -0
  75. pof/obfuscator/junk/add_comments.py +102 -0
  76. pof/obfuscator/junk/add_newlines.py +36 -0
  77. pof/obfuscator/names.py +474 -0
  78. pof/obfuscator/names_rope.py +375 -0
  79. pof/obfuscator/numbers.py +271 -0
  80. pof/obfuscator/other/__init__.py +0 -0
  81. pof/obfuscator/other/tokens.py +47 -0
  82. pof/obfuscator/remove/__init__.py +0 -0
  83. pof/obfuscator/remove/comments.py +36 -0
  84. pof/obfuscator/remove/exceptions.py +75 -0
  85. pof/obfuscator/remove/indents.py +28 -0
  86. pof/obfuscator/remove/loggings.py +120 -0
  87. pof/obfuscator/remove/loggings_old.py +45 -0
  88. pof/obfuscator/remove/newline.py +27 -0
  89. pof/obfuscator/remove/print.py +40 -0
  90. pof/obfuscator/restructure.py +15 -0
  91. pof/obfuscator/stegano/__init__.py +0 -0
  92. pof/obfuscator/stegano/docstrings.py +111 -0
  93. pof/obfuscator/stegano/ipv6encoding.py +21 -0
  94. pof/obfuscator/stegano/macencoding.py +21 -0
  95. pof/obfuscator/stegano/uuidencoding.py +21 -0
  96. pof/obfuscator/strings.py +359 -0
  97. pof/stager/__init__.py +17 -0
  98. pof/stager/cipher/__init__.py +0 -0
  99. pof/stager/cipher/rc4.py +36 -0
  100. pof/stager/download.py +80 -0
  101. pof/stager/image.py +374 -0
  102. pof/stager/lots/__init__.py +1 -0
  103. pof/stager/lots/cl1pnet.py +51 -0
  104. pof/stager/lots/pastebin.py +35 -0
  105. pof/stager/lots/pasters.py +30 -0
  106. pof/stager/quine.py +135 -0
  107. pof/utils/__init__.py +0 -0
  108. pof/utils/cipher/__init__.py +7 -0
  109. pof/utils/cipher/rc4.py +407 -0
  110. pof/utils/cipher/shift.py +41 -0
  111. pof/utils/compression/__init__.py +11 -0
  112. pof/utils/compression/bz2.py +38 -0
  113. pof/utils/compression/gzip.py +38 -0
  114. pof/utils/compression/lzma.py +38 -0
  115. pof/utils/compression/zlib.py +38 -0
  116. pof/utils/encoding/__init__.py +19 -0
  117. pof/utils/encoding/a85.py +35 -0
  118. pof/utils/encoding/b16.py +30 -0
  119. pof/utils/encoding/b3.py +93 -0
  120. pof/utils/encoding/b32.py +30 -0
  121. pof/utils/encoding/b32hex.py +30 -0
  122. pof/utils/encoding/b64.py +30 -0
  123. pof/utils/encoding/b85.py +35 -0
  124. pof/utils/encoding/binascii.py +38 -0
  125. pof/utils/encoding/snt.py +97 -0
  126. pof/utils/entropy.py +24 -0
  127. pof/utils/extract_names.py +204 -0
  128. pof/utils/generator/__init__.py +17 -0
  129. pof/utils/generator/advanced.py +53 -0
  130. pof/utils/generator/base.py +178 -0
  131. pof/utils/generator/basic.py +107 -0
  132. pof/utils/generator/names.txt +37241 -0
  133. pof/utils/generator/unicode.py +171 -0
  134. pof/utils/se/__init__.py +3 -0
  135. pof/utils/se/homoglyphs.py +99 -0
  136. pof/utils/se/homoglyphs.txt +96 -0
  137. pof/utils/stegano/__init__.py +5 -0
  138. pof/utils/stegano/ipv6encoding.py +97 -0
  139. pof/utils/stegano/macencoding.py +96 -0
  140. pof/utils/stegano/uuidencoding.py +102 -0
  141. pof/utils/tokens.py +68 -0
  142. python_obfuscation_framework-1.4.1.dist-info/LICENSE +674 -0
  143. python_obfuscation_framework-1.4.1.dist-info/METADATA +851 -0
  144. python_obfuscation_framework-1.4.1.dist-info/RECORD +147 -0
  145. python_obfuscation_framework-1.4.1.dist-info/WHEEL +5 -0
  146. python_obfuscation_framework-1.4.1.dist-info/entry_points.txt +2 -0
  147. python_obfuscation_framework-1.4.1.dist-info/top_level.txt +1 -0
pof/main.py ADDED
@@ -0,0 +1,369 @@
1
+ """pof (Python Obfuscator Framework)."""
2
+
3
+ import io
4
+ import logging
5
+ import random
6
+ from tokenize import generate_tokens
7
+
8
+ from pof.evasion import (
9
+ CPUCountEvasion,
10
+ DebuggerEvasion,
11
+ DomainEvasion,
12
+ ExecPathEvasion,
13
+ ExpireEvasion,
14
+ FileExistEvasion,
15
+ FileListExistEvasion,
16
+ FileListMissingEvasion,
17
+ FileMissingEvasion,
18
+ HostnameEvasion,
19
+ LinuxRAMCountEvasion,
20
+ LinuxUIDEvasion,
21
+ TracemallocEvasion,
22
+ UsernameEvasion,
23
+ )
24
+ from pof.obfuscator import (
25
+ AddCommentsObfuscator,
26
+ BuiltinsObfuscator,
27
+ CommentsObfuscator,
28
+ ConstantsObfuscator,
29
+ DefinitionsObfuscator,
30
+ DocstringObfuscator,
31
+ ExceptionObfuscator,
32
+ GlobalsObfuscator,
33
+ IndentsObfuscator,
34
+ LoggingObfuscator,
35
+ NamesObfuscator,
36
+ NewlineObfuscator,
37
+ NumberObfuscator,
38
+ PrintObfuscator,
39
+ StringsObfuscator,
40
+ XORObfuscator,
41
+ )
42
+ from pof.stager import ImageStager, RC4Stager
43
+ from pof.utils.cipher import RC4Cipher
44
+ from pof.utils.extract_names import NameExtract
45
+ from pof.utils.generator import AdvancedGenerator, BaseGenerator, BasicGenerator
46
+ from pof.utils.tokens import untokenize
47
+
48
+
49
+ class BaseObfuscator:
50
+ @staticmethod
51
+ def _get_tokens(source: str):
52
+ if "\r" in source:
53
+ source = source.replace("\r\n", "\n").replace("\r", "\n")
54
+ if not source.endswith("\n"):
55
+ source += "\n"
56
+ io_obj = io.StringIO(source)
57
+ return list(generate_tokens(io_obj.readline))
58
+
59
+ @staticmethod
60
+ def _untokenize(tokens):
61
+ return untokenize(tokens)
62
+
63
+
64
+ class Obfuscator(BaseObfuscator):
65
+ def obfuscate(
66
+ self,
67
+ source,
68
+ *,
69
+ remove_logs=False,
70
+ remove_prints=False,
71
+ remove_exceptions=False,
72
+ ):
73
+ """Complete chained obfuscation."""
74
+ tokens = self._get_tokens(source)
75
+
76
+ # get all the names and add them to the RESERVED_WORDS for the
77
+ # generators
78
+ reserved_words_add = NameExtract.get_names(tokens)
79
+ BaseGenerator.extend_reserved(reserved_words_add)
80
+
81
+ msg = f"reserved {len(tokens)} names"
82
+ logging.info(msg)
83
+
84
+ # clean input
85
+ tokens = CommentsObfuscator().obfuscate_tokens(tokens)
86
+ if remove_logs:
87
+ # doesn't work yet !
88
+ tokens = LoggingObfuscator().obfuscate_tokens(tokens)
89
+
90
+ if remove_prints:
91
+ # not 100% safe !
92
+ tokens = PrintObfuscator().obfuscate_tokens(tokens)
93
+
94
+ if remove_exceptions:
95
+ # not fully tested
96
+ ex_generator = (
97
+ BasicGenerator.number_name_generator()
98
+ ) # TODO (deoktr): have multiple generator !!!
99
+ tokens = ExceptionObfuscator(
100
+ add_codes=True,
101
+ generator=ex_generator,
102
+ ).obfuscate_tokens(tokens)
103
+
104
+ tokens = DefinitionsObfuscator().obfuscate_tokens(tokens)
105
+
106
+ # configure generator
107
+ # generator = alphabet_generator()
108
+ gen_dict = {
109
+ 86: AdvancedGenerator.realistic_generator(),
110
+ 10: BasicGenerator.alphabet_generator(),
111
+ 4: BasicGenerator.number_name_generator(length=random.randint(2, 5)),
112
+ }
113
+ generator = AdvancedGenerator.multi_generator(gen_dict)
114
+
115
+ # core obfuscation
116
+ tokens = ConstantsObfuscator(
117
+ generator=generator,
118
+ obf_number_rate=0.7,
119
+ # obf_string_rate=0.1,
120
+ obf_string_rate=0, # FIXME (deoktr): when string obfuscation is enable and
121
+ # name obfuscator comes next, the time delai of
122
+ # http requests are very slow, idk why
123
+ obf_builtins_rate=0.3,
124
+ ).obfuscate_tokens(tokens)
125
+
126
+ # FIXME (deoktr): breaks !
127
+ # for detailed explanation just consider the following:
128
+ # ```
129
+ # import module
130
+ # class Bar:
131
+ # def __init__(self):
132
+ # self.foo = getattr(config, "FOO", True)
133
+ # module.imported.function(self.foo)
134
+ # ```
135
+ # in this case the first instance of `foo` will successfully be
136
+ # obfuscated (as it should) but then with the getattr it's marked has
137
+ # "imported" because it's the result of a builtin function, but notice
138
+ # that it's not a "simple" variable but rather it's a class attribute
139
+ # and has a 'self' behind it, so if the variable is marked has imported
140
+ # and a `.` is placed behind it, it won't be changed, this is the case
141
+ # in the function call, which is itself imported, and thus set the
142
+ # imported attribute for itself and all the parameters given to it
143
+ # this is because we don't keep track of the level of the imported
144
+ #
145
+ # FIXME (deoktr): breaks !
146
+ # Another problem is related to result of function, this is, ofc very
147
+ # hard to deal with, but if a function returns an object, such has for
148
+ # example an object of an imported class, which attribute are not
149
+ # obfuscatable, then it breaks.
150
+ # ```
151
+ # import foo
152
+ # def a():
153
+ # return foo.bar()
154
+ # x = a()
155
+ # x.baz()
156
+ # ```
157
+ # In this context, `baz` would be obfuscated, but it shouldn't because
158
+ # the function is part of the `foo` imported module
159
+ # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
160
+
161
+ tokens = GlobalsObfuscator().obfuscate_tokens(tokens)
162
+ tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
163
+
164
+ b64decode_name = next(generator)
165
+ b85decode_name = next(generator)
166
+ string_obfuscator = StringsObfuscator(
167
+ import_b64decode=True,
168
+ import_b85decode=True,
169
+ b64decode_name=b64decode_name,
170
+ b85decode_name=b85decode_name,
171
+ )
172
+ tokens = string_obfuscator.obfuscate_tokens(tokens)
173
+ string_obfuscator.import_b64decode = False
174
+ string_obfuscator.import_b85decode = False
175
+
176
+ for _ in range(2):
177
+ tokens = NumberObfuscator().obfuscate_tokens(tokens)
178
+ tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
179
+ for _ in range(2):
180
+ tokens = string_obfuscator.obfuscate_tokens(tokens)
181
+ tokens = AddCommentsObfuscator().obfuscate_tokens(tokens)
182
+
183
+ # clean output
184
+ tokens = IndentsObfuscator().obfuscate_tokens(tokens)
185
+ tokens = NewlineObfuscator().obfuscate_tokens(tokens)
186
+
187
+ xor_payload = False
188
+ if xor_payload:
189
+ tokens = XORObfuscator().obfuscate_tokens(tokens)
190
+ generator = BasicGenerator.alphabet_generator()
191
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
192
+
193
+ docstring_payload = False
194
+ if docstring_payload:
195
+ tokens = DocstringObfuscator().obfuscate_tokensj(tokens)
196
+ generator = BasicGenerator.alphabet_generator()
197
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
198
+ tokens = BuiltinsObfuscator().obfuscate_tokens(tokens)
199
+ tokens = StringsObfuscator(
200
+ import_b64decode=True,
201
+ import_b85decode=True,
202
+ b64decode_name=b64decode_name,
203
+ b85decode_name=b85decode_name,
204
+ ).obfuscate_tokens(tokens)
205
+
206
+ return self._untokenize(tokens)
207
+
208
+ def basic(self, source):
209
+ """Just the bare minimum obfuscation."""
210
+ tokens = self._get_tokens(source)
211
+ tokens = CommentsObfuscator().obfuscate_tokens(tokens)
212
+ generator = BasicGenerator.alphabet_generator()
213
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
214
+ tokens = IndentsObfuscator().obfuscate_tokens(tokens)
215
+ tokens = NewlineObfuscator().obfuscate_tokens(tokens)
216
+ return self._untokenize(tokens)
217
+
218
+ def full_evasion( # noqa: C901, PLR0913, PLR0912
219
+ self,
220
+ source,
221
+ hostname: str | None = None,
222
+ username: str | None = None,
223
+ uid=None,
224
+ domain: str | None = None,
225
+ file_exist=None,
226
+ file_missing=None,
227
+ min_cpu_count: int | None = None,
228
+ min_ram: int | None = None,
229
+ file_list_exist=None,
230
+ file_list_missing=None,
231
+ *,
232
+ expire: bool = False,
233
+ check_tracemalloc: bool = False,
234
+ check_debugger: bool = False,
235
+ check_executable_path: bool = False,
236
+ ):
237
+ tokens = self._get_tokens(source)
238
+
239
+ if file_missing:
240
+ tokens = FileMissingEvasion(file=file_missing).add_evasion(tokens)
241
+ if min_cpu_count:
242
+ tokens = CPUCountEvasion(min_cpu_count=min_cpu_count).add_evasion(tokens)
243
+ if min_ram:
244
+ tokens = LinuxRAMCountEvasion(min_ram=min_ram).add_evasion(tokens)
245
+ if check_tracemalloc:
246
+ tokens = TracemallocEvasion().add_evasion(tokens)
247
+ if file_list_exist:
248
+ from pof.evasion.utils import FILE_SYSTEM
249
+
250
+ tokens = FileListMissingEvasion(file_list=FILE_SYSTEM).add_evasion(tokens)
251
+ if file_exist:
252
+ tokens = FileExistEvasion(file=file_exist).add_evasion(tokens)
253
+ if file_list_missing:
254
+ # TODO (deoktr): remove
255
+ idk = ["/tmp/a", "/tmp/b"] # noqa: S108
256
+ tokens = FileListExistEvasion(file_list=idk).add_evasion(tokens)
257
+ if domain:
258
+ tokens = DomainEvasion(domain=domain).add_evasion(tokens)
259
+ if hostname:
260
+ tokens = HostnameEvasion(hostname=hostname).add_evasion(tokens)
261
+ if uid:
262
+ tokens = LinuxUIDEvasion(uid=uid).add_evasion(tokens)
263
+ if username:
264
+ tokens = UsernameEvasion(username=username).add_evasion(tokens)
265
+ if expire:
266
+ from datetime import datetime, timedelta
267
+
268
+ over_datetime = datetime.utcnow() # noqa: DTZ003
269
+ under_datetime = datetime.utcnow() + timedelta(seconds=5) # noqa: DTZ003
270
+ tokens = ExpireEvasion(
271
+ under_datetime=under_datetime,
272
+ over_datetime=over_datetime,
273
+ ).add_evasion(tokens)
274
+ if check_executable_path:
275
+ tokens = ExecPathEvasion().add_evasion(tokens)
276
+ if check_debugger:
277
+ tokens = DebuggerEvasion().add_evasion(tokens)
278
+
279
+ return self._untokenize(tokens)
280
+
281
+ def circles(self, source):
282
+ tokens = self._get_tokens(source)
283
+ generator = AdvancedGenerator.fixed_length_generator()
284
+ tokens = CommentsObfuscator().obfuscate_tokens(tokens)
285
+ tokens = ExceptionObfuscator(generator=generator).obfuscate_tokens(tokens)
286
+ tokens = LoggingObfuscator(generator=generator).obfuscate_tokens(tokens)
287
+ # FIXME (deoktr): when placed BEFORE NamesObfuscator it breaks the code
288
+ # tokens = ConstantsObfuscator(
289
+ # generator=generator,
290
+ # obf_number_rate=1,
291
+ # # FIXME (deoktr): breaks if obf_string_rate=1 with NamesObfuscator
292
+ # obf_string_rate=0,
293
+ # # FIXME (deoktr): breaks if obf_builtins_rate=1 with NamesObfuscator
294
+ # obf_builtins_rate=0,
295
+ # ).obfuscate_tokens(tokens)
296
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
297
+ tokens = ConstantsObfuscator(
298
+ generator=generator,
299
+ obf_number_rate=1,
300
+ obf_string_rate=1,
301
+ obf_builtins_rate=1,
302
+ ).obfuscate_tokens(tokens)
303
+ tokens = IndentsObfuscator().obfuscate_tokens(tokens)
304
+ tokens = NewlineObfuscator().obfuscate_tokens(tokens)
305
+
306
+ from tokenize import COMMENT, NEWLINE
307
+
308
+ tokens = [(COMMENT, "# I love circles <3"), (NEWLINE, "\n"), *tokens]
309
+
310
+ return self._untokenize(tokens)
311
+
312
+ def image(self, source):
313
+ """Encrypt and store the payload code inside an image."""
314
+ tokens = self._get_tokens(source)
315
+ img_in = "pof/wip/stegano/i.png"
316
+ encoding_class = RC4Cipher()
317
+ tokens = ImageStager(encoding_class=encoding_class).generate_stager(
318
+ tokens,
319
+ img_in,
320
+ )
321
+ return self._untokenize(tokens)
322
+
323
+ def advanced_image(self, source):
324
+ """Obfuscate, encrypt, and store the payload code inside an image."""
325
+ tokens = self._get_tokens(source)
326
+ generator = BasicGenerator.alphabet_generator()
327
+
328
+ # obfuscate source
329
+ tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
330
+ tokens = IndentsObfuscator().obfuscate_tokens(tokens)
331
+
332
+ # stage inside image
333
+ img_in = "pof/wip/stegano/i.png"
334
+ encoding_class = RC4Cipher()
335
+ tokens = ImageStager(encoding_class=encoding_class).generate_stager(
336
+ tokens,
337
+ img_in,
338
+ )
339
+
340
+ # FIXME (deoktr): break the image stager
341
+ # obfuscate stager
342
+ # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
343
+ # tokens = IndentsObfuscator().obfuscate_tokens(tokens)
344
+
345
+ # encrypt stager
346
+ tokens = RC4Stager().generate_stager(tokens)
347
+
348
+ # FIXME (deoktr): break the decryption part because set 256 to a variable
349
+ # obfuscate decryption stager
350
+ # tokens = NamesObfuscator(generator=generator).obfuscate_tokens(tokens)
351
+ # tokens = IndentsObfuscator().obfuscate_tokens(tokens)
352
+
353
+ return self._untokenize(tokens)
354
+
355
+ def test(self, source):
356
+ tokens = self._get_tokens(source)
357
+
358
+ # generator = AdvancedGenerator.fixed_length_generator()
359
+ # tokens = ConstantsObfuscator(generator=generator).obfuscate_tokens(tokens)
360
+
361
+ tokens = CommentsObfuscator().obfuscate_tokens(tokens)
362
+ # tokens = DeepEncryptionEvasion().add_evasion(tokens) # TODO (deoktr): fix
363
+ tokens = NamesObfuscator(
364
+ generator=AdvancedGenerator.fixed_length_generator(),
365
+ ).obfuscate_tokens(tokens)
366
+ tokens = IndentsObfuscator().obfuscate_tokens(tokens)
367
+ tokens = NewlineObfuscator().obfuscate_tokens(tokens)
368
+
369
+ return self._untokenize(tokens)
@@ -0,0 +1,86 @@
1
+ from .builtins import BuiltinsObfuscator
2
+ from .cipher.deep_encryption import DeepEncryptionObfuscator
3
+ from .cipher.rc4 import RC4Obfuscator
4
+ from .cipher.shift import ShiftObfuscator
5
+ from .cipher.xor import XORObfuscator
6
+ from .compression.bz2 import Bz2Obfuscator
7
+ from .compression.gzip import GzipObfuscator
8
+ from .compression.lzma import LzmaObfuscator
9
+ from .compression.zlib import ZlibObfuscator
10
+ from .constants import ConstantsObfuscator
11
+ from .definitions import DefinitionsObfuscator
12
+ from .encoding.a85 import ASCII85Obfuscator
13
+ from .encoding.b16 import Base16Obfuscator
14
+ from .encoding.b32 import Base32Obfuscator
15
+ from .encoding.b32hex import Base32HexObfuscator
16
+ from .encoding.b64 import Base64Obfuscator
17
+ from .encoding.b85 import Base85Obfuscator
18
+ from .encoding.binascii import BinasciiObfuscator
19
+ from .encoding.snt import SpacenTabObfuscator
20
+ from .esoteric.call import CallObfuscator
21
+ from .esoteric.doc import CharFromDocObfuscator
22
+ from .esoteric.globals import GlobalsObfuscator
23
+ from .esoteric.imports import ImportsObfuscator
24
+ from .extract_variables import ExtractVariablesObfuscator
25
+ from .junk.add_comments import AddCommentsObfuscator
26
+ from .junk.add_newlines import AddNewlinesObfuscator
27
+ from .names import NamesObfuscator
28
+ from .names_rope import NamesRopeObfuscator
29
+ from .numbers import NumberObfuscator
30
+ from .other.tokens import TokensObfuscator
31
+ from .remove.comments import CommentsObfuscator
32
+ from .remove.exceptions import ExceptionObfuscator
33
+ from .remove.indents import IndentsObfuscator
34
+ from .remove.loggings import LoggingObfuscator, LoggingRemoveObfuscator
35
+ from .remove.newline import NewlineObfuscator
36
+ from .remove.print import PrintObfuscator
37
+ from .stegano.docstrings import DocstringObfuscator
38
+ from .stegano.ipv6encoding import IPv6Obfuscator
39
+ from .stegano.macencoding import MACObfuscator
40
+ from .stegano.uuidencoding import UUIDObfuscator
41
+ from .strings import StringsObfuscator
42
+
43
+ __all__ = [
44
+ "ASCII85Obfuscator",
45
+ "AddCommentsObfuscator",
46
+ "AddNewlinesObfuscator",
47
+ "Base16Obfuscator",
48
+ "Base32HexObfuscator",
49
+ "Base32Obfuscator",
50
+ "Base64Obfuscator",
51
+ "Base85Obfuscator",
52
+ "BinasciiObfuscator",
53
+ "BuiltinsObfuscator",
54
+ "Bz2Obfuscator",
55
+ "CallObfuscator",
56
+ "CharFromDocObfuscator",
57
+ "CommentsObfuscator",
58
+ "ConstantsObfuscator",
59
+ "DeepEncryptionObfuscator",
60
+ "DefinitionsObfuscator",
61
+ "DocstringObfuscator",
62
+ "ExceptionObfuscator",
63
+ "ExtractVariablesObfuscator",
64
+ "GlobalsObfuscator",
65
+ "GzipObfuscator",
66
+ "IPv6Obfuscator",
67
+ "ImportsObfuscator",
68
+ "IndentsObfuscator",
69
+ "LoggingObfuscator",
70
+ "LoggingRemoveObfuscator",
71
+ "LzmaObfuscator",
72
+ "MACObfuscator",
73
+ "NamesObfuscator",
74
+ "NamesRopeObfuscator",
75
+ "NewlineObfuscator",
76
+ "NumberObfuscator",
77
+ "PrintObfuscator",
78
+ "RC4Obfuscator",
79
+ "ShiftObfuscator",
80
+ "SpacenTabObfuscator",
81
+ "StringsObfuscator",
82
+ "TokensObfuscator",
83
+ "UUIDObfuscator",
84
+ "XORObfuscator",
85
+ "ZlibObfuscator",
86
+ ]