dissect.target 3.20.dev49__tar.gz → 3.20.dev51__tar.gz

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 (661) hide show
  1. {dissect_target-3.20.dev49/dissect.target.egg-info → dissect_target-3.20.dev51}/PKG-INFO +2 -2
  2. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/container.py +1 -1
  3. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/exceptions.py +3 -2
  4. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystem.py +2 -2
  5. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/btrfs.py +4 -4
  6. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/extfs.py +4 -4
  7. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/fat.py +3 -3
  8. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/ffs.py +4 -4
  9. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/jffs.py +4 -4
  10. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/ntfs.py +4 -4
  11. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/smb.py +3 -3
  12. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/squashfs.py +4 -4
  13. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/vmfs.py +4 -4
  14. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/xfs.py +7 -7
  15. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/regutil.py +5 -4
  16. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugin.py +1 -1
  17. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/network.py +5 -5
  18. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/osx/_os.py +1 -4
  19. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/_os.py +4 -6
  20. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/_os.py +1 -1
  21. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/network.py +102 -86
  22. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/target.py +6 -7
  23. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/info.py +1 -1
  24. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/utils.py +3 -3
  25. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volume.py +4 -4
  26. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51/dissect.target.egg-info}/PKG-INFO +2 -2
  27. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect.target.egg-info/requires.txt +1 -1
  28. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/pyproject.toml +1 -1
  29. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/conftest.py +13 -4
  30. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_network.py +1 -1
  31. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_ips.py +24 -0
  32. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_network.py +79 -19
  33. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/COPYRIGHT +0 -0
  34. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/LICENSE +0 -0
  35. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/MANIFEST.in +0 -0
  36. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/README.md +0 -0
  37. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/__init__.py +0 -0
  38. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/__init__.py +0 -0
  39. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/asdf.py +0 -0
  40. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/ewf.py +0 -0
  41. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/fortifw.py +0 -0
  42. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/hdd.py +0 -0
  43. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/hds.py +0 -0
  44. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/qcow2.py +0 -0
  45. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/raw.py +0 -0
  46. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/split.py +0 -0
  47. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/vdi.py +0 -0
  48. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/vhd.py +0 -0
  49. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/vhdx.py +0 -0
  50. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/containers/vmdk.py +0 -0
  51. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
  52. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/__init__.py +0 -0
  53. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/ad1.py +0 -0
  54. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/cb.py +0 -0
  55. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/config.py +0 -0
  56. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/cpio.py +0 -0
  57. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/dir.py +0 -0
  58. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/exfat.py +0 -0
  59. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/itunes.py +0 -0
  60. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/overlay.py +0 -0
  61. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/tar.py +0 -0
  62. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/vmtar.py +0 -0
  63. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/filesystems/zip.py +0 -0
  64. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/__init__.py +0 -0
  65. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/cache.py +0 -0
  66. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/__init__.py +0 -0
  67. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/path_310.py +0 -0
  68. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/path_311.py +0 -0
  69. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/path_312.py +0 -0
  70. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/path_39.py +0 -0
  71. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/compat/path_common.py +0 -0
  72. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/config.py +0 -0
  73. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/configutil.py +0 -0
  74. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/cyber.py +0 -0
  75. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/data/windowsZones.xml +0 -0
  76. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/descriptor_extensions.py +0 -0
  77. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/docs.py +0 -0
  78. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/fsutil.py +0 -0
  79. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/hashutil.py +0 -0
  80. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/keychain.py +0 -0
  81. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/lazy.py +0 -0
  82. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/loaderutil.py +0 -0
  83. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/localeutil.py +0 -0
  84. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/mount.py +0 -0
  85. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/mui.py +0 -0
  86. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/polypath.py +0 -0
  87. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/protobuf.py +0 -0
  88. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/record.py +0 -0
  89. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/record_modifier.py +0 -0
  90. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/shell_application_ids.py +0 -0
  91. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/shell_folder_ids.py +0 -0
  92. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/helpers/utils.py +0 -0
  93. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loader.py +0 -0
  94. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/__init__.py +0 -0
  95. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/ab.py +0 -0
  96. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/ad1.py +0 -0
  97. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/asdf.py +0 -0
  98. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/cb.py +0 -0
  99. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/cyber.py +0 -0
  100. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/dir.py +0 -0
  101. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/hyperv.py +0 -0
  102. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/itunes.py +0 -0
  103. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/kape.py +0 -0
  104. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/libvirt.py +0 -0
  105. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/local.py +0 -0
  106. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/log.py +0 -0
  107. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/mqtt.py +0 -0
  108. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/multiraw.py +0 -0
  109. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/ova.py +0 -0
  110. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/overlay.py +0 -0
  111. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/ovf.py +0 -0
  112. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/phobos.py +0 -0
  113. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/profile.py +0 -0
  114. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/proxmox.py +0 -0
  115. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/pvm.py +0 -0
  116. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/pvs.py +0 -0
  117. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/raw.py +0 -0
  118. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/remote.py +0 -0
  119. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/res.py +0 -0
  120. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/smb.py +0 -0
  121. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/tanium.py +0 -0
  122. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/tar.py +0 -0
  123. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/target.py +0 -0
  124. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/utm.py +0 -0
  125. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/vb.py +0 -0
  126. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/vbox.py +0 -0
  127. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/velociraptor.py +0 -0
  128. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/vma.py +0 -0
  129. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/vmwarevm.py +0 -0
  130. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/vmx.py +0 -0
  131. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/loaders/xva.py +0 -0
  132. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/__init__.py +0 -0
  133. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/__init__.py +0 -0
  134. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/av/__init__.py +0 -0
  135. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/av/mcafee.py +0 -0
  136. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/av/sophos.py +0 -0
  137. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/av/symantec.py +0 -0
  138. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
  139. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  140. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/brave.py +0 -0
  141. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/browser.py +0 -0
  142. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  143. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/chromium.py +0 -0
  144. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/edge.py +0 -0
  145. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  146. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  147. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/container/__init__.py +0 -0
  148. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/container/docker.py +0 -0
  149. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/editor/__init__.py +0 -0
  150. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/editor/editor.py +0 -0
  151. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/editor/windowsnotepad.py +0 -0
  152. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/other/__init__.py +0 -0
  153. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/other/env.py +0 -0
  154. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
  155. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  156. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  157. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  158. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/shell/__init__.py +0 -0
  159. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/shell/powershell.py +0 -0
  160. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/shell/wget.py +0 -0
  161. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
  162. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
  163. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
  164. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/ssh/putty.py +0 -0
  165. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
  166. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/virtualization/__init__.py +0 -0
  167. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/virtualization/vmware_workstation.py +0 -0
  168. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  169. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  170. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
  171. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  172. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
  173. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  174. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  175. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
  176. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
  177. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  178. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
  179. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  180. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/__init__.py +0 -0
  181. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/docker.py +0 -0
  182. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/esxi.py +0 -0
  183. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/hyperv.py +0 -0
  184. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/parallels.py +0 -0
  185. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/proxmox.py +0 -0
  186. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/qemu.py +0 -0
  187. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/virtuozzo.py +0 -0
  188. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  189. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/child/wsl.py +0 -0
  190. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/__init__.py +0 -0
  191. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
  192. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
  193. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/icat.py +0 -0
  194. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  195. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
  196. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
  197. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
  198. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
  199. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/resolver.py +0 -0
  200. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  201. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
  202. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
  203. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/walkfs.py +0 -0
  204. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/filesystem/yara.py +0 -0
  205. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/__init__.py +0 -0
  206. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/config.py +0 -0
  207. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/default.py +0 -0
  208. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/example.py +0 -0
  209. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/loaders.py +0 -0
  210. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/osinfo.py +0 -0
  211. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/plugins.py +0 -0
  212. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/scrape.py +0 -0
  213. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/general/users.py +0 -0
  214. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/__init__.py +0 -0
  215. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/__init__.py +0 -0
  216. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/_os.py +0 -0
  217. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/applications.py +0 -0
  218. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
  219. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  220. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  221. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  222. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
  223. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  224. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  225. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
  226. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
  227. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  228. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  229. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
  230. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/osx/network.py +0 -0
  231. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
  232. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
  233. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/datetime.py +0 -0
  234. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  235. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  236. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/etc/__init__.py +0 -0
  237. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/etc/etc.py +0 -0
  238. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/generic.py +0 -0
  239. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/history.py +0 -0
  240. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  241. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  242. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  243. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
  244. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  245. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  246. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
  247. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
  248. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  249. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/_os.py +0 -0
  250. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/vm.py +0 -0
  251. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/snap.py +0 -0
  252. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  253. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  254. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
  255. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
  256. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
  257. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
  258. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/fortios/generic.py +0 -0
  259. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/fortios/locale.py +0 -0
  260. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  261. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
  262. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
  263. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/network_managers.py +0 -0
  264. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  265. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
  266. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  267. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  268. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
  269. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/services.py +0 -0
  270. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
  271. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  272. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  273. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
  274. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locale.py +0 -0
  275. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
  276. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locate/gnulocate.py +0 -0
  277. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
  278. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locate/mlocate.py +0 -0
  279. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/locate/plocate.py +0 -0
  280. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  281. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/atop.py +0 -0
  282. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/audit.py +0 -0
  283. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/auth.py +0 -0
  284. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  285. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
  286. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/messages.py +0 -0
  287. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
  288. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
  289. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/shadow.py +0 -0
  290. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/unix/trash.py +0 -0
  291. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/__init__.py +0 -0
  292. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
  293. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
  294. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/amcache.py +0 -0
  295. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/catroot.py +0 -0
  296. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/cim.py +0 -0
  297. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/clfs.py +0 -0
  298. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/credential/__init__.py +0 -0
  299. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/credential/credhist.py +0 -0
  300. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/credential/lsa.py +0 -0
  301. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/credential/sam.py +0 -0
  302. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/datetime.py +0 -0
  303. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/defender.py +0 -0
  304. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/defender_helpers/__init__.py +0 -0
  305. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/defender_helpers/defender_patterns.py +0 -0
  306. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/defender_helpers/defender_records.py +0 -0
  307. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  308. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  309. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  310. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  311. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/__init__.py +0 -0
  312. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/credhist.py +0 -0
  313. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/empty.py +0 -0
  314. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/keychain.py +0 -0
  315. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/keyprovider.py +0 -0
  316. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/lsa.py +0 -0
  317. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  318. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/env.py +0 -0
  319. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  320. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
  321. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/generic.py +0 -0
  322. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/jumplist.py +0 -0
  323. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/lnk.py +0 -0
  324. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/locale.py +0 -0
  325. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  326. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  327. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/etl.py +0 -0
  328. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/evt.py +0 -0
  329. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
  330. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
  331. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
  332. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/notifications.py +0 -0
  333. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/prefetch.py +0 -0
  334. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  335. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/7zip.py +0 -0
  336. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  337. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/applications.py +0 -0
  338. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  339. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
  340. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
  341. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
  342. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
  343. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
  344. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
  345. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  346. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
  347. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
  348. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
  349. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  350. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  351. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
  352. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  353. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
  354. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
  355. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/registry.py +0 -0
  356. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/services.py +0 -0
  357. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/sru.py +0 -0
  358. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
  359. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/syscache.py +0 -0
  360. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
  361. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
  362. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
  363. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
  364. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/tasks.py +0 -0
  365. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
  366. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/ual.py +0 -0
  367. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/wer.py +0 -0
  368. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/plugins/os/windows/wua_history.py +0 -0
  369. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/report.py +0 -0
  370. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/__init__.py +0 -0
  371. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/build_pluginlist.py +0 -0
  372. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/dd.py +0 -0
  373. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/dump/__init__.py +0 -0
  374. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/dump/run.py +0 -0
  375. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/dump/state.py +0 -0
  376. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/dump/utils.py +0 -0
  377. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/fs.py +0 -0
  378. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/fsutils.py +0 -0
  379. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/logging.py +0 -0
  380. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/mount.py +0 -0
  381. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/query.py +0 -0
  382. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/reg.py +0 -0
  383. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/shell.py +0 -0
  384. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/tools/yara.py +0 -0
  385. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/__init__.py +0 -0
  386. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/bde.py +0 -0
  387. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/ddf.py +0 -0
  388. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/disk.py +0 -0
  389. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/luks.py +0 -0
  390. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/lvm.py +0 -0
  391. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/md.py +0 -0
  392. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect/target/volumes/vmfs.py +0 -0
  393. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect.target.egg-info/SOURCES.txt +0 -0
  394. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect.target.egg-info/dependency_links.txt +0 -0
  395. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect.target.egg-info/entry_points.txt +0 -0
  396. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/dissect.target.egg-info/top_level.txt +0 -0
  397. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/setup.cfg +0 -0
  398. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/__init__.py +0 -0
  399. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/_docs/Makefile +0 -0
  400. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/_docs/conf.py +0 -0
  401. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/_docs/index.rst +0 -0
  402. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/_utils.py +0 -0
  403. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/containers/__init__.py +0 -0
  404. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/containers/test_fortifw.py +0 -0
  405. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/containers/test_split.py +0 -0
  406. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/__init__.py +0 -0
  407. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_btrfs.py +0 -0
  408. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_cb.py +0 -0
  409. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_config.py +0 -0
  410. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_cpio.py +0 -0
  411. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_dir.py +0 -0
  412. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_exfat.py +0 -0
  413. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_extfs.py +0 -0
  414. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_fat.py +0 -0
  415. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_ffs.py +0 -0
  416. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_jffs2.py +0 -0
  417. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_ntfs.py +0 -0
  418. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_overlay.py +0 -0
  419. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_smb.py +0 -0
  420. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_tar.py +0 -0
  421. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_vmtar.py +0 -0
  422. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_xfs.py +0 -0
  423. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/filesystems/test_zip.py +0 -0
  424. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/__init__.py +0 -0
  425. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_cache.py +0 -0
  426. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_config.py +0 -0
  427. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_configutil.py +0 -0
  428. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_docs.py +0 -0
  429. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_fsutil.py +0 -0
  430. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_hashutil.py +0 -0
  431. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_keychain.py +0 -0
  432. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_loaderutil.py +0 -0
  433. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_localeutil.py +0 -0
  434. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_modifier.py +0 -0
  435. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_protobuf.py +0 -0
  436. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_record.py +0 -0
  437. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_regutil.py +0 -0
  438. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/helpers/test_utils.py +0 -0
  439. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/__init__.py +0 -0
  440. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_ab.py +0 -0
  441. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_asdf.py +0 -0
  442. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_cb.py +0 -0
  443. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_dir.py +0 -0
  444. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_hyperv.py +0 -0
  445. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_kape.py +0 -0
  446. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_libvirt.py +0 -0
  447. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_local.py +0 -0
  448. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_log.py +0 -0
  449. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_mqtt.py +0 -0
  450. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_multiraw.py +0 -0
  451. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_ova.py +0 -0
  452. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_overlay.py +0 -0
  453. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_ovf.py +0 -0
  454. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_phobos.py +0 -0
  455. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_pvm.py +0 -0
  456. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_pvs.py +0 -0
  457. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_remote.py +0 -0
  458. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_smb.py +0 -0
  459. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_tanium.py +0 -0
  460. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_tar.py +0 -0
  461. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_utm.py +0 -0
  462. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_vbox.py +0 -0
  463. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_velociraptor.py +0 -0
  464. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/loaders/test_vmwarevm.py +0 -0
  465. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/__init__.py +0 -0
  466. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/__init__.py +0 -0
  467. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/av/__init__.py +0 -0
  468. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/av/test_mcafee.py +0 -0
  469. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/av/test_sophos.py +0 -0
  470. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/av/test_symantec.py +0 -0
  471. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  472. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/__init__.py +0 -0
  473. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_brave.py +0 -0
  474. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_chrome.py +0 -0
  475. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_chromium.py +0 -0
  476. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_edge.py +0 -0
  477. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_firefox.py +0 -0
  478. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/browser/test_iexplore.py +0 -0
  479. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/container/__init__.py +0 -0
  480. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/container/test_docker.py +0 -0
  481. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/editor/__init__.py +0 -0
  482. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/editor/test_windowsnotepad.py +0 -0
  483. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/other/__init__.py +0 -0
  484. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/other/test_envfile.py +0 -0
  485. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
  486. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  487. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  488. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/shell/__init__.py +0 -0
  489. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/shell/test_powershell.py +0 -0
  490. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/shell/test_wget.py +0 -0
  491. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/ssh/__init__.py +0 -0
  492. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/ssh/test_openssh.py +0 -0
  493. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
  494. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/ssh/test_putty.py +0 -0
  495. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/virtualization/__init__.py +0 -0
  496. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/virtualization/test_vmware_workstation.py +0 -0
  497. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/vpn/__init__.py +0 -0
  498. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  499. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
  500. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webhosting/__init__.py +0 -0
  501. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  502. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/__init__.py +0 -0
  503. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_apache.py +0 -0
  504. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  505. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_citrix.py +0 -0
  506. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_iis.py +0 -0
  507. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  508. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/apps/webserver/test_webserver.py +0 -0
  509. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/__init__.py +0 -0
  510. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_docker.py +0 -0
  511. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_hyperv.py +0 -0
  512. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_parallels.py +0 -0
  513. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_qemu.py +0 -0
  514. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_virtuozzo.py +0 -0
  515. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_vmware_workstation.py +0 -0
  516. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/child/test_wsl.py +0 -0
  517. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/__init__.py +0 -0
  518. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  519. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  520. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  521. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
  522. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
  523. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_icat.py +0 -0
  524. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_resolver.py +0 -0
  525. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_walkfs.py +0 -0
  526. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/test_yara.py +0 -0
  527. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/unix/__init__.py +0 -0
  528. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  529. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  530. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/__init__.py +0 -0
  531. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_config.py +0 -0
  532. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_default.py +0 -0
  533. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_plugins.py +0 -0
  534. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_scrape.py +0 -0
  535. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/general/test_users.py +0 -0
  536. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/__init__.py +0 -0
  537. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/__init__.py +0 -0
  538. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  539. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  540. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  541. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
  542. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  543. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
  544. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/osx/test_network.py +0 -0
  545. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
  546. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/esxi/__init__.py +0 -0
  547. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/esxi/test__os.py +0 -0
  548. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/__init__.py +0 -0
  549. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  550. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  551. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  552. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  553. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/proxmox/test__os.py +0 -0
  554. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  555. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  556. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/debian/test_snap.py +0 -0
  557. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
  558. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  559. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  560. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  561. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  562. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test__os.py +0 -0
  563. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  564. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  565. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  566. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  567. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  568. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  569. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  570. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_services.py +0 -0
  571. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  572. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/locate/__init__.py +0 -0
  573. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
  574. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
  575. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
  576. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/__init__.py +0 -0
  577. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_atop.py +0 -0
  578. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_audit.py +0 -0
  579. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_auth.py +0 -0
  580. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_journal.py +0 -0
  581. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  582. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_messages.py +0 -0
  583. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  584. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test__os.py +0 -0
  585. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_applications.py +0 -0
  586. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_generic.py +0 -0
  587. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_history.py +0 -0
  588. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_locale.py +0 -0
  589. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  590. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_shadow.py +0 -0
  591. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_trash.py +0 -0
  592. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_users.py +0 -0
  593. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/unix/test_version.py +0 -0
  594. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/__init__.py +0 -0
  595. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/credential/__init__.py +0 -0
  596. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/credential/test_credhist.py +0 -0
  597. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/credential/test_lsa.py +0 -0
  598. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/credential/test_sam.py +0 -0
  599. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/log/test_etl.py +0 -0
  600. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/log/test_evt.py +0 -0
  601. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  602. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
  603. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/__init__.py +0 -0
  604. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_applications.py +0 -0
  605. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  606. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_cit.py +0 -0
  607. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  608. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  609. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_shellbags.py +0 -0
  610. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  611. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_usb.py +0 -0
  612. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  613. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test__os.py +0 -0
  614. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  615. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_amcache.py +0 -0
  616. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_catroot.py +0 -0
  617. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_clfs.py +0 -0
  618. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_datetime.py +0 -0
  619. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_defender.py +0 -0
  620. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_dpapi.py +0 -0
  621. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_env.py +0 -0
  622. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_generic.py +0 -0
  623. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_jumplist.py +0 -0
  624. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_lnk.py +0 -0
  625. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_locale.py +0 -0
  626. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_mru.py +0 -0
  627. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_notifications.py +0 -0
  628. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_prefetch.py +0 -0
  629. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_recyclebin.py +0 -0
  630. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_registry.py +0 -0
  631. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_shimcache.py +0 -0
  632. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_sru.py +0 -0
  633. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_syscache.py +0 -0
  634. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_tasks.py +0 -0
  635. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  636. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_ual.py +0 -0
  637. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_wer.py +0 -0
  638. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/plugins/os/windows/test_wua_history.py +0 -0
  639. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_container.py +0 -0
  640. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_filesystem.py +0 -0
  641. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_plugin.py +0 -0
  642. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_registration.py +0 -0
  643. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_report.py +0 -0
  644. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_target.py +0 -0
  645. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_tests.py +0 -0
  646. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/test_volume.py +0 -0
  647. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/__init__.py +0 -0
  648. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_dump.py +0 -0
  649. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_fs.py +0 -0
  650. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_fsutils.py +0 -0
  651. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_info.py +0 -0
  652. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_mount.py +0 -0
  653. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_query.py +0 -0
  654. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_reg.py +0 -0
  655. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_shell.py +0 -0
  656. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_utils.py +0 -0
  657. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/tools/test_yara.py +0 -0
  658. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/volumes/__init__.py +0 -0
  659. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/volumes/test_bde.py +0 -0
  660. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tests/volumes/test_md.py +0 -0
  661. {dissect_target-3.20.dev49 → dissect_target-3.20.dev51}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.20.dev49
