dissect.target 3.15.dev12__tar.gz → 3.15.dev14__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (527) hide show
  1. {dissect.target-3.15.dev12/dissect.target.egg-info → dissect.target-3.15.dev14}/PKG-INFO +1 -1
  2. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/ssh/openssh.py +11 -54
  3. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/ssh/opensshd.py +4 -3
  4. dissect.target-3.15.dev14/dissect/target/plugins/apps/ssh/putty.py +236 -0
  5. dissect.target-3.15.dev14/dissect/target/plugins/apps/ssh/ssh.py +58 -0
  6. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/registry.py +1 -1
  7. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/sru.py +41 -28
  8. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14/dissect.target.egg-info}/PKG-INFO +1 -1
  9. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect.target.egg-info/SOURCES.txt +3 -0
  10. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/ssh/test_openssh.py +38 -29
  11. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/ssh/test_opensshd.py +2 -2
  12. dissect.target-3.15.dev14/tests/plugins/apps/ssh/test_putty.py +131 -0
  13. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_sru.py +9 -5
  14. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/COPYRIGHT +0 -0
  15. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/LICENSE +0 -0
  16. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/MANIFEST.in +0 -0
  17. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/README.md +0 -0
  18. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/__init__.py +0 -0
  19. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/container.py +0 -0
  20. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/__init__.py +0 -0
  21. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/asdf.py +0 -0
  22. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/ewf.py +0 -0
  23. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/hdd.py +0 -0
  24. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/hds.py +0 -0
  25. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/qcow2.py +0 -0
  26. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/raw.py +0 -0
  27. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/split.py +0 -0
  28. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/vdi.py +0 -0
  29. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/vhd.py +0 -0
  30. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/vhdx.py +0 -0
  31. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/containers/vmdk.py +0 -0
  32. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
  33. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/exceptions.py +0 -0
  34. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystem.py +0 -0
  35. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/__init__.py +0 -0
  36. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/ad1.py +0 -0
  37. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/btrfs.py +0 -0
  38. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/cb.py +0 -0
  39. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/config.py +0 -0
  40. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/dir.py +0 -0
  41. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/exfat.py +0 -0
  42. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/extfs.py +0 -0
  43. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/fat.py +0 -0
  44. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/ffs.py +0 -0
  45. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/itunes.py +0 -0
  46. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/jffs.py +0 -0
  47. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/ntfs.py +0 -0
  48. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/smb.py +0 -0
  49. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/squashfs.py +0 -0
  50. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/tar.py +0 -0
  51. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/vmfs.py +0 -0
  52. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/xfs.py +0 -0
  53. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/filesystems/zip.py +0 -0
  54. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/__init__.py +0 -0
  55. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/cache.py +0 -0
  56. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/config.py +0 -0
  57. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/configutil.py +0 -0
  58. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/data/windowsZones.xml +0 -0
  59. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/descriptor_extensions.py +0 -0
  60. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/docs.py +0 -0
  61. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/fsutil.py +0 -0
  62. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/hashutil.py +0 -0
  63. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/keychain.py +0 -0
  64. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/lazy.py +0 -0
  65. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/loaderutil.py +0 -0
  66. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/localeutil.py +0 -0
  67. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/mount.py +0 -0
  68. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/network_managers.py +0 -0
  69. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/record.py +0 -0
  70. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/record_modifier.py +0 -0
  71. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/regutil.py +0 -0
  72. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/shell_folder_ids.py +0 -0
  73. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/ssh.py +0 -0
  74. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/targetd.py +0 -0
  75. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/helpers/utils.py +0 -0
  76. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loader.py +0 -0
  77. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/__init__.py +0 -0
  78. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/ad1.py +0 -0
  79. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/asdf.py +0 -0
  80. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/cb.py +0 -0
  81. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/dir.py +0 -0
  82. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/hyperv.py +0 -0
  83. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/itunes.py +0 -0
  84. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/kape.py +0 -0
  85. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/local.py +0 -0
  86. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/log.py +0 -0
  87. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/multiraw.py +0 -0
  88. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/ova.py +0 -0
  89. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/ovf.py +0 -0
  90. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/phobos.py +0 -0
  91. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/profile.py +0 -0
  92. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/pvm.py +0 -0
  93. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/pvs.py +0 -0
  94. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/raw.py +0 -0
  95. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/remote.py +0 -0
  96. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/res.py +0 -0
  97. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/smb.py +0 -0
  98. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/tanium.py +0 -0
  99. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/tar.py +0 -0
  100. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/target.py +0 -0
  101. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/targetd.py +0 -0
  102. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/utm.py +0 -0
  103. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/vb.py +0 -0
  104. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/vbox.py +0 -0
  105. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/velociraptor.py +0 -0
  106. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/vma.py +0 -0
  107. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/vmwarevm.py +0 -0
  108. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/vmx.py +0 -0
  109. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/loaders/xva.py +0 -0
  110. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugin.py +0 -0
  111. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/__init__.py +0 -0
  112. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/__init__.py +0 -0
  113. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/av/__init__.py +0 -0
  114. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/av/mcafee.py +0 -0
  115. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/av/sophos.py +0 -0
  116. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/av/symantec.py +0 -0
  117. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
  118. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  119. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/browser.py +0 -0
  120. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  121. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/chromium.py +0 -0
  122. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/edge.py +0 -0
  123. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  124. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  125. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/container/__init__.py +0 -0
  126. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/container/docker.py +0 -0
  127. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
  128. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  129. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  130. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  131. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/shell/__init__.py +0 -0
  132. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/shell/powershell.py +0 -0
  133. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
  134. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  135. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  136. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
  137. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  138. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
  139. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  140. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  141. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
  142. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  143. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
  144. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  145. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/__init__.py +0 -0
  146. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/esxi.py +0 -0
  147. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/hyperv.py +0 -0
  148. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/virtuozzo.py +0 -0
  149. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  150. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/child/wsl.py +0 -0
  151. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/__init__.py +0 -0
  152. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
  153. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
  154. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/icat.py +0 -0
  155. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  156. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
  157. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
  158. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
  159. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
  160. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/resolver.py +0 -0
  161. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  162. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
  163. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
  164. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/walkfs.py +0 -0
  165. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/filesystem/yara.py +0 -0
  166. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/__init__.py +0 -0
  167. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/config.py +0 -0
  168. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/default.py +0 -0
  169. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/example.py +0 -0
  170. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/loaders.py +0 -0
  171. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/osinfo.py +0 -0
  172. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/plugins.py +0 -0
  173. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/scrape.py +0 -0
  174. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/general/users.py +0 -0
  175. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/__init__.py +0 -0
  176. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/__init__.py +0 -0
  177. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/_os.py +0 -0
  178. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  179. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  180. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  181. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  182. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  183. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
  184. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
  185. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  186. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  187. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
  188. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
  189. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
  190. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
  191. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/datetime.py +0 -0
  192. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  193. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  194. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/etc.py +0 -0
  195. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/generic.py +0 -0
  196. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/history.py +0 -0
  197. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  198. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
  199. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  200. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  201. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
  202. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  203. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  204. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
  205. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
  206. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  207. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  208. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
  209. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/fortigate/__init__.py +0 -0
  210. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/fortigate/_os.py +0 -0
  211. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  212. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
  213. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
  214. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  215. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
  216. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  217. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  218. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
  219. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/services.py +0 -0
  220. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
  221. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  222. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  223. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
  224. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/locale.py +0 -0
  225. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  226. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/atop.py +0 -0
  227. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/audit.py +0 -0
  228. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/auth.py +0 -0
  229. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  230. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
  231. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/messages.py +0 -0
  232. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
  233. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
  234. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/unix/shadow.py +0 -0
  235. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/__init__.py +0 -0
  236. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/_os.py +0 -0
  237. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
  238. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
  239. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/amcache.py +0 -0
  240. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/catroot.py +0 -0
  241. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/cim.py +0 -0
  242. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/clfs.py +0 -0
  243. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/datetime.py +0 -0
  244. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/defender.py +0 -0
  245. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  246. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  247. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  248. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  249. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  250. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/env.py +0 -0
  251. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  252. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
  253. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/generic.py +0 -0
  254. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/lnk.py +0 -0
  255. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/locale.py +0 -0
  256. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  257. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  258. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/etl.py +0 -0
  259. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/evt.py +0 -0
  260. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
  261. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
  262. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/notifications.py +0 -0
  263. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/prefetch.py +0 -0
  264. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  265. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/7zip.py +0 -0
  266. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  267. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  268. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
  269. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
  270. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
  271. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
  272. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
  273. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
  274. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  275. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
  276. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
  277. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
  278. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  279. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  280. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
  281. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  282. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
  283. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
  284. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/sam.py +0 -0
  285. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/services.py +0 -0
  286. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
  287. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/syscache.py +0 -0
  288. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
  289. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
  290. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
  291. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
  292. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/tasks.py +0 -0
  293. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
  294. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/ual.py +0 -0
  295. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/plugins/os/windows/wer.py +0 -0
  296. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/report.py +0 -0
  297. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/target.py +0 -0
  298. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/__init__.py +0 -0
  299. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/build_pluginlist.py +0 -0
  300. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/dd.py +0 -0
  301. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/dump/__init__.py +0 -0
  302. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/dump/run.py +0 -0
  303. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/dump/state.py +0 -0
  304. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/dump/utils.py +0 -0
  305. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/fs.py +0 -0
  306. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/info.py +0 -0
  307. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/logging.py +0 -0
  308. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/mount.py +0 -0
  309. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/query.py +0 -0
  310. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/reg.py +0 -0
  311. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/shell.py +0 -0
  312. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/tools/utils.py +0 -0
  313. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volume.py +0 -0
  314. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/__init__.py +0 -0
  315. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/bde.py +0 -0
  316. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/ddf.py +0 -0
  317. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/disk.py +0 -0
  318. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/luks.py +0 -0
  319. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/lvm.py +0 -0
  320. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/md.py +0 -0
  321. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect/target/volumes/vmfs.py +0 -0
  322. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect.target.egg-info/dependency_links.txt +0 -0
  323. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect.target.egg-info/entry_points.txt +0 -0
  324. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect.target.egg-info/requires.txt +0 -0
  325. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/dissect.target.egg-info/top_level.txt +0 -0
  326. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/pyproject.toml +0 -0
  327. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/setup.cfg +0 -0
  328. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/__init__.py +0 -0
  329. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/_docs/Makefile +0 -0
  330. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/_docs/conf.py +0 -0
  331. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/_docs/index.rst +0 -0
  332. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/_utils.py +0 -0
  333. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/conftest.py +0 -0
  334. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/containers/__init__.py +0 -0
  335. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/containers/test_split.py +0 -0
  336. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/__init__.py +0 -0
  337. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_cb.py +0 -0
  338. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_config.py +0 -0
  339. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_dir.py +0 -0
  340. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_exfat.py +0 -0
  341. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_fat.py +0 -0
  342. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_ntfs.py +0 -0
  343. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_smb.py +0 -0
  344. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_tar.py +0 -0
  345. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/filesystems/test_zip.py +0 -0
  346. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/__init__.py +0 -0
  347. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_cache.py +0 -0
  348. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_config.py +0 -0
  349. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_configutil.py +0 -0
  350. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_docs.py +0 -0
  351. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_fsutil.py +0 -0
  352. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_hashutil.py +0 -0
  353. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_keychain.py +0 -0
  354. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_loaderutil.py +0 -0
  355. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_localeutil.py +0 -0
  356. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_modifier.py +0 -0
  357. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_record.py +0 -0
  358. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_regutil.py +0 -0
  359. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/helpers/test_utils.py +0 -0
  360. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/__init__.py +0 -0
  361. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_asdf.py +0 -0
  362. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_cb.py +0 -0
  363. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_dir.py +0 -0
  364. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_hyperv.py +0 -0
  365. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_kape.py +0 -0
  366. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_local.py +0 -0
  367. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_log.py +0 -0
  368. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_multiraw.py +0 -0
  369. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_ova.py +0 -0
  370. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_ovf.py +0 -0
  371. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_phobos.py +0 -0
  372. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_pvm.py +0 -0
  373. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_pvs.py +0 -0
  374. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_remote.py +0 -0
  375. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_smb.py +0 -0
  376. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_tanium.py +0 -0
  377. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_tar.py +0 -0
  378. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_utm.py +0 -0
  379. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_vbox.py +0 -0
  380. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_velociraptor.py +0 -0
  381. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/loaders/test_vmwarevm.py +0 -0
  382. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/__init__.py +0 -0
  383. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/__init__.py +0 -0
  384. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/av/__init__.py +0 -0
  385. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/av/test_mcafee.py +0 -0
  386. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/av/test_sophos.py +0 -0
  387. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/av/test_symantec.py +0 -0
  388. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  389. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/browser/__init__.py +0 -0
  390. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/browser/test_browser.py +0 -0
  391. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/container/__init__.py +0 -0
  392. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/container/test_docker.py +0 -0
  393. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
  394. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  395. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  396. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/shell/__init__.py +0 -0
  397. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/shell/test_powershell.py +0 -0
  398. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/ssh/__init__.py +0 -0
  399. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/vpn/__init__.py +0 -0
  400. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  401. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
  402. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webhosting/__init__.py +0 -0
  403. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  404. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webserver/__init__.py +0 -0
  405. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webserver/test_apache.py +0 -0
  406. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  407. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webserver/test_iis.py +0 -0
  408. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  409. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/child/__init__.py +0 -0
  410. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/child/test_hyperv.py +0 -0
  411. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/child/test_virtuozzo.py +0 -0
  412. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/child/test_wsl.py +0 -0
  413. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/__init__.py +0 -0
  414. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  415. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  416. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  417. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
  418. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
  419. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_icat.py +0 -0
  420. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_resolver.py +0 -0
  421. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_walkfs.py +0 -0
  422. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/test_yara.py +0 -0
  423. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/unix/__init__.py +0 -0
  424. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  425. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  426. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/__init__.py +0 -0
  427. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/test_config.py +0 -0
  428. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/test_default.py +0 -0
  429. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/test_plugins.py +0 -0
  430. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/test_scrape.py +0 -0
  431. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/general/test_users.py +0 -0
  432. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/__init__.py +0 -0
  433. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/__init__.py +0 -0
  434. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  435. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  436. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  437. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  438. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
  439. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
  440. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/__init__.py +0 -0
  441. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  442. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  443. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  444. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  445. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  446. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  447. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  448. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  449. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  450. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  451. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  452. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  453. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  454. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  455. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  456. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  457. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_services.py +0 -0
  458. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  459. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/__init__.py +0 -0
  460. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_atop.py +0 -0
  461. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_audit.py +0 -0
  462. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_auth.py +0 -0
  463. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  464. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_messages.py +0 -0
  465. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  466. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test__os.py +0 -0
  467. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_generic.py +0 -0
  468. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_history.py +0 -0
  469. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_ips.py +0 -0
  470. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_journal.py +0 -0
  471. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_locale.py +0 -0
  472. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  473. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_shadow.py +0 -0
  474. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_users.py +0 -0
  475. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/unix/test_version.py +0 -0
  476. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/__init__.py +0 -0
  477. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/log/test_etl.py +0 -0
  478. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/log/test_evt.py +0 -0
  479. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  480. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/__init__.py +0 -0
  481. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  482. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_cit.py +0 -0
  483. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  484. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  485. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  486. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  487. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test__os.py +0 -0
  488. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  489. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_amcache.py +0 -0
  490. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_clfs.py +0 -0
  491. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_datetime.py +0 -0
  492. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_defender.py +0 -0
  493. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_dpapi.py +0 -0
  494. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_env.py +0 -0
  495. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_generic.py +0 -0
  496. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_lnk.py +0 -0
  497. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_locale.py +0 -0
  498. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_mru.py +0 -0
  499. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_notifications.py +0 -0
  500. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_prefetch.py +0 -0
  501. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_recyclebin.py +0 -0
  502. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_registry.py +0 -0
  503. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_sam.py +0 -0
  504. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_shimcache.py +0 -0
  505. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_syscache.py +0 -0
  506. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_tasks.py +0 -0
  507. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  508. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_ual.py +0 -0
  509. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/plugins/os/windows/test_wer.py +0 -0
  510. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_container.py +0 -0
  511. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_filesystem.py +0 -0
  512. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_plugin.py +0 -0
  513. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_registration.py +0 -0
  514. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_report.py +0 -0
  515. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_target.py +0 -0
  516. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/test_volume.py +0 -0
  517. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/__init__.py +0 -0
  518. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_dump.py +0 -0
  519. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_fs.py +0 -0
  520. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_mount.py +0 -0
  521. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_query.py +0 -0
  522. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_shell.py +0 -0
  523. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/tools/test_utils.py +0 -0
  524. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/volumes/__init__.py +0 -0
  525. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/volumes/test_bde.py +0 -0
  526. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tests/volumes/test_md.py +0 -0
  527. {dissect.target-3.15.dev12 → dissect.target-3.15.dev14}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.15.dev12
3
+ Version: 3.15.dev14
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
@@ -5,59 +5,15 @@ from typing import Iterator
5
5
 
6
6
  from dissect.target import Target
7
7
  from dissect.target.exceptions import UnsupportedPluginError
8
- from dissect.target.helpers.descriptor_extensions import UserRecordDescriptorExtension
9
8
  from dissect.target.helpers.fsutil import TargetPath
10
- from dissect.target.helpers.record import create_extended_descriptor
11
9
  from dissect.target.helpers.ssh import SSHPrivateKey
12
- from dissect.target.plugin import Plugin, export
13
-
14
- OpenSSHUserRecordDescriptor = create_extended_descriptor([UserRecordDescriptorExtension])
15
-
16
- COMMON_ELLEMENTS = [
17
- ("string", "key_type"),
18
- ("string", "comment"),
19
- ("path", "path"),
20
- ]
21
-
22
- AuthorizedKeysRecord = OpenSSHUserRecordDescriptor(
23
- "application/openssh/authorized_keys",
24
- [
25
- *COMMON_ELLEMENTS,
26
- ("string", "public_key"),
27
- ("string", "options"),
28
- ],
29
- )
30
-
31
-
32
- KnownHostRecord = OpenSSHUserRecordDescriptor(
33
- "application/openssh/known_host",
34
- [
35
- *COMMON_ELLEMENTS,
36
- ("string", "hostname_pattern"),
37
- ("string", "public_key"),
38
- ("string", "marker"),
39
- ],
40
- )
41
-
42
-
43
- PrivateKeyRecord = OpenSSHUserRecordDescriptor(
44
- "application/openssh/private_key",
45
- [
46
- *COMMON_ELLEMENTS,
47
- ("datetime", "mtime_ts"),
48
- ("string", "key_format"),
49
- ("string", "public_key"),
50
- ("boolean", "encrypted"),
51
- ],
52
- )
53
-
54
- PublicKeyRecord = OpenSSHUserRecordDescriptor(
55
- "application/openssh/public_key",
56
- [
57
- *COMMON_ELLEMENTS,
58
- ("datetime", "mtime_ts"),
59
- ("string", "public_key"),
60
- ],
10
+ from dissect.target.plugin import export
11
+ from dissect.target.plugins.apps.ssh.ssh import (
12
+ AuthorizedKeysRecord,
13
+ KnownHostRecord,
14
+ PrivateKeyRecord,
15
+ PublicKeyRecord,
16
+ SSHPlugin,
61
17
  )
62
18
 
63
19
 
@@ -72,8 +28,8 @@ def find_sshd_directory(target: Target) -> TargetPath:
72
28
  return target.fs.path("/etc/ssh/")
73
29
 
74
30
 
75
- class OpenSSHPlugin(Plugin):
76
- __namespace__ = "ssh"
31
+ class OpenSSHPlugin(SSHPlugin):
32
+ __namespace__ = "openssh"
77
33
 
78
34
  SSHD_DIRECTORIES = ["/sysvol/ProgramData/ssh", "/etc/ssh"]
79
35
 
@@ -136,7 +92,8 @@ class OpenSSHPlugin(Plugin):
136
92
 
137
93
  for hostname in hostnames:
138
94
  yield KnownHostRecord(
139
- hostname_pattern=hostname,
95
+ host=hostname,
96
+ port=None,
140
97
  key_type=keytype,
141
98
  public_key=public_key,
142
99
  comment=comment,
@@ -3,8 +3,9 @@ from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Union
3
3
  from dissect.target import Target
4
4
  from dissect.target.exceptions import UnsupportedPluginError
5
5
  from dissect.target.helpers.record import DynamicDescriptor, TargetRecordDescriptor
6
- from dissect.target.plugin import Plugin, export
6
+ from dissect.target.plugin import export
7
7
  from dissect.target.plugins.apps.ssh.openssh import find_sshd_directory
8
+ from dissect.target.plugins.apps.ssh.ssh import SSHPlugin
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from dissect.target.plugins.general.config import ConfigurationTreePlugin
@@ -72,8 +73,8 @@ SSHD_MULTIPLE_DEFINITIONS_ALLOWED_FIELDS = (
72
73
  )
73
74
 
74
75
 
75
- class SSHServerPlugin(Plugin):
76
- __namespace__ = "sshd"
76
+ class SSHServerPlugin(SSHPlugin):
77
+ __namespace__ = "opensshd"
77
78
 
78
79
  def __init__(self, target: Target):
79
80
  super().__init__(target)
@@ -0,0 +1,236 @@
1
+ import logging
2
+ from datetime import datetime
3
+ from pathlib import Path
4
+ from typing import Iterator, Optional, Union
5
+
6
+ from Crypto.PublicKey import ECC, RSA
7
+ from flow.record.fieldtypes import posix_path, windows_path
8
+
9
+ from dissect.target.exceptions import RegistryKeyNotFoundError, UnsupportedPluginError
10
+ from dissect.target.helpers.descriptor_extensions import UserRecordDescriptorExtension
11
+ from dissect.target.helpers.fsutil import TargetPath, open_decompress
12
+ from dissect.target.helpers.record import create_extended_descriptor
13
+ from dissect.target.helpers.regutil import RegistryKey
14
+ from dissect.target.plugin import export
15
+ from dissect.target.plugins.apps.ssh.ssh import KnownHostRecord, SSHPlugin
16
+ from dissect.target.plugins.general.users import UserDetails
17
+
18
+ log = logging.getLogger(__name__)
19
+
20
+ PuTTYUserRecordDescriptor = create_extended_descriptor([UserRecordDescriptorExtension])
21
+ PuTTYSessionRecord = PuTTYUserRecordDescriptor(
22
+ "application/putty/saved_session",
23
+ [
24
+ ("datetime", "ts"),
25
+ ("string", "session_name"),
26
+ ("string", "protocol"),
27
+ ("string", "host"),
28
+ ("string", "user"),
29
+ ("varint", "port"),
30
+ ("string", "remote_command"),
31
+ ("string", "port_forward"),
32
+ ("string", "manual_ssh_host_keys"),
33
+ ("path", "path"),
34
+ ],
35
+ )
36
+
37
+
38
+ class PuTTYPlugin(SSHPlugin):
39
+ """Extract artifacts from the PuTTY client.
40
+
41
+ NOTE:
42
+ - Does not parse ``$HOME/.putty/randomseed`` (GNU/Linux)
43
+ and ``HKCU\\Software\\SimonTatham\\PuTTY\\RandSeedFile`` (Windows)
44
+
45
+ Resources:
46
+ - http://www.chiark.greenend.org.uk/~sgtatham/putty/0.78/puttydoc.txt
47
+ - http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-settings
48
+ """
49
+
50
+ __namespace__ = "putty"
51
+
52
+ def __init__(self, target):
53
+ super().__init__(target)
54
+
55
+ self.regf_installs, self.path_installs = self._detect_putty()
56
+
57
+ def _detect_putty(
58
+ self,
59
+ ) -> tuple[list[set[RegistryKey, Optional[UserDetails]]], list[set[TargetPath, Optional[UserDetails]]]]:
60
+ regf_installs, path_installs = [], []
61
+
62
+ if self.target.has_function("registry"):
63
+ for key in self.target.registry.keys("HKCU\\Software\\SimonTatham\\PuTTY"):
64
+ user_details = self.target.registry.get_user_details(key)
65
+ regf_installs.append((key, user_details))
66
+
67
+ for user_details in self.target.user_details.all_with_home():
68
+ if (putty_path := user_details.home_path.joinpath(".putty")).exists():
69
+ path_installs.append((putty_path, user_details))
70
+
71
+ return regf_installs, path_installs
72
+
73
+ def check_compatible(self) -> None:
74
+ if not any(self.regf_installs + self.path_installs):
75
+ raise UnsupportedPluginError("No PuTTY installations found")
76
+
77
+ @export(record=KnownHostRecord)
78
+ def known_hosts(self) -> Iterator[KnownHostRecord]:
79
+ """Parse PuTTY saved SshHostKeys."""
80
+
81
+ for putty_key, user_details in self.regf_installs:
82
+ yield from self._regf_known_hosts(putty_key, user_details)
83
+
84
+ for putty_path, user_details in self.path_installs:
85
+ yield from self._path_known_hosts(putty_path, user_details)
86
+
87
+ def _regf_known_hosts(self, putty_key: RegistryKey, user_details: UserDetails) -> Iterator[KnownHostRecord]:
88
+ """Parse PuTTY traces in Windows registry."""
89
+
90
+ try:
91
+ ssh_host_keys = putty_key.subkey("SshHostKeys")
92
+ except RegistryKeyNotFoundError:
93
+ return
94
+
95
+ for entry in ssh_host_keys.values():
96
+ key_type, host = entry.name.split("@")
97
+ port, host = host.split(":")
98
+
99
+ yield KnownHostRecord(
100
+ mtime_ts=ssh_host_keys.ts,
101
+ host=host,
102
+ port=port,
103
+ key_type=key_type,
104
+ public_key=construct_public_key(key_type, entry.value),
105
+ comment="",
106
+ marker=None,
107
+ path=windows_path(ssh_host_keys.path),
108
+ _target=self.target,
109
+ _user=user_details.user if user_details else None,
110
+ )
111
+
112
+ def _path_known_hosts(self, putty_path: TargetPath, user_details: UserDetails) -> Iterator[KnownHostRecord]:
113
+ """Parse PuTTY traces in ``.putty`` folders"""
114
+ ssh_host_keys_path = putty_path.joinpath("sshhostkeys")
115
+
116
+ if ssh_host_keys_path.exists():
117
+ ts = ssh_host_keys_path.stat().st_mtime
118
+
119
+ for line in open_decompress(ssh_host_keys_path, "rt"):
120
+ parts = line.split()
121
+ key_type, host = parts[0].split("@")
122
+ port, host = host.split(":")
123
+
124
+ yield KnownHostRecord(
125
+ mtime_ts=ts,
126
+ host=host,
127
+ port=port,
128
+ key_type=key_type,
129
+ public_key=construct_public_key(key_type, parts[1]),
130
+ comment="",
131
+ marker=None,
132
+ path=posix_path(ssh_host_keys_path),
133
+ _target=self.target,
134
+ _user=user_details.user if user_details else None,
135
+ )
136
+
137
+ @export(record=PuTTYSessionRecord)
138
+ def sessions(self) -> Iterator[PuTTYSessionRecord]:
139
+ """Parse PuTTY saved session configuration files."""
140
+
141
+ for putty_key, user_details in self.regf_installs:
142
+ yield from self._regf_sessions(putty_key, user_details)
143
+
144
+ for putty_path, user_details in self.path_installs:
145
+ yield from self._path_sessions(putty_path, user_details)
146
+
147
+ def _regf_sessions(self, putty_key: RegistryKey, user_details: UserDetails) -> Iterator[PuTTYSessionRecord]:
148
+ try:
149
+ sessions = putty_key.subkey("Sessions")
150
+ except RegistryKeyNotFoundError:
151
+ return
152
+
153
+ for session in sessions.subkeys():
154
+ cfg = {s.name: s.value for s in session.values()}
155
+ yield from self._build_session_record(
156
+ session.ts, session.name, windows_path(session.path), cfg, user_details
157
+ )
158
+
159
+ def _path_sessions(self, putty_path: TargetPath, user_details: UserDetails) -> Iterator[PuTTYSessionRecord]:
160
+ sessions_dir = putty_path.joinpath("sessions")
161
+ if sessions_dir.exists():
162
+ for session in sessions_dir.glob("*"):
163
+ if session.is_file():
164
+ cfg = dict(map(str.strip, line.split("=", maxsplit=1)) for line in session.open("rt").readlines())
165
+ yield from self._build_session_record(
166
+ session.stat().st_mtime, session.name, session, cfg, user_details
167
+ )
168
+
169
+ def _build_session_record(
170
+ self, ts: float, name: Union[float, datetime], source: Path, cfg: dict, user_details: UserDetails
171
+ ) -> PuTTYSessionRecord:
172
+ host, user = parse_host_user(cfg.get("HostName"), cfg.get("UserName"))
173
+
174
+ yield PuTTYSessionRecord(
175
+ ts=ts,
176
+ session_name=name,
177
+ protocol=cfg.get("Protocol"),
178
+ host=host,
179
+ user=user,
180
+ port=cfg.get("PortNumber"),
181
+ remote_command=cfg.get("RemoteCommand"),
182
+ port_forward=cfg.get("PortForwardings"),
183
+ manual_ssh_host_keys=cfg.get("SSHManualHostKeys"),
184
+ path=source,
185
+ _target=self.target,
186
+ _user=user_details.user if user_details else None,
187
+ )
188
+
189
+
190
+ def parse_host_user(host: str, user: str) -> tuple[str, str]:
191
+ """Parse host and user from PuTTY hostname component."""
192
+ if "@" in host:
193
+ parsed_user, parsed_host = host.split("@")
194
+ user = user or parsed_user
195
+ host = parsed_host
196
+
197
+ return host, user
198
+
199
+
200
+ def construct_public_key(key_type: str, iv: str) -> str:
201
+ """Returns OpenSSH format public key calculated from PuTTY SshHostKeys format.
202
+
203
+ PuTTY stores raw public key components instead of OpenSSH-formatted public keys
204
+ or fingerprints. With RSA public keys the exponent and modulus are stored.
205
+ With ECC keys the x and y prime coordinates are stored together with the curve type.
206
+
207
+ Currently supports ``ssh-ed25519``, ``ecdsa-sha2-nistp256`` and ``rsa2`` key types.
208
+
209
+ NOTE:
210
+ - Sha256 fingerprints of the reconstructed public keys are currently not generated.
211
+ - More key types could be supported in the future.
212
+
213
+ Resources:
214
+ - https://github.com/github/putty/blob/master/contrib/kh2reg.py
215
+ - https://pycryptodome.readthedocs.io/en/latest/src/public_key/rsa.html
216
+ - https://pycryptodome.readthedocs.io/en/latest/src/public_key/ecc.html
217
+ - https://github.com/mkorthof/reg2kh
218
+ """
219
+
220
+ if key_type == "ssh-ed25519":
221
+ x, y = iv.split(",")
222
+ key = ECC.construct(curve="ed25519", point_x=int(x, 16), point_y=int(y, 16))
223
+ return key.public_key().export_key(format="OpenSSH").split()[-1]
224
+
225
+ if key_type == "ecdsa-sha2-nistp256":
226
+ _, x, y = iv.split(",")
227
+ key = ECC.construct(curve="NIST P-256", point_x=int(x, 16), point_y=int(y, 16))
228
+ return key.public_key().export_key(format="OpenSSH").split()[-1]
229
+
230
+ if key_type == "rsa2":
231
+ exponent, modulus = iv.split(",")
232
+ key = RSA.construct((int(modulus, 16), int(exponent, 16)))
233
+ return key.public_key().export_key(format="OpenSSH").decode("utf-8").split()[-1]
234
+
235
+ log.warning("Could not reconstruct public key: type %s not implemented.", key_type)
236
+ return iv
@@ -0,0 +1,58 @@
1
+ from dissect.target.helpers.descriptor_extensions import UserRecordDescriptorExtension
2
+ from dissect.target.helpers.record import create_extended_descriptor
3
+ from dissect.target.plugin import NamespacePlugin
4
+
5
+ OpenSSHUserRecordDescriptor = create_extended_descriptor([UserRecordDescriptorExtension])
6
+
7
+ COMMON_ELLEMENTS = [
8
+ ("string", "key_type"),
9
+ ("string", "comment"),
10
+ ("path", "path"),
11
+ ]
12
+
13
+ AuthorizedKeysRecord = OpenSSHUserRecordDescriptor(
14
+ "application/openssh/authorized_keys",
15
+ [
16
+ *COMMON_ELLEMENTS,
17
+ ("string", "public_key"),
18
+ ("string", "options"),
19
+ ],
20
+ )
21
+
22
+
23
+ KnownHostRecord = OpenSSHUserRecordDescriptor(
24
+ "application/openssh/known_host",
25
+ [
26
+ ("datetime", "mtime_ts"),
27
+ *COMMON_ELLEMENTS,
28
+ ("string", "host"),
29
+ ("varint", "port"),
30
+ ("string", "public_key"),
31
+ ("string", "marker"),
32
+ ],
33
+ )
34
+
35
+
36
+ PrivateKeyRecord = OpenSSHUserRecordDescriptor(
37
+ "application/openssh/private_key",
38
+ [
39
+ ("datetime", "mtime_ts"),
40
+ *COMMON_ELLEMENTS,
41
+ ("string", "key_format"),
42
+ ("string", "public_key"),
43
+ ("boolean", "encrypted"),
44
+ ],
45
+ )
46
+
47
+ PublicKeyRecord = OpenSSHUserRecordDescriptor(
48
+ "application/openssh/public_key",
49
+ [
50
+ ("datetime", "mtime_ts"),
51
+ *COMMON_ELLEMENTS,
52
+ ("string", "public_key"),
53
+ ],
54
+ )
55
+
56
+
57
+ class SSHPlugin(NamespacePlugin):
58
+ __namespace__ = "ssh"
@@ -329,7 +329,7 @@ class RegistryPlugin(Plugin):
329
329
  @internal
330
330
  def get_user_details(self, key: RegistryKey) -> UserDetails:
331
331
  """Return user details for the user who owns a registry hive that contains the provided key"""
332
- if not key.hive or not key.hive.filepath:
332
+ if not key.hive or not getattr(key.hive, "filepath", None):
333
333
  return
334
334
 
335
335
  return self._hives_to_users.get(key.hive)
@@ -1,3 +1,5 @@
1
+ from typing import Iterator, Optional, Union
2
+
1
3
  from dissect.esedb.exceptions import Error
2
4
  from dissect.esedb.tools import sru
3
5
 
@@ -223,6 +225,22 @@ SdpNetworkProviderRecord = TargetRecordDescriptor(
223
225
  ],
224
226
  )
225
227
 
228
+ SRURecord = Union[
229
+ NetworkDataRecord,
230
+ NetworkConnectivityRecord,
231
+ EnergyEstimatorRecord,
232
+ EnergyUsageRecord,
233
+ EnergyUsageLTRecord,
234
+ ApplicationRecord,
235
+ PushNotificationRecord,
236
+ ApplicationTimelineRecord,
237
+ VfuRecord,
238
+ SdpVolumeProviderRecord,
239
+ SdpPhysicalDiskProviderRecord,
240
+ SdpCpuProviderRecord,
241
+ SdpNetworkProviderRecord,
242
+ ]
243
+
226
244
  FIELD_MAPPINGS = {
227
245
  "ActiveAcTime": "active_ac_time",
228
246
  "ActiveDcTime": "active_dc_time",
@@ -322,7 +340,7 @@ FIELD_MAPPINGS = {
322
340
  }
323
341
 
324
342
 
325
- def transform_app_id(value):
343
+ def transform_app_id(value: Optional[Union[bytes, str]]) -> Optional[str]:
326
344
  if value is not None:
327
345
  if isinstance(value, bytes):
328
346
  value = value.decode()
@@ -364,10 +382,11 @@ class SRUPlugin(Plugin):
364
382
  if not self._sru:
365
383
  raise UnsupportedPluginError("No SRUDB found")
366
384
 
367
- def read_records(self, table_name, record_type):
385
+ def read_records(self, table_name: str, record_type: SRURecord) -> Iterator[SRURecord]:
368
386
  table = self._sru.get_table(table_name=table_name)
369
387
  if not table:
370
- raise ValueError(f"Table not found: {table_name}")
388
+ self.target.log.warning("Table not found: %s", table_name)
389
+ return iter(())
371
390
 
372
391
  columns = [c.name for c in table.columns]
373
392
  if columns[:4] != ["AutoIncId", "TimeStamp", "AppId", "UserId"]:
@@ -392,90 +411,84 @@ class SRUPlugin(Plugin):
392
411
  )
393
412
 
394
413
  @export(record=NetworkDataRecord)
395
- def network_data(self):
396
- """
397
- Return the contents of Windows Network Data Usage Monitor table from the SRUDB.dat file.
414
+ def network_data(self) -> Iterator[NetworkDataRecord]:
415
+ """Return the contents of Windows Network Data Usage Monitor table from the SRUDB.dat file.
398
416
 
399
417
  Gives insight into the network usage of the system.
400
418
  """
401
419
  yield from self.read_records("network_data", NetworkDataRecord)
402
420
 
403
421
  @export(record=NetworkConnectivityRecord)
404
- def network_connectivity(self):
405
- """
406
- Return the contents of Windows Network Connectivity Usage Monitor table from the SRUDB.dat file.
422
+ def network_connectivity(self) -> Iterator[NetworkConnectivityRecord]:
423
+ """Return the contents of Windows Network Connectivity Usage Monitor table from the SRUDB.dat file.
407
424
 
408
425
  Gives insight into the network connectivity usage of the system.
409
426
  """
410
427
  yield from self.read_records("network_connectivity", NetworkConnectivityRecord)
411
428
 
412
429
  @export(record=EnergyEstimatorRecord)
413
- def energy_estimator(self):
430
+ def energy_estimator(self) -> Iterator[EnergyEstimatorRecord]:
414
431
  """Return the contents of Energy Estimator table from the SRUDB.dat file."""
415
432
  yield from self.read_records("energy_estimator", EnergyEstimatorRecord)
416
433
 
417
434
  @export(record=EnergyUsageRecord)
418
- def energy_usage(self):
419
- """
420
- Return the contents of Energy Usage Provider table from the SRUDB.dat file.
435
+ def energy_usage(self) -> Iterator[EnergyUsageRecord]:
436
+ """Return the contents of Energy Usage Provider table from the SRUDB.dat file.
421
437
 
422
438
  Gives insight into the energy usage of the system.
423
439
  """
424
440
  yield from self.read_records("energy_usage", EnergyUsageRecord)
425
441
 
426
442
  @export(record=EnergyUsageLTRecord)
427
- def energy_usage_lt(self):
428
- """
429
- Return the contents of Energy Usage Provider Long Term table from the SRUDB.dat file.
443
+ def energy_usage_lt(self) -> Iterator[EnergyUsageLTRecord]:
444
+ """Return the contents of Energy Usage Provider Long Term table from the SRUDB.dat file.
430
445
 
431
446
  Gives insight into the energy usage of the system looking over the long term.
432
447
  """
433
448
  yield from self.read_records("energy_usage_lt", EnergyUsageLTRecord)
434
449
 
435
450
  @export(record=ApplicationRecord)
436
- def application(self):
437
- """
438
- Return the contents of Application Resource Usage table from the SRUDB.dat file.
451
+ def application(self) -> Iterator[ApplicationRecord]:
452
+ """Return the contents of Application Resource Usage table from the SRUDB.dat file.
439
453
 
440
454
  Gives insights into the resource usage of applications on the system.
441
455
  """
442
456
  yield from self.read_records("application", ApplicationRecord)
443
457
 
444
458
  @export(record=PushNotificationRecord)
445
- def push_notification(self):
446
- """
447
- Return the contents of Windows Push Notification Data table from the SRUDB.dat file.
459
+ def push_notification(self) -> Iterator[PushNotificationRecord]:
460
+ """Return the contents of Windows Push Notification Data table from the SRUDB.dat file.
448
461
 
449
462
  Gives insight into the notification usage of the system.
450
463
  """
451
464
  yield from self.read_records("push_notifications", PushNotificationRecord)
452
465
 
453
466
  @export(record=ApplicationTimelineRecord)
454
- def application_timeline(self):
467
+ def application_timeline(self) -> Iterator[ApplicationTimelineRecord]:
455
468
  """Return the contents of App Timeline Provider table from the SRUDB.dat file."""
456
469
  yield from self.read_records("application_timeline", ApplicationTimelineRecord)
457
470
 
458
471
  @export(record=VfuRecord)
459
- def vfu(self):
472
+ def vfu(self) -> Iterator[VfuRecord]:
460
473
  """Return the contents of vfuprov table from the SRUDB.dat file."""
461
474
  yield from self.read_records("vfu", VfuRecord)
462
475
 
463
476
  @export(record=SdpVolumeProviderRecord)
464
- def sdp_volume_provider(self):
477
+ def sdp_volume_provider(self) -> Iterator[SdpVolumeProviderRecord]:
465
478
  """Return the contents of SDP Volume Provider table from the SRUDB.dat file."""
466
479
  yield from self.read_records("sdp_volume_provider", SdpVolumeProviderRecord)
467
480
 
468
481
  @export(record=SdpPhysicalDiskProviderRecord)
469
- def sdp_physical_disk_provider(self):
482
+ def sdp_physical_disk_provider(self) -> Iterator[SdpPhysicalDiskProviderRecord]:
470
483
  """Return the contents of SDP Physical Disk Provider table from the SRUDB.dat file."""
471
484
  yield from self.read_records("sdp_physical_disk_provider", SdpPhysicalDiskProviderRecord)
472
485
 
473
486
  @export(record=SdpCpuProviderRecord)
474
- def sdp_cpu_provider(self):
487
+ def sdp_cpu_provider(self) -> Iterator[SdpCpuProviderRecord]:
475
488
  """Return the contents of SDP CPU Provider table from the SRUDB.dat file."""
476
489
  yield from self.read_records("sdp_cpu_provider", SdpCpuProviderRecord)
477
490
 
478
491
  @export(record=SdpNetworkProviderRecord)
479
- def sdp_network_provider(self):
492
+ def sdp_network_provider(self) -> Iterator[SdpNetworkProviderRecord]:
480
493
  """Return the contents of SDP Network Provider table from the SRUDB.dat file."""
481
494
  yield from self.read_records("sdp_network_provider", SdpNetworkProviderRecord)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.15.dev12
3
+ Version: 3.15.dev14
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
@@ -131,6 +131,8 @@ dissect/target/plugins/apps/shell/powershell.py
131
131
  dissect/target/plugins/apps/ssh/__init__.py
132
132
  dissect/target/plugins/apps/ssh/openssh.py
133
133
  dissect/target/plugins/apps/ssh/opensshd.py
134
+ dissect/target/plugins/apps/ssh/putty.py
135
+ dissect/target/plugins/apps/ssh/ssh.py
134
136
  dissect/target/plugins/apps/vpn/__init__.py
135
137
  dissect/target/plugins/apps/vpn/openvpn.py
136
138
  dissect/target/plugins/apps/vpn/wireguard.py
@@ -398,6 +400,7 @@ tests/plugins/apps/shell/test_powershell.py
398
400
  tests/plugins/apps/ssh/__init__.py
399
401
  tests/plugins/apps/ssh/test_openssh.py
400
402
  tests/plugins/apps/ssh/test_opensshd.py
403
+ tests/plugins/apps/ssh/test_putty.py
401
404
  tests/plugins/apps/vpn/__init__.py
402
405
  tests/plugins/apps/vpn/test_openvpn.py
403
406
  tests/plugins/apps/vpn/test_wireguard.py