malwarebazaar 0.2.4__tar.gz → 0.2.6__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.
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/PKG-INFO +2 -1
- malwarebazaar-0.2.6/malwarebazaar/__init__.py +4 -0
- malwarebazaar-0.2.6/malwarebazaar/models.py +112 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/pyproject.toml +1 -1
- malwarebazaar-0.2.4/malwarebazaar/__init__.py +0 -3
- malwarebazaar-0.2.4/malwarebazaar/models.py +0 -112
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/LICENSE +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/README.md +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/api/__init__.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/api/bazaar.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/api/yaraify.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/bazaar.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/config.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/output.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/platform.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/py.typed +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/util.py +0 -0
- {malwarebazaar-0.2.4 → malwarebazaar-0.2.6}/malwarebazaar/yaraify.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: malwarebazaar
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: CLI wrapper for malware bazaar API (bazaar.abuse.ch) and YARAify API (yaraify.abuse.ch)
|
|
5
5
|
Home-page: https://github.com/3c7/bazaar
|
|
6
6
|
License: MIT
|
|
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
18
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
19
|
Classifier: Topic :: Security
|
|
19
20
|
Provides-Extra: cli
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from typing import List, Optional, Dict, Any
|
|
3
|
+
|
|
4
|
+
from pydantic import BaseModel, validator
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Sample(BaseModel):
|
|
8
|
+
"""Just a simple dictionary wrapper."""
|
|
9
|
+
md5_hash: str
|
|
10
|
+
sha1_hash: str
|
|
11
|
+
sha256_hash: str
|
|
12
|
+
sha3_384_hash: Optional[str] = None
|
|
13
|
+
first_seen: Optional[datetime] = None
|
|
14
|
+
last_seen: Optional[datetime] = None
|
|
15
|
+
file_name: Optional[str] = None
|
|
16
|
+
file_size: int
|
|
17
|
+
file_type_mime: Optional[str] = None
|
|
18
|
+
file_type: Optional[str] = None
|
|
19
|
+
signature: Optional[str] = None
|
|
20
|
+
tags: Optional[List[str]] = None
|
|
21
|
+
imphash: Optional[str] = None
|
|
22
|
+
gimphash: Optional[str] = None
|
|
23
|
+
dhash_icon: Optional[str] = None
|
|
24
|
+
reporter: Optional[str] = None
|
|
25
|
+
telfhash: Optional[str] = None
|
|
26
|
+
tlsh: Optional[str] = None
|
|
27
|
+
origin_country: Optional[str] = None
|
|
28
|
+
anonymous: Optional[bool] = None
|
|
29
|
+
ssdeep: Optional[str] = None
|
|
30
|
+
sightings: Optional[int] = None
|
|
31
|
+
vendor_intel: Optional[Dict[Any, Any]] = None
|
|
32
|
+
|
|
33
|
+
def __init__(self, **data):
|
|
34
|
+
tasks = None
|
|
35
|
+
if "metadata" in data:
|
|
36
|
+
tasks = data["tasks"]
|
|
37
|
+
data = data["metadata"]
|
|
38
|
+
super().__init__(
|
|
39
|
+
sha3_384_hash=data.pop("sha3_384", None) or data.pop("sha3_384_hash", None),
|
|
40
|
+
**data
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
@validator("first_seen", pre=True)
|
|
44
|
+
def validate_fs(cls, value):
|
|
45
|
+
if not value:
|
|
46
|
+
return value
|
|
47
|
+
try:
|
|
48
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
49
|
+
except ValueError:
|
|
50
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
51
|
+
|
|
52
|
+
@validator("last_seen", pre=True)
|
|
53
|
+
def validate_ls(cls, value):
|
|
54
|
+
if not value:
|
|
55
|
+
return value
|
|
56
|
+
try:
|
|
57
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
58
|
+
except ValueError:
|
|
59
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class YaraRule(BaseModel):
|
|
63
|
+
time_stamp: Optional[datetime] = None
|
|
64
|
+
rule_name: Optional[str] = None
|
|
65
|
+
author: Optional[str] = None
|
|
66
|
+
description: Optional[str] = None
|
|
67
|
+
date: Optional[str] = None
|
|
68
|
+
tlp: Optional[str] = None
|
|
69
|
+
reference: Optional[str] = None
|
|
70
|
+
yarahub_uuid: Optional[str] = None
|
|
71
|
+
yarahub_license: Optional[str] = None
|
|
72
|
+
yarahub_author_twitter: Optional[str] = None
|
|
73
|
+
yarahub_reference_link: Optional[str] = None
|
|
74
|
+
yarahub_reference_md5: Optional[str] = None
|
|
75
|
+
yarahub_rule_matching_tlp: Optional[str] = None
|
|
76
|
+
yarahub_rule_sharing_tlp: Optional[str] = None
|
|
77
|
+
malpedia_family: Optional[str] = None
|
|
78
|
+
|
|
79
|
+
@validator("time_stamp", pre=True)
|
|
80
|
+
def validate_ts(cls, value):
|
|
81
|
+
if not value:
|
|
82
|
+
return value
|
|
83
|
+
try:
|
|
84
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
85
|
+
except ValueError:
|
|
86
|
+
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class UnpackResult(BaseModel):
|
|
90
|
+
unpacked_file_name: Optional[str] = None
|
|
91
|
+
unpacked_md5: Optional[str] = None
|
|
92
|
+
unpacked_sha256: Optional[str] = None
|
|
93
|
+
unpacked_yara_matches: Optional[List[YaraRule]] = None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class Task(BaseModel):
|
|
97
|
+
task_id: Optional[str] = None
|
|
98
|
+
clamav_scan: Optional[bool] = None
|
|
99
|
+
unpack: Optional[bool] = None
|
|
100
|
+
share_file: Optional[bool] = None
|
|
101
|
+
metadata: Optional[Sample] = None
|
|
102
|
+
static_results: Optional[List[YaraRule]] = None
|
|
103
|
+
clamav_results: Optional[List[str]] = None
|
|
104
|
+
unpacked_results: Optional[List[UnpackResult]] = None
|
|
105
|
+
|
|
106
|
+
def __init__(self, **data):
|
|
107
|
+
params = data.pop("task_parameters", {})
|
|
108
|
+
unpacked_results = data.pop("unpacked_results", [])
|
|
109
|
+
if len(unpacked_results) == 0:
|
|
110
|
+
unpacked_results = data.pop("unpack_results", [])
|
|
111
|
+
|
|
112
|
+
super().__init__(**data, **params, unpacked_results=unpacked_results)
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
from datetime import datetime
|
|
2
|
-
from typing import List, Optional, Dict, Any
|
|
3
|
-
|
|
4
|
-
from pydantic import BaseModel, validator
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class Sample(BaseModel):
|
|
8
|
-
"""Just a simple dictionary wrapper."""
|
|
9
|
-
md5_hash: str
|
|
10
|
-
sha1_hash: str
|
|
11
|
-
sha256_hash: str
|
|
12
|
-
sha3_384_hash: Optional[str]
|
|
13
|
-
first_seen: Optional[datetime]
|
|
14
|
-
last_seen: Optional[datetime]
|
|
15
|
-
file_name: Optional[str]
|
|
16
|
-
file_size: int
|
|
17
|
-
file_type_mime: Optional[str]
|
|
18
|
-
file_type: Optional[str]
|
|
19
|
-
signature: Optional[str]
|
|
20
|
-
tags: Optional[List[str]]
|
|
21
|
-
imphash: Optional[str]
|
|
22
|
-
gimphash: Optional[str]
|
|
23
|
-
dhash_icon: Optional[str]
|
|
24
|
-
reporter: Optional[str]
|
|
25
|
-
telfhash: Optional[str]
|
|
26
|
-
tlsh: Optional[str]
|
|
27
|
-
origin_country: Optional[str]
|
|
28
|
-
anonymous: Optional[bool]
|
|
29
|
-
ssdeep: Optional[str]
|
|
30
|
-
sightings: Optional[int]
|
|
31
|
-
vendor_intel: Optional[Dict[Any, Any]]
|
|
32
|
-
|
|
33
|
-
def __init__(self, **data):
|
|
34
|
-
tasks = None
|
|
35
|
-
if "metadata" in data:
|
|
36
|
-
tasks = data["tasks"]
|
|
37
|
-
data = data["metadata"]
|
|
38
|
-
super().__init__(
|
|
39
|
-
sha3_384_hash=data.pop("sha3_384", None) or data.pop("sha3_384_hash", None),
|
|
40
|
-
**data
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
@validator("first_seen", pre=True)
|
|
44
|
-
def validate_fs(cls, value):
|
|
45
|
-
if not value:
|
|
46
|
-
return value
|
|
47
|
-
try:
|
|
48
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
49
|
-
except ValueError:
|
|
50
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
51
|
-
|
|
52
|
-
@validator("last_seen", pre=True)
|
|
53
|
-
def validate_ls(cls, value):
|
|
54
|
-
if not value:
|
|
55
|
-
return value
|
|
56
|
-
try:
|
|
57
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
58
|
-
except ValueError:
|
|
59
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
class YaraRule(BaseModel):
|
|
63
|
-
time_stamp: Optional[datetime]
|
|
64
|
-
rule_name: Optional[str]
|
|
65
|
-
author: Optional[str]
|
|
66
|
-
description: Optional[str]
|
|
67
|
-
date: Optional[str]
|
|
68
|
-
tlp: Optional[str]
|
|
69
|
-
reference: Optional[str]
|
|
70
|
-
yarahub_uuid: Optional[str]
|
|
71
|
-
yarahub_license: Optional[str]
|
|
72
|
-
yarahub_author_twitter: Optional[str]
|
|
73
|
-
yarahub_reference_link: Optional[str]
|
|
74
|
-
yarahub_reference_md5: Optional[str]
|
|
75
|
-
yarahub_rule_matching_tlp: Optional[str]
|
|
76
|
-
yarahub_rule_sharing_tlp: Optional[str]
|
|
77
|
-
malpedia_family: Optional[str]
|
|
78
|
-
|
|
79
|
-
@validator("time_stamp", pre=True)
|
|
80
|
-
def validate_ts(cls, value):
|
|
81
|
-
if not value:
|
|
82
|
-
return value
|
|
83
|
-
try:
|
|
84
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
|
|
85
|
-
except ValueError:
|
|
86
|
-
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S UTC")
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
class UnpackResult(BaseModel):
|
|
90
|
-
unpacked_file_name: Optional[str]
|
|
91
|
-
unpacked_md5: Optional[str]
|
|
92
|
-
unpacked_sha256: Optional[str]
|
|
93
|
-
unpacked_yara_matches: Optional[List[YaraRule]]
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
class Task(BaseModel):
|
|
97
|
-
task_id: Optional[str]
|
|
98
|
-
clamav_scan: Optional[bool]
|
|
99
|
-
unpack: Optional[bool]
|
|
100
|
-
share_file: Optional[bool]
|
|
101
|
-
metadata: Optional[Sample]
|
|
102
|
-
static_results: Optional[List[YaraRule]]
|
|
103
|
-
clamav_results: Optional[List[str]]
|
|
104
|
-
unpacked_results: Optional[List[UnpackResult]]
|
|
105
|
-
|
|
106
|
-
def __init__(self, **data):
|
|
107
|
-
params = data.pop("task_parameters", {})
|
|
108
|
-
unpacked_results = data.pop("unpacked_results", [])
|
|
109
|
-
if len(unpacked_results) == 0:
|
|
110
|
-
unpacked_results = data.pop("unpack_results", [])
|
|
111
|
-
|
|
112
|
-
super().__init__(**data, **params, unpacked_results=unpacked_results)
|
|
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
|