3
+ Version: 3.20.dev51
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.16.0
34
+ Requires-Dist: flow.record~=3.17.0
35
35
  Requires-Dist: structlog
36
36
  Provides-Extra: full
37
37
  Requires-Dist: asn1crypto; extra == "full"
@@ -239,7 +239,7 @@ def open(item: Union[list, str, BinaryIO, Path], *args, **kwargs):
239
239
  log.info("Failed to import %s", container)
240
240
  log.debug("", exc_info=e)
241
241
  except Exception as e:
242
- raise ContainerError(f"Failed to open container {item}", cause=e)
242
+ raise ContainerError(f"Failed to open container {item}") from e
243
243
  finally:
244
244
  if first_fh_opened:
245
245
  first_fh.close()
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import os
2
4
  import sys
3
5
  import traceback
@@ -7,13 +9,12 @@ from typing import Callable
7
9
  class Error(Exception):
8
10
  """Generic dissect.target error"""
9
11
 
10
- def __init__(self, message=None, cause=None, extra=None):
12
+ def __init__(self, message: str | None = None, extra: list[Exception] | None = None):
11
13
  if extra:
12
14
  exceptions = "\n\n".join(["".join(traceback.format_exception_only(type(e), e)) for e in extra])
13
15
  message = f"{message}\n\nAdditionally, the following exceptions occurred:\n\n{exceptions}"
14
16
 
15
17
  super().__init__(message)
16
- self.__cause__ = cause
17
18
  self.__extra__ = extra
18
19
 
19
20
 
@@ -1142,7 +1142,7 @@ class VirtualFilesystem(Filesystem):
1142
1142
  try:
1143
1143
  return entry.top.get(fsutil.join(*parts[i:], alt_separator=self.alt_separator))
1144
1144
  except FilesystemError as e:
1145
- raise FileNotFoundError(full_path, cause=e)
1145
+ raise FileNotFoundError(full_path) from e
1146
1146
  else:
1147
1147
  raise FileNotFoundError(full_path)
1148
1148
 
@@ -1715,7 +1715,7 @@ def open(fh: BinaryIO, *args, **kwargs) -> Filesystem:
1715
1715
  log.info("Failed to import %s", filesystem)
1716
1716
  log.debug("", exc_info=e)
1717
1717
  except Exception as e:
1718
- raise FilesystemError(f"Failed to open filesystem for {fh}", cause=e)
1718
+ raise FilesystemError(f"Failed to open filesystem for {fh}") from e
1719
1719
  finally:
1720
1720
  fh.seek(offset)
1721
1721
 
@@ -79,13 +79,13 @@ class BtrfsSubvolumeFilesystem(Filesystem):
79
79
  try:
80
80
  return self.subvolume.get(path, node)
81
81
  except btrfs.FileNotFoundError as e:
82
- raise FileNotFoundError(path, cause=e)
82
+ raise FileNotFoundError(path) from e
83
83
  except btrfs.NotADirectoryError as e:
84
- raise NotADirectoryError(path, cause=e)
84
+ raise NotADirectoryError(path) from e
85
85
  except btrfs.NotASymlinkError as e:
86
- raise NotASymlinkError(path, cause=e)
86
+ raise NotASymlinkError(path) from e
87
87
  except btrfs.Error as e:
88
- raise FileNotFoundError(path, cause=e)
88
+ raise FileNotFoundError(path) from e
89
89
 
90
90
 
91
91
  class BtrfsFilesystemEntry(FilesystemEntry):
@@ -33,13 +33,13 @@ class ExtFilesystem(Filesystem):
33
33
  try:
34
34
  return self.extfs.get(path, node)
35
35
  except extfs.FileNotFoundError as e:
36
- raise FileNotFoundError(path, cause=e)
36
+ raise FileNotFoundError(path) from e
37
37
  except extfs.NotADirectoryError as e:
38
- raise NotADirectoryError(path, cause=e)
38
+ raise NotADirectoryError(path) from e
39
39
  except extfs.NotASymlinkError as e:
40
- raise NotASymlinkError(path, cause=e)
40
+ raise NotASymlinkError(path) from e
41
41
  except extfs.Error as e:
42
- raise FileNotFoundError(path, cause=e)
42
+ raise FileNotFoundError(path) from e
43
43
 
44
44
 
45
45
  class ExtFilesystemEntry(FilesystemEntry):
@@ -41,11 +41,11 @@ class FatFilesystem(Filesystem):
41
41
  try:
42
42
  return self.fatfs.get(path, dirent=entry)
43
43
  except fat_exc.FileNotFoundError as e:
44
- raise FileNotFoundError(path, cause=e)
44
+ raise FileNotFoundError(path) from e
45
45
  except fat_exc.NotADirectoryError as e:
46
- raise NotADirectoryError(path, cause=e)
46
+ raise NotADirectoryError(path) from e
47
47
  except fat_exc.Error as e:
48
- raise FileNotFoundError(path, cause=e)
48
+ raise FileNotFoundError(path) from e
49
49
 
50
50
 
51
51
  class FatFilesystemEntry(FilesystemEntry):
@@ -39,13 +39,13 @@ class FfsFilesystem(Filesystem):
39
39
  try:
40
40
  return self.ffs.get(path, node)
41
41
  except ffs.FileNotFoundError as e:
42
- raise FileNotFoundError(path, cause=e)
42
+ raise FileNotFoundError(path) from e
43
43
  except ffs.NotADirectoryError as e:
44
- raise NotADirectoryError(path, cause=e)
44
+ raise NotADirectoryError(path) from e
45
45
  except ffs.NotASymlinkError as e:
46
- raise NotASymlinkError(path, cause=e)
46
+ raise NotASymlinkError(path) from e
47
47
  except ffs.Error as e:
48
- raise FileNotFoundError(path, cause=e)
48
+ raise FileNotFoundError(path) from e
49
49
 
50
50
 
51
51
  class FfsFilesystemEntry(FilesystemEntry):
@@ -35,13 +35,13 @@ class JFFSFilesystem(Filesystem):
35
35
  try:
36
36
  return self.jffs2.get(path, node)
37
37
  except jffs2.FileNotFoundError as e:
38
- raise FileNotFoundError(path, cause=e)
38
+ raise FileNotFoundError(path) from e
39
39
  except jffs2.NotADirectoryError as e:
40
- raise NotADirectoryError(path, cause=e)
40
+ raise NotADirectoryError(path) from e
41
41
  except jffs2.NotASymlinkError as e:
42
- raise NotASymlinkError(path, cause=e)
42
+ raise NotASymlinkError(path) from e
43
43
  except jffs2.Error as e:
44
- raise FileNotFoundError(path, cause=e)
44
+ raise FileNotFoundError(path) from e
45
45
 
46
46
 
47
47
  class JFFSFilesystemEntry(FilesystemEntry):
@@ -48,12 +48,12 @@ class NtfsFilesystem(Filesystem):
48
48
  try:
49
49
  path = path.rsplit(":", maxsplit=1)[0]
50
50
  return self.ntfs.mft.get(path, root=root)
51
- except NtfsFileNotFoundError:
52
- raise FileNotFoundError(path)
51
+ except NtfsFileNotFoundError as e:
52
+ raise FileNotFoundError(path) from e
53
53
  except NtfsNotADirectoryError as e:
54
- raise NotADirectoryError(path, cause=e)
54
+ raise NotADirectoryError(path) from e
55
55
  except NtfsError as e:
56
- raise FileNotFoundError(path, cause=e)
56
+ raise FileNotFoundError(path) from e
57
57
 
58
58
 
59
59
  class NtfsFilesystemEntry(FilesystemEntry):
@@ -58,10 +58,10 @@ class SmbFilesystem(Filesystem):
58
58
  except SessionError as e:
59
59
  if e.error == STATUS_NOT_A_DIRECTORY:
60
60
  # STATUS_NOT_A_DIRECTORY
61
- raise NotADirectoryError(path, cause=e)
61
+ raise NotADirectoryError(path) from e
62
62
  else:
63
63
  # 0xC000000F is STATUS_NO_SUCH_FILE, but everything else should raise a FileNotFoundError anyway
64
- raise FileNotFoundError(path, cause=e)
64
+ raise FileNotFoundError(path) from e
65
65
 
66
66
  if len(result) != 1:
67
67
  raise FileNotFoundError(path)
@@ -106,7 +106,7 @@ class SmbFilesystemEntry(FilesystemEntry):
106
106
  try:
107
107
  return SmbStream(self.fs.conn, self.fs.share_name, self.path, self.entry.get_filesize())
108
108
  except SessionError as e:
109
- raise FilesystemError(f"Failed to open file: {self.path}", cause=e)
109
+ raise FilesystemError(f"Failed to open file: {self.path}") from e
110
110
 
111
111
  def is_dir(self, follow_symlinks: bool = True) -> bool:
112
112
  try:
@@ -32,13 +32,13 @@ class SquashFSFilesystem(Filesystem):
32
32
  try:
33
33
  return self.squashfs.get(path, node)
34
34
  except exceptions.FileNotFoundError as e:
35
- raise FileNotFoundError(path, cause=e)
35
+ raise FileNotFoundError(path) from e
36
36
  except exceptions.NotADirectoryError as e:
37
- raise NotADirectoryError(path, cause=e)
37
+ raise NotADirectoryError(path) from e
38
38
  except exceptions.NotASymlinkError as e:
39
- raise NotASymlinkError(path, cause=e)
39
+ raise NotASymlinkError(path) from e
40
40
  except exceptions.Error as e:
41
- raise FileNotFoundError(path, cause=e)
41
+ raise FileNotFoundError(path) from e
42
42
 
43
43
 
44
44
  class SquashFSFilesystemEntry(FilesystemEntry):
@@ -41,13 +41,13 @@ class VmfsFilesystem(Filesystem):
41
41
  try:
42
42
  return self.vmfs.get(path, node)
43
43
  except vmfs.FileNotFoundError as e:
44
- raise FileNotFoundError(path, cause=e)
44
+ raise FileNotFoundError(path) from e
45
45
  except vmfs.NotADirectoryError as e:
46
- raise NotADirectoryError(path, cause=e)
46
+ raise NotADirectoryError(path) from e
47
47
  except vmfs.NotASymlinkError as e:
48
- raise NotASymlinkError(path, cause=e)
48
+ raise NotASymlinkError(path) from e
49
49
  except vmfs.Error as e:
50
- raise FileNotFoundError(path, cause=e)
50
+ raise FileNotFoundError(path) from e
51
51
 
52
52
 
53
53
  class VmfsFilesystemEntry(FilesystemEntry):
@@ -35,14 +35,14 @@ class XfsFilesystem(Filesystem):
35
35
  def _get_node(self, path: str, node: Optional[xfs.INode] = None) -> xfs.INode:
36
36
  try:
37
37
  return self.xfs.get(path, node)
38
- except xfs.FileNotFoundError:
39
- raise FileNotFoundError(path)
40
- except xfs.NotADirectoryError:
41
- raise NotADirectoryError(path)
42
- except xfs.NotASymlinkError:
43
- raise NotASymlinkError(path)
38
+ except xfs.FileNotFoundError as e:
39
+ raise FileNotFoundError(path) from e
40
+ except xfs.NotADirectoryError as e:
41
+ raise NotADirectoryError(path) from e
42
+ except xfs.NotASymlinkError as e:
43
+ raise NotASymlinkError(path) from e
44
44
  except xfs.Error as e:
45
- raise FileNotFoundError(path, cause=e)
45
+ raise FileNotFoundError(path) from e
46
46
 
47
47
 
48
48
  class XfsFilesystemEntry(FilesystemEntry):
@@ -1,4 +1,5 @@
1
- """ Registry related abstractions """
1
+ """Registry related abstractions"""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  import fnmatch
@@ -645,7 +646,7 @@ class RegfHive(RegistryHive):
645
646
  try:
646
647
  return RegfKey(self, self.hive.open(key))
647
648
  except regf.RegistryKeyNotFoundError as e:
648
- raise RegistryKeyNotFoundError(key, cause=e)
649
+ raise RegistryKeyNotFoundError(key) from e
649
650
 
650
651
 
651
652
  class RegfKey(RegistryKey):
@@ -675,7 +676,7 @@ class RegfKey(RegistryKey):
675
676
  try:
676
677
  return RegfKey(self.hive, self.key.subkey(subkey))
677
678
  except regf.RegistryKeyNotFoundError as e:
678
- raise RegistryKeyNotFoundError(subkey, cause=e)
679
+ raise RegistryKeyNotFoundError(subkey) from e
679
680
 
680
681
  def subkeys(self) -> list[RegistryKey]:
681
682
  return [RegfKey(self.hive, k) for k in self.key.subkeys()]
@@ -684,7 +685,7 @@ class RegfKey(RegistryKey):
684
685
  try:
685
686
  return RegfValue(self.hive, self.key.value(value))
686
687
  except regf.RegistryValueNotFoundError as e:
687
- raise RegistryValueNotFoundError(value, cause=e)
688
+ raise RegistryValueNotFoundError(value) from e
688
689
 
689
690
  def values(self) -> list[RegistryValue]:
690
691
  return [RegfValue(self.hive, v) for v in self.key.values()]
@@ -807,7 +807,7 @@ def load(plugin_desc: PluginDescriptor) -> Type[Plugin]:
807
807
  module = importlib.import_module(module)
808
808
  return getattr(module, plugin_desc["class"])
809
809
  except Exception as e:
810
- raise PluginError(f"An exception occurred while trying to load a plugin: {module}", cause=e)
810
+ raise PluginError(f"An exception occurred while trying to load a plugin: {module}") from e
811
811
 
812
812
 
813
813
  def failed() -> list[dict[str, Any]]:
@@ -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
- ips = set()
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
- for ip in ip_set:
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
- if ip not in ips:
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 keys in self.target.registry.keys(
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 keys.subkeys():
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 the network device name for given interface id
247
- name_key = self.target.registry.key(
248
- f"HKLM\\SYSTEM\\CurrentControlSet\\Control\\Network\\"
249
- f"{{4D36E972-E325-11CE-BFC1-08002BE10318}}\\{net_cfg_instance_id}\\Connection"
250
- )
251
- if value_name := _try_value(name_key, "Name"):
252
- device_info["name"] = value_name
253
-
254
- # Extract the metric value from the REGISTRY_KEY_INTERFACE key
255
- interface_key = self.target.registry.key(
256
- f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{net_cfg_instance_id}"
257
- )
258
- if value_metric := _try_value(interface_key, "InterfaceMetric"):
259
- device_info["metric"] = value_metric
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
- if conf:
274
- # Create a copy of device_info to avoid overwriting
275
- record_info = device_info.copy()
276
- record_info.update(conf)
277
- yield WindowsInterfaceRecord(
278
- **record_info,
279
- source=f"HKLM\\SYSTEM\\{subkey.path}",
280
- _target=self.target,
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
- dhcp_config = {}
287
- static_config = {}
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 = self.target.registry.key(
292
- f"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\{interface_id}"
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
- # Extract DHCP configuration from the registry
301
- dhcp_gateway = _try_value(keys, "DhcpDefaultGateway")
302
- if dhcp_gateway not in ["", "0.0.0.0", None, []]:
303
- dhcp_config["gateway"] = dhcp_gateway
304
-
305
- dhcp_ip = _try_value(keys, "DhcpIPAddress")
306
- if dhcp_ip not in ["", "0.0.0.0", None]:
307
- dhcp_config["ip"] = [dhcp_ip]
308
-
309
- dhcp_dns = _try_value(keys, "DhcpNameServer")
310
- if dhcp_dns not in ["", "0.0.0.0", None]:
311
- dhcp_config["dns"] = dhcp_dns.split(" ")
312
-
313
- dhcp_subnetmask = _try_value(keys, "DhcpSubnetMask")
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
- dhcp_enable = _try_value(keys, "EnableDHCP")
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, ips, subnet_masks in combined_configs:
361
- for network_address in self.calculate_network(ips, subnet_masks):
362
- config.setdefault("network", []).append(network_address)
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]