dissect.target 3.19.dev9__py3-none-any.whl → 3.19.dev11__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.
@@ -25,6 +25,7 @@ class ChromePlugin(ChromiumMixin, BrowserPlugin):
25
25
  DIRS = [
26
26
  # Windows
27
27
  "AppData/Local/Google/Chrome/User Data/Default",
28
+ "AppData/Local/Google/Chrome/User Data/Snapshots/*/Default",
28
29
  "AppData/Local/Google/Chrome/continuousUpdates/User Data/Default",
29
30
  "Local Settings/Application Data/Google/Chrome/User Data/Default",
30
31
  # Linux
@@ -79,11 +79,12 @@ class ChromiumMixin:
79
79
  users_dirs: list[tuple] = []
80
80
  for user_details in self.target.user_details.all_with_home():
81
81
  for d in hist_paths:
82
- cur_dir: TargetPath = user_details.home_path.joinpath(d)
83
- cur_dir = cur_dir.resolve()
84
- if not cur_dir.exists() or (user_details, cur_dir) in users_dirs:
85
- continue
86
- users_dirs.append((user_details, cur_dir))
82
+ home_dir: TargetPath = user_details.home_path
83
+ for cur_dir in home_dir.glob(d):
84
+ cur_dir = cur_dir.resolve()
85
+ if not cur_dir.exists() or (user_details.user, cur_dir) in users_dirs:
86
+ continue
87
+ users_dirs.append((user_details, cur_dir))
87
88
  return users_dirs
88
89
 
89
90
  def _iter_db(
@@ -28,6 +28,7 @@ class EdgePlugin(ChromiumMixin, BrowserPlugin):
28
28
  ".var/app/com.microsoft.Edge/config/microsoft-edge/Default",
29
29
  # Windows
30
30
  "AppData/Local/Microsoft/Edge/User Data/Default",
31
+ "AppData/Local/Microsoft/Edge/User Data/Snapshots/*/Default",
31
32
  # Macos
32
33
  "Library/Application Support/Microsoft Edge/Default",
33
34
  ]
@@ -16,7 +16,6 @@ import shutil
16
16
  import stat
17
17
  import subprocess
18
18
  import sys
19
- import traceback
20
19
  from contextlib import contextmanager
21
20
  from typing import Any, BinaryIO, Callable, Iterator, Optional, TextIO, Union
22
21
 
@@ -33,13 +32,15 @@ from dissect.target.exceptions import (
33
32
  )
34
33
  from dissect.target.filesystem import FilesystemEntry, LayerFilesystemEntry
35
34
  from dissect.target.helpers import cyber, fsutil, regutil
36
- from dissect.target.plugin import arg
35
+ from dissect.target.plugin import PluginFunction, arg
37
36
  from dissect.target.target import Target
38
37
  from dissect.target.tools.info import print_target_info
39
38
  from dissect.target.tools.utils import (
40
39
  args_to_uri,
41
40
  catch_sigpipe,
42
41
  configure_generic_arguments,
42
+ execute_function_on_target,
43
+ find_and_filter_plugins,
43
44
  generate_argparse_for_bound_method,
44
45
  process_generic_arguments,
45
46
  )
@@ -114,6 +115,7 @@ class TargetCmd(cmd.Cmd):
114
115
  cmd.Cmd.__init__(self)
115
116
  self.target = target
116
117
  self.debug = False
118
+ self.identchars += "."
117
119
 
118
120
  def __getattr__(self, attr: str) -> Any:
119
121
  if attr.startswith("help_"):
@@ -154,8 +156,8 @@ class TargetCmd(cmd.Cmd):
154
156
  except AttributeError:
155
157
  pass
156
158
 
157
- if self.target.has_function(command):
158
- return self._exec_target(command, command_args_str)
159
+ if plugins := list(find_and_filter_plugins(self.target, command, [])):
160
+ return self._exec_target(plugins, command_args_str)
159
161
 
160
162
  return cmd.Cmd.default(self, line)
161
163
 
@@ -213,24 +215,15 @@ class TargetCmd(cmd.Cmd):
213
215
  no_cyber = cmdfunc.__func__ in (TargetCli.cmd_registry, TargetCli.cmd_enter)
214
216
  return self._exec(_exec_, command_args_str, no_cyber)
215
217
 
216
- def _exec_target(self, func: str, command_args_str: str) -> Optional[bool]:
218
+ def _exec_target(self, funcs: list[PluginFunction], command_args_str: str) -> Optional[bool]:
217
219
  """Command exection helper for target plugins."""
218
- attr = self.target
219
- for part in func.split("."):
220
- attr = getattr(attr, part)
221
220
 
222
221
  def _exec_(argparts: list[str], stdout: TextIO) -> Optional[bool]:
223
- if callable(attr):
224
- argparser = generate_argparse_for_bound_method(attr)
225
- try:
226
- args = argparser.parse_args(argparts)
227
- except SystemExit:
228
- return False
229
- value = attr(**vars(args))
230
- else:
231
- value = attr
222
+ try:
223
+ output, value, _ = execute_function_on_target(self.target, func, argparts)
224
+ except SystemExit:
225
+ return False
232
226
 
233
- output = getattr(attr, "__output__", "default")
234
227
  if output == "record":
235
228
  # if the command results are piped to another process,
236
229
  # the process will receive Record objects
@@ -251,10 +244,16 @@ class TargetCmd(cmd.Cmd):
251
244
  else:
252
245
  print(value, file=stdout)
253
246
 
254
- try:
255
- return self._exec(_exec_, command_args_str)
256
- except PluginError:
257
- traceback.print_exc()
247
+ result = None
248
+ for func in funcs:
249
+ try:
250
+ result = self._exec(_exec_, command_args_str)
251
+ except PluginError as err:
252
+ if self.debug:
253
+ raise err
254
+ self.target.log.error(err)
255
+
256
+ return result
258
257
 
259
258
  def do_python(self, line: str) -> Optional[bool]:
260
259
  """drop into a Python shell"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.19.dev9
3
+ Version: 3.19.dev11
4
4
  Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -121,9 +121,9 @@ dissect/target/plugins/apps/av/trendmicro.py,sha256=8F4IWYCXG7HEniGridQ4ax82Mrx_
121
121
  dissect/target/plugins/apps/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
122
  dissect/target/plugins/apps/browser/brave.py,sha256=EW1ubL10swHeV9CscfpE-SrNZozul_Ewj48LNRaG5Kg,2865
123
123
  dissect/target/plugins/apps/browser/browser.py,sha256=rBIwcgdl73gm-8APwx2jEUAYXRniXkqcdMr2UYj_tS8,4118
124
- dissect/target/plugins/apps/browser/chrome.py,sha256=hxS8gqpBwoCrPaxNpllIa6K9DtsSGzn6XXcUaHyes6w,3048
125
- dissect/target/plugins/apps/browser/chromium.py,sha256=N9hS-a45iEv_GyKhLZQR_FSkEjWlMA0f22eURBuxF5Y,27999
126
- dissect/target/plugins/apps/browser/edge.py,sha256=woXzZtHPWmfcV8vbxGKHELKru5JRb32MAXs43_b4K4E,2883
124
+ dissect/target/plugins/apps/browser/chrome.py,sha256=DMONTYE95sI_jcmyQOapHwWQWwrezfYMllVCCPwhEP0,3117
125
+ dissect/target/plugins/apps/browser/chromium.py,sha256=QOeWSSXFM1IbUh3PMUB14oy6sqAS_v2B3xhthAMM_8k,28058
126
+ dissect/target/plugins/apps/browser/edge.py,sha256=tuuIbm4s8nNstA6nIOEfU0LG0jt20a8gf3rve2SXtdM,2953
127
127
  dissect/target/plugins/apps/browser/firefox.py,sha256=3Ucp85DXTDyCofW1_aEzjba_Pr0QyC4F5gX8NqY-uOg,30981
128
128
  dissect/target/plugins/apps/browser/iexplore.py,sha256=g_xw0toaiyjevxO8g9XPCOqc-CXZp39FVquRhPFGdTE,8801
129
129
  dissect/target/plugins/apps/container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -331,7 +331,7 @@ dissect/target/tools/logging.py,sha256=5ZnumtMWLyslxfrUGZ4ntRyf3obOOhmn8SBjKfdLc
331
331
  dissect/target/tools/mount.py,sha256=L_0tSmiBdW4aSaF0vXjB0bAkTC0kmT2N1hrbW6s5Jow,3254
332
332
  dissect/target/tools/query.py,sha256=ONHu2FVomLccikb84qBrlhNmEfRoHYFQMcahk_y2c9A,15580
333
333
  dissect/target/tools/reg.py,sha256=FDsiBBDxjWVUBTRj8xn82vZe-J_d9piM-TKS3PHZCcM,3193
334
- dissect/target/tools/shell.py,sha256=1Z-gYRlJu0rmFI20taatlofrvp52ac_arXG8AMhwj0w,45182
334
+ dissect/target/tools/shell.py,sha256=_widEuIRqZhYzcFR52NYI8O2aPFm6tG5Uiv-AIrC32U,45155
335
335
  dissect/target/tools/utils.py,sha256=sQizexY3ui5vmWw4KOBLg5ecK3TPFjD-uxDqRn56ZTY,11304
336
336
  dissect/target/tools/dump/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
337
337
  dissect/target/tools/dump/run.py,sha256=aD84peRS4zHqC78fH7Vd4ni3m1ZmVP70LyMwBRvoDGY,9463
@@ -345,10 +345,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
345
345
  dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
346
346
  dissect/target/volumes/md.py,sha256=j1K1iKmspl0C_OJFc7-Q1BMWN2OCC5EVANIgVlJ_fIE,1673
347
347
  dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
348
- dissect.target-3.19.dev9.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
349
- dissect.target-3.19.dev9.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
350
- dissect.target-3.19.dev9.dist-info/METADATA,sha256=KEe0VA16uLpcnxc2VQZNgkYTYZqRACn7KzWzU_sesx0,12718
351
- dissect.target-3.19.dev9.dist-info/WHEEL,sha256=FZ75kcLy9M91ncbIgG8dnpCncbiKXSRGJ_PFILs6SFg,91
352
- dissect.target-3.19.dev9.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
353
- dissect.target-3.19.dev9.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
354
- dissect.target-3.19.dev9.dist-info/RECORD,,
348
+ dissect.target-3.19.dev11.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
349
+ dissect.target-3.19.dev11.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
350
+ dissect.target-3.19.dev11.dist-info/METADATA,sha256=K__-QEn5j-2bVryeNdtzhb6et_uhqklZ7KSWkBT33pM,12719
351
+ dissect.target-3.19.dev11.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
352
+ dissect.target-3.19.dev11.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
353
+ dissect.target-3.19.dev11.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
354
+ dissect.target-3.19.dev11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.0.1)
2
+ Generator: setuptools (71.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5