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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: malwarebazaar
3
- Version: 0.2.4
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,4 @@
1
+ from importlib.metadata import version
2
+ from malwarebazaar.api import Bazaar, Yaraify # noqa
3
+
4
+ version = f"v{version('malwarebazaar')}"
@@ -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,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "malwarebazaar"
3
- version = "0.2.4"
3
+ version = "0.2.6"
4
4
  description = "CLI wrapper for malware bazaar API (bazaar.abuse.ch) and YARAify API (yaraify.abuse.ch)"
5
5
  authors = ["3c7 <3c7@posteo.de>"]
6
6
  license = "MIT"
@@ -1,3 +0,0 @@
1
- from malwarebazaar.api import Bazaar, Yaraify
2
-
3
- version = "v0.2.0"
@@ -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