Skip to content

Commit 780f9ab

Browse files
committed
Volshell: add regex_scan
1 parent 1e871af commit 780f9ab

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

volatility3/cli/volshell/generic.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from volatility3.cli import text_renderer, volshell
1515
from volatility3.framework import exceptions, interfaces, objects, plugins, renderers
1616
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
1818

1919
try:
2020
import capstone
@@ -149,6 +149,7 @@ def construct_locals(self) -> List[Tuple[List[str], Any]]:
149149
(["cc", "create_configurable"], self.create_configurable),
150150
(["lf", "load_file"], self.load_file),
151151
(["rs", "run_script"], self.run_script),
152+
(["re", "regex_scan"], self.regex_scan),
152153
]
153154

154155
def _construct_locals_dict(self) -> Dict[str, Any]:
@@ -288,6 +289,21 @@ def display_words(self, offset, count=128, layer_name=None):
288289
remaining_data = self._read_data(offset, count=count, layer_name=layer_name)
289290
self._display_data(offset, remaining_data, format_string="H")
290291

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+
291307
def disassemble(self, offset, count=128, layer_name=None, architecture=None):
292308
"""Disassembles a number of instructions from the code at offset"""
293309
remaining_data = self._read_data(offset, count=count, layer_name=layer_name)

0 commit comments

Comments
 (0)