dissect.target 3.20.dev49__py3-none-any.whl → 3.20.dev50__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.
- dissect/target/plugins/general/network.py +5 -5
- dissect/target/plugins/os/unix/bsd/osx/_os.py +1 -4
- dissect/target/plugins/os/unix/linux/_os.py +4 -6
- dissect/target/plugins/os/windows/_os.py +1 -1
- dissect/target/plugins/os/windows/network.py +102 -86
- dissect/target/tools/info.py +1 -1
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/METADATA +2 -2
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/RECORD +13 -13
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/COPYRIGHT +0 -0
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/LICENSE +0 -0
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/WHEEL +0 -0
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/entry_points.txt +0 -0
- {dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/top_level.txt +0 -0
@@ -53,22 +53,22 @@ class NetworkPlugin(Plugin):
|
|
53
53
|
@export
|
54
54
|
def ips(self) -> list[IPAddress]:
|
55
55
|
"""Return IP addresses as list of :class:`IPAddress`."""
|
56
|
-
return list(self._get_record_type("ip"))
|
56
|
+
return list(set(self._get_record_type("ip")))
|
57
57
|
|
58
58
|
@export
|
59
59
|
def gateways(self) -> list[IPAddress]:
|
60
60
|
"""Return gateways as list of :class:`IPAddress`."""
|
61
|
-
return list(self._get_record_type("gateway"))
|
61
|
+
return list(set(self._get_record_type("gateway")))
|
62
62
|
|
63
63
|
@export
|
64
64
|
def macs(self) -> list[str]:
|
65
65
|
"""Return MAC addresses as list of :class:`str`."""
|
66
|
-
return list(self._get_record_type("mac"))
|
66
|
+
return list(set(self._get_record_type("mac")))
|
67
67
|
|
68
68
|
@export
|
69
|
-
def dns(self) -> list[str]:
|
69
|
+
def dns(self) -> list[str | IPAddress]:
|
70
70
|
"""Return DNS addresses as list of :class:`str`."""
|
71
|
-
return list(self._get_record_type("dns"))
|
71
|
+
return list(set(self._get_record_type("dns")))
|
72
72
|
|
73
73
|
@internal
|
74
74
|
def with_ip(self, ip_addr: str) -> Iterator[InterfaceRecord]:
|
@@ -41,10 +41,7 @@ class MacPlugin(BsdPlugin):
|
|
41
41
|
|
42
42
|
@export(property=True)
|
43
43
|
def ips(self) -> Optional[list[str]]:
|
44
|
-
|
45
|
-
for ip in self.target.network.ips():
|
46
|
-
ips.add(str(ip))
|
47
|
-
return list(ips)
|
44
|
+
return list(set(map(str, self.target.network.ips())))
|
48
45
|
|
49
46
|
@export(property=True)
|
50
47
|
def version(self) -> Optional[str]:
|
@@ -34,17 +34,15 @@ class LinuxPlugin(UnixPlugin, LinuxNetworkManager):
|
|
34
34
|
@export(property=True)
|
35
35
|
def ips(self) -> list[str]:
|
36
36
|
"""Returns a list of static IP addresses and DHCP lease IP addresses found on the host system."""
|
37
|
-
ips =
|
37
|
+
ips = set()
|
38
38
|
|
39
39
|
for ip_set in self.network_manager.get_config_value("ips"):
|
40
|
-
|
41
|
-
ips.append(ip)
|
40
|
+
ips.update(ip_set)
|
42
41
|
|
43
42
|
for ip in parse_unix_dhcp_log_messages(self.target, iter_all=False):
|
44
|
-
|
45
|
-
ips.append(ip)
|
43
|
+
ips.add(ip)
|
46
44
|
|
47
|
-
return ips
|
45
|
+
return list(ips)
|
48
46
|
|
49
47
|
@export(property=True)
|
50
48
|
def dns(self) -> list[str]:
|
@@ -109,7 +109,7 @@ class WindowsPlugin(OSPlugin):
|
|
109
109
|
|
110
110
|
@export(property=True)
|
111
111
|
def ips(self) -> list[str]:
|
112
|
-
return self.target.network.ips()
|
112
|
+
return list(set(map(str, self.target.network.ips())))
|
113
113
|
|
114
114
|
def _get_version_reg_value(self, value_name: str) -> Any:
|
115
115
|
try:
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from enum import IntEnum
|
4
|
+
from functools import lru_cache
|
4
5
|
from typing import Iterator
|
5
6
|
|
6
7
|
from dissect.util.ts import wintimestamp
|
@@ -12,6 +13,7 @@ from dissect.target.exceptions import (
|
|
12
13
|
from dissect.target.helpers.record import WindowsInterfaceRecord
|
13
14
|
from dissect.target.helpers.regutil import RegistryKey
|
14
15
|
from dissect.target.plugins.general.network import NetworkPlugin
|
16
|
+
from dissect.target.target import Target
|
15
17
|
|
16
18
|
|
17
19
|
class IfTypes(IntEnum):
|
@@ -222,15 +224,32 @@ def _try_value(subkey: RegistryKey, value: str) -> str | list | None:
|
|
222
224
|
return None
|
223
225
|
|
224
226
|
|
227
|
+
def _get_config_value(key: RegistryKey, name: str) -> set:
|
228
|
+
value = _try_value(key, name)
|
229
|
+
if not value or value in ("", "0.0.0.0", None, [], ["0.0.0.0"]):
|
230
|
+
return set()
|
231
|
+
|
232
|
+
if isinstance(value, list):
|
233
|
+
return set(value)
|
234
|
+
|
235
|
+
return {value}
|
236
|
+
|
237
|
+
|
225
238
|
class WindowsNetworkPlugin(NetworkPlugin):
|
226
239
|
"""Windows network interface plugin."""
|
227
240
|
|
241
|
+
def __init__(self, target: Target):
|
242
|
+
super().__init__(target)
|
243
|
+
self._extract_network_device_config = lru_cache(128)(self._extract_network_device_config)
|
244
|
+
|
228
245
|
def _interfaces(self) -> Iterator[WindowsInterfaceRecord]:
|
246
|
+
"""Yields found Windows interfaces used by :meth:`NetworkPlugin.interfaces() <dissect.target.plugins.general.network.NetworkPlugin.interfaces>`.""" # noqa: E501
|
247
|
+
|
229
248
|
# Get all the network interfaces
|
230
|
-
for
|
249
|
+
for key in self.target.registry.keys(
|
231
250
|
"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}"
|
232
251
|
):
|
233
|
-
for subkey in
|
252
|
+
for subkey in key.subkeys():
|
234
253
|
device_info = {}
|
235
254
|
|
236
255
|
if (net_cfg_instance_id := _try_value(subkey, "NetCfgInstanceId")) is None:
|
@@ -239,24 +258,26 @@ class WindowsNetworkPlugin(NetworkPlugin):
|
|
239
258
|
|
240
259
|
# Extract the network device configuration for given interface id
|
241
260
|
config = self._extract_network_device_config(net_cfg_instance_id)
|
242
|
-
if config is None or all(not conf for conf in config):
|
243
|
-
# if no configuration is found or all configurations are empty, skip this network interface
|
244
|
-
continue
|
245
261
|
|
246
|
-
# Extract
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
262
|
+
# Extract a network device name for given interface id
|
263
|
+
try:
|
264
|
+
name_key = self.target.registry.key(
|
265
|
+
f"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Network\\{{4D36E972-E325-11CE-BFC1-08002BE10318}}\\{net_cfg_instance_id}\\Connection" # noqa: E501
|
266
|
+
)
|
267
|
+
if value_name := _try_value(name_key, "Name"):
|
268
|
+
device_info["name"] = value_name
|
269
|
+
except RegistryKeyNotFoundError:
|
270
|
+
pass
|
271
|
+
|
272
|
+
# Extract the metric value from the interface registry key
|
273
|
+
try:
|
274
|
+
interface_key = self.target.registry.key(
|
275
|
+
f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{net_cfg_instance_id}" # noqa: E501
|
276
|
+
)
|
277
|
+
if value_metric := _try_value(interface_key, "InterfaceMetric"):
|
278
|
+
device_info["metric"] = value_metric
|
279
|
+
except RegistryKeyNotFoundError:
|
280
|
+
pass
|
260
281
|
|
261
282
|
# Extract the rest of the device information
|
262
283
|
device_info["mac"] = _try_value(subkey, "NetworkAddress")
|
@@ -270,26 +291,57 @@ class WindowsNetworkPlugin(NetworkPlugin):
|
|
270
291
|
|
271
292
|
# Yield a record for each non-empty configuration
|
272
293
|
for conf in config:
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
294
|
+
# If no configuration is found or all configurations are empty,
|
295
|
+
# skip this network interface.
|
296
|
+
if not conf or not any(
|
297
|
+
[
|
298
|
+
conf["dns"],
|
299
|
+
conf["ip"],
|
300
|
+
conf["gateway"],
|
301
|
+
conf["subnetmask"],
|
302
|
+
conf["search_domain"],
|
303
|
+
]
|
304
|
+
):
|
305
|
+
continue
|
306
|
+
|
307
|
+
# Create a copy of device_info to avoid overwriting
|
308
|
+
record_info = device_info.copy()
|
309
|
+
record_info.update(conf)
|
310
|
+
yield WindowsInterfaceRecord(
|
311
|
+
**record_info,
|
312
|
+
source=f"HKLM\\SYSTEM\\{subkey.path}",
|
313
|
+
_target=self.target,
|
314
|
+
)
|
282
315
|
|
283
316
|
def _extract_network_device_config(
|
284
317
|
self, interface_id: str
|
285
318
|
) -> list[dict[str, str | list], dict[str, str | list]] | None:
|
286
|
-
|
287
|
-
|
319
|
+
"""Extract network device configuration from the given interface_id for all ControlSets on the system."""
|
320
|
+
|
321
|
+
dhcp_config = {
|
322
|
+
"gateway": set(),
|
323
|
+
"ip": set(),
|
324
|
+
"dns": set(),
|
325
|
+
"subnetmask": set(),
|
326
|
+
"search_domain": set(),
|
327
|
+
"network": set(),
|
328
|
+
}
|
329
|
+
|
330
|
+
static_config = {
|
331
|
+
"ip": set(),
|
332
|
+
"dns": set(),
|
333
|
+
"subnetmask": set(),
|
334
|
+
"search_domain": set(),
|
335
|
+
"gateway": set(),
|
336
|
+
"network": set(),
|
337
|
+
}
|
288
338
|
|
289
339
|
# Get the registry keys for the given interface id
|
290
340
|
try:
|
291
|
-
keys =
|
292
|
-
|
341
|
+
keys = list(
|
342
|
+
self.target.registry.keys(
|
343
|
+
f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{interface_id}"
|
344
|
+
)
|
293
345
|
)
|
294
346
|
except RegistryKeyNotFoundError:
|
295
347
|
return None
|
@@ -297,69 +349,33 @@ class WindowsNetworkPlugin(NetworkPlugin):
|
|
297
349
|
if not len(keys):
|
298
350
|
return None
|
299
351
|
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
dhcp_config["
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
if dhcp_subnetmask not in ["", "0.0.0.0", None]:
|
315
|
-
dhcp_config["subnetmask"] = [dhcp_subnetmask]
|
316
|
-
|
317
|
-
dhcp_domain = _try_value(keys, "DhcpDomain")
|
318
|
-
if dhcp_domain not in ["", None]:
|
319
|
-
dhcp_config["search_domain"] = [dhcp_domain]
|
352
|
+
for key in keys:
|
353
|
+
# Extract DHCP configuration from the registry
|
354
|
+
dhcp_config["gateway"].update(_get_config_value(key, "DhcpDefaultGateway"))
|
355
|
+
dhcp_config["ip"].update(_get_config_value(key, "DhcpIPAddress"))
|
356
|
+
dhcp_config["subnetmask"].update(_get_config_value(key, "DhcpSubnetMask"))
|
357
|
+
dhcp_config["search_domain"].update(_get_config_value(key, "DhcpDomain"))
|
358
|
+
dhcp_config["dns"].update(_get_config_value(key, "DhcpNameServer"))
|
359
|
+
|
360
|
+
# Extract static configuration from the registry
|
361
|
+
static_config["gateway"].update(_get_config_value(key, "DefaultGateway"))
|
362
|
+
static_config["dns"].update(_get_config_value(key, "NameServer"))
|
363
|
+
static_config["search_domain"].update(_get_config_value(key, "Domain"))
|
364
|
+
static_config["ip"].update(_get_config_value(key, "IPAddress"))
|
365
|
+
static_config["subnetmask"].update(_get_config_value(key, "SubnetMask"))
|
320
366
|
|
321
367
|
if len(dhcp_config) > 0:
|
322
|
-
|
323
|
-
dhcp_config["enabled"] = dhcp_enable == 1
|
368
|
+
dhcp_config["enabled"] = _try_value(key, "EnableDHCP") == 1
|
324
369
|
dhcp_config["dhcp"] = True
|
325
370
|
|
326
|
-
# Extract static configuration from the registry
|
327
|
-
static_gateway = _try_value(keys, "DefaultGateway")
|
328
|
-
if static_gateway not in ["", None, []]:
|
329
|
-
static_config["gateway"] = static_gateway
|
330
|
-
|
331
|
-
static_ip = _try_value(keys, "IPAddress")
|
332
|
-
if static_ip not in ["", "0.0.0.0", ["0.0.0.0"], None, []]:
|
333
|
-
static_config["ip"] = static_ip if isinstance(static_ip, list) else [static_ip]
|
334
|
-
|
335
|
-
static_dns = _try_value(keys, "NameServer")
|
336
|
-
if static_dns not in ["", "0.0.0.0", None]:
|
337
|
-
static_config["dns"] = static_dns.split(",")
|
338
|
-
|
339
|
-
static_subnetmask = _try_value(keys, "SubnetMask")
|
340
|
-
if static_subnetmask not in ["", "0.0.0.0", ["0.0.0.0"], None, []]:
|
341
|
-
static_config["subnetmask"] = (
|
342
|
-
static_subnetmask if isinstance(static_subnetmask, list) else [static_subnetmask]
|
343
|
-
)
|
344
|
-
|
345
|
-
static_domain = _try_value(keys, "Domain")
|
346
|
-
if static_domain not in ["", None]:
|
347
|
-
static_config["search_domain"] = [static_domain]
|
348
|
-
|
349
371
|
if len(static_config) > 0:
|
350
372
|
static_config["enabled"] = None
|
351
373
|
static_config["dhcp"] = False
|
352
374
|
|
353
|
-
# Combine ip and subnetmask for extraction
|
354
|
-
combined_configs = [
|
355
|
-
(dhcp_config, dhcp_config.get("ip", []), dhcp_config.get("subnetmask", [])),
|
356
|
-
(static_config, static_config.get("ip", []), static_config.get("subnetmask", [])),
|
357
|
-
]
|
358
|
-
|
359
375
|
# Iterate over combined ip/subnet lists
|
360
|
-
for config
|
361
|
-
|
362
|
-
config
|
376
|
+
for config in (dhcp_config, static_config):
|
377
|
+
if (ips := config.get("ip")) and (masks := config.get("subnetmask")):
|
378
|
+
config["network"].update(set(self.calculate_network(ips, masks)))
|
363
379
|
|
364
380
|
# Return both configurations
|
365
381
|
return [dhcp_config, static_config]
|
dissect/target/tools/info.py
CHANGED
@@ -137,7 +137,7 @@ def print_target_info(target: Target) -> None:
|
|
137
137
|
continue
|
138
138
|
|
139
139
|
if isinstance(value, list):
|
140
|
-
value = ", ".join(value)
|
140
|
+
value = ", ".join(map(str, value))
|
141
141
|
|
142
142
|
if isinstance(value, datetime):
|
143
143
|
value = value.isoformat(timespec="microseconds")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.20.
|
3
|
+
Version: 3.20.dev50
|
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
|
@@ -31,7 +31,7 @@ Requires-Dist: dissect.ntfs <4,>=3.4
|
|
31
31
|
Requires-Dist: dissect.regf <4,>=3.3
|
32
32
|
Requires-Dist: dissect.util <4,>=3
|
33
33
|
Requires-Dist: dissect.volume <4,>=2
|
34
|
-
Requires-Dist: flow.record ~=3.
|
34
|
+
Requires-Dist: flow.record ~=3.17.0
|
35
35
|
Requires-Dist: structlog
|
36
36
|
Provides-Extra: cb
|
37
37
|
Requires-Dist: dissect.target[full] ; extra == 'cb'
|
@@ -189,7 +189,7 @@ dissect/target/plugins/general/config.py,sha256=Mdy9uhWn4OJ96zfXpLgjVifV5SrViqHn
|
|
189
189
|
dissect/target/plugins/general/default.py,sha256=8W_9JV3jKEeETlyTrB25sACoIIFmmO8wlVU5Zoi51W0,1425
|
190
190
|
dissect/target/plugins/general/example.py,sha256=mYAbhtfQmUBj2L2C1DFt9bWpI7rQLJwCIYUsNLcA_pc,6053
|
191
191
|
dissect/target/plugins/general/loaders.py,sha256=z_t55Q1XNjmTOxq0E4tCwpZ-utFyxiLKyAJIFgJMlJs,1508
|
192
|
-
dissect/target/plugins/general/network.py,sha256=
|
192
|
+
dissect/target/plugins/general/network.py,sha256=TWfSdI5fTgwe1_nV7u_ldtvvRwgmkVFLd4XFzy4cEZU,3257
|
193
193
|
dissect/target/plugins/general/osinfo.py,sha256=oU-vmMiA-oaSEQWTSyn6-yQiH2sLQT6aTQHRd0677wo,1415
|
194
194
|
dissect/target/plugins/general/plugins.py,sha256=9KJ70YvYwBfxt19C9yISv8YE4mOdHNvP16fTCTHC68U,6033
|
195
195
|
dissect/target/plugins/general/scrape.py,sha256=Fz7BNXflvuxlnVulyyDhLpyU8D_hJdH6vWVtER9vjTg,6651
|
@@ -218,7 +218,7 @@ dissect/target/plugins/os/unix/bsd/ios/_os.py,sha256=VlJXGxkQZ4RbGbSC-FlbR2YWOJp
|
|
218
218
|
dissect/target/plugins/os/unix/bsd/openbsd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
219
219
|
dissect/target/plugins/os/unix/bsd/openbsd/_os.py,sha256=9npz-osM-wHmjOACUqof5N5HJeps7J8KuyenUS5MZDs,923
|
220
220
|
dissect/target/plugins/os/unix/bsd/osx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
221
|
-
dissect/target/plugins/os/unix/bsd/osx/_os.py,sha256=
|
221
|
+
dissect/target/plugins/os/unix/bsd/osx/_os.py,sha256=hNFB1rwahLwgZD1kc3T4xalFusT88EoxM2Mh-8jOW_w,3440
|
222
222
|
dissect/target/plugins/os/unix/bsd/osx/network.py,sha256=0Qf1jsCDNPmc_L-AmrvHjXaN_x-AtT1Ow3tdQOvFRsk,3734
|
223
223
|
dissect/target/plugins/os/unix/bsd/osx/user.py,sha256=5rsGhsntBW9IXYIOrLpfYpSsJcBDL61QJkuZ456lXlE,2411
|
224
224
|
dissect/target/plugins/os/unix/esxi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -226,7 +226,7 @@ dissect/target/plugins/os/unix/esxi/_os.py,sha256=s6pAgUyfHh3QcY6sgvk5uVMmLvqK1t
|
|
226
226
|
dissect/target/plugins/os/unix/etc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
227
227
|
dissect/target/plugins/os/unix/etc/etc.py,sha256=QngR0nA1azvbNTau4U9-jKOjSoGdyduDpyEna_6yxWY,2636
|
228
228
|
dissect/target/plugins/os/unix/linux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
229
|
-
dissect/target/plugins/os/unix/linux/_os.py,sha256=
|
229
|
+
dissect/target/plugins/os/unix/linux/_os.py,sha256=k1aHhWqocSHMVbF54VDw9wqwa0QSToOa69TMKAyQcxw,2979
|
230
230
|
dissect/target/plugins/os/unix/linux/cmdline.py,sha256=n_Uetoplx33XpIY27oPtMaw1E2AbAEeGLCSkxHshWgY,1673
|
231
231
|
dissect/target/plugins/os/unix/linux/environ.py,sha256=n7KttVzUtBHTIXQuS1DI5Azv6tM__d9gGqhPR_3ArIE,1932
|
232
232
|
dissect/target/plugins/os/unix/linux/iptables.py,sha256=qTzY5PHHXA33WnPYb5NESgoSwI7ECZ8YPoEe_Fmln-8,6045
|
@@ -274,7 +274,7 @@ dissect/target/plugins/os/unix/log/lastlog.py,sha256=Wr3-2n1-GwckN9mSx-yM55N6_L0
|
|
274
274
|
dissect/target/plugins/os/unix/log/messages.py,sha256=XtjZ0a2budgQm_K5JT3fMf7JcjuD0AelcD3zOFN2xpI,5732
|
275
275
|
dissect/target/plugins/os/unix/log/utmp.py,sha256=k2A69s2qUT2JunJrH8GO6nQ0zMDotXMTaj8OzQ7ljj8,7336
|
276
276
|
dissect/target/plugins/os/windows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
277
|
-
dissect/target/plugins/os/windows/_os.py,sha256=
|
277
|
+
dissect/target/plugins/os/windows/_os.py,sha256=SUTfCPEVi2ADfjsQQJad6dEsnKUzRtsKJXOlEuiT9Xk,12462
|
278
278
|
dissect/target/plugins/os/windows/activitiescache.py,sha256=BbGD-vETHm1IRMoazVer_vqSJIoQxxhWcJ_xlBeOMds,6899
|
279
279
|
dissect/target/plugins/os/windows/adpolicy.py,sha256=ul8lKlG9ExABnd6yVLMPFFgVxN74CG4T3MvcRuBLHJc,7158
|
280
280
|
dissect/target/plugins/os/windows/amcache.py,sha256=1jq-S80_FIzGegrqQ6HqrjmaAPTyxyn69HxnbRBlaUc,27608
|
@@ -288,7 +288,7 @@ dissect/target/plugins/os/windows/generic.py,sha256=Z4eb9SrVMiO871bi5GS8V-rGF6QJ
|
|
288
288
|
dissect/target/plugins/os/windows/jumplist.py,sha256=3gZk6O1B3lKK2Jxe0B-HapOCEehk94CYNvCVDpQC9nQ,11773
|
289
289
|
dissect/target/plugins/os/windows/lnk.py,sha256=KTqhw0JMW-KjAxe4xlRDNSRSx-th-_nPVgTGyBaKmW0,7891
|
290
290
|
dissect/target/plugins/os/windows/locale.py,sha256=QiLWGgWrGBGHiXgep5iSOo6VNim4YC-xd4MdW0BUJPA,2486
|
291
|
-
dissect/target/plugins/os/windows/network.py,sha256=
|
291
|
+
dissect/target/plugins/os/windows/network.py,sha256=cffJmQwHJmTAGZkAEKKGxNi1ZYLiDomfOcPczZn85Fo,11284
|
292
292
|
dissect/target/plugins/os/windows/notifications.py,sha256=xxfMEY_noDxMVqvT3QS1a3j-X3qAYikOtT6v2owxuCY,17480
|
293
293
|
dissect/target/plugins/os/windows/prefetch.py,sha256=wbbYoy05gWbJfRsM2ci4wPG7kM58OocVwXD3hkQlbRw,10647
|
294
294
|
dissect/target/plugins/os/windows/recyclebin.py,sha256=zx58hDCvcrD_eJl9nJmr_i80krSN03ya8nQzWFr2Tw0,4917
|
@@ -358,7 +358,7 @@ dissect/target/tools/build_pluginlist.py,sha256=5fomcuMwsVzcnYx5Htf5f9lSwsLeUUvo
|
|
358
358
|
dissect/target/tools/dd.py,sha256=rTM-lgXxrYBpVAtJqFqAatDz45bLoD8-mFt_59Q3Lio,1928
|
359
359
|
dissect/target/tools/fs.py,sha256=3Ny8zoooVeeF7OUkQ0nxZVdEaQeU7vPRjDOYhz6XfRA,5385
|
360
360
|
dissect/target/tools/fsutils.py,sha256=q0t9gFwKHaPr2Ya-MN2o4LsYledde7kp2DZZTd8roIc,8314
|
361
|
-
dissect/target/tools/info.py,sha256=
|
361
|
+
dissect/target/tools/info.py,sha256=t2bWENeyaEh87ayE_brdKvz9kHAWOLqkKJcGixl6hGo,5725
|
362
362
|
dissect/target/tools/logging.py,sha256=5ZnumtMWLyslxfrUGZ4ntRyf3obOOhmn8SBjKfdLcEg,4174
|
363
363
|
dissect/target/tools/mount.py,sha256=8GRYnu4xEmFBHxuIZAYhOMyyTGX8fat1Ou07DNiUnW4,3945
|
364
364
|
dissect/target/tools/query.py,sha256=OYWVmCx2nFx85x1r8Y6D17UdUIi8PJm304xBfT-H8vs,15605
|
@@ -378,10 +378,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
|
|
378
378
|
dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
|
379
379
|
dissect/target/volumes/md.py,sha256=7ShPtusuLGaIv27SvEETtgsuoQyAa4iAAeOR1NEaajI,1689
|
380
380
|
dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
|
381
|
-
dissect.target-3.20.
|
382
|
-
dissect.target-3.20.
|
383
|
-
dissect.target-3.20.
|
384
|
-
dissect.target-3.20.
|
385
|
-
dissect.target-3.20.
|
386
|
-
dissect.target-3.20.
|
387
|
-
dissect.target-3.20.
|
381
|
+
dissect.target-3.20.dev50.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
|
382
|
+
dissect.target-3.20.dev50.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
383
|
+
dissect.target-3.20.dev50.dist-info/METADATA,sha256=GXXc4LbwWhRuEYw8FhQSkRDdbCUApDrAwJQss7yANgY,12897
|
384
|
+
dissect.target-3.20.dev50.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
385
|
+
dissect.target-3.20.dev50.dist-info/entry_points.txt,sha256=BWuxAb_6AvUAQpIQOQU0IMTlaF6TDht2AIZK8bHd-zE,492
|
386
|
+
dissect.target-3.20.dev50.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
|
387
|
+
dissect.target-3.20.dev50.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
{dissect.target-3.20.dev49.dist-info → dissect.target-3.20.dev50.dist-info}/entry_points.txt
RENAMED
File without changes
|
File without changes
|