dissect.target 3.17.dev31__py3-none-any.whl → 3.17.dev34__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.
Files changed (31) hide show
  1. dissect/target/filesystems/dir.py +14 -1
  2. dissect/target/filesystems/overlay.py +103 -0
  3. dissect/target/helpers/compat/path_common.py +19 -5
  4. dissect/target/loader.py +1 -0
  5. dissect/target/loaders/dir.py +23 -5
  6. dissect/target/loaders/itunes.py +3 -3
  7. dissect/target/loaders/overlay.py +31 -0
  8. dissect/target/loaders/velociraptor.py +5 -4
  9. dissect/target/plugins/apps/browser/brave.py +10 -0
  10. dissect/target/plugins/apps/browser/browser.py +43 -0
  11. dissect/target/plugins/apps/browser/chrome.py +10 -0
  12. dissect/target/plugins/apps/browser/chromium.py +234 -12
  13. dissect/target/plugins/apps/browser/edge.py +10 -0
  14. dissect/target/plugins/apps/browser/firefox.py +440 -19
  15. dissect/target/plugins/apps/browser/iexplore.py +1 -1
  16. dissect/target/plugins/apps/container/docker.py +24 -4
  17. dissect/target/plugins/apps/ssh/putty.py +10 -1
  18. dissect/target/plugins/child/docker.py +24 -0
  19. dissect/target/plugins/os/unix/linux/fortios/_os.py +6 -6
  20. dissect/target/plugins/os/windows/catroot.py +11 -2
  21. dissect/target/plugins/os/windows/dpapi/crypto.py +12 -1
  22. dissect/target/plugins/os/windows/dpapi/dpapi.py +62 -7
  23. dissect/target/plugins/os/windows/dpapi/master_key.py +22 -2
  24. dissect/target/plugins/os/windows/sam.py +10 -1
  25. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/METADATA +1 -1
  26. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/RECORD +31 -28
  27. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/COPYRIGHT +0 -0
  28. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/LICENSE +0 -0
  29. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/WHEEL +0 -0
  30. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/entry_points.txt +0 -0
  31. {dissect.target-3.17.dev31.dist-info → dissect.target-3.17.dev34.dist-info}/top_level.txt +0 -0
@@ -23,9 +23,9 @@ from dissect.target.target import Target
23
23
  try:
24
24
  from Crypto.Cipher import AES, ChaCha20
25
25
 
26
- HAS_PYCRYPTODOME = True
26
+ HAS_CRYPTO = True
27
27
  except ImportError:
28
- HAS_PYCRYPTODOME = False
28
+ HAS_CRYPTO = False
29
29
 
