multivol 0.1.0__py3-none-any.whl → 0.1.3__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.
- multivol/multi_volatility3.py +5 -37
- multivol/multivol.py +14 -4
- multivol-0.1.3.dist-info/METADATA +128 -0
- multivol-0.1.3.dist-info/RECORD +11 -0
- multivol-0.1.0.dist-info/METADATA +0 -45
- multivol-0.1.0.dist-info/RECORD +0 -11
- {multivol-0.1.0.dist-info → multivol-0.1.3.dist-info}/WHEEL +0 -0
- {multivol-0.1.0.dist-info → multivol-0.1.3.dist-info}/entry_points.txt +0 -0
- {multivol-0.1.0.dist-info → multivol-0.1.3.dist-info}/licenses/LICENSE +0 -0
- {multivol-0.1.0.dist-info → multivol-0.1.3.dist-info}/top_level.txt +0 -0
multivol/multi_volatility3.py
CHANGED
|
@@ -26,43 +26,7 @@ class multi_volatility3:
|
|
|
26
26
|
return os.path.join(host_path, rel_path)
|
|
27
27
|
return path
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
def generate_command_volatility3_json(self, command, dump, dump_dir, symbols_path, docker_image, cache_dir, plugin_dir):
|
|
31
|
-
# Generates the Docker command to run a Volatility3 module with JSON output
|
|
32
|
-
return [
|
|
33
|
-
"docker", "run", "--rm",
|
|
34
|
-
"-v", f"{dump_dir}:/dumps/{dump}",
|
|
35
|
-
"-v", f"{cache_dir}:/home/root/.cache",
|
|
36
|
-
"-v", f"{symbols_path}:/tmp",
|
|
37
|
-
"-v", f"{plugin_dir}:/root/plugins_dir",
|
|
38
|
-
"-ti", docker_image,
|
|
39
|
-
"vol",
|
|
40
|
-
"-q",
|
|
41
|
-
"-f", f"/dumps/{dump}",
|
|
42
|
-
"-s", "/tmp",
|
|
43
|
-
"-p", "/root/plugins_dir",
|
|
44
|
-
"-r", "json",
|
|
45
|
-
command
|
|
46
|
-
]
|
|
47
|
-
|
|
48
|
-
def generate_command_volatility3_text(self, command, dump, dump_dir, symbols_path, docker_image, cache_dir, plugin_dir):
|
|
49
|
-
# Generates the Docker command to run a Volatility3 module with text output
|
|
50
|
-
return [
|
|
51
|
-
"docker", "run", "--rm",
|
|
52
|
-
"-v", f"{dump_dir}:/dumps/{dump}",
|
|
53
|
-
"-v", f"{cache_dir}:/home/root/.cache",
|
|
54
|
-
"-v", f"{symbols_path}:/tmp",
|
|
55
|
-
"-v", f"{plugin_dir}:/root/plugins_dir",
|
|
56
|
-
"-ti", docker_image,
|
|
57
|
-
"vol",
|
|
58
|
-
"-q",
|
|
59
|
-
"-f", f"/dumps/{dump}",
|
|
60
|
-
"-s", "/tmp",
|
|
61
|
-
"-p", "/root/plugins_dir",
|
|
62
|
-
command
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
def execute_command_volatility3(self, command, dump, dump_dir, symbols_path, docker_image, cache_dir, plugin_dir, output_dir, format, quiet=False, lock=None, host_path=None):
|
|
29
|
+
def execute_command_volatility3(self, command, dump, dump_dir, symbols_path, docker_image, cache_dir, plugin_dir, output_dir, format, quiet=False, lock=None, host_path=None, fetch_symbols=False):
|
|
66
30
|
# Executes a Volatility3 command in Docker and handles output
|
|
67
31
|
if not quiet:
|
|
68
32
|
self.safe_print(f"[+] Starting {command}...", lock)
|
|
@@ -98,6 +62,9 @@ class multi_volatility3:
|
|
|
98
62
|
dump_filename = os.path.basename(dump)
|
|
99
63
|
base_args = f"vol -q -f /dump_dir/{dump_filename} -s /symbols -p /plugins"
|
|
100
64
|
|
|
65
|
+
if fetch_symbols:
|
|
66
|
+
base_args = f"{base_args} --remote-isf-url https://github.com/Abyss-W4tcher/volatility3-symbols/raw/master/banners/banners.json"
|
|
67
|
+
|
|
101
68
|
if format == "json":
|
|
102
69
|
self.output_file = os.path.join(output_dir, f"{command}_output.json")
|
|
103
70
|
cmd_args = f"{base_args} -r json {command}"
|
|
@@ -224,6 +191,7 @@ class multi_volatility3:
|
|
|
224
191
|
]
|
|
225
192
|
elif opsys == "windows.light":
|
|
226
193
|
return ["windows.cmdline.CmdLine",
|
|
194
|
+
"windows.info.Info",
|
|
227
195
|
"windows.filescan.FileScan",
|
|
228
196
|
"windows.netscan.NetScan",
|
|
229
197
|
"windows.netstat.NetStat",
|
multivol/multivol.py
CHANGED
|
@@ -111,8 +111,11 @@ def runner(arguments):
|
|
|
111
111
|
)
|
|
112
112
|
else:
|
|
113
113
|
# Enforce priority execution for Info module to ensure symbols are downloaded/cached
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
if arguments.windows:
|
|
115
|
+
info_module = "windows.info.Info"
|
|
116
|
+
else:
|
|
117
|
+
info_module = "linux.bash.Bash"
|
|
118
|
+
if arguments.windows or (arguments.linux and arguments.fetch_symbol):
|
|
116
119
|
commands.remove(info_module)
|
|
117
120
|
volatility3_instance.execute_command_volatility3(info_module,
|
|
118
121
|
os.path.basename(arguments.dump),
|
|
@@ -125,7 +128,8 @@ def runner(arguments):
|
|
|
125
128
|
arguments.format,
|
|
126
129
|
False, # quiet
|
|
127
130
|
lock, # lock
|
|
128
|
-
arguments.host_path
|
|
131
|
+
arguments.host_path,
|
|
132
|
+
True if arguments.fetch_symbol else False
|
|
129
133
|
)
|
|
130
134
|
|
|
131
135
|
|
|
@@ -142,7 +146,8 @@ def runner(arguments):
|
|
|
142
146
|
arguments.format,
|
|
143
147
|
False, # quiet=False so we see the output as it happens
|
|
144
148
|
lock, # lock
|
|
145
|
-
arguments.host_path
|
|
149
|
+
arguments.host_path,
|
|
150
|
+
True if arguments.fetch_symbol else False
|
|
146
151
|
)) for cmd in commands]
|
|
147
152
|
|
|
148
153
|
# Progress counters
|
|
@@ -215,6 +220,7 @@ def main():
|
|
|
215
220
|
vol3_os_group.add_argument("--linux", action="store_true", help="It's a Linux memory dump")
|
|
216
221
|
vol3_os_group.add_argument("--windows", action="store_true", help="It's a Windows memory dump")
|
|
217
222
|
vol3_parser.add_argument("--light", action="store_true", help="Use the principal modules.")
|
|
223
|
+
vol3_parser.add_argument("--fetch-symbol", action="store_true", help="Fetch automatically symbol from github.com/Abyss-W4tcher/volatility3-symbols", required=False)
|
|
218
224
|
vol3_parser.add_argument("--full", action="store_true", help="Use all modules.")
|
|
219
225
|
vol3_parser.add_argument("--format", help="Format of the outputs: json, text", required=False, default="text")
|
|
220
226
|
vol3_parser.add_argument("--processes", type=int, required=False, default=None, help="Max number of concurrent processes")
|
|
@@ -242,6 +248,10 @@ def main():
|
|
|
242
248
|
print("[-] --linux not available with --full or --light")
|
|
243
249
|
sys.exit(1)
|
|
244
250
|
|
|
251
|
+
if args.fetch_symbol and not args.linux:
|
|
252
|
+
print("[-] --fetch-symbol only available with --linux")
|
|
253
|
+
sys.exit(1)
|
|
254
|
+
|
|
245
255
|
# Validate output format
|
|
246
256
|
if (args.format != "json") and (args.format != "text"):
|
|
247
257
|
print("Format not supported !")
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: multivol
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Summary: MultiVolatility: Analyze memory dumps faster than ever with Volatility2 and Volatility3 in parallel using Docker
|
|
5
|
+
Home-page: https://github.com/BoBNewz/MultiVolatility
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
+
Classifier: Operating System :: OS Independent
|
|
9
|
+
Requires-Python: >=3.6
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Requires-Dist: pyyaml
|
|
13
|
+
Requires-Dist: requests
|
|
14
|
+
Requires-Dist: flask
|
|
15
|
+
Requires-Dist: flask-cors
|
|
16
|
+
Requires-Dist: docker
|
|
17
|
+
Requires-Dist: rich
|
|
18
|
+
Dynamic: classifier
|
|
19
|
+
Dynamic: description
|
|
20
|
+
Dynamic: description-content-type
|
|
21
|
+
Dynamic: home-page
|
|
22
|
+
Dynamic: license-file
|
|
23
|
+
Dynamic: requires-dist
|
|
24
|
+
Dynamic: requires-python
|
|
25
|
+
Dynamic: summary
|
|
26
|
+
|
|
27
|
+
# MultiVolatility ⚡️
|
|
28
|
+
|
|
29
|
+
**Analyze memory dumps faster than ever with Volatility2 and Volatility3 in parallel.**
|
|
30
|
+
|
|
31
|
+
MultiVolatility (`multivol`) is a powerful CLI wrapper that orchestrates memory forensics using Docker. It parallizes execution across multiple CPU cores, dramatically reducing the time required to run full scan suites on `windows` or `linux` memory dumps.
|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- **Parallel Execution**: runs multiple Volatility plugins simultaneously using your machine's full CPU power.
|
|
37
|
+
- **Hybrid Support**: Seamlessly supports both **Volatility 2** and **Volatility 3**.
|
|
38
|
+
- **Containerized**: Runs all analysis in Docker containers—no complex dependency hell or Python 2/3 conflicts on your host.
|
|
39
|
+
- **Smart Caching**: Automatically manages symbol downloads and caching to prevent redundant network requests.
|
|
40
|
+
- **Flexible Output**: Supports both textual reports and structured JSON output for integration with other tools (like the MultiVol Web UI).
|
|
41
|
+
|
|
42
|
+
## Prerequisites
|
|
43
|
+
|
|
44
|
+
1. **Docker**: Ensure Docker Desktop (or Engine) is installed and running.
|
|
45
|
+
* [Install Docker](https://docs.docker.com/get-docker/)
|
|
46
|
+
2. **Python 3.6+**
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
You can install `multivol` directly from PyPI:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
pip install multivol
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### From Source
|
|
57
|
+
|
|
58
|
+
Alternatively, you can clone the repository and install it locally:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
git clone https://github.com/BoBNewz/MultiVolatility.git
|
|
62
|
+
cd MultiVolatility/CLI
|
|
63
|
+
pip install .
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This installs the `multivol` command available system-wide.
|
|
67
|
+
|
|
68
|
+
### Building the Docker Images
|
|
69
|
+
Before running the tool, you must build the analysis images:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Build Volatility 2
|
|
73
|
+
docker build Dockerfiles/volatility2/ -t volatility2:latest
|
|
74
|
+
|
|
75
|
+
# Build Volatility 3
|
|
76
|
+
docker build Dockerfiles/volatility3/ -t volatility3:latest
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Usage
|
|
80
|
+
|
|
81
|
+
The basic syntax is:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
multivol [vol2|vol3] --dump <path_to_dump> --image <docker_image> [options]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Examples
|
|
88
|
+
|
|
89
|
+
**Run a standard Windows analysis with Volatility 3:**
|
|
90
|
+
```bash
|
|
91
|
+
multivol vol3 --dump memdump.raw --image volatility3:latest --windows --light
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Run a full analysis on a Linux dump:**
|
|
95
|
+
```bash
|
|
96
|
+
multivol vol3 --dump linux_dump.wem --image volatility3:latest --linux --full
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Use Volatility 2 with a specific profile:**
|
|
100
|
+
```bash
|
|
101
|
+
multivol vol2 --dump box_win7.raw --image volatility2:latest --profile Win7SP1x64 --windows --light
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Options
|
|
105
|
+
|
|
106
|
+
| Option | Description |
|
|
107
|
+
| :--- | :--- |
|
|
108
|
+
| `--dump` | **Required.** Path to the memory dump file. |
|
|
109
|
+
| `--image` | **Required.** Name of the Docker image to use (e.g., `volatility3:latest`). |
|
|
110
|
+
| `--windows` / `--linux` | **Required.** Specify the OS of the memory dump. |
|
|
111
|
+
| `--light` | Run a curated set of essential plugins (Fast). |
|
|
112
|
+
| `--full` | Run the comprehensive suite of all available plugins (Slow). |
|
|
113
|
+
| `--commands` | Run a specific comma-separated list of plugins (e.g., `pslist,filescan`). |
|
|
114
|
+
| `--processes` | Limit the number of concurrent Docker containers (Default: CPU Count). |
|
|
115
|
+
| `--api` | Start the tool in API mode for Web UI integration. |
|
|
116
|
+
|
|
117
|
+
## Web Integration
|
|
118
|
+
|
|
119
|
+
MultiVol comes with a companion Web Interface for visualizing results and creating scans (Process Trees, File Browsers, etc.).
|
|
120
|
+
|
|
121
|
+
To use the CLI as a backend for the Web UI:
|
|
122
|
+
(optional).
|
|
123
|
+
|
|
124
|
+
Run `multivol --api`. or use the `docker-compose.yml`
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
multivol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
multivol/api.py,sha256=N_7Sm8Ys_rjRI9MLm-ThTMcDXe6JJU1G11p6zljvQUs,37503
|
|
3
|
+
multivol/multi_volatility2.py,sha256=_Z2yxF05xLjzJSZBBisUEMT6WKy1YahbH4E-l41XvnI,9789
|
|
4
|
+
multivol/multi_volatility3.py,sha256=9jSfw5ti9TKTGO_tbeM4IaCJfufpNQoR_wILHF4Rmbs,9608
|
|
5
|
+
multivol/multivol.py,sha256=TI3y7jcC39XK3zxgwlKiOmTfOT69jzNDgbqf44p11Qc,13435
|
|
6
|
+
multivol-0.1.3.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
7
|
+
multivol-0.1.3.dist-info/METADATA,sha256=P_825nIZyAAIZlo-gXzPdjNpwdV-vK1UOXbybwQq_IY,4292
|
|
8
|
+
multivol-0.1.3.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
9
|
+
multivol-0.1.3.dist-info/entry_points.txt,sha256=FM4lUHzrKUmV37U6IemQkRGXEJdgyB7-dwtw1jgwTQc,52
|
|
10
|
+
multivol-0.1.3.dist-info/top_level.txt,sha256=DcxSP883XnM_ad5TXyCIZkzDcYSoI1bPTie_AzHlN0A,9
|
|
11
|
+
multivol-0.1.3.dist-info/RECORD,,
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: multivol
|
|
3
|
-
Version: 0.1.0
|
|
4
|
-
Summary: MultiVolatility: Analyze memory dumps faster than ever with Volatility2 and Volatility3 in parallel using Docker
|
|
5
|
-
Home-page: https://github.com/BoBNewz/MultiVolatility
|
|
6
|
-
Classifier: Programming Language :: Python :: 3
|
|
7
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
8
|
-
Classifier: Operating System :: OS Independent
|
|
9
|
-
Requires-Python: >=3.6
|
|
10
|
-
Description-Content-Type: text/markdown
|
|
11
|
-
License-File: LICENSE
|
|
12
|
-
Requires-Dist: pyyaml
|
|
13
|
-
Requires-Dist: requests
|
|
14
|
-
Requires-Dist: flask
|
|
15
|
-
Requires-Dist: flask-cors
|
|
16
|
-
Requires-Dist: docker
|
|
17
|
-
Requires-Dist: rich
|
|
18
|
-
Dynamic: classifier
|
|
19
|
-
Dynamic: description
|
|
20
|
-
Dynamic: description-content-type
|
|
21
|
-
Dynamic: home-page
|
|
22
|
-
Dynamic: license-file
|
|
23
|
-
Dynamic: requires-dist
|
|
24
|
-
Dynamic: requires-python
|
|
25
|
-
Dynamic: summary
|
|
26
|
-
|
|
27
|
-
# MultiVolatility
|
|
28
|
-
|
|
29
|
-
MultiVolatility uses multi-processing to run volatility2 and volatility3 docker containers.
|
|
30
|
-
The tool comes with the possibility to send JSON outputs to a web application.
|
|
31
|
-
|
|
32
|
-
## Build docker images
|
|
33
|
-
|
|
34
|
-
```shell
|
|
35
|
-
git clone https://github.com/BoBNewz/MultiVolatility.git
|
|
36
|
-
cd MultiVolatility
|
|
37
|
-
docker build Dockerfiles/volatility2/ -t volatility2
|
|
38
|
-
docker build Dockerfiles/volatility3/ -t volatility3
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Send outputs to the web application
|
|
42
|
-
|
|
43
|
-
Modify the URL and the API password in the config.yml.
|
|
44
|
-
|
|
45
|
-

|
multivol-0.1.0.dist-info/RECORD
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
multivol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
multivol/api.py,sha256=N_7Sm8Ys_rjRI9MLm-ThTMcDXe6JJU1G11p6zljvQUs,37503
|
|
3
|
-
multivol/multi_volatility2.py,sha256=_Z2yxF05xLjzJSZBBisUEMT6WKy1YahbH4E-l41XvnI,9789
|
|
4
|
-
multivol/multi_volatility3.py,sha256=y7_vDG9iQcpPMYwyejq2V1Hhjkzml-2E8Xa0LW0LEXU,10733
|
|
5
|
-
multivol/multivol.py,sha256=7OP8SpmLL-t6Tuf7Gz4ecqQIRRPj-la0uXpfXHql8Jg,12824
|
|
6
|
-
multivol-0.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
7
|
-
multivol-0.1.0.dist-info/METADATA,sha256=JdTQKyTRlTprtU9XAIBlEdZ8N10VmQokDxTGsXhheIY,1383
|
|
8
|
-
multivol-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
9
|
-
multivol-0.1.0.dist-info/entry_points.txt,sha256=FM4lUHzrKUmV37U6IemQkRGXEJdgyB7-dwtw1jgwTQc,52
|
|
10
|
-
multivol-0.1.0.dist-info/top_level.txt,sha256=DcxSP883XnM_ad5TXyCIZkzDcYSoI1bPTie_AzHlN0A,9
|
|
11
|
-
multivol-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|