MCPcopy Create free account
hub / github.com/Fadi002/de4py / StringDecoder

Class StringDecoder

de4py/engines/onyx/string_decoder.py:25–577  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23
24
25class StringDecoder:
26
27 MAX_PASSES = 10
28
29 def decode_all(self, source: str) -> str:
30 try:
31 for _ in range(self.MAX_PASSES):
32 decoded = self._single_pass(source)
33 if decoded == source:
34 break
35 source = decoded
36 except RecursionError:
37 pass # return whatever we have so far
38 except Exception:
39 pass # return whatever we have so far
40 return source
41
42 def _single_pass(self, source: str) -> str:
43 # 0a. AST constant folding: handles b64/b85 chains, chr(ord(i)-N),
44 # int.__xor__ XOR decode, globals()["__builtins__"], builtins-dict subscripts.
45 source = fold_constants(source)
46
47 # 0b. Resolve import aliases (must be first for regex compatibility)
48 source = self._resolve_import_aliases_for_decoding(source)
49
50 # 1. Regex-based transformations
51 source = self._unwrap_eval_exec(source)
52 source = self._decode_base64_calls(source)
53 source = self._decode_base64_dynamic_import(source)
54 source = self._decode_base32_calls(source)
55 source = self._decode_base85_calls(source)
56 source = self._decode_base16_calls(source)
57 source = self._decode_hex_escape_strings(source)
58 source = self._decode_bytes_fromhex(source)
59 source = self._decode_bytearray_literals(source)
60 source = self._decode_chr_chains(source)
61 source = self._decode_join_chr_list(source)
62 source = self._decode_join_chr_map(source)
63 source = self._decode_xor_zip(source)
64 source = self._decode_xor_chr_list(source)
65 source = self._decode_map_lambda_offset_chr(source)
66 source = self._decode_xor_byte_arrays(source)
67 source = self._decode_xor_comprehension(source)
68 source = self._decode_zlib(source)
69 source = self._decode_lzma(source)
70 source = self._decode_bz2(source)
71 source = self._decode_rot13(source)
72 source = self._decode_unicode_escapes(source)
73 source = self._decode_codecs_hex(source)
74 source = self._decode_reversed_string(source)
75 source = self._decode_int_hex_literal(source)
76 source = self._decode_encode_decode_roundtrip(source)
77
78 # 2. Consolidated AST-based transformations
79 source = self._run_ast_transformations(source)
80
81 return source
82

Callers 2

__init__Method · 0.90
decoderFunction · 0.90

Calls

no outgoing calls

Tested by 1

decoderFunction · 0.72