CAPE-parsers 0.1.36__tar.gz → 0.1.37__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.
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/PKG-INFO +1 -1
- cape_parsers-0.1.37/cape_parsers/CAPE/core/AdaptixBeacon.py +102 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/pyproject.toml +1 -1
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/LICENSE +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/AgentTesla.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Arkei.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/AsyncRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/AuroraStealer.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/BackOffLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/BackOffPOS.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/BlackNix.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Carbanak.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/CobaltStrikeBeacon.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/CobaltStrikeStager.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/DCRat.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Fareit.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Greame.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/KoiLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/LokiBot.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Lumma.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/NanoCore.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Nighthawk.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Njrat.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Pandora.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/PhemedroneStealer.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/PoisonIvy.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Punisher.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/QuasarRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/REvil.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Retefe.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Rozena.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/SmallNet.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Snake.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/SparkRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/Stealc.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/TSCookie.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/TrickBot.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/VenomRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/XWorm.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/XenoRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Azorult.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/BitPaymer.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/BlackDropper.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Blister.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/BruteRatel.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/BuerLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/BumbleBee.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/ChChes.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/DarkGate.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/DoppelPaymer.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/DridexLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Emotet.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Enfal.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/EvilGrab.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Formbook.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/GuLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/HttpBrowser.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/IcedID.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/IcedIDLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Latrodectus.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Oyster.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/PikaBot.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/PlugX.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/QakBot.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Quickbind.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/RCSession.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/RedLeaf.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/RedLine.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Remcos.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Rhadamanthys.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/SmokeLoader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Socks5Systemz.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/SquirrelWaffle.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Strrat.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/UrsnifV3.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/WarzoneRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/Zloader.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/core/test_cape.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/RATDecoders/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/RATDecoders/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/RATDecoders/test_rats.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/Hancitor.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/JavaDropper.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/Nymaim.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/PredatorPain.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/_ShadowTech.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/_VirusRat.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/_jRat.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/unrecom.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/deprecated/xRAT.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/malduck/LICENSE +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/malduck/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/malduck/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/malduck/test_malduck.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/mwcp/README.md +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/mwcp/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/mwcp/test_mwcp.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/__init__.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/aplib.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/blzpack.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/blzpack_lib.so +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/dotnet_utils.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/lznt1.py +0 -0
- {cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/utils/strings.py +0 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import struct
|
|
3
|
+
from contextlib import suppress
|
|
4
|
+
|
|
5
|
+
import pefile
|
|
6
|
+
from Cryptodome.Cipher import ARC4
|
|
7
|
+
|
|
8
|
+
log = logging.getLogger(__name__)
|
|
9
|
+
|
|
10
|
+
DESCRIPTION = "Adaptix beacon configuration parser."
|
|
11
|
+
AUTHOR = "enzok"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def parse_http_config(rc4_key: bytes, data: bytes) -> dict:
|
|
15
|
+
config = {}
|
|
16
|
+
offset = 0
|
|
17
|
+
servers = []
|
|
18
|
+
ports = []
|
|
19
|
+
|
|
20
|
+
def read(fmt: str):
|
|
21
|
+
nonlocal offset
|
|
22
|
+
size = struct.calcsize(fmt)
|
|
23
|
+
value = struct.unpack_from(fmt, data, offset)
|
|
24
|
+
offset += size
|
|
25
|
+
return value if len(value) > 1 else value[0]
|
|
26
|
+
|
|
27
|
+
def read_str(length: int):
|
|
28
|
+
nonlocal offset
|
|
29
|
+
value = data[offset:offset + length].decode("utf-8", errors="replace")
|
|
30
|
+
offset += length
|
|
31
|
+
return value
|
|
32
|
+
|
|
33
|
+
config["config_rc4_key"] = rc4_key.hex()
|
|
34
|
+
config["agent_type"] = f"{read('<I'):8X}"
|
|
35
|
+
config["use_ssl"] = read("<B")
|
|
36
|
+
host_count = read("<I")
|
|
37
|
+
for host in range(host_count):
|
|
38
|
+
host_length = read("<I")
|
|
39
|
+
servers.append(read_str(host_length).strip("\x00"))
|
|
40
|
+
ports.append(read("<I"))
|
|
41
|
+
|
|
42
|
+
config["servers"] = servers
|
|
43
|
+
config["ports"] = ports
|
|
44
|
+
method_length = read("<I")
|
|
45
|
+
config["http_method"] = read_str(method_length).strip("\x00")
|
|
46
|
+
uri_length = read("<I")
|
|
47
|
+
config["uri"] = read_str(uri_length).strip("\x00")
|
|
48
|
+
parameter_length = read("<I")
|
|
49
|
+
config["parameter"] = read_str(parameter_length).strip("\x00")
|
|
50
|
+
useragent_length = read("<I")
|
|
51
|
+
config["user_agent"] = read_str(useragent_length).strip("\x00")
|
|
52
|
+
headers_length = read("<I")
|
|
53
|
+
config["http_headers"] = read_str(headers_length).strip("\x00")
|
|
54
|
+
config["ans_pre_size"] = read("<I")
|
|
55
|
+
config["ans_size"] = read("<I")
|
|
56
|
+
config["kill_date"] = read("<I")
|
|
57
|
+
config["working_time"] = read("<I")
|
|
58
|
+
config["sleep_delay"] = read("<I")
|
|
59
|
+
config["jitter_delay"] = read("<I")
|
|
60
|
+
|
|
61
|
+
return config
|
|
62
|
+
|
|
63
|
+
def extract_config(filebuf: bytes) -> dict:
|
|
64
|
+
pe = pefile.PE(data=filebuf, fast_load=True)
|
|
65
|
+
data_sections = [s for s in pe.sections if b".rdata" in s.Name]
|
|
66
|
+
if not data_sections:
|
|
67
|
+
return
|
|
68
|
+
|
|
69
|
+
data = data_sections[0].get_data()
|
|
70
|
+
data_len = len(data)
|
|
71
|
+
pos = 0
|
|
72
|
+
while pos + 4 <= data_len:
|
|
73
|
+
start_offset = pos
|
|
74
|
+
key_offset = struct.unpack_from("<I", data, pos)[0]
|
|
75
|
+
pos += 4
|
|
76
|
+
|
|
77
|
+
if pos + key_offset + 32 > data_len:
|
|
78
|
+
pos = start_offset + 1
|
|
79
|
+
continue
|
|
80
|
+
|
|
81
|
+
encrypted_data = data[pos:pos + key_offset]
|
|
82
|
+
pos += key_offset
|
|
83
|
+
rc4_key = data[pos:pos + 16]
|
|
84
|
+
|
|
85
|
+
if key_offset == 787:
|
|
86
|
+
pass
|
|
87
|
+
|
|
88
|
+
with suppress(Exception):
|
|
89
|
+
decrypted = ARC4.new(rc4_key).decrypt(encrypted_data)
|
|
90
|
+
if b"User-Agent" in decrypted:
|
|
91
|
+
return parse_http_config(rc4_key, decrypted)
|
|
92
|
+
|
|
93
|
+
pos = start_offset + 1
|
|
94
|
+
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
if __name__ == "__main__":
|
|
99
|
+
import sys
|
|
100
|
+
|
|
101
|
+
with open(sys.argv[1], "rb") as f:
|
|
102
|
+
print(extract_config(f.read()))
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/CobaltStrikeBeacon.py
RENAMED
|
File without changes
|
{cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/CobaltStrikeStager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cape_parsers-0.1.36 → cape_parsers-0.1.37}/cape_parsers/CAPE/community/PhemedroneStealer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|