dissect.database 1.2.dev7__py3-none-any.whl → 1.2.dev8__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/database/ese/ntds/objects/__init__.py +2 -0
- dissect/database/ese/ntds/objects/computer.py +7 -0
- dissect/database/ese/ntds/objects/msfve_recoveryinformation.py +45 -0
- dissect/database/ese/ntds/objects/object.py +5 -0
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/METADATA +1 -1
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/RECORD +11 -10
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/WHEEL +0 -0
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/entry_points.txt +0 -0
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/licenses/COPYRIGHT +0 -0
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/licenses/LICENSE +0 -0
- {dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/top_level.txt +0 -0
|
@@ -68,6 +68,7 @@ from dissect.database.ese.ntds.objects.msds_resourceproperty import MSDSResource
|
|
|
68
68
|
from dissect.database.ese.ntds.objects.msds_resourcepropertylist import MSDSResourcePropertyList
|
|
69
69
|
from dissect.database.ese.ntds.objects.msds_shadowprincipalcontainer import MSDSShadowPrincipalContainer
|
|
70
70
|
from dissect.database.ese.ntds.objects.msds_valuetype import MSDSValueType
|
|
71
|
+
from dissect.database.ese.ntds.objects.msfve_recoveryinformation import MSFVERecoveryInformation
|
|
71
72
|
from dissect.database.ese.ntds.objects.msimaging_psps import MSImagingPSPs
|
|
72
73
|
from dissect.database.ese.ntds.objects.mskds_provserverconfiguration import MSKDSProvServerConfiguration
|
|
73
74
|
from dissect.database.ese.ntds.objects.msmqenterprisesettings import MSMQEnterpriseSettings
|
|
@@ -174,6 +175,7 @@ __all__ = [
|
|
|
174
175
|
"MSDSResourcePropertyList",
|
|
175
176
|
"MSDSShadowPrincipalContainer",
|
|
176
177
|
"MSDSValueType",
|
|
178
|
+
"MSFVERecoveryInformation",
|
|
177
179
|
"MSImagingPSPs",
|
|
178
180
|
"MSKDSProvServerConfiguration",
|
|
179
181
|
"MSMQEnterpriseSettings",
|
|
@@ -2,6 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
|
+
from dissect.database.ese.ntds.objects.msfve_recoveryinformation import MSFVERecoveryInformation
|
|
5
6
|
from dissect.database.ese.ntds.objects.user import User
|
|
6
7
|
|
|
7
8
|
if TYPE_CHECKING:
|
|
@@ -22,6 +23,12 @@ class Computer(User):
|
|
|
22
23
|
def __repr_body__(self) -> str:
|
|
23
24
|
return f"name={self.name!r}"
|
|
24
25
|
|
|
26
|
+
def fve_recovery_information(self) -> Iterator[MSFVERecoveryInformation]:
|
|
27
|
+
"""Return the BitLocker recovery information objects associated with this computer."""
|
|
28
|
+
for child in self.children():
|
|
29
|
+
if isinstance(child, MSFVERecoveryInformation):
|
|
30
|
+
yield child
|
|
31
|
+
|
|
25
32
|
def managed_by(self) -> Iterator[Object]:
|
|
26
33
|
"""Return the objects that manage this computer."""
|
|
27
34
|
self._assert_local()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
from uuid import UUID
|
|
5
|
+
|
|
6
|
+
from dissect.database.ese.ntds.objects.top import Top
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from dissect.database.ese.ntds.objects import Computer
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class MSFVERecoveryInformation(Top):
|
|
13
|
+
"""Represents a msFVE-RecoveryInformation object in the Active Directory.
|
|
14
|
+
|
|
15
|
+
References:
|
|
16
|
+
- https://learn.microsoft.com/en-us/windows/win32/adschema/c-msfve-recoveryinformation
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
__object_class__ = "msFVE-RecoveryInformation"
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def volume_guid(self) -> UUID:
|
|
23
|
+
"""Return the volume GUID associated with this recovery information."""
|
|
24
|
+
return UUID(bytes_le=self.get("msFVE-VolumeGuid"))
|
|
25
|
+
|
|
26
|
+
@property
|
|
27
|
+
def recovery_guid(self) -> UUID:
|
|
28
|
+
"""Return the recovery GUID associated with this recovery information."""
|
|
29
|
+
return UUID(bytes_le=self.get("msFVE-RecoveryGuid"))
|
|
30
|
+
|
|
31
|
+
@property
|
|
32
|
+
def recovery_password(self) -> str | None:
|
|
33
|
+
"""Return the recovery password associated with this recovery information."""
|
|
34
|
+
return self.get("msFVE-RecoveryPassword")
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def key_package(self) -> bytes | None:
|
|
38
|
+
"""Return the key package associated with this recovery information, if any."""
|
|
39
|
+
return self.get("msFVE-KeyPackage")
|
|
40
|
+
|
|
41
|
+
def computer(self) -> Computer:
|
|
42
|
+
"""Return the computer object associated with this recovery information."""
|
|
43
|
+
if (parent := self.parent()) is None:
|
|
44
|
+
raise ValueError("msFVE-RecoveryInformation object has no parent computer")
|
|
45
|
+
return parent
|
|
@@ -57,6 +57,11 @@ class Object:
|
|
|
57
57
|
def __getattr__(self, name: str) -> Any:
|
|
58
58
|
return self.get(name)
|
|
59
59
|
|
|
60
|
+
def __eq__(self, other: object) -> bool:
|
|
61
|
+
if not isinstance(other, Object):
|
|
62
|
+
return NotImplemented
|
|
63
|
+
return self.record == other.record
|
|
64
|
+
|
|
60
65
|
@classmethod
|
|
61
66
|
def from_record(cls, db: Database, record: Record) -> Object:
|
|
62
67
|
"""Create an Object instance from a database record.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dissect.database
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.dev8
|
|
4
4
|
Summary: A Dissect module implementing parsers for various database formats, including Berkeley DB, Microsofts Extensible Storage Engine (ESE) and SQLite3
|
|
5
5
|
Author-email: Dissect Team <dissect@fox-it.com>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -36,14 +36,14 @@ dissect/database/ese/ntds/query.py,sha256=pDLLCVdrCRNq3ripvMDiyxXoFWsVJLwwsRMplR
|
|
|
36
36
|
dissect/database/ese/ntds/schema.py,sha256=xxVL--RRBM8-IP12L86hrz-EEGLqXKAXpQZyOT_Vhn0,16644
|
|
37
37
|
dissect/database/ese/ntds/sd.py,sha256=Y-oYnJPcLMDB_4X8TLEGtt-n_nC4HLA0WqIS8qYAwAs,5995
|
|
38
38
|
dissect/database/ese/ntds/util.py,sha256=nuY7NRSlr5V5Jz2NIOEhe3hbzPjFLVQnprXa3swSl_M,18856
|
|
39
|
-
dissect/database/ese/ntds/objects/__init__.py,sha256=
|
|
39
|
+
dissect/database/ese/ntds/objects/__init__.py,sha256=LpZ9nHGxmuhVPQkD-qwh-OwFM1T4OzjcklAcEF2Zmrs,10868
|
|
40
40
|
dissect/database/ese/ntds/objects/applicationsettings.py,sha256=j7UzmF8yxm3LR2lLnmGb7vFvUhYokCUOdhJXnk9xxzE,358
|
|
41
41
|
dissect/database/ese/ntds/objects/attributeschema.py,sha256=0e_s5N5mnybxuufOEjGIVWlyuJkSgplz9LuIsaS2S38,342
|
|
42
42
|
dissect/database/ese/ntds/objects/builtindomain.py,sha256=KEo-YQl-r748Hnkod21qej2qsLGj7jM4vt6nbufMPWQ,334
|
|
43
43
|
dissect/database/ese/ntds/objects/certificationauthority.py,sha256=oqmPYlz5SYUv7RfTNCKZ3F233v3K7lBtxDDz_g_R1GU,365
|
|
44
44
|
dissect/database/ese/ntds/objects/classschema.py,sha256=Hrpfgl_mR6ciHL7qya63mvzsrouFIy4BJVHU5wJm_Hg,1544
|
|
45
45
|
dissect/database/ese/ntds/objects/classstore.py,sha256=VqWGm4ZqonQQGnFE67AyGGUYuTLdBmPQzZ34X-fRG5M,321
|
|
46
|
-
dissect/database/ese/ntds/objects/computer.py,sha256=
|
|
46
|
+
dissect/database/ese/ntds/objects/computer.py,sha256=QstBJ59mxsepGBLW_EJBwOe4gCGHDz5ZJoSknD6TQlY,1136
|
|
47
47
|
dissect/database/ese/ntds/objects/configuration.py,sha256=AMjJBr4yCDITulk3LhVMhZBEOUYf6ApzibwxiLO79sU,332
|
|
48
48
|
dissect/database/ese/ntds/objects/container.py,sha256=fYtFfWHpcr_4wMN0_vfN9pRx2UXt26Fw31c4FOH9uEQ,316
|
|
49
49
|
dissect/database/ese/ntds/objects/controlaccessright.py,sha256=Xh0hYp7rOQ2oZEA2hOALY_uGZNAxkiuhzhrgK1pLM2U,354
|
|
@@ -103,6 +103,7 @@ dissect/database/ese/ntds/objects/msds_resourceproperty.py,sha256=pEhSpJDx2fxOQI
|
|
|
103
103
|
dissect/database/ese/ntds/objects/msds_resourcepropertylist.py,sha256=WnI2ivTbrGcO3i0u5ABXc9f0Us6H5xiUpEK7R_PHYes,377
|
|
104
104
|
dissect/database/ese/ntds/objects/msds_shadowprincipalcontainer.py,sha256=lRw-taqKDB_os-EALtm_xJvzEOazJ5ZzWnXY9ouQmko,411
|
|
105
105
|
dissect/database/ese/ntds/objects/msds_valuetype.py,sha256=uSv4TT525pywtB-JcawECqeSPOsOZvSz1JcbDGQmTMM,331
|
|
106
|
+
dissect/database/ese/ntds/objects/msfve_recoveryinformation.py,sha256=X5t7DlYAE6USjig5hIavzfHc0-3fg37qLSV415iECPQ,1562
|
|
106
107
|
dissect/database/ese/ntds/objects/msimaging_psps.py,sha256=q-PdCY6I25xobOOEsllzxkX1NZRjnpgvCPlkk6PTclQ,336
|
|
107
108
|
dissect/database/ese/ntds/objects/mskds_provserverconfiguration.py,sha256=JGqYnTyObQZ1l0l_nILa1e6-hv0towg6LiI93AE17xs,393
|
|
108
109
|
dissect/database/ese/ntds/objects/msmqenterprisesettings.py,sha256=VUeQBGr_ycFGfH6XWvJvllrjoEY1nqy32P0_KhGHN2o,366
|
|
@@ -115,7 +116,7 @@ dissect/database/ese/ntds/objects/ntdsdsa.py,sha256=pES4m9UCqxDI6sOQUjyp3Uc0alHN
|
|
|
115
116
|
dissect/database/ese/ntds/objects/ntdsservice.py,sha256=mTdpd2tzm8OOiGm6rJN35_dyeWtvzPYI_rVDBZz0gNc,326
|
|
116
117
|
dissect/database/ese/ntds/objects/ntdssitesettings.py,sha256=VNlke-Vgxjh0fzd5o2X-4fwCBrkEI1coR4oto5OenPo,709
|
|
117
118
|
dissect/database/ese/ntds/objects/ntfrssettings.py,sha256=PwIKT6t_zRxfdacWuvzMfq_mIhj_wyIhHzORNcF2eOU,745
|
|
118
|
-
dissect/database/ese/ntds/objects/object.py,sha256=
|
|
119
|
+
dissect/database/ese/ntds/objects/object.py,sha256=gYxjaivNCr0WfjrAAIqS1SmSR2zF2_ROR0g2Cip-3gg,10162
|
|
119
120
|
dissect/database/ese/ntds/objects/organizationalperson.py,sha256=X4QHT9AeGU7mDtIPlZbkhs1v2ZCPEarehFyn5EFszdY,559
|
|
120
121
|
dissect/database/ese/ntds/objects/organizationalunit.py,sha256=H_VHrUgN92cXgGoV3ngiV4HjSaDndSUkQSjcNmb7WFs,715
|
|
121
122
|
dissect/database/ese/ntds/objects/person.py,sha256=s67VHtsyN5t8icU9adPTLGcrIMH14yrEY1VqUqSw3Do,304
|
|
@@ -158,10 +159,10 @@ dissect/database/sqlite3/encryption/__init__.py,sha256=kJdFWXD9Z_O_QipC-_A9dlVfR
|
|
|
158
159
|
dissect/database/sqlite3/encryption/sqlcipher/__init__.py,sha256=kJdFWXD9Z_O_QipC-_A9dlVfR6AOPSOoT8WBhpFbSsE,238
|
|
159
160
|
dissect/database/sqlite3/encryption/sqlcipher/exception.py,sha256=GKNtzcnAKlWkvjLluruA8LfzCwjRRWubibbH8WM9l2o,121
|
|
160
161
|
dissect/database/sqlite3/encryption/sqlcipher/sqlcipher.py,sha256=y_oJRKZqoJBeOQaBbniesZKm1sVTFvXZ466rJYZj2xE,11217
|
|
161
|
-
dissect_database-1.2.
|
|
162
|
-
dissect_database-1.2.
|
|
163
|
-
dissect_database-1.2.
|
|
164
|
-
dissect_database-1.2.
|
|
165
|
-
dissect_database-1.2.
|
|
166
|
-
dissect_database-1.2.
|
|
167
|
-
dissect_database-1.2.
|
|
162
|
+
dissect_database-1.2.dev8.dist-info/licenses/COPYRIGHT,sha256=pFH-OBYz6Xj23UB0Odz5IhoTR8nsTbJQNlCRV_wMaiE,317
|
|
163
|
+
dissect_database-1.2.dev8.dist-info/licenses/LICENSE,sha256=PhUqiw6jAh2KbBdVRPBq_hfAvfcTBin7nZ3CK7NQbTM,11341
|
|
164
|
+
dissect_database-1.2.dev8.dist-info/METADATA,sha256=hGEpclu4s8U1QSHYtlzFE6-use8kBW1cwjqvDDjnDkY,5540
|
|
165
|
+
dissect_database-1.2.dev8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
166
|
+
dissect_database-1.2.dev8.dist-info/entry_points.txt,sha256=ZVVKj3Nzjkgm1kBXGWyGNVUJzTbmVgivv9lgFcuLkpk,343
|
|
167
|
+
dissect_database-1.2.dev8.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
|
|
168
|
+
dissect_database-1.2.dev8.dist-info/RECORD,,
|
|
File without changes
|
{dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/licenses/COPYRIGHT
RENAMED
|
File without changes
|
{dissect_database-1.2.dev7.dist-info → dissect_database-1.2.dev8.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|