dissect.target 3.20.dev4__py3-none-any.whl → 3.20.dev5__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.
@@ -144,6 +144,7 @@ EmptyRecord = RecordDescriptor(
144
144
  )
145
145
 
146
146
  COMMON_INTERFACE_ELEMENTS = [
147
+ ("string", "source"),
147
148
  ("string", "name"),
148
149
  ("string", "type"),
149
150
  ("boolean", "enabled"),
@@ -151,7 +152,6 @@ COMMON_INTERFACE_ELEMENTS = [
151
152
  ("net.ipaddress[]", "dns"),
152
153
  ("net.ipaddress[]", "ip"),
153
154
  ("net.ipaddress[]", "gateway"),
154
- ("string", "source"),
155
155
  ]
156
156
 
157
157
 
@@ -165,8 +165,13 @@ WindowsInterfaceRecord = TargetRecordDescriptor(
165
165
  [
166
166
  *COMMON_INTERFACE_ELEMENTS,
167
167
  ("varint", "vlan"),
168
- ("string", "metric"),
168
+ ("net.ipnetwork[]", "network"),
169
+ ("varint", "metric"),
170
+ ("stringlist", "search_domain"),
171
+ ("datetime", "first_connected"),
169
172
  ("datetime", "last_connected"),
173
+ ("net.ipaddress[]", "subnetmask"),
174
+ ("boolean", "dhcp"),
170
175
  ],
171
176
  )
172
177
 
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  from typing import Any, Iterator, Union
4
4
 
5
5
  from flow.record.fieldtypes.net import IPAddress, IPNetwork
6
+ from flow.record.fieldtypes.net.ipv4 import Address, addr_long, addr_str, mask_to_bits
6
7
 
7
8
  from dissect.target.helpers.record import (
8
9
  MacInterfaceRecord,
@@ -80,3 +81,10 @@ class NetworkPlugin(Plugin):
80
81
  for interface in self.interfaces():
81
82
  if any(ip_addr in cidr for ip_addr in interface.ip):
82
83
  yield interface
84
+
85
+ def calculate_network(self, ips: int | Address, subnets: int | Address) -> Iterator[str]:
86
+ for ip, subnet_mask in zip(ips, subnets):
87
+ subnet_mask_int = addr_long(subnet_mask)
88
+ cidr = mask_to_bits(subnet_mask_int)
89
+ network_address = addr_str(addr_long(ip) & subnet_mask_int)
90
+ yield f"{network_address}/{cidr}"
@@ -99,28 +99,7 @@ class WindowsPlugin(OSPlugin):
99
99
 
100
100
  @export(property=True)
101
101
  def ips(self) -> list[str]:
102
- key = "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"
103
- fields = ["IPAddress", "DhcpIPAddress"]
104
- ips = set()
105
-
106
- for r in self.target.registry.keys(key):
107
- for s in r.subkeys():
108
- for field in fields:
109
- try:
110
- ip = s.value(field).value
111
- except RegistryValueNotFoundError:
112
- continue
113
-
114
- if isinstance(ip, str):
115
- ip = [ip]
116
-
117
- for i in ip:
118
- if i == "0.0.0.0":
119
- continue
120
-
121
- ips.add(i)
122
-
123
- return list(ips)
102
+ return self.target.network.ips()
124
103
 
125
104
  def _get_version_reg_value(self, value_name: str) -> Any:
126
105
  try:
@@ -0,0 +1,363 @@
1
+ from __future__ import annotations
2
+
3
+ from enum import IntEnum
4
+ from typing import Iterator
5
+
6
+ from dissect.util.ts import wintimestamp
7
+
8
+ from dissect.target.exceptions import (
9
+ RegistryKeyNotFoundError,
10
+ RegistryValueNotFoundError,
11
+ )
12
+ from dissect.target.helpers.record import WindowsInterfaceRecord
13
+ from dissect.target.helpers.regutil import RegistryKey
14
+ from dissect.target.plugins.general.network import NetworkPlugin
15
+
16
+
17
+ class IfTypes(IntEnum):
18
+ OTHER = 1
19
+ REGULAR_1822 = 2
20
+ HDH_1822 = 3
21
+ DDN_X25 = 4
22
+ RFC877_X25 = 5
23
+ ETHERNET_CSMACD = 6
24
+ IS088023_CSMACD = 7
25
+ ISO88024_TOKENBUS = 8
26
+ ISO88025_TOKENRING = 9
27
+ ISO88026_MAN = 10
28
+ STARLAN = 11
29
+ PROTEON_10MBIT = 12
30
+ PROTEON_80MBIT = 13
31
+ HYPERCHANNEL = 14
32
+ FDDI = 15
33
+ LAP_B = 16
34
+ SDLC = 17
35
+ DS1 = 18
36
+ E1 = 19
37
+ BASIC_ISDN = 20
38
+ PRIMARY_ISDN = 21
39
+ PROP_POINT2POINT_SERIAL = 22
40
+ PPP = 23
41
+ SOFTWARE_LOOPBACK = 24
42
+ EON = 25
43
+ ETHERNET_3MBIT = 26
44
+ NSIP = 27
45
+ SLIP = 28
46
+ ULTRA = 29
47
+ DS3 = 30
48
+ SIP = 31
49
+ FRAMERELAY = 32
50
+ RS232 = 33
51
+ PARA = 34
52
+ ARCNET = 35
53
+ ARCNET_PLUS = 36
54
+ ATM = 37
55
+ MIO_X25 = 38
56
+ SONET = 39
57
+ X25_PLE = 40
58
+ ISO88022_LLC = 41
59
+ LOCALTALK = 42
60
+ SMDS_DXI = 43
61
+ FRAMERELAY_SERVICE = 44
62
+ V35 = 45
63
+ HSSI = 46
64
+ HIPPI = 47
65
+ MODEM = 48
66
+ AAL5 = 49
67
+ SONET_PATH = 50
68
+ SONET_VT = 51
69
+ SMDS_ICIP = 52
70
+ PROP_VIRTUAL = 53
71
+ PROP_MULTIPLEXOR = 54
72
+ IEEE80212 = 55
73
+ FIBRECHANNEL = 56
74
+ HIPPIINTERFACE = 57
75
+ FRAMERELAY_INTERCONNECT = 58
76
+ AFLANE_8023 = 59
77
+ AFLANE_8025 = 60
78
+ CCTEMUL = 61
79
+ FASTETHER = 62
80
+ ISDN = 63
81
+ V11 = 64
82
+ V36 = 65
83
+ G703_64K = 66
84
+ G703_2MB = 67
85
+ QLLC = 68
86
+ FASTETHER_FX = 69
87
+ CHANNEL = 70
88
+ IEEE80211 = 71
89
+ IBM370PARCHAN = 72
90
+ ESCON = 73
91
+ DLSW = 74
92
+ ISDN_S = 75
93
+ ISDN_U = 76
94
+ LAP_D = 77
95
+ IPSWITCH = 78
96
+ RSRB = 79
97
+ ATM_LOGICAL = 80
98
+ DS0 = 81
99
+ DS0_BUNDLE = 82
100
+ BSC = 83
101
+ ASYNC = 84
102
+ CNR = 85
103
+ ISO88025R_DTR = 86
104
+ EPLRS = 87
105
+ ARAP = 88
106
+ PROP_CNLS = 89
107
+ HOSTPAD = 90
108
+ TERMPAD = 91
109
+ FRAMERELAY_MPI = 92
110
+ X213 = 93
111
+ ADSL = 94
112
+ RADSL = 95
113
+ SDSL = 96
114
+ VDSL = 97
115
+ ISO88025_CRFPRINT = 98
116
+ MYRINET = 99
117
+ VOICE_EM = 100
118
+ VOICE_FXO = 101
119
+ VOICE_FXS = 102
120
+ VOICE_ENCAP = 103
121
+ VOICE_OVERIP = 104
122
+ ATM_DXI = 105
123
+ ATM_FUNI = 106
124
+ ATM_IMA = 107
125
+ PPPMULTILINKBUNDLE = 108
126
+ IPOVER_CDLC = 109
127
+ IPOVER_CLAW = 110
128
+ STACKTOSTACK = 111
129
+ VIRTUALIPADDRESS = 112
130
+ MPC = 113
131
+ IPOVER_ATM = 114
132
+ ISO88025_FIBER = 115
133
+ TDLC = 116
134
+ GIGABITETHERNET = 117
135
+ HDLC = 118
136
+ LAP_F = 119
137
+ V37 = 120
138
+ X25_MLP = 121
139
+ X25_HUNTGROUP = 122
140
+ TRANSPHDLC = 123
141
+ INTERLEAVE = 124
142
+ FAST = 125
143
+ IP = 126
144
+ DOCSCABLE_MACLAYER = 127
145
+ DOCSCABLE_DOWNSTREAM = 128
146
+ DOCSCABLE_UPSTREAM = 129
147
+ A12MPPSWITCH = 130
148
+ TUNNEL = 131
149
+ COFFEE = 132
150
+ CES = 133
151
+ ATM_SUBINTERFACE = 134
152
+ L2_VLAN = 135
153
+ L3_IPVLAN = 136
154
+ L3_IPXVLAN = 137
155
+ DIGITALPOWERLINE = 138
156
+ MEDIAMAILOVERIP = 139
157
+ DTM = 140
158
+ DCN = 141
159
+ IPFORWARD = 142
160
+ MSDSL = 143
161
+ IEEE1394 = 144
162
+ IF_GSN = 145
163
+ DVBRCC_MACLAYER = 146
164
+ DVBRCC_DOWNSTREAM = 147
165
+ DVBRCC_UPSTREAM = 148
166
+ ATM_VIRTUAL = 149
167
+ MPLS_TUNNEL = 150
168
+ SRP = 151
169
+ VOICEOVERATM = 152
170
+ VOICEOVERFRAMERELAY = 153
171
+ IDSL = 154
172
+ COMPOSITELINK = 155
173
+ SS7_SIGLINK = 156
174
+ PROP_WIRELESS_P2P = 157
175
+ FR_FORWARD = 158
176
+ RFC1483 = 159
177
+ USB = 160
178
+ IEEE8023AD_LAG = 161
179
+ BGP_POLICY_ACCOUNTING = 162
180
+ FRF16_MFR_BUNDLE = 163
181
+ H323_GATEKEEPER = 164
182
+ H323_PROXY = 165
183
+ MPLS = 166
184
+ MF_SIGLINK = 167
185
+ HDSL2 = 168
186
+ SHDSL = 169
187
+ DS1_FDL = 170
188
+ POS = 171
189
+ DVB_ASI_IN = 172
190
+ DVB_ASI_OUT = 173
191
+ PLC = 174
192
+ NFAS = 175
193
+ TR008 = 176
194
+ GR303_RDT = 177
195
+ GR303_IDT = 178
196
+ ISUP = 179
197
+ PROP_DOCS_WIRELESS_MACLAYER = 180
198
+ PROP_DOCS_WIRELESS_DOWNSTREAM = 181
199
+ PROP_DOCS_WIRELESS_UPSTREAM = 182
200
+ HIPERLAN2 = 183
201
+ PROP_BWA_P2MP = 184
202
+ SONET_OVERHEAD_CHANNEL = 185
203
+ DIGITAL_WRAPPER_OVERHEAD_CHANNEL = 186
204
+ AAL2 = 187
205
+ RADIO_MAC = 188
206
+ ATM_RADIO = 189
207
+ IMT = 190
208
+ MVL = 191
209
+ REACH_DSL = 192
210
+ FR_DLCI_ENDPT = 193
211
+ ATM_VCI_ENDPT = 194
212
+ OPTICAL_CHANNEL = 195
213
+ OPTICAL_TRANSPORT = 196
214
+ WWANPP = 243
215
+ WWANPP2 = 244
216
+
217
+
218
+ def _try_value(subkey: RegistryKey, value: str) -> str | list | None:
219
+ try:
220
+ return subkey.value(value).value
221
+ except RegistryValueNotFoundError:
222
+ return None
223
+
224
+
225
+ class WindowsNetworkPlugin(NetworkPlugin):
226
+ def _interfaces(self) -> Iterator[WindowsInterfaceRecord]:
227
+ # Get all the network interfaces
228
+ for keys in self.target.registry.keys(
229
+ "HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class\\{4d36e972-e325-11ce-bfc1-08002be10318}"
230
+ ):
231
+ for subkey in keys.subkeys():
232
+ device_info = {}
233
+
234
+ if (net_cfg_instance_id := _try_value(subkey, "NetCfgInstanceId")) is None:
235
+ # if no NetCfgInstanceId is found, skip this network interface
236
+ continue
237
+
238
+ # Extract the network device configuration for given interface id
239
+ config = self._extract_network_device_config(net_cfg_instance_id)
240
+ if config is None or all(not conf for conf in config):
241
+ # if no configuration is found or all configurations are empty, skip this network interface
242
+ continue
243
+
244
+ # Extract the network device name for given interface id
245
+ name_key = self.target.registry.key(
246
+ f"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Network\\"
247
+ f"{{4D36E972-E325-11CE-BFC1-08002BE10318}}\\{net_cfg_instance_id}\\Connection"
248
+ )
249
+ if value_name := _try_value(name_key, "Name"):
250
+ device_info["name"] = value_name
251
+
252
+ # Extract the metric value from the REGISTRY_KEY_INTERFACE key
253
+ interface_key = self.target.registry.key(
254
+ f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{net_cfg_instance_id}"
255
+ )
256
+ if value_metric := _try_value(interface_key, "InterfaceMetric"):
257
+ device_info["metric"] = value_metric
258
+
259
+ # Extract the rest of the device information
260
+ device_info["mac"] = _try_value(subkey, "NetworkAddress")
261
+ device_info["vlan"] = _try_value(subkey, "VlanID")
262
+
263
+ if timestamp := _try_value(subkey, "NetworkInterfaceInstallTimestamp"):
264
+ device_info["first_connected"] = wintimestamp(timestamp)
265
+
266
+ if type_device := _try_value(subkey, "*IfType"):
267
+ device_info["type"] = IfTypes(int(type_device)).name
268
+
269
+ # Yield a record for each non-empty configuration
270
+ for conf in config:
271
+ if conf:
272
+ # Create a copy of device_info to avoid overwriting
273
+ record_info = device_info.copy()
274
+ record_info.update(conf)
275
+ yield WindowsInterfaceRecord(
276
+ **record_info,
277
+ source=f"HKLM\\SYSTEM\\{subkey.path}",
278
+ _target=self.target,
279
+ )
280
+
281
+ def _extract_network_device_config(
282
+ self, interface_id: str
283
+ ) -> list[dict[str, str | list], dict[str, str | list]] | None:
284
+ dhcp_config = {}
285
+ static_config = {}
286
+
287
+ # Get the registry keys for the given interface id
288
+ try:
289
+ keys = self.target.registry.key(
290
+ f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{interface_id}"
291
+ )
292
+ except RegistryKeyNotFoundError:
293
+ return None
294
+
295
+ if not len(keys):
296
+ return None
297
+
298
+ # Extract DHCP configuration from the registry
299
+ dhcp_gateway = _try_value(keys, "DhcpDefaultGateway")
300
+ if dhcp_gateway not in ["", "0.0.0.0", None, []]:
301
+ dhcp_config["gateway"] = dhcp_gateway
302
+
303
+ dhcp_ip = _try_value(keys, "DhcpIPAddress")
304
+ if dhcp_ip not in ["", "0.0.0.0", None]:
305
+ dhcp_config["ip"] = [dhcp_ip]
306
+
307
+ dhcp_dns = _try_value(keys, "DhcpNameServer")
308
+ if dhcp_dns not in ["", "0.0.0.0", None]:
309
+ dhcp_config["dns"] = dhcp_dns.split(" ")
310
+
311
+ dhcp_subnetmask = _try_value(keys, "DhcpSubnetMask")
312
+ if dhcp_subnetmask not in ["", "0.0.0.0", None]:
313
+ dhcp_config["subnetmask"] = [dhcp_subnetmask]
314
+
315
+ dhcp_domain = _try_value(keys, "DhcpDomain")
316
+ if dhcp_domain not in ["", None]:
317
+ dhcp_config["search_domain"] = [dhcp_domain]
318
+
319
+ if len(dhcp_config) > 0:
320
+ dhcp_enable = _try_value(keys, "EnableDHCP")
321
+ dhcp_config["enabled"] = dhcp_enable == 1
322
+ dhcp_config["dhcp"] = True
323
+
324
+ # Extract static configuration from the registry
325
+ static_gateway = _try_value(keys, "DefaultGateway")
326
+ if static_gateway not in ["", None, []]:
327
+ static_config["gateway"] = static_gateway
328
+
329
+ static_ip = _try_value(keys, "IPAddress")
330
+ if static_ip not in ["", "0.0.0.0", ["0.0.0.0"], None, []]:
331
+ static_config["ip"] = static_ip if isinstance(static_ip, list) else [static_ip]
332
+
333
+ static_dns = _try_value(keys, "NameServer")
334
+ if static_dns not in ["", "0.0.0.0", None]:
335
+ static_config["dns"] = static_dns.split(",")
336
+
337
+ static_subnetmask = _try_value(keys, "SubnetMask")
338
+ if static_subnetmask not in ["", "0.0.0.0", ["0.0.0.0"], None, []]:
339
+ static_config["subnetmask"] = (
340
+ static_subnetmask if isinstance(static_subnetmask, list) else [static_subnetmask]
341
+ )
342
+
343
+ static_domain = _try_value(keys, "Domain")
344
+ if static_domain not in ["", None]:
345
+ static_config["search_domain"] = [static_domain]
346
+
347
+ if len(static_config) > 0:
348
+ static_config["enabled"] = None
349
+ static_config["dhcp"] = False
350
+
351
+ # Combine ip and subnetmask for extraction
352
+ combined_configs = [
353
+ (dhcp_config, dhcp_config.get("ip", []), dhcp_config.get("subnetmask", [])),
354
+ (static_config, static_config.get("ip", []), static_config.get("subnetmask", [])),
355
+ ]
356
+
357
+ # Iterate over combined ip/subnet lists
358
+ for config, ips, subnet_masks in combined_configs:
359
+ for network_address in self.calculate_network(ips, subnet_masks):
360
+ config.setdefault("network", []).append(network_address)
361
+
362
+ # Return both configurations
363
+ return [dhcp_config, static_config]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.20.dev4
3
+ Version: 3.20.dev5
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
@@ -61,7 +61,7 @@ dissect/target/helpers/mui.py,sha256=i-7XoHbu4WO2fYapK9yGAMW04rFlgRispknc1KQIS5Q
61
61
  dissect/target/helpers/network_managers.py,sha256=ByBSe2K3c8hgQC6dokcf-hHdmPcD8PmrOj0xs1C3yhs,25743
62
62
  dissect/target/helpers/polypath.py,sha256=h8p7m_OCNiQljGwoZh5Aflr9H2ot6CZr6WKq1OSw58o,2175
63
63
  dissect/target/helpers/protobuf.py,sha256=b4DsnqrRLrefcDjx7rQno-_LBcwtJXxuKf5RdOegzfE,1537
64
- dissect/target/helpers/record.py,sha256=zwqEnFSgxgX6JdhhF4zycMMZK09crCTWWEFzRxZSuC8,5658
64
+ dissect/target/helpers/record.py,sha256=euNDDZi29fo8ENN1gsPycB38OMn35clLM9_K-srZ5E0,5852
65
65
  dissect/target/helpers/record_modifier.py,sha256=O_Jj7zOi891HIyAYjxxe6LFPYETHdMa5lNjo4NA_T_w,3969
66
66
  dissect/target/helpers/regutil.py,sha256=kX-sSZbW8Qkg29Dn_9zYbaQrwLumrr4Y8zJ1EhHXIAM,27337
67
67
  dissect/target/helpers/shell_application_ids.py,sha256=hYxrP-YtHK7ZM0ectJFHfoMB8QUXLbYNKmKXMWLZRlA,38132
@@ -184,7 +184,7 @@ dissect/target/plugins/general/config.py,sha256=Mdy9uhWn4OJ96zfXpLgjVifV5SrViqHn
184
184
  dissect/target/plugins/general/default.py,sha256=8W_9JV3jKEeETlyTrB25sACoIIFmmO8wlVU5Zoi51W0,1425
185
185
  dissect/target/plugins/general/example.py,sha256=6B_YOqajRBLNWBEOfIL_HnLaEANBF8KKoc0mweihiug,6034
186
186
  dissect/target/plugins/general/loaders.py,sha256=6iUxhlSAgo7qSE8_XFxgiihK8sdMiP-s4k0W5Iv8m9k,879
187
- dissect/target/plugins/general/network.py,sha256=Ol4Ls1w78-7zpmVaQQOZG27rvYOhJLFVhomZj5kwibs,2430
187
+ dissect/target/plugins/general/network.py,sha256=1dCWiVIaVPySquRs3YEsP7PxXXU5voa8CsxyIa7Vh54,2882
188
188
  dissect/target/plugins/general/osinfo.py,sha256=RdK5mw3-H9H3sGXz8yP8U_p3wUG1Ww7_HBKZpFdsbTE,1358
189
189
  dissect/target/plugins/general/plugins.py,sha256=4URjS6DN1Ey6Cqlbyx6NfFGgQZpWDrqxl8KLcZFODGE,4479
190
190
  dissect/target/plugins/general/scrape.py,sha256=Fz7BNXflvuxlnVulyyDhLpyU8D_hJdH6vWVtER9vjTg,6651
@@ -262,7 +262,7 @@ dissect/target/plugins/os/unix/log/lastlog.py,sha256=Wq89wRSFZSBsoKVCxjDofnC4yw9
262
262
  dissect/target/plugins/os/unix/log/messages.py,sha256=CXA-SkMPLaCgnTQg9nzII-7tO8Il_ENQmuYvDxo33rI,4698
263
263
  dissect/target/plugins/os/unix/log/utmp.py,sha256=1nPHIaBUHt_9z6PDrvyqg4huKLihUaWLrMmgMsbaeIo,7755
264
264
  dissect/target/plugins/os/windows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
265
- dissect/target/plugins/os/windows/_os.py,sha256=uBa0dVkFxDsxHAU3T23UEIOCgAx5R6cIpCgbGq3fflY,13131
265
+ dissect/target/plugins/os/windows/_os.py,sha256=-x5TD5BvFw-7zEfqT6WG7n04YSeyr7wVLO07y6xkBP8,12476
266
266
  dissect/target/plugins/os/windows/activitiescache.py,sha256=Q2aILnhJ2rp2AwEbWwyBuSLjMbGqaYJTsavSbfkcFKE,6741
267
267
  dissect/target/plugins/os/windows/adpolicy.py,sha256=qjv0s-gAIGKCznWdVOARJbLXnCKYgvzoFNWoXnq3m1M,7102
268
268
  dissect/target/plugins/os/windows/amcache.py,sha256=ZZNOs3bILTf0AGkDkhoatndl0j39DXkstN7oOyxJECU,27188
@@ -276,6 +276,7 @@ dissect/target/plugins/os/windows/generic.py,sha256=BSvDPfB9faU0uquMj0guw5tnR_97
276
276
  dissect/target/plugins/os/windows/jumplist.py,sha256=3gZk6O1B3lKK2Jxe0B-HapOCEehk94CYNvCVDpQC9nQ,11773
277
277
  dissect/target/plugins/os/windows/lnk.py,sha256=toEZV00CESLUsF7UmN65-ivWk0Ijg-ZPST0qyD-antY,7860
278
278
  dissect/target/plugins/os/windows/locale.py,sha256=yXVdclpUqss9h8Nq7N4kg3OHwWGDfjdfiLiUZR3wqv8,2324
279
+ dissect/target/plugins/os/windows/network.py,sha256=nKNgCqVjzjPwkwyXIIgIIECO2UEYnzvM0PzqRVtCGls,10788
279
280
  dissect/target/plugins/os/windows/notifications.py,sha256=T1CIvQgpW__qDR0Rq5zpeWmRWwjNDpvdMnvJJ_6tZXs,17378
280
281
  dissect/target/plugins/os/windows/prefetch.py,sha256=v4OgSKMwcihz0SOuA0o0Ec8wsAKuiuEmJolqZmHFgJA,10491
281
282
  dissect/target/plugins/os/windows/recyclebin.py,sha256=zx58hDCvcrD_eJl9nJmr_i80krSN03ya8nQzWFr2Tw0,4917
@@ -364,10 +365,10 @@ dissect/target/volumes/luks.py,sha256=OmCMsw6rCUXG1_plnLVLTpsvE1n_6WtoRUGQbpmu1z
364
365
  dissect/target/volumes/lvm.py,sha256=wwQVR9I3G9YzmY6UxFsH2Y4MXGBcKL9aayWGCDTiWMU,2269
365
366
  dissect/target/volumes/md.py,sha256=7ShPtusuLGaIv27SvEETtgsuoQyAa4iAAeOR1NEaajI,1689
366
367
  dissect/target/volumes/vmfs.py,sha256=-LoUbn9WNwTtLi_4K34uV_-wDw2W5hgaqxZNj4UmqAQ,1730
367
- dissect.target-3.20.dev4.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
368
- dissect.target-3.20.dev4.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
369
- dissect.target-3.20.dev4.dist-info/METADATA,sha256=-UKtuhQiUY4OhJbAtGRU1GcyyCoHAHqkHJs51thHJOg,12896
370
- dissect.target-3.20.dev4.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
371
- dissect.target-3.20.dev4.dist-info/entry_points.txt,sha256=BWuxAb_6AvUAQpIQOQU0IMTlaF6TDht2AIZK8bHd-zE,492
372
- dissect.target-3.20.dev4.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
373
- dissect.target-3.20.dev4.dist-info/RECORD,,
368
+ dissect.target-3.20.dev5.dist-info/COPYRIGHT,sha256=m-9ih2RVhMiXHI2bf_oNSSgHgkeIvaYRVfKTwFbnJPA,301
369
+ dissect.target-3.20.dev5.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
370
+ dissect.target-3.20.dev5.dist-info/METADATA,sha256=mipPixfWzRYRNCdlpu5JgLbNjA68Tb246PTVHNQk54E,12896
371
+ dissect.target-3.20.dev5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
372
+ dissect.target-3.20.dev5.dist-info/entry_points.txt,sha256=BWuxAb_6AvUAQpIQOQU0IMTlaF6TDht2AIZK8bHd-zE,492
373
+ dissect.target-3.20.dev5.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
374
+ dissect.target-3.20.dev5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.2)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5