|
14 | 14 | from volatility3.cli import text_renderer, volshell |
15 | 15 | from volatility3.framework import exceptions, interfaces, objects, plugins, renderers |
16 | 16 | from volatility3.framework.configuration import requirements |
17 | | -from volatility3.framework.layers import intel, physical, resources |
| 17 | +from volatility3.framework.layers import intel, physical, resources, scanners |
18 | 18 |
|
19 | 19 | try: |
20 | 20 | import capstone |
@@ -149,6 +149,7 @@ def construct_locals(self) -> List[Tuple[List[str], Any]]: |
149 | 149 | (["cc", "create_configurable"], self.create_configurable), |
150 | 150 | (["lf", "load_file"], self.load_file), |
151 | 151 | (["rs", "run_script"], self.run_script), |
| 152 | + (["re", "regex_scan"], self.regex_scan), |
152 | 153 | ] |
153 | 154 |
|
154 | 155 | def _construct_locals_dict(self) -> Dict[str, Any]: |
@@ -288,6 +289,21 @@ def display_words(self, offset, count=128, layer_name=None): |
288 | 289 | remaining_data = self._read_data(offset, count=count, layer_name=layer_name) |
289 | 290 | self._display_data(offset, remaining_data, format_string="H") |
290 | 291 |
|
| 292 | + def regex_scan(self, pattern, count=128, layer_name=None): |
| 293 | + """Scans for regex pattern in layer using RegExScanner.""" |
| 294 | + if not isinstance(pattern, bytes): |
| 295 | + raise TypeError("pattern must be bytes, e.g. re(b'pattern')") |
| 296 | + layer_name_to_scan = layer_name or self.current_layer |
| 297 | + for offset in self.context.layers[layer_name_to_scan].scan( |
| 298 | + scanner=scanners.RegExScanner(pattern), |
| 299 | + context=self.context, |
| 300 | + ): |
| 301 | + remaining_data = self._read_data( |
| 302 | + offset, count=count, layer_name=layer_name_to_scan |
| 303 | + ) |
| 304 | + self._display_data(offset, remaining_data) |
| 305 | + print("") |
| 306 | + |
291 | 307 | def disassemble(self, offset, count=128, layer_name=None, architecture=None): |
292 | 308 | """Disassembles a number of instructions from the code at offset""" |
293 | 309 | remaining_data = self._read_data(offset, count=count, layer_name=layer_name) |
|
0 commit comments