CAPE-parsers 0.1.35__py3-none-any.whl → 0.1.36__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.
@@ -1,5 +1,29 @@
1
+ import importlib.util
2
+ import sys
3
+ import os
4
+
1
5
  from rat_king_parser.rkp import RATConfigParser
2
6
 
7
+ HAVE_ASYNCRAT_COMMON = False
8
+ module_file_path = '/opt/CAPEv2/data/asyncrat_common.py'
9
+ if os.path.exists(module_file_path):
10
+ try:
11
+ module_name = os.path.basename(module_file_path).replace('.py', '')
12
+ spec = importlib.util.spec_from_file_location(module_name, module_file_path)
13
+ asyncrat_common = importlib.util.module_from_spec(spec)
14
+ sys.modules[module_name] = asyncrat_common
15
+ spec.loader.exec_module(asyncrat_common)
16
+ HAVE_ASYNCRAT_COMMON = True
17
+ except Exception as e:
18
+ print("Error loading asyncrat_common.py", e)
3
19
 
4
20
  def extract_config(data: bytes):
5
- return RATConfigParser(data=data).report.get("config", {})
21
+ config = RATConfigParser(data=data, remap_config=True).report.get("config", {})
22
+ if config and HAVE_ASYNCRAT_COMMON:
23
+ config = asyncrat_common.convert_config(config)
24
+
25
+ return config
26
+
27
+ if __name__ == "__main__":
28
+ data = open(sys.argv[1], "rb").read()
29
+ print(extract_config(data))
@@ -1,5 +1,29 @@
1
+ import importlib.util
2
+ import sys
3
+ import os
4
+
1
5
  from rat_king_parser.rkp import RATConfigParser
2
6
 
7
+ HAVE_ASYNCRAT_COMMON = False
8
+ module_file_path = '/opt/CAPEv2/data/asyncrat_common.py'
9
+ if os.path.exists(module_file_path):
10
+ try:
11
+ module_name = os.path.basename(module_file_path).replace('.py', '')
12
+ spec = importlib.util.spec_from_file_location(module_name, module_file_path)
13
+ asyncrat_common = importlib.util.module_from_spec(spec)
14
+ sys.modules[module_name] = asyncrat_common
15
+ spec.loader.exec_module(asyncrat_common)
16
+ HAVE_ASYNCRAT_COMMON = True
17
+ except Exception as e:
18
+ print("Error loading asyncrat_common.py", e)
3
19
 
4
20
  def extract_config(data: bytes):
5
- return RATConfigParser(data=data).report.get("config", {})
21
+ config = RATConfigParser(data=data, remap_config=True).report.get("config", {})
22
+ if config and HAVE_ASYNCRAT_COMMON:
23
+ config = asyncrat_common.convert_config(config)
24
+
25
+ return config
26
+
27
+ if __name__ == "__main__":
28
+ data = open(sys.argv[1], "rb").read()
29
+ print(extract_config(data))
@@ -1,5 +1,29 @@
1
+ import importlib.util
2
+ import sys
3
+ import os
4
+
1
5
  from rat_king_parser.rkp import RATConfigParser
2
6
 
7
+ HAVE_ASYNCRAT_COMMON = False
8
+ module_file_path = '/opt/CAPEv2/data/asyncrat_common.py'
9
+ if os.path.exists(module_file_path):
10
+ try:
11
+ module_name = os.path.basename(module_file_path).replace('.py', '')
12
+ spec = importlib.util.spec_from_file_location(module_name, module_file_path)
13
+ asyncrat_common = importlib.util.module_from_spec(spec)
14
+ sys.modules[module_name] = asyncrat_common
15
+ spec.loader.exec_module(asyncrat_common)
16
+ HAVE_ASYNCRAT_COMMON = True
17
+ except Exception as e:
18
+ print("Error loading asyncrat_common.py", e)
3
19
 
4
20
  def extract_config(data: bytes):
5
- return RATConfigParser(data=data).report.get("config", {})
21
+ config = RATConfigParser(data=data, remap_config=True).report.get("config", {})
22
+ if config and HAVE_ASYNCRAT_COMMON:
23
+ config = asyncrat_common.convert_config(config)
24
+
25
+ return config
26
+
27
+ if __name__ == "__main__":
28
+ data = open(sys.argv[1], "rb").read()
29
+ print(extract_config(data))
@@ -1,5 +1,29 @@
1
+ import importlib.util
2
+ import sys
3
+ import os
4
+
1
5
  from rat_king_parser.rkp import RATConfigParser
2
6
 
7
+ HAVE_ASYNCRAT_COMMON = False
8
+ module_file_path = '/opt/CAPEv2/data/asyncrat_common.py'
9
+ if os.path.exists(module_file_path):
10
+ try:
11
+ module_name = os.path.basename(module_file_path).replace('.py', '')
12
+ spec = importlib.util.spec_from_file_location(module_name, module_file_path)
13
+ asyncrat_common = importlib.util.module_from_spec(spec)
14
+ sys.modules[module_name] = asyncrat_common
15
+ spec.loader.exec_module(asyncrat_common)
16
+ HAVE_ASYNCRAT_COMMON = True
17
+ except Exception as e:
18
+ print("Error loading asyncrat_common.py", e)
3
19
 
4
20
  def extract_config(data: bytes):
5
- return RATConfigParser(data=data).report.get("config", {})
21
+ config = RATConfigParser(data=data, remap_config=True).report.get("config", {})
22
+ if config and HAVE_ASYNCRAT_COMMON:
23
+ config = asyncrat_common.convert_config(config)
24
+
25
+ return config
26
+
27
+ if __name__ == "__main__":
28
+ data = open(sys.argv[1], "rb").read()
29
+ print(extract_config(data))
@@ -1,5 +1,29 @@
1
+ import importlib.util
2
+ import sys
3
+ import os
4
+
1
5
  from rat_king_parser.rkp import RATConfigParser
2
6
 
7
+ HAVE_ASYNCRAT_COMMON = False
8
+ module_file_path = '/opt/CAPEv2/data/asyncrat_common.py'
9
+ if os.path.exists(module_file_path):
10
+ try:
11
+ module_name = os.path.basename(module_file_path).replace('.py', '')
12
+ spec = importlib.util.spec_from_file_location(module_name, module_file_path)
13
+ asyncrat_common = importlib.util.module_from_spec(spec)
14
+ sys.modules[module_name] = asyncrat_common
15
+ spec.loader.exec_module(asyncrat_common)
16
+ HAVE_ASYNCRAT_COMMON = True
17
+ except Exception as e:
18
+ print("Error loading asyncrat_common.py", e)
3
19
 
4
20
  def extract_config(data: bytes):
5
- return RATConfigParser(data=data).report.get("config", {})
21
+ config = RATConfigParser(data=data, remap_config=True).report.get("config", {})
22
+ if config and HAVE_ASYNCRAT_COMMON:
23
+ config = asyncrat_common.convert_config(config)
24
+
25
+ return config
26
+
27
+ if __name__ == "__main__":
28
+ data = open(sys.argv[1], "rb").read()
29
+ print(extract_config(data))
@@ -20,6 +20,6 @@ def extract_config(data):
20
20
  config_dict["C2s"].append(line)
21
21
  elif line and "\\" in line:
22
22
  config_dict.setdefault("Timestamp path", []).append(line)
23
- elif "." in line:
23
+ elif "." in line and "=" not in line and line not in config_dict["C2s"]:
24
24
  config_dict.setdefault("Dummy domain", []).append(line)
25
25
  return config_dict
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: CAPE-parsers
3
- Version: 0.1.35
3
+ Version: 0.1.36
4
4
  Summary: CAPE: Malware Configuration Extraction
5
5
  License: MIT
6
6
  Keywords: cape,parsers,malware,configuration
@@ -21,7 +21,7 @@ Requires-Dist: maco (==1.1.8) ; extra == "maco"
21
21
  Requires-Dist: netstruct (==1.1.2)
22
22
  Requires-Dist: pefile
23
23
  Requires-Dist: pycryptodomex (>=3.20.0)
24
- Requires-Dist: rat-king-parser (>=4.0.0)
24
+ Requires-Dist: rat-king-parser (>=4.1.0)
25
25
  Requires-Dist: ruff (>=0.7.2)
26
26
  Requires-Dist: unicorn (==2.1.1)
27
27
  Requires-Dist: yara-python (>=4.5.1)
@@ -1,7 +1,7 @@
1
1
  cape_parsers/CAPE/__init__.py,sha256=JcY8WPKzUFYgexwV1eyKIuT1JyNZzMJjBynlPSzxY_I,7
2
2
  cape_parsers/CAPE/community/AgentTesla.py,sha256=T1gUd28eoCGA5by3ylAAK1naenF0fE3jgYx7UBkCRDk,3559
3
3
  cape_parsers/CAPE/community/Arkei.py,sha256=kXn949PC2CksavsL1BgvKgiAUDcq2NQUirosCTQcDF0,3790
4
- cape_parsers/CAPE/community/AsyncRAT.py,sha256=dzVInOc-BPVRdArk92oEY4PKq1AEW04NUToL8UV-UGk,146
4
+ cape_parsers/CAPE/community/AsyncRAT.py,sha256=0nGLNnwnO93SPbCTgoIMvkh6_smuzQxDcYtL77afGx8,1001
5
5
  cape_parsers/CAPE/community/AuroraStealer.py,sha256=UUoxgJtDan3fE1r8aDEKweC_URkV97QHBp1Hq_n7ShI,2419
6
6
  cape_parsers/CAPE/community/BackOffLoader.py,sha256=gIwNDsWm1xGR9whKEEj1eTBB1-KTLY0_yNE50xVScKo,1402
7
7
  cape_parsers/CAPE/community/BackOffPOS.py,sha256=lG7a_bXD3Exaoy-_lHpa90yiv_DesICFqClhqS_d8nk,1486
@@ -9,7 +9,7 @@ cape_parsers/CAPE/community/BlackNix.py,sha256=ToI6roQfjwJWb_a7mzwub8gqJnoUXmz-g
9
9
  cape_parsers/CAPE/community/Carbanak.py,sha256=G-v2wb1Zs5NTkFFfpnvlNaX_YZzDEAE2_sB5_blWxtM,5567
10
10
  cape_parsers/CAPE/community/CobaltStrikeBeacon.py,sha256=zZqvrK1TNLFsiQgTxo_0EN4sNIpM_WzyH7RGyk5oOnY,19399
11
11
  cape_parsers/CAPE/community/CobaltStrikeStager.py,sha256=fdT3gPfCtjqtohwYD5Z7bRWQgKqwbM_e4LuuaZxvl7g,7473
12
- cape_parsers/CAPE/community/DCRat.py,sha256=dzVInOc-BPVRdArk92oEY4PKq1AEW04NUToL8UV-UGk,146
12
+ cape_parsers/CAPE/community/DCRat.py,sha256=0nGLNnwnO93SPbCTgoIMvkh6_smuzQxDcYtL77afGx8,1001
13
13
  cape_parsers/CAPE/community/Fareit.py,sha256=NYkcF7Ddf7SqaSJwGesGTumTJ2p8AT9qBE4tNpiS9Ao,2003
14
14
  cape_parsers/CAPE/community/Greame.py,sha256=99W1aUoSNAQ9KMO85liel5rAN0Wutzo-m176iwfOzds,3633
15
15
  cape_parsers/CAPE/community/KoiLoader.py,sha256=ZTDm7tGGNFyW8N9l35_ta7ucBuE5AL9YprNR36kfid8,4029
@@ -33,9 +33,9 @@ cape_parsers/CAPE/community/SparkRAT.py,sha256=Fh7VPgIuTAiIzDbd-OS7WukQdgBfXIvVc
33
33
  cape_parsers/CAPE/community/Stealc.py,sha256=UyAcdt47Tgo-dSncW9J62egnqMa2vKVlFW6Zxd7hUGA,3763
34
34
  cape_parsers/CAPE/community/TSCookie.py,sha256=f4b4HCnn6v3YkMrrmonR5WMdGO0vEiNe-ENhYHqfctk,5632
35
35
  cape_parsers/CAPE/community/TrickBot.py,sha256=EdKOQtKlU0gLkWFiibpBmTIueRVYSqwYo0WCHmaRgGA,6967
36
- cape_parsers/CAPE/community/VenomRAT.py,sha256=dzVInOc-BPVRdArk92oEY4PKq1AEW04NUToL8UV-UGk,146
37
- cape_parsers/CAPE/community/XWorm.py,sha256=dzVInOc-BPVRdArk92oEY4PKq1AEW04NUToL8UV-UGk,146
38
- cape_parsers/CAPE/community/XenoRAT.py,sha256=dzVInOc-BPVRdArk92oEY4PKq1AEW04NUToL8UV-UGk,146
36
+ cape_parsers/CAPE/community/VenomRAT.py,sha256=0nGLNnwnO93SPbCTgoIMvkh6_smuzQxDcYtL77afGx8,1001
37
+ cape_parsers/CAPE/community/XWorm.py,sha256=0nGLNnwnO93SPbCTgoIMvkh6_smuzQxDcYtL77afGx8,1001
38
+ cape_parsers/CAPE/community/XenoRAT.py,sha256=0nGLNnwnO93SPbCTgoIMvkh6_smuzQxDcYtL77afGx8,1001
39
39
  cape_parsers/CAPE/community/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
40
  cape_parsers/CAPE/core/Azorult.py,sha256=7AWPeOWhji7n13qTjq-XNPA8LDKcCOOUy8nbT0TUU_I,2145
41
41
  cape_parsers/CAPE/core/BitPaymer.py,sha256=N3Ssi_zNliKn1vt2Z1UndMGZg4CIOjf75XDdpCx2ITc,2898
@@ -69,7 +69,7 @@ cape_parsers/CAPE/core/RedLine.py,sha256=4veoGo4X1pApCn9dAFmFamfDsS-BROh_PuwiWcI
69
69
  cape_parsers/CAPE/core/Remcos.py,sha256=WusmTiu5hwIeLCO75xmtrDFhIvaYefUJv79nSVhBdX4,9384
70
70
  cape_parsers/CAPE/core/Rhadamanthys.py,sha256=TuhWqOssRiTOEuCk_UXBd3SPz-V71pOCYLwpSaZXX2I,6107
71
71
  cape_parsers/CAPE/core/SmokeLoader.py,sha256=y3PGuAhGkvRSlbi1-PViv66LW4N8AA2Rc5UzxV_nRvw,3889
72
- cape_parsers/CAPE/core/Socks5Systemz.py,sha256=TvJMsyhlxaak-kLQ6sqm6gSqotltmTFkDRuQjYgNSTg,704
72
+ cape_parsers/CAPE/core/Socks5Systemz.py,sha256=k5AdoNKl32m6g1MlOWw4EXvfqMJOFuyw5I0VkQicjRs,759
73
73
  cape_parsers/CAPE/core/SquirrelWaffle.py,sha256=ErCT5eeo5xiQTBzhpaS22PQ8pp-u-G4cjJ4bapjKT2U,3283
74
74
  cape_parsers/CAPE/core/Strrat.py,sha256=StKPm9Qx8iIIjWb-2P7Naow6sMSJ9tclXJcUQ8JUcWc,2243
75
75
  cape_parsers/CAPE/core/UrsnifV3.py,sha256=Nu4X2l_zwlVMjvEa5gQRaR9SgYKL-C-C9onSmd2DtuU,5510
@@ -104,7 +104,7 @@ cape_parsers/utils/blzpack_lib.so,sha256=5PJtnggw8fV5q4DlhwMJk4ZadvC3fFTsVTNZKvE
104
104
  cape_parsers/utils/dotnet_utils.py,sha256=pzQGbCqccz7DRv8T_i1JURlrKDIlDT2axxViiFF9hsU,1672
105
105
  cape_parsers/utils/lznt1.py,sha256=X-BmJtP6AwYSl0ORg5dfSt-NIuXbHrtCO5kUaaJI2C8,4066
106
106
  cape_parsers/utils/strings.py,sha256=a-nbvP9jYST7b6t_H37Ype-fK2jEmQr-wMF5a4i04e4,3062
107
- cape_parsers-0.1.35.dist-info/LICENSE,sha256=88c01_HLG8WPj7R7aU_b-O-UoF38vrrifvcko4KDxcE,1069
108
- cape_parsers-0.1.35.dist-info/METADATA,sha256=7IbXTRH1P7-s8iXn9gbqE0d6BzwpP9dUdaNa6GjqylY,1149
109
- cape_parsers-0.1.35.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
110
- cape_parsers-0.1.35.dist-info/RECORD,,
107
+ cape_parsers-0.1.36.dist-info/LICENSE,sha256=88c01_HLG8WPj7R7aU_b-O-UoF38vrrifvcko4KDxcE,1069
108
+ cape_parsers-0.1.36.dist-info/METADATA,sha256=toAGrERdqyq9eJJ53tbwbnZd0U3ACbxnieK1ssQgBYU,1149
109
+ cape_parsers-0.1.36.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
110
+ cape_parsers-0.1.36.dist-info/RECORD,,