multivol 0.1.0__py3-none-any.whl → 0.1.2__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.
@@ -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
- info_module = "windows.info.Info"
115
- if info_module in commands:
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,129 @@
1
+ Metadata-Version: 2.4
2
+ Name: multivol
3
+ Version: 0.1.2
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
+ ![Demo](demo.gif)
34
+
35
+ ## Features
36
+
37
+ - **Parallel Execution**: runs multiple Volatility plugins simultaneously using your machine's full CPU power.
38
+ - **Hybrid Support**: Seamlessly supports both **Volatility 2** and **Volatility 3**.
39
+ - **Containerized**: Runs all analysis in Docker containers—no complex dependency hell or Python 2/3 conflicts on your host.
40
+ - **Smart Caching**: Automatically manages symbol downloads and caching to prevent redundant network requests.
41
+ - **Flexible Output**: Supports both textual reports and structured JSON output for integration with other tools (like the MultiVol Web UI).
42
+
43
+ ## Prerequisites
44
+
45
+ 1. **Docker**: Ensure Docker Desktop (or Engine) is installed and running.
46
+ * [Install Docker](https://docs.docker.com/get-docker/)
47
+ 2. **Python 3.6+**
48
+
49
+ ## Installation
50
+
51
+ You can install `multivol` directly from PyPI:
52
+
53
+ ```bash
54
+ pip install multivol
55
+ ```
56
+
57
+ ### From Source
58
+
59
+ Alternatively, you can clone the repository and install it locally:
60
+
61
+ ```bash
62
+ git clone https://github.com/BoBNewz/MultiVolatility.git
63
+ cd MultiVolatility/CLI
64
+ pip install .
65
+ ```
66
+
67
+ This installs the `multivol` command available system-wide.
68
+
69
+ ### Building the Docker Images
70
+ Before running the tool, you must build the analysis images:
71
+
72
+ ```bash
73
+ # Build Volatility 2
74
+ docker build Dockerfiles/volatility2/ -t volatility2:latest
75
+
76
+ # Build Volatility 3
77
+ docker build Dockerfiles/volatility3/ -t volatility3:latest
78
+ ```
79
+
80
+ ## Usage
81
+
82
+ The basic syntax is:
83
+
84
+ ```bash
85
+ multivol [vol2|vol3] --dump <path_to_dump> --image <docker_image> [options]
86
+ ```
87
+
88
+ ### Examples
89
+
90
+ **Run a standard Windows analysis with Volatility 3:**
91
+ ```bash
92
+ multivol vol3 --dump memdump.raw --image volatility3:latest --windows --light
93
+ ```
94
+
95
+ **Run a full analysis on a Linux dump:**
96
+ ```bash
97
+ multivol vol3 --dump linux_dump.wem --image volatility3:latest --linux --full
98
+ ```
99
+
100
+ **Use Volatility 2 with a specific profile:**
101
+ ```bash
102
+ multivol vol2 --dump box_win7.raw --image volatility2:latest --profile Win7SP1x64 --windows --light
103
+ ```
104
+
105
+ ### Options
106
+
107
+ | Option | Description |
108
+ | :--- | :--- |
109
+ | `--dump` | **Required.** Path to the memory dump file. |
110
+ | `--image` | **Required.** Name of the Docker image to use (e.g., `volatility3:latest`). |
111
+ | `--windows` / `--linux` | **Required.** Specify the OS of the memory dump. |
112
+ | `--light` | Run a curated set of essential plugins (Fast). |
113
+ | `--full` | Run the comprehensive suite of all available plugins (Slow). |
114
+ | `--commands` | Run a specific comma-separated list of plugins (e.g., `pslist,filescan`). |
115
+ | `--processes` | Limit the number of concurrent Docker containers (Default: CPU Count). |
116
+ | `--api` | Start the tool in API mode for Web UI integration. |
117
+
118
+ ## Web Integration
119
+
120
+ MultiVol comes with a companion Web Interface for visualizing results and creating scans (Process Trees, File Browsers, etc.).
121
+
122
+ To use the CLI as a backend for the Web UI:
123
+ (optional).
124
+
125
+ Run `multivol --api`. or use the `docker-compose.yml`
126
+
127
+ ## License
128
+
129
+ 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.2.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
7
+ multivol-0.1.2.dist-info/METADATA,sha256=tL27xvLx7z_RtUCWMMEqcfYb7r8aEwCLPso1rtNUj44,4190
8
+ multivol-0.1.2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
9
+ multivol-0.1.2.dist-info/entry_points.txt,sha256=FM4lUHzrKUmV37U6IemQkRGXEJdgyB7-dwtw1jgwTQc,52
10
+ multivol-0.1.2.dist-info/top_level.txt,sha256=DcxSP883XnM_ad5TXyCIZkzDcYSoI1bPTie_AzHlN0A,9
11
+ multivol-0.1.2.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
- ![MultiVolatility](https://github.com/user-attachments/assets/f77c636d-b647-4218-9617-20268616689c)
@@ -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,,