30
30
  FortiOSUserRecord = TargetRecordDescriptor(
31
31
  "fortios/user",
@@ -442,8 +442,8 @@ def decrypt_password(input: str) -> str:
442
442
  - https://www.fortiguard.com/psirt/FG-IR-19-007
443
443
  """
444
444
 
445
- if not HAS_PYCRYPTODOME:
446
- raise RuntimeError("PyCryptodome module not available")
445
+ if not HAS_CRYPTO:
446
+ raise RuntimeError("Missing pycryptodome dependency")
447
447
 
448
448
  if input[:3] in ["SH2", "AK1"]:
449
449
  raise ValueError("Password is a hash (SHA-256 or SHA-1) and cannot be decrypted.")
@@ -511,8 +511,8 @@ def decrypt_rootfs(fh: BinaryIO, key: bytes, iv: bytes) -> BinaryIO:
511
511
  RuntimeError: When PyCryptodome is not available.
512
512
  """
513
513
 
514
- if not HAS_PYCRYPTODOME:
515
- raise RuntimeError("PyCryptodome module not available")
514
+ if not HAS_CRYPTO:
515
+ raise RuntimeError("Missing pycryptodome dependency")
516
516
 
517
517
  # First 8 bytes = counter, last 8 bytes = nonce
518
518
  # PyCryptodome interally divides this seek by 64 to get a (position, offset) tuple
@@ -1,7 +1,5 @@
1
1
  from typing import Iterator, Optional
2
2
 
3
- from asn1crypto.cms import ContentInfo
4
- from asn1crypto.core import Sequence
5
3
  from dissect.esedb import EseDB
6
4
  from flow.record.fieldtypes import digest
7
5
 
@@ -9,6 +7,14 @@ from dissect.target.exceptions import UnsupportedPluginError
9
7
  from dissect.target.helpers.record import TargetRecordDescriptor
10
8
  from dissect.target.plugin import Plugin, export
11
9
 
10
+ try:
11
+ from asn1crypto.cms import ContentInfo
12
+ from asn1crypto.core import Sequence
13
+
14
+ HAS_ASN1 = True
15
+ except ImportError:
16
+ HAS_ASN1 = False
17
+
12
18
  HINT_NEEDLE = b"\x1e\x08\x00H\x00i\x00n\x00t"
13
19
  PACKAGE_NAME_NEEDLE = b"\x06\n+\x06\x01\x04\x01\x827\x0c\x02\x01"
14
20
  DIGEST_NEEDLES = {
@@ -77,6 +83,9 @@ class CatrootPlugin(Plugin):
77
83
  self.catroot2_dir = self.target.fs.path("sysvol/windows/system32/catroot2")
78
84
 
79
85
  def check_compatible(self) -> None:
86
+ if not HAS_ASN1:
87
+ raise UnsupportedPluginError("Missing asn1crypto dependency")
88
+
80
89
  if next(self.catroot2_dir.rglob("catdb"), None) is None and next(self.catroot_dir.rglob("*.cat"), None) is None:
81
90
  raise UnsupportedPluginError("No catroot files or catroot ESE databases found")
82
91
 
@@ -4,7 +4,12 @@ import hashlib
4
4
  import hmac
5
5
  from typing import Optional, Union
6
6
 
7
- from Crypto.Cipher import AES, ARC4
7
+ try:
8
+ from Crypto.Cipher import AES, ARC4
9
+
10
+ HAS_CRYPTO = True
11
+ except ImportError:
12
+ HAS_CRYPTO = False
8
13
 
9
14
  CIPHER_ALGORITHMS: dict[Union[int, str], CipherAlgorithm] = {}
10
15
  HASH_ALGORITHMS: dict[Union[int, str], HashAlgorithm] = {}
@@ -62,6 +67,9 @@ class _AES(CipherAlgorithm):
62
67
  block_length = 128 // 8
63
68
 
64
69
  def decrypt(self, data: bytes, key: bytes, iv: Optional[bytes] = None) -> bytes:
70
+ if not HAS_CRYPTO:
71
+ raise RuntimeError("Missing pycryptodome dependency")
72
+
65
73
  cipher = AES.new(
66
74
  key[: self.key_length], mode=AES.MODE_CBC, IV=iv[: self.iv_length] if iv else b"\x00" * self.iv_length
67
75
  )
@@ -93,6 +101,9 @@ class _RC4(CipherAlgorithm):
93
101
  block_length = 1 // 8
94
102
 
95
103
  def decrypt(self, data: bytes, key: bytes, iv: Optional[bytes] = None) -> bytes:
104
+ if not HAS_CRYPTO:
105
+ raise RuntimeError("Missing pycryptodome dependency")
106
+
96
107
  cipher = ARC4.new(key[: self.key_length])
97
108
  return cipher.decrypt(data)
98
109
 
@@ -1,21 +1,27 @@
1
1
  import hashlib
2
2
  import re
3
- from functools import cached_property
3
+ from functools import cache, cached_property
4
4
  from pathlib import Path
5
5
 
6
- from Crypto.Cipher import AES
6
+ try:
7
+ from Crypto.Cipher import AES
8
+
9
+ HAS_CRYPTO = True
10
+ except ImportError:
11
+ HAS_CRYPTO = False
12
+
7
13
 
8
- from dissect.target import Target
9
14
  from dissect.target.exceptions import UnsupportedPluginError
15
+ from dissect.target.helpers import keychain
10
16
  from dissect.target.plugin import InternalPlugin
11
17
  from dissect.target.plugins.os.windows.dpapi.blob import Blob as DPAPIBlob
12
18
  from dissect.target.plugins.os.windows.dpapi.master_key import CredSystem, MasterKeyFile
19
+ from dissect.target.target import Target
13
20
 
14
21
 
15
22
  class DPAPIPlugin(InternalPlugin):
16
23
  __namespace__ = "dpapi"
17
24
 
18
- # This matches master key file names
19
25
  MASTER_KEY_REGEX = re.compile("^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$")
20
26
 
21
27
  SECURITY_POLICY_KEY = "HKEY_LOCAL_MACHINE\\SECURITY\\Policy"
@@ -25,11 +31,26 @@ class DPAPIPlugin(InternalPlugin):
25
31
 
26
32
  def __init__(self, target: Target):
27
33
  super().__init__(target)
34
+ self.keychain = cache(self.keychain)
28
35
 
29
36
  def check_compatible(self) -> None:
37
+ if not HAS_CRYPTO:
38
+ raise UnsupportedPluginError("Missing pycryptodome dependency")
39
+
30
40
  if not list(self.target.registry.keys(self.SYSTEM_KEY)):
31
41
  raise UnsupportedPluginError(f"Registry key not found: {self.SYSTEM_KEY}")
32
42
 
43
+ def keychain(self) -> set:
44
+ passwords = set()
45
+
46
+ for key in keychain.get_keys_for_provider("user") + keychain.get_keys_without_provider():
47
+ if key.key_type == keychain.KeyType.PASSPHRASE:
48
+ passwords.add(key.value)
49
+
50
+ # It is possible to encrypt using an empty passphrase.
51
+ passwords.add("")
52
+ return passwords
53
+
33
54
  @cached_property
34
55
  def syskey(self) -> bytes:
35
56
  lsa = self.target.registry.key(self.SYSTEM_KEY)
@@ -84,6 +105,10 @@ class DPAPIPlugin(InternalPlugin):
84
105
 
85
106
  return result
86
107
 
108
+ @cached_property
109
+ def _users(self) -> dict[str, dict[str, str]]:
110
+ return {u.name: {"sid": u.sid} for u in self.target.users()}
111
+
87
112
  def _load_master_keys_from_path(self, username: str, path: Path) -> dict[str, MasterKeyFile]:
88
113
  if not path.exists():
89
114
  return {}
@@ -104,21 +129,51 @@ class DPAPIPlugin(InternalPlugin):
104
129
  if not mkf.decrypted:
105
130
  raise Exception("Failed to decrypt System master key")
106
131
 
132
+ if user := self._users.get(username):
133
+ for mk_pass in self.keychain():
134
+ if mkf.decrypt_with_password(user["sid"], mk_pass):
135
+ break
136
+
137
+ try:
138
+ if mkf.decrypt_with_hash(user["sid"], bytes.fromhex(mk_pass)) is True:
139
+ break
140
+ except ValueError:
141
+ pass
142
+
143
+ if not mkf.decrypted:
144
+ self.target.log.warning("Could not decrypt DPAPI master key for username '%s'", username)
145
+
107
146
  result[file.name] = mkf
108
147
 
109
148
  return result
110
149
 
111
150
  def decrypt_system_blob(self, data: bytes) -> bytes:
151
+ """Decrypt the given bytes using the System master key."""
152
+ return self.decrypt_user_blob(data, self.SYSTEM_USERNAME)
153
+
154
+ def decrypt_user_blob(self, data: bytes, username: str) -> bytes:
155
+ """Decrypt the given bytes using the master key of the given user."""
112
156
  blob = DPAPIBlob(data)
113
157
 
114
- if not (mk := self.master_keys.get(self.SYSTEM_USERNAME, {}).get(blob.guid)):
115
- raise ValueError("Blob UUID is unknown to system master keys")
158
+ if not (mk := self.master_keys.get(username, {}).get(blob.guid)):
159
+ raise ValueError(f"Blob UUID is unknown to {username} master keys")
116
160
 
117
161
  if not blob.decrypt(mk.key):
118
- raise ValueError("Failed to decrypt system blob")
162
+ raise ValueError(f"Failed to decrypt blob for user {username}")
119
163
 
120
164
  return blob.clear_text
121
165
 
166
+ def decrypt_blob(self, data: bytes) -> bytes:
167
+ """Attempt to decrypt the given bytes using any of the available master keys."""
168
+ blob = DPAPIBlob(data)
169
+
170
+ for user in self.master_keys:
171
+ for mk in self.master_keys[user].values():
172
+ if blob.decrypt(mk.key):
173
+ return blob.clear_text
174
+
175
+ raise ValueError("Failed to decrypt blob")
176
+
122
177
 
123
178
  def _decrypt_aes(data: bytes, key: bytes) -> bytes:
124
179
  ctx = hashlib.sha256()
@@ -1,4 +1,5 @@
1
1
  import hashlib
2
+ import logging
2
3
  from io import BytesIO
3
4
  from typing import BinaryIO
4
5
 
@@ -11,6 +12,16 @@ from dissect.target.plugins.os.windows.dpapi.crypto import (
11
12
  dpapi_hmac,
12
13
  )
13
14
 
15
+ try:
16
+ from Crypto.Hash import MD4
17
+
18
+ HAS_CRYPTO = True
19
+ except ImportError:
20
+ HAS_CRYPTO = False
21
+
22
+ log = logging.getLogger(__name__)
23
+
24
+
14
25
  master_key_def = """
15
26
  struct DomainKey {
16
27
  DWORD dwVersion;
@@ -85,9 +96,18 @@ class MasterKey:
85
96
 
86
97
  def decrypt_with_password(self, user_sid: str, pwd: str) -> bool:
87
98
  """Decrypts the master key with the given user's password and SID."""
99
+ pwd = pwd.encode("utf-16-le")
100
+
88
101
  for algo in ["sha1", "md4"]:
89
- pwd_hash = hashlib.new(algo, pwd.encode("utf-16-le")).digest()
90
- self.decrypt_with_key(derive_password_hash(pwd_hash, user_sid))
102
+ if algo in hashlib.algorithms_available:
103
+ pwd_hash = hashlib.new(algo, pwd)
104
+ elif HAS_CRYPTO and algo == "md4":
105
+ pwd_hash = MD4.new(pwd)
106
+ else:
107
+ log.warning("No cryptography capabilities for algorithm %s", algo)
108
+ continue
109
+
110
+ self.decrypt_with_key(derive_password_hash(pwd_hash.digest(), user_sid))
91
111
  if self.decrypted:
92
112
  break
93
113
 
@@ -2,7 +2,13 @@ from hashlib import md5, sha256
2
2
  from struct import pack
3
3
  from typing import Iterator
4
4
 
5
- from Crypto.Cipher import AES, ARC4, DES
5
+ try:
6
+ from Crypto.Cipher import AES, ARC4, DES
7
+
8
+ HAS_CRYPTO = True
9
+ except ImportError:
10
+ HAS_CRYPTO = False
11
+
6
12
  from dissect import cstruct
7
13
  from dissect.util import ts
8
14
 
@@ -295,6 +301,9 @@ class SamPlugin(Plugin):
295
301
  SAM_KEY = "HKEY_LOCAL_MACHINE\\SAM\\SAM\\Domains\\Account"
296
302
 
297
303
  def check_compatible(self) -> None:
304
+ if not HAS_CRYPTO:
305
+ raise UnsupportedPluginError("Missing pycryptodome dependency")
306
+
298
307
  if not len(list(self.target.registry.keys(self.SAM_KEY))) > 0:
299
308
  raise UnsupportedPluginError(f"Registry key not found: {self.SAM_KEY}")
300
309
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.17.dev31
3
+ Version: 3.17.dev34
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
@@ -2,7 +2,7 @@ dissect/target/__init__.py,sha256=Oc7ounTgq2hE4nR6YcNabetc7SQA40ldSa35VEdZcQU,63
2
2
  dissect/target/container.py,sha256=0YcwcGmfJjhPXUB6DEcjWEoSuAtTDxMDpoTviMrLsxM,9353
3
3
  dissect/target/exceptions.py,sha256=VVW_Rq_vQinapz-2mbJ3UkxBEZpb2pE_7JlhMukdtrY,2877
4
4
  dissect/target/filesystem.py,sha256=1i-lToeTX-HgQXQOYxPXH-90M_eq43W4FFzNDRdpgpk,60094
5
- dissect/target/loader.py,sha256=_mrMOzKdpb7nlZJpLENOLuU4Ty92PzJem9GFDuo0PK4,7298
5
+ dissect/target/loader.py,sha256=hjKInZAEcv43RiqxZJ0yBI4Y2YZ2-nrsKWu_BKrgba4,7336
6
6
  dissect/target/plugin.py,sha256=HAN8maaDt-Rlqt8Rr1IW7gXQpzNQZjCVz-i4aSPphSw,48677
7
7
  dissect/target/report.py,sha256=06uiP4MbNI8cWMVrC1SasNS-Yg6ptjVjckwj8Yhe0Js,7958
8
8
  dissect/target/target.py,sha256=jq0Ii8073GOfwfqRj7UMuJT5jTVvQ_FD9Vrl9TMGpVc,32180
@@ -27,7 +27,7 @@ dissect/target/filesystems/btrfs.py,sha256=5MBi193ZvclkEQcxDr_sDHfj_FYU_hyYNRL4Y
27
27
  dissect/target/filesystems/cb.py,sha256=6LcoJiwsYu1Han31IUzVpZVDTifhTLTx_gLfNpB_p6k,5329
28
28
  dissect/target/filesystems/config.py,sha256=C2JnzBzMqbAjchGFDwURItCeUY7uxkhw1Gen-6cGkAc,11432
29
29
  dissect/target/filesystems/cpio.py,sha256=ssVCjkAtLn2FqmNxeo6U5boyUdSYFxLWfXpytHYGPqs,641
30
- dissect/target/filesystems/dir.py,sha256=7GRvojL151_Vk9e3vqgZbWE3I8IL9bU6LUKc_xjk6D4,4050
30
+ dissect/target/filesystems/dir.py,sha256=rKEreX3A7CI6a3pMssrO9F-9i5pkxCn_Ucs_dMtHxxA,4574
31
31
  dissect/target/filesystems/exfat.py,sha256=PRkZPUVN5NlgB1VetFtywdNgF6Yj5OBtF5a25t-fFvw,5917
32
32
  dissect/target/filesystems/extfs.py,sha256=9Cke-H0CL-SPd3-xvdAgfc3YA5hYso0sq6hm0C9vGII,4640
33
33
  dissect/target/filesystems/fat.py,sha256=ZSw-wS57vo5eIXJndfI1rZkGu_qh-vyioMzCZFZ_UTE,4611
@@ -35,6 +35,7 @@ dissect/target/filesystems/ffs.py,sha256=Wu8sS1jjmD0QXXcAaD2h_zzfvinjco8qvj0hEru
35
35
  dissect/target/filesystems/itunes.py,sha256=6LPUHSf2qpHacMgA4bdlEKUIV_BaLxmIxyLESXqNexI,6345
36
36
  dissect/target/filesystems/jffs.py,sha256=Ceqa5Em2pepnXMH_XZFmSNjQyWPo1uWTthBFSMWfKRo,3926
37
37
  dissect/target/filesystems/ntfs.py,sha256=fGgCKjdO5GrPC21DDr0SwIxmwR7KruNIqGUzysboirA,7068
38
+ dissect/target/filesystems/overlay.py,sha256=-dqWuMWLcq3usKbJYh0MW-qyp4dfLlOAh2z6FjNPu9I,4314
38
39
  dissect/target/filesystems/smb.py,sha256=uxfcOWwEoDCw8Qpsa94T5Pn-SKd4WXs4OOrzVVI55d8,6406
39
40
  dissect/target/filesystems/squashfs.py,sha256=ehzlThXB7n96XUvQnsK5tWLsA9HIxYN-Zxl7aO9D7ts,3921
40
41
  dissect/target/filesystems/tar.py,sha256=kQNhcEDPX005svse039OeR2AGSDigGuGz2AKoVrgg84,5692
@@ -72,22 +73,23 @@ dissect/target/helpers/compat/path_310.py,sha256=PsLDIodlp3Hv5u-w7GDl6_LnTtchBYc
72
73
  dissect/target/helpers/compat/path_311.py,sha256=2aydxCMWu1pN8PTBCo8HUbHRMC1xO-hj013j4QxaogE,18182
73
74
  dissect/target/helpers/compat/path_312.py,sha256=oYa9SzcUI6FZmayQSy-HHPiIdPk5FX0XAQjnjGLsjCc,15223
74
75
  dissect/target/helpers/compat/path_39.py,sha256=FIyZ3sb-XQhJnm02jVdOc6ncjCWa9OVxlCb_yap8A1o,18638
75
- dissect/target/helpers/compat/path_common.py,sha256=HY00SfF5zrlUybTVMBRBM_mpLyK8e4C8_1HRQM65A7U,7355
76
+ dissect/target/helpers/compat/path_common.py,sha256=X9mAPoP6E5e_1idiZz7-FPRsOwcAjQ5FP70k30s_yMA,7739
76
77
  dissect/target/helpers/data/windowsZones.xml,sha256=4OijeR7oxI0ZwPTSwCkmtcofOsUCjSnbZ4dQxVOM_4o,50005
77
78
  dissect/target/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
79
  dissect/target/loaders/ad1.py,sha256=1_VmPZckDzXVvNF-HNtoUZqabnhCKBLUD3vVaitHQ00,571
79
80
  dissect/target/loaders/asdf.py,sha256=dvPPDBrnz2JPXpCbqsu-NgQWIdVGMOit2KAdhIO1iiQ,972
80
81
  dissect/target/loaders/cb.py,sha256=EGhdytBKBdofTd89juavDZZbmupEZmMBadeUXvVIK20,6612
81
82
  dissect/target/loaders/cyber.py,sha256=Ip2hI7L98ZP7gUZuHQr0GxBdmbTzD-PntXmLJ5KpBuQ,1533
82
- dissect/target/loaders/dir.py,sha256=Q5oVS48SuI0vA_QKgzWBiAFsQ4aQaW3tr-701vLk3AQ,5245
83
+ dissect/target/loaders/dir.py,sha256=F-PgvBw82XmL0rdKyBxznUkDc5Oct6-_Y9xM4fhvA6I,5791
83
84
  dissect/target/loaders/hyperv.py,sha256=_IOUJEO0BXaCBZ6sjIX0DZTkG9UNW5Vs9VcNHYv073w,5928
84
- dissect/target/loaders/itunes.py,sha256=69aMTQiiGYpmD_EYSmf9mO1re8C3jAZIEStmwlMxdAk,13146
85
+ dissect/target/loaders/itunes.py,sha256=rKOhlDRypQBGkuSZudMDS1Mlb9XV6BD5FRvM7tGq9jU,13128
85
86
  dissect/target/loaders/kape.py,sha256=t5TfrGLqPeIpUUpXzIl6aHsqXMEGDqJ5YwDCs07DiBA,1237
86
87
  dissect/target/loaders/local.py,sha256=Ul-LCd_fY7SyWOVR6nH-NqbkuNpxoZVmffwrkvQElU8,16453
87
88
  dissect/target/loaders/log.py,sha256=cCkDIRS4aPlX3U-n_jUKaI2FPSV3BDpfqKceaU7rBbo,1507
88
89
  dissect/target/loaders/mqtt.py,sha256=D8AmdOz2atD92z8bhjVFi3tC1H7pYmP4UrOCtMgfwMY,10396
89
90
  dissect/target/loaders/multiraw.py,sha256=4a3ZST0NwjnfPDxHkcEfAcX2ddUlT_C-rcrMHNg1wp4,1046
90
91
  dissect/target/loaders/ova.py,sha256=6h4O-7i87J394C6KgLsPkdXRAKNwtPubzLNS3vBGs7U,744
92
+ dissect/target/loaders/overlay.py,sha256=tj99HKvNG5_JbGfb1WCv4KNSbXXSnEcPQY5XT-JUxn8,992
91
93
  dissect/target/loaders/ovf.py,sha256=ELMq6J2y6cPKbp7pjWAqMMnFYefWxXNqzIiAQdvGGXQ,1061
92
94
  dissect/target/loaders/phobos.py,sha256=XtxF7FZXfZrXJruFUZUQzxlREyfc86dTxph7BNoNMvw,2277
93
95
  dissect/target/loaders/profile.py,sha256=5ylgmzEEGyBFW3izvb-BZ7dGByXN9OFyRnnggR98P9w,1667
@@ -104,7 +106,7 @@ dissect/target/loaders/targetd.py,sha256=sfbn2_j3il2G-rPywAoNT5YPtD5KmKkmBv1zrPD
104
106
  dissect/target/loaders/utm.py,sha256=e5x5ZI3HeL0STh4S-CaQb68Rnug4SVZR9zlmHaGFj0M,978
105
107
  dissect/target/loaders/vb.py,sha256=CdimOMeoJEDq8xYDgtldGSiwhR-dY5uxac1L0sYwAEU,2078
106
108
  dissect/target/loaders/vbox.py,sha256=8JD7D8iAY9JRvTHsrosp5ZMsZezuLhZ10Zt8sEL7KBI,732
107
- dissect/target/loaders/velociraptor.py,sha256=FNxZgs_ehmgGO_Giw5oNl7cVOWNqI2nEiPWT4GjF2e0,4955
109
+ dissect/target/loaders/velociraptor.py,sha256=bMrmJsyrYFVr5loRbIttpLgddtX94d65UH_BM-PuIXQ,4911
108
110
  dissect/target/loaders/vma.py,sha256=AAY5-s-nz6wgvmcFkptJD7nNXhpkdf6SqEKVOrJaIKs,644
109
111
  dissect/target/loaders/vmwarevm.py,sha256=1MlKoIuWSwpYmpuLxDuVacvaYHUhAGO1KgZxzrc4fyg,428
110
112
  dissect/target/loaders/vmx.py,sha256=o1rYYKu6ReleqqHf2aeRcNrmoRcngWZNhz1h7GlmggQ,962
@@ -117,15 +119,15 @@ dissect/target/plugins/apps/av/sophos.py,sha256=gSfTvjBZMuT0hsL-p4oYxuYmakbqApoO
117
119
  dissect/target/plugins/apps/av/symantec.py,sha256=RFLyNW6FyuoGcirJ4xHbQM8oGjua9W4zXmC7YDF-H20,14109
118
120
  dissect/target/plugins/apps/av/trendmicro.py,sha256=jloy_N4hHAqF1sVIEeD5Q7LRYal3_os14Umk-hGaAR4,4613
119
121
  dissect/target/plugins/apps/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- dissect/target/plugins/apps/browser/brave.py,sha256=Fid4P5sUuRQsn7YKwHJodj_Jnfp1H7fAvNs_rL53QCI,2462
121
- dissect/target/plugins/apps/browser/browser.py,sha256=_QP1u57-wOSiLvpTUotWDpqBdRn-WEWpBDzCMqZTYO0,2682
122
- dissect/target/plugins/apps/browser/chrome.py,sha256=XMDq3v-fA0W16gm5jXryP73PEtF7bRw5Pfqy5JQd-U8,2635
123
- dissect/target/plugins/apps/browser/chromium.py,sha256=QswqB1sSc6i1wpRbZnTvvq-UeEz0bN7pefc_gf5w4Wc,18078
124
- dissect/target/plugins/apps/browser/edge.py,sha256=cjMbAGtlTVyJLuha3D0uNbai0mJnkXmp6d0gBfceWB4,2473
125
- dissect/target/plugins/apps/browser/firefox.py,sha256=6dUTNfclNTsqB_GA-4q38tyHPuiw8lgNEmmtfIWbMUY,11373
126
- dissect/target/plugins/apps/browser/iexplore.py,sha256=ExLYS4uHC5W3wID81kWmMirrhf2xqcNbeBwiGbxHRek,8729
122
+ dissect/target/plugins/apps/browser/brave.py,sha256=EW1ubL10swHeV9CscfpE-SrNZozul_Ewj48LNRaG5Kg,2865
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=1oaQhMN5mJysw0VIVpTEmRCAifgv-mUQxZwrGmGHqAQ,27875
126
+ dissect/target/plugins/apps/browser/edge.py,sha256=woXzZtHPWmfcV8vbxGKHELKru5JRb32MAXs43_b4K4E,2883
127
+ dissect/target/plugins/apps/browser/firefox.py,sha256=Y8QdSgPZktYy4IF36aI1Jfbw_ucysx82PNljnyUCmRY,27025
128
+ dissect/target/plugins/apps/browser/iexplore.py,sha256=MqMonoaM5lj0ZFqGwS4F-P1eLmnLvX7VQGE9S3hxXag,8739
127
129
  dissect/target/plugins/apps/container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
- dissect/target/plugins/apps/container/docker.py,sha256=0HWheazdh9arri0hFZgEUximHO_IaF_Dg_kJ7sq59Jw,14487
130
+ dissect/target/plugins/apps/container/docker.py,sha256=67Eih9AfUbqsP-HlnlwoHi4rSAnVCZWM76sEyO_1m18,15316
129
131
  dissect/target/plugins/apps/remoteaccess/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
132
  dissect/target/plugins/apps/remoteaccess/anydesk.py,sha256=lHtgINWXfVpPuCTRyQmT2ZO-1vkoqiXZ7coj8cZ8p4c,3185
131
133
  dissect/target/plugins/apps/remoteaccess/remoteaccess.py,sha256=UQDmDC4Y-KxYl_8kaAh6SG_BLJZ6SeGnxG0gyD8tzaE,833
@@ -135,7 +137,7 @@ dissect/target/plugins/apps/shell/powershell.py,sha256=biPSMRWxPI6kRqP0-75yMtrw0
135
137
  dissect/target/plugins/apps/ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
138
  dissect/target/plugins/apps/ssh/openssh.py,sha256=yt3bX93Q9wfF25_vG9APMwfZWUUqCPyLlVJdhu20syI,7250
137
139
  dissect/target/plugins/apps/ssh/opensshd.py,sha256=DaXKdgGF3GYHHA4buEvphcm6FF4C8YFjgD96Dv6rRnM,5510
138
- dissect/target/plugins/apps/ssh/putty.py,sha256=bTX6ZU6zsc78zBdsBGUotc_ek_E1a7HSowoqD1y4PzA,9927
140
+ dissect/target/plugins/apps/ssh/putty.py,sha256=EmsXr2NbOB13-EWS5AkpEPMUhOkVl6FAy8JGUiaDhxk,10133
139
141
  dissect/target/plugins/apps/ssh/ssh.py,sha256=tTA87u0B8yY1yVCPV0VJdRUct6ggkir_pIziP-eKnVo,3009
140
142
  dissect/target/plugins/apps/vpn/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
143
  dissect/target/plugins/apps/vpn/openvpn.py,sha256=d-DGINTIHP_bvv3T09ZwbezHXGctvCyAhJ482m2_-a0,7654
@@ -150,6 +152,7 @@ dissect/target/plugins/apps/webserver/iis.py,sha256=fnVF6npYXbVfg9SYvFOFMM1c7dT8
150
152
  dissect/target/plugins/apps/webserver/nginx.py,sha256=WA5soi1FU1c44oHRcyOoHK3gH8Jzc_Qi5uXcimDYukw,4129
151
153
  dissect/target/plugins/apps/webserver/webserver.py,sha256=a7a2lLrhsa9c1AXnwiLP-tqVv-IUbmaVaSZI5S0fKa8,1500
152
154
  dissect/target/plugins/child/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
+ dissect/target/plugins/child/docker.py,sha256=frBZ8UUzbtkT9VrK1fwUzXDAdkHESdPCb-QI_OP9Jj4,872
153
156
  dissect/target/plugins/child/esxi.py,sha256=GfgQzxntcHcyxAE2QjMJ-TrFhklweSXLbYh0uuv-klg,693
154
157
  dissect/target/plugins/child/hyperv.py,sha256=R2qVeu4p_9V53jO-65znN0LwX9v3FVA-9jbbtOQcEz8,2236
155
158
  dissect/target/plugins/child/virtuozzo.py,sha256=Mx4ZxEl21g7IYkzraw4FBZup5EfrkFDv4WuTE3hxguw,1206
@@ -227,7 +230,7 @@ dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py,sha256=47DEQpj8HBSa
227
230
  dissect/target/plugins/os/unix/linux/debian/vyos/_os.py,sha256=TPjcfv1n68RCe3Er4aCVQwQDCZwJT-NLvje3kPjDfhk,1744
228
231
  dissect/target/plugins/os/unix/linux/fortios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
232
  dissect/target/plugins/os/unix/linux/fortios/_keys.py,sha256=jDDHObfsUn9BGoIir9p4J_-rg9rI1rgoOfnL3R3lg4o,123358
230
- dissect/target/plugins/os/unix/linux/fortios/_os.py,sha256=lyURdGaIsPmEhRZ6P5DQtwOggOLe9TZuY1cTirLSukA,19444
233
+ dissect/target/plugins/os/unix/linux/fortios/_os.py,sha256=Cyw6KyGNc-uZn2WDlD-7G9K7swe_ofxwykIZeQRGYKU,19416
231
234
  dissect/target/plugins/os/unix/linux/fortios/generic.py,sha256=tT4-lE0Z_DeDIN3zHrQbE8JB3cRJop1_TiEst-Au0bs,1230
232
235
  dissect/target/plugins/os/unix/linux/fortios/locale.py,sha256=VDdk60sqe2JTfftssO05C667-_BpI3kcqKOTVzO3ueU,5209
233
236
  dissect/target/plugins/os/unix/linux/redhat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -254,7 +257,7 @@ dissect/target/plugins/os/windows/_os.py,sha256=g5XGtruvyWx4YAhMpGZnAaIFWQqLNQpe
254
257
  dissect/target/plugins/os/windows/activitiescache.py,sha256=yY41YdCZk9e97Q8_rjZHknMUeOVDxgBG9VtXQHANUsQ,6710
255
258
  dissect/target/plugins/os/windows/adpolicy.py,sha256=rvsvywChfms7d2kMwXRVHZaf8zJ46WmMwYplGAYEax8,6984
256
259
  dissect/target/plugins/os/windows/amcache.py,sha256=ZZNOs3bILTf0AGkDkhoatndl0j39DXkstN7oOyxJECU,27188
257
- dissect/target/plugins/os/windows/catroot.py,sha256=Qo-kANUVhKdUwZOU7cNiJk1-RrBHb3a550F83QPAJy0,10867
260
+ dissect/target/plugins/os/windows/catroot.py,sha256=eSfVqXvWWZpXoxKB1FT_evjXXNmlD7wHhA3lYpfQDeQ,11043
258
261
  dissect/target/plugins/os/windows/cim.py,sha256=jsrpu6TZpBUh7VWI9AV2Ib5bebTwsvqOwRfa5gjJd7c,3056
259
262
  dissect/target/plugins/os/windows/clfs.py,sha256=begVsZ-CY97Ksh6S1g03LjyBgu8ERY2hfNDWYPj0GXI,4872
260
263
  dissect/target/plugins/os/windows/datetime.py,sha256=tuBOkewmbCW8sFXcYp5p82oM5RCsVwmtC79BDCTLz8k,9472
@@ -267,7 +270,7 @@ dissect/target/plugins/os/windows/notifications.py,sha256=64xHHueHwtJCc8RTAF70oa
267
270
  dissect/target/plugins/os/windows/prefetch.py,sha256=5hRxdIP9sIV5Q9TAScMjLbl_mImZ37abvdE_pAd6rh4,10398
268
271
  dissect/target/plugins/os/windows/recyclebin.py,sha256=4GSj0Q3YvONufnqANbnG0ffiMQyToCiL5s35Wmu4JOQ,4898
269
272
  dissect/target/plugins/os/windows/registry.py,sha256=EfqUkgbzaqTuq1kIPYNG1TfvJxhJE5X-TEjV3K_xsPU,12814
270
- dissect/target/plugins/os/windows/sam.py,sha256=Es_8ROQ6R6-akuTtegCdsJHXzZJNhzgoFuS8y9xNN8E,15267
273
+ dissect/target/plugins/os/windows/sam.py,sha256=ESQjaCIC17mKSU2y4GlLzkzJbsMJECPYlnVES36InQA,15447
271
274
  dissect/target/plugins/os/windows/services.py,sha256=_6YkuoZD8LUxk72R3n1p1bOBab3A1wszdB1NuPavIGM,6037
272
275
  dissect/target/plugins/os/windows/sru.py,sha256=sOM7CyMkW8XIXzI75GL69WoqUrSK2X99TFIfdQR2D64,17767
273
276
  dissect/target/plugins/os/windows/startupinfo.py,sha256=kl8Y7M4nVfmJ71I33VCegtbHj-ZOeEsYAdlNbgwtUOA,3406
@@ -278,9 +281,9 @@ dissect/target/plugins/os/windows/ual.py,sha256=TYF-R46klEa_HHb86UJd6mPrXwHlAMOU
278
281
  dissect/target/plugins/os/windows/wer.py,sha256=1kwkBvgmEU1QRCLWVmUFNIWAqXEEGtAj2c8uj0iusOE,8625
279
282
  dissect/target/plugins/os/windows/dpapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
283
  dissect/target/plugins/os/windows/dpapi/blob.py,sha256=oFhksgx2BAaeAbpPwOM-o0Dw5MKaMLGMF6ETdxIS708,5051
281
- dissect/target/plugins/os/windows/dpapi/crypto.py,sha256=Xd15dFLYOQtvk9SlkdM1XX0c2vxSj9j4RFEwV70eP5Y,9074
282
- dissect/target/plugins/os/windows/dpapi/dpapi.py,sha256=4cLtwyfiRz9XHAl1oBwF7bTfXeBI-Eh724Y8uEkjHzk,5066
283
- dissect/target/plugins/os/windows/dpapi/master_key.py,sha256=rgHSVT1_8BHffQ2frBr24MLpSSKDt0Uh0BrZ8B3y7yA,5682
284
+ dissect/target/plugins/os/windows/dpapi/crypto.py,sha256=_F1F2j1chQw-KLqfWvgL2mCkF3HSvdVnM78OZ0ph9hc,9337
285
+ dissect/target/plugins/os/windows/dpapi/dpapi.py,sha256=NrLtx61m8PXsB3CzxUQgc1BKkaAVBOre1oEfGvqgtuw,7130
286
+ dissect/target/plugins/os/windows/dpapi/master_key.py,sha256=nq6IpNLxE2UwuCTfc5BdKkn17g6AlVL4rpPUfwWf_8I,6127
284
287
  dissect/target/plugins/os/windows/exchange/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
288
  dissect/target/plugins/os/windows/exchange/exchange.py,sha256=ofoapuDQXefIX4sTzwNboyk5RztN2JEyw1OWl5cx-wo,1564
286
289
  dissect/target/plugins/os/windows/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -336,10 +339,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
336
339
  dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
337
340
  dissect/target/volumes/md.py,sha256=j1K1iKmspl0C_OJFc7-Q1BMWN2OCC5EVANIgVlJ_fIE,1673
338
341
  dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
339
- dissect.target-3.17.dev31.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
340
- dissect.target-3.17.dev31.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
341
- dissect.target-3.17.dev31.dist-info/METADATA,sha256=MZgrZXvDoeZse5LTig0UziqDRFIddZ2sf6VkEOF96QY,11300
342
- dissect.target-3.17.dev31.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
343
- dissect.target-3.17.dev31.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
344
- dissect.target-3.17.dev31.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
345
- dissect.target-3.17.dev31.dist-info/RECORD,,
342
+ dissect.target-3.17.dev34.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
343
+ dissect.target-3.17.dev34.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
344
+ dissect.target-3.17.dev34.dist-info/METADATA,sha256=dCuOpFpGY7DjCc27MwZjfgtTnPx1iobAUR1GrzbpOZI,11300
345
+ dissect.target-3.17.dev34.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
346
+ dissect.target-3.17.dev34.dist-info/entry_points.txt,sha256=tvFPa-Ap-gakjaPwRc6Fl6mxHzxEZ_arAVU-IUYeo_s,447
347
+ dissect.target-3.17.dev34.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
348
+ dissect.target-3.17.dev34.dist-info/RECORD,,