dissect.target 3.15.dev34__tar.gz → 3.15.dev38__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (544) hide show
  1. {dissect.target-3.15.dev34/dissect.target.egg-info → dissect.target-3.15.dev38}/PKG-INFO +1 -1
  2. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/fortios/_os.py +180 -28
  3. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/fortios/generic.py +5 -3
  4. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/fortios/locale.py +14 -6
  5. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38/dissect.target.egg-info}/PKG-INFO +1 -1
  6. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/COPYRIGHT +0 -0
  7. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/LICENSE +0 -0
  8. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/MANIFEST.in +0 -0
  9. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/README.md +0 -0
  10. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/__init__.py +0 -0
  11. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/container.py +0 -0
  12. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/__init__.py +0 -0
  13. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/asdf.py +0 -0
  14. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/ewf.py +0 -0
  15. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/hdd.py +0 -0
  16. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/hds.py +0 -0
  17. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/qcow2.py +0 -0
  18. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/raw.py +0 -0
  19. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/split.py +0 -0
  20. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/vdi.py +0 -0
  21. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/vhd.py +0 -0
  22. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/vhdx.py +0 -0
  23. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/containers/vmdk.py +0 -0
  24. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
  25. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/exceptions.py +0 -0
  26. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystem.py +0 -0
  27. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/__init__.py +0 -0
  28. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/ad1.py +0 -0
  29. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/btrfs.py +0 -0
  30. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/cb.py +0 -0
  31. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/config.py +0 -0
  32. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/dir.py +0 -0
  33. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/exfat.py +0 -0
  34. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/extfs.py +0 -0
  35. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/fat.py +0 -0
  36. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/ffs.py +0 -0
  37. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/itunes.py +0 -0
  38. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/jffs.py +0 -0
  39. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/ntfs.py +0 -0
  40. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/smb.py +0 -0
  41. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/squashfs.py +0 -0
  42. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/tar.py +0 -0
  43. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/vmfs.py +0 -0
  44. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/xfs.py +0 -0
  45. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/filesystems/zip.py +0 -0
  46. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/__init__.py +0 -0
  47. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/cache.py +0 -0
  48. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/__init__.py +0 -0
  49. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/path_310.py +0 -0
  50. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/path_311.py +0 -0
  51. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/path_312.py +0 -0
  52. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/path_39.py +0 -0
  53. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/compat/path_common.py +0 -0
  54. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/config.py +0 -0
  55. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/configutil.py +0 -0
  56. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/cyber.py +0 -0
  57. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/data/windowsZones.xml +0 -0
  58. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/descriptor_extensions.py +0 -0
  59. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/docs.py +0 -0
  60. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/fsutil.py +0 -0
  61. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/hashutil.py +0 -0
  62. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/keychain.py +0 -0
  63. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/lazy.py +0 -0
  64. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/loaderutil.py +0 -0
  65. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/localeutil.py +0 -0
  66. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/mount.py +0 -0
  67. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/network_managers.py +0 -0
  68. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/polypath.py +0 -0
  69. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/record.py +0 -0
  70. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/record_modifier.py +0 -0
  71. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/regutil.py +0 -0
  72. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/shell_folder_ids.py +0 -0
  73. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/ssh.py +0 -0
  74. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/targetd.py +0 -0
  75. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/helpers/utils.py +0 -0
  76. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loader.py +0 -0
  77. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/__init__.py +0 -0
  78. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/ad1.py +0 -0
  79. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/asdf.py +0 -0
  80. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/cb.py +0 -0
  81. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/cyber.py +0 -0
  82. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/dir.py +0 -0
  83. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/hyperv.py +0 -0
  84. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/itunes.py +0 -0
  85. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/kape.py +0 -0
  86. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/local.py +0 -0
  87. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/log.py +0 -0
  88. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/multiraw.py +0 -0
  89. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/ova.py +0 -0
  90. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/ovf.py +0 -0
  91. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/phobos.py +0 -0
  92. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/profile.py +0 -0
  93. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/pvm.py +0 -0
  94. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/pvs.py +0 -0
  95. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/raw.py +0 -0
  96. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/remote.py +0 -0
  97. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/res.py +0 -0
  98. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/smb.py +0 -0
  99. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/tanium.py +0 -0
  100. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/tar.py +0 -0
  101. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/target.py +0 -0
  102. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/targetd.py +0 -0
  103. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/utm.py +0 -0
  104. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/vb.py +0 -0
  105. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/vbox.py +0 -0
  106. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/velociraptor.py +0 -0
  107. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/vma.py +0 -0
  108. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/vmwarevm.py +0 -0
  109. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/vmx.py +0 -0
  110. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/loaders/xva.py +0 -0
  111. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugin.py +0 -0
  112. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/__init__.py +0 -0
  113. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/__init__.py +0 -0
  114. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/av/__init__.py +0 -0
  115. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/av/mcafee.py +0 -0
  116. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/av/sophos.py +0 -0
  117. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/av/symantec.py +0 -0
  118. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
  119. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  120. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/browser.py +0 -0
  121. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  122. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/chromium.py +0 -0
  123. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/edge.py +0 -0
  124. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  125. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  126. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/container/__init__.py +0 -0
  127. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/container/docker.py +0 -0
  128. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
  129. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  130. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  131. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  132. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/shell/__init__.py +0 -0
  133. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/shell/powershell.py +0 -0
  134. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
  135. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
  136. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
  137. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/ssh/putty.py +0 -0
  138. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
  139. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  140. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  141. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
  142. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  143. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
  144. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  145. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  146. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
  147. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
  148. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  149. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
  150. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  151. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/__init__.py +0 -0
  152. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/esxi.py +0 -0
  153. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/hyperv.py +0 -0
  154. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/virtuozzo.py +0 -0
  155. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  156. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/child/wsl.py +0 -0
  157. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/__init__.py +0 -0
  158. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
  159. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
  160. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/icat.py +0 -0
  161. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  162. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
  163. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
  164. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
  165. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
  166. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/resolver.py +0 -0
  167. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  168. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
  169. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
  170. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/walkfs.py +0 -0
  171. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/filesystem/yara.py +0 -0
  172. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/__init__.py +0 -0
  173. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/config.py +0 -0
  174. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/default.py +0 -0
  175. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/example.py +0 -0
  176. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/loaders.py +0 -0
  177. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/osinfo.py +0 -0
  178. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/plugins.py +0 -0
  179. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/scrape.py +0 -0
  180. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/general/users.py +0 -0
  181. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/__init__.py +0 -0
  182. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/__init__.py +0 -0
  183. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/_os.py +0 -0
  184. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  185. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  186. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  187. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
  188. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  189. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  190. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
  191. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
  192. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  193. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  194. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
  195. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
  196. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
  197. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
  198. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/datetime.py +0 -0
  199. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  200. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  201. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/etc.py +0 -0
  202. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/generic.py +0 -0
  203. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/history.py +0 -0
  204. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  205. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
  206. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  207. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  208. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
  209. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  210. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  211. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
  212. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
  213. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  214. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  215. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
  216. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
  217. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  218. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
  219. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
  220. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  221. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
  222. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  223. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  224. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
  225. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/services.py +0 -0
  226. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
  227. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  228. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  229. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
  230. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/locale.py +0 -0
  231. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  232. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/atop.py +0 -0
  233. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/audit.py +0 -0
  234. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/auth.py +0 -0
  235. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  236. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
  237. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/messages.py +0 -0
  238. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
  239. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
  240. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/unix/shadow.py +0 -0
  241. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/__init__.py +0 -0
  242. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/_os.py +0 -0
  243. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
  244. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
  245. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/amcache.py +0 -0
  246. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/catroot.py +0 -0
  247. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/cim.py +0 -0
  248. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/clfs.py +0 -0
  249. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/datetime.py +0 -0
  250. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/defender.py +0 -0
  251. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  252. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  253. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  254. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  255. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  256. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/env.py +0 -0
  257. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  258. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
  259. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/generic.py +0 -0
  260. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/lnk.py +0 -0
  261. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/locale.py +0 -0
  262. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  263. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  264. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/etl.py +0 -0
  265. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/evt.py +0 -0
  266. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
  267. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
  268. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/notifications.py +0 -0
  269. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/prefetch.py +0 -0
  270. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  271. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/7zip.py +0 -0
  272. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  273. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  274. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
  275. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
  276. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
  277. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
  278. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
  279. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
  280. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  281. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
  282. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
  283. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
  284. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  285. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  286. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
  287. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  288. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
  289. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
  290. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/registry.py +0 -0
  291. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/sam.py +0 -0
  292. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/services.py +0 -0
  293. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/sru.py +0 -0
  294. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
  295. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/syscache.py +0 -0
  296. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
  297. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
  298. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
  299. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
  300. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/tasks.py +0 -0
  301. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
  302. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/ual.py +0 -0
  303. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/plugins/os/windows/wer.py +0 -0
  304. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/report.py +0 -0
  305. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/target.py +0 -0
  306. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/__init__.py +0 -0
  307. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/build_pluginlist.py +0 -0
  308. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/dd.py +0 -0
  309. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/dump/__init__.py +0 -0
  310. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/dump/run.py +0 -0
  311. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/dump/state.py +0 -0
  312. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/dump/utils.py +0 -0
  313. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/fs.py +0 -0
  314. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/info.py +0 -0
  315. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/logging.py +0 -0
  316. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/mount.py +0 -0
  317. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/query.py +0 -0
  318. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/reg.py +0 -0
  319. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/shell.py +0 -0
  320. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/tools/utils.py +0 -0
  321. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volume.py +0 -0
  322. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/__init__.py +0 -0
  323. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/bde.py +0 -0
  324. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/ddf.py +0 -0
  325. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/disk.py +0 -0
  326. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/luks.py +0 -0
  327. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/lvm.py +0 -0
  328. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/md.py +0 -0
  329. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect/target/volumes/vmfs.py +0 -0
  330. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect.target.egg-info/SOURCES.txt +0 -0
  331. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect.target.egg-info/dependency_links.txt +0 -0
  332. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect.target.egg-info/entry_points.txt +0 -0
  333. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect.target.egg-info/requires.txt +0 -0
  334. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/dissect.target.egg-info/top_level.txt +0 -0
  335. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/pyproject.toml +0 -0
  336. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/setup.cfg +0 -0
  337. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/__init__.py +0 -0
  338. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/_docs/Makefile +0 -0
  339. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/_docs/conf.py +0 -0
  340. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/_docs/index.rst +0 -0
  341. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/_utils.py +0 -0
  342. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/conftest.py +0 -0
  343. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/containers/__init__.py +0 -0
  344. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/containers/test_split.py +0 -0
  345. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/__init__.py +0 -0
  346. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_cb.py +0 -0
  347. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_config.py +0 -0
  348. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_dir.py +0 -0
  349. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_exfat.py +0 -0
  350. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_fat.py +0 -0
  351. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_ntfs.py +0 -0
  352. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_smb.py +0 -0
  353. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_tar.py +0 -0
  354. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/filesystems/test_zip.py +0 -0
  355. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/__init__.py +0 -0
  356. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_cache.py +0 -0
  357. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_config.py +0 -0
  358. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_configutil.py +0 -0
  359. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_docs.py +0 -0
  360. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_fsutil.py +0 -0
  361. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_hashutil.py +0 -0
  362. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_keychain.py +0 -0
  363. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_loaderutil.py +0 -0
  364. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_localeutil.py +0 -0
  365. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_modifier.py +0 -0
  366. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_record.py +0 -0
  367. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_regutil.py +0 -0
  368. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/helpers/test_utils.py +0 -0
  369. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/__init__.py +0 -0
  370. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_asdf.py +0 -0
  371. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_cb.py +0 -0
  372. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_dir.py +0 -0
  373. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_hyperv.py +0 -0
  374. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_kape.py +0 -0
  375. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_local.py +0 -0
  376. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_log.py +0 -0
  377. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_multiraw.py +0 -0
  378. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_ova.py +0 -0
  379. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_ovf.py +0 -0
  380. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_phobos.py +0 -0
  381. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_pvm.py +0 -0
  382. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_pvs.py +0 -0
  383. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_remote.py +0 -0
  384. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_smb.py +0 -0
  385. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_tanium.py +0 -0
  386. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_tar.py +0 -0
  387. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_utm.py +0 -0
  388. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_vbox.py +0 -0
  389. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_velociraptor.py +0 -0
  390. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/loaders/test_vmwarevm.py +0 -0
  391. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/__init__.py +0 -0
  392. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/__init__.py +0 -0
  393. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/av/__init__.py +0 -0
  394. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/av/test_mcafee.py +0 -0
  395. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/av/test_sophos.py +0 -0
  396. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/av/test_symantec.py +0 -0
  397. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  398. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/browser/__init__.py +0 -0
  399. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/browser/test_browser.py +0 -0
  400. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/container/__init__.py +0 -0
  401. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/container/test_docker.py +0 -0
  402. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
  403. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  404. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  405. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/shell/__init__.py +0 -0
  406. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/shell/test_powershell.py +0 -0
  407. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/ssh/__init__.py +0 -0
  408. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/ssh/test_openssh.py +0 -0
  409. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
  410. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/ssh/test_putty.py +0 -0
  411. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/vpn/__init__.py +0 -0
  412. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  413. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
  414. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webhosting/__init__.py +0 -0
  415. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  416. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/__init__.py +0 -0
  417. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_apache.py +0 -0
  418. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  419. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_citrix.py +0 -0
  420. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_iis.py +0 -0
  421. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  422. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/apps/webserver/test_webserver.py +0 -0
  423. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/child/__init__.py +0 -0
  424. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/child/test_hyperv.py +0 -0
  425. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/child/test_virtuozzo.py +0 -0
  426. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/child/test_wsl.py +0 -0
  427. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/__init__.py +0 -0
  428. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  429. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  430. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  431. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
  432. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
  433. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_icat.py +0 -0
  434. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_resolver.py +0 -0
  435. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_walkfs.py +0 -0
  436. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/test_yara.py +0 -0
  437. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/unix/__init__.py +0 -0
  438. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  439. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  440. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/__init__.py +0 -0
  441. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/test_config.py +0 -0
  442. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/test_default.py +0 -0
  443. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/test_plugins.py +0 -0
  444. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/test_scrape.py +0 -0
  445. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/general/test_users.py +0 -0
  446. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/__init__.py +0 -0
  447. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/__init__.py +0 -0
  448. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  449. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  450. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  451. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
  452. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  453. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
  454. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
  455. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/__init__.py +0 -0
  456. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  457. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  458. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  459. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  460. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  461. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  462. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  463. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  464. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  465. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  466. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  467. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  468. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  469. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  470. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  471. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  472. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_services.py +0 -0
  473. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  474. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/__init__.py +0 -0
  475. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_atop.py +0 -0
  476. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_audit.py +0 -0
  477. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_auth.py +0 -0
  478. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  479. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_messages.py +0 -0
  480. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  481. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test__os.py +0 -0
  482. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_generic.py +0 -0
  483. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_history.py +0 -0
  484. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_ips.py +0 -0
  485. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_journal.py +0 -0
  486. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_locale.py +0 -0
  487. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  488. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_shadow.py +0 -0
  489. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_users.py +0 -0
  490. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/unix/test_version.py +0 -0
  491. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/__init__.py +0 -0
  492. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/log/test_etl.py +0 -0
  493. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/log/test_evt.py +0 -0
  494. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  495. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
  496. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/__init__.py +0 -0
  497. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  498. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_cit.py +0 -0
  499. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  500. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  501. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  502. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  503. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test__os.py +0 -0
  504. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  505. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_amcache.py +0 -0
  506. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_clfs.py +0 -0
  507. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_datetime.py +0 -0
  508. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_defender.py +0 -0
  509. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_dpapi.py +0 -0
  510. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_env.py +0 -0
  511. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_generic.py +0 -0
  512. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_lnk.py +0 -0
  513. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_locale.py +0 -0
  514. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_mru.py +0 -0
  515. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_notifications.py +0 -0
  516. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_prefetch.py +0 -0
  517. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_recyclebin.py +0 -0
  518. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_registry.py +0 -0
  519. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_sam.py +0 -0
  520. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_shimcache.py +0 -0
  521. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_sru.py +0 -0
  522. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_syscache.py +0 -0
  523. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_tasks.py +0 -0
  524. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  525. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_ual.py +0 -0
  526. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/plugins/os/windows/test_wer.py +0 -0
  527. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_container.py +0 -0
  528. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_filesystem.py +0 -0
  529. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_plugin.py +0 -0
  530. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_registration.py +0 -0
  531. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_report.py +0 -0
  532. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_target.py +0 -0
  533. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/test_volume.py +0 -0
  534. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/__init__.py +0 -0
  535. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_dump.py +0 -0
  536. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_fs.py +0 -0
  537. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_mount.py +0 -0
  538. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_query.py +0 -0
  539. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_shell.py +0 -0
  540. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/tools/test_utils.py +0 -0
  541. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/volumes/__init__.py +0 -0
  542. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/volumes/test_bde.py +0 -0
  543. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tests/volumes/test_md.py +0 -0
  544. {dissect.target-3.15.dev34 → dissect.target-3.15.dev38}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.15.dev34
3
+ Version: 3.15.dev38
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
@@ -1,12 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import gzip
4
+ import hashlib
4
5
  from base64 import b64decode
5
6
  from datetime import datetime
7
+ from io import BytesIO
6
8
  from tarfile import ReadError
7
- from typing import Iterator, Optional, TextIO, Union
9
+ from typing import BinaryIO, Iterator, Optional, TextIO, Union
8
10
 
9
- from Crypto.Cipher import AES
10
11
  from dissect.util import cpio
11
12
  from dissect.util.compression import xz
12
13
 
@@ -18,6 +19,13 @@ from dissect.target.plugin import OperatingSystem, export
18
19
  from dissect.target.plugins.os.unix.linux._os import LinuxPlugin
19
20
  from dissect.target.target import Target
20
21
 
22
+ try:
23
+ from Crypto.Cipher import AES, ChaCha20
24
+
25
+ HAS_PYCRYPTODOME = True
26
+ except ImportError:
27
+ HAS_PYCRYPTODOME = False
28
+
21
29
  FortiOSUserRecord = TargetRecordDescriptor(
22
30
  "fortios/user",
23
31
  [
@@ -39,7 +47,7 @@ class FortiOSPlugin(LinuxPlugin):
39
47
 
40
48
  def _load_config(self) -> dict:
41
49
  CONFIG_FILES = {
42
- "/data/system.conf": None,
50
+ "/data/system.conf": "global-config", # FortiManager
43
51
  "/data/config/daemon.conf.gz": "daemon", # FortiOS 4.x
44
52
  "/data/config/sys_global.conf.gz": "global-config", # Seen in FortiOS 5.x - 7.x
45
53
  "/data/config/sys_vd_root.conf.gz": "root-config", # FortiOS 4.x
@@ -55,7 +63,7 @@ class FortiOSPlugin(LinuxPlugin):
55
63
  else:
56
64
  fh = conf_path.open("rt")
57
65
 
58
- if not self._version and section in [None, "global-config", "root-config"]:
66
+ if not self._version and section in ["global-config", "root-config"]:
59
67
  self._version = fh.readline().split("=", 1)[1]
60
68
 
61
69
  parsed = FortiOSConfig.from_fh(fh)
@@ -72,20 +80,31 @@ class FortiOSPlugin(LinuxPlugin):
72
80
 
73
81
  @classmethod
74
82
  def create(cls, target: Target, sysvol: Filesystem) -> FortiOSPlugin:
83
+ target.log.warning("Attempting to load rootfs.gz, this can take a while.")
75
84
  rootfs = sysvol.path("/rootfs.gz")
85
+ vfs = None
76
86
 
77
87
  try:
78
- target.log.warning("Attempting to load compressed rootfs.gz, this can take a while.")
79
- rfs_fh = open_decompress(rootfs)
80
- if rfs_fh.read(4) == b"07" * 2:
88
+ if open_decompress(rootfs).read(4) == b"0707":
81
89
  vfs = TarFilesystem(rootfs.open(), tarinfo=cpio.CpioInfo)
82
90
  else:
83
91
  vfs = TarFilesystem(rootfs.open())
92
+ except ReadError:
93
+ # The rootfs.gz file could be encrypted.
94
+ try:
95
+ rfs_fh = decrypt_rootfs(rootfs.open(), get_kernel_hash(sysvol))
96
+ vfs = TarFilesystem(rfs_fh, tarinfo=cpio.CpioInfo)
97
+ except RuntimeError:
98
+ target.log.warning("Could not decrypt rootfs.gz. Missing `pycryptodome` dependency.")
99
+ except ValueError as e:
100
+ target.log.warning("Could not decrypt rootfs.gz. Unsupported kernel version.")
101
+ target.log.debug("", exc_info=e)
102
+ except ReadError as e:
103
+ target.log.warning("Could not mount rootfs.gz. It could be corrupt.")
104
+ target.log.debug("", exc_info=e)
105
+
106
+ if vfs:
84
107
  target.fs.mount("/", vfs)
85
- except ReadError as e:
86
- # Since FortiOS version ~7.4.1 the rootfs.gz file is encrypted.
87
- target.log.warning("Could not mount FortiOS `/rootfs.gz`. It could be encrypted or corrupt.")
88
- target.log.debug("", exc_info=e)
89
108
 
90
109
  target.fs.mount("/data", sysvol)
91
110
 
@@ -93,13 +112,21 @@ class FortiOSPlugin(LinuxPlugin):
93
112
  if (datafs_tar := sysvol.path("/datafs.tar.gz")).exists():
94
113
  target.fs.add_layer().mount("/data", TarFilesystem(datafs_tar.open("rb")))
95
114
 
96
- # Additional FortiGate tars with corrupt XZ streams
97
- for path in ("bin.tar.xz", "usr.tar.xz", "migadmin.tar.xz", "node-scripts.tar.xz"):
98
- if (tar := target.fs.path(path)).exists():
115
+ # Additional FortiGate or FortiManager tars with corrupt XZ streams
116
+ target.log.warning("Attempting to load XZ files, this can take a while.")
117
+ for path in (
118
+ "bin.tar.xz",
119
+ "usr.tar.xz",
120
+ "migadmin.tar.xz",
121
+ "node-scripts.tar.xz",
122
+ "docker.tar.xz",
123
+ "syntax.tar.xz",
124
+ ):
125
+ if (tar := target.fs.path(path)).exists() or (tar := sysvol.path(path)).exists():
99
126
  fh = xz.repair_checksum(tar.open("rb"))
100
127
  target.fs.add_layer().mount("/", TarFilesystem(fh))
101
128
 
102
- # FortiAnalyzer
129
+ # FortiAnalyzer and FortiManager
103
130
  if (rootfs_ext_tar := sysvol.path("rootfs-ext.tar.xz")).exists():
104
131
  target.fs.add_layer().mount("/", TarFilesystem(rootfs_ext_tar.open("rb")))
105
132
 
@@ -117,9 +144,18 @@ class FortiOSPlugin(LinuxPlugin):
117
144
  target.fs.mount("/boot", fs)
118
145
 
119
146
  # data2 partition
120
- if fs.__type__ == "ext" and fs.path("/new_alert_msg").exists() and fs.path("/template").exists():
147
+ if fs.__type__ == "ext" and (
148
+ (fs.path("/new_alert_msg").exists() and fs.path("/template").exists()) # FortiGate
149
+ or (fs.path("/swapfile").exists() and fs.path("/old_fmversion").exists()) # FortiManager
150
+ ):
121
151
  target.fs.mount("/data2", fs)
122
152
 
153
+ # Symlink unix-like paths
154
+ unix_paths = [("/data/passwd", "/etc/passwd")]
155
+ for src, dst in unix_paths:
156
+ if target.fs.path(src).exists() and not target.fs.path(dst).exists():
157
+ target.fs.symlink(src, dst)
158
+
123
159
  return cls(target)
124
160
 
125
161
  @export(property=True)
@@ -158,8 +194,11 @@ class FortiOSPlugin(LinuxPlugin):
158
194
  def dns(self) -> list[str]:
159
195
  """Return configured WAN DNS servers."""
160
196
  entries = []
161
- for _, entry in self._config["global-config"]["system"]["dns"].items():
162
- entries.append(entry[0])
197
+ try:
198
+ for entry in self._config["global-config"]["system"]["dns"].values():
199
+ entries.append(entry[0])
200
+ except KeyError:
201
+ pass
163
202
  return entries
164
203
 
165
204
  @export(property=True)
@@ -176,7 +215,7 @@ class FortiOSPlugin(LinuxPlugin):
176
215
  # Possible unix-like users
177
216
  yield from super().users()
178
217
 
179
- # Administrative users
218
+ # FortiGate administrative users
180
219
  try:
181
220
  for username, entry in self._config["global-config"]["system"]["admin"].items():
182
221
  yield FortiOSUserRecord(
@@ -190,13 +229,27 @@ class FortiOSPlugin(LinuxPlugin):
190
229
  self.target.log.warning("Exception while parsing FortiOS admin users")
191
230
  self.target.log.debug("", exc_info=e)
192
231
 
232
+ # FortiManager administrative users
233
+ try:
234
+ for username, entry in self._config["global-config"]["system"]["admin"]["user"].items():
235
+ yield FortiOSUserRecord(
236
+ name=username,
237
+ password=":".join(entry.get("password", [])),
238
+ groups=[entry["profileid"][0]],
239
+ home="/root",
240
+ _target=self.target,
241
+ )
242
+ except KeyError as e:
243
+ self.target.log.warning("Exception while parsing FortiManager admin users")
244
+ self.target.log.debug("", exc_info=e)
245
+
193
246
  # Local users
194
247
  try:
195
248
  local_groups = local_groups_to_users(self._config["root-config"]["user"]["group"])
196
249
  for username, entry in self._config["root-config"]["user"].get("local", {}).items():
197
250
  try:
198
251
  password = decrypt_password(entry["passwd"][-1])
199
- except ValueError:
252
+ except (ValueError, RuntimeError):
200
253
  password = ":".join(entry.get("passwd", []))
201
254
 
202
255
  yield FortiOSUserRecord(
@@ -215,7 +268,7 @@ class FortiOSPlugin(LinuxPlugin):
215
268
  for _, entry in self._config["root-config"]["user"]["group"].get("guestgroup", {}).get("guest", {}).items():
216
269
  try:
217
270
  password = decrypt_password(entry.get("password")[-1])
218
- except ValueError:
271
+ except (ValueError, RuntimeError):
219
272
  password = ":".join(entry.get("password"))
220
273
 
221
274
  yield FortiOSUserRecord(
@@ -236,7 +289,10 @@ class FortiOSPlugin(LinuxPlugin):
236
289
  @export(property=True)
237
290
  def architecture(self) -> Optional[str]:
238
291
  """Return architecture FortiOS runs on."""
239
- return self._get_architecture(path="/lib/libav.so")
292
+ paths = ["/lib/libav.so", "/bin/ctr"]
293
+ for path in paths:
294
+ if self.target.fs.path(path).exists():
295
+ return self._get_architecture(path=path)
240
296
 
241
297
 
242
298
  class ConfigNode(dict):
@@ -344,7 +400,7 @@ def parse_version(input: str) -> str:
344
400
  }
345
401
 
346
402
  try:
347
- version_str = input.split(":", 1)[0]
403
+ version_str = input.split(":", 1)[0].strip()
348
404
  type, version, _, build_num, build_date = version_str.rsplit("-", 4)
349
405
 
350
406
  build_num = build_num.replace("build", "build ", 1)
@@ -368,15 +424,111 @@ def local_groups_to_users(config_groups: dict) -> dict:
368
424
  return user_groups
369
425
 
370
426
 
371
- def decrypt_password(ciphertext: str) -> str:
372
- """Decrypt FortiOS version 6 and 7 encrypted secrets."""
427
+ def decrypt_password(input: str) -> str:
428
+ """Decrypt FortiOS encrypted secrets.
429
+
430
+ Works for FortiGate 5.x, 6.x and 7.x (CVE-2019-6693).
431
+
432
+ NOTE:
433
+ - FortiManager uses a 16-byte IV and is not supported (CVE-2020-9289).
434
+ - FortiGate 4.x uses DES and a static 8-byte key and is not supported.
435
+
436
+ Returns decoded plaintext or original input ciphertext when decryption failed.
437
+
438
+ Resources:
439
+ - https://www.fortiguard.com/psirt/FG-IR-19-007
440
+ """
441
+
442
+ if not HAS_PYCRYPTODOME:
443
+ raise RuntimeError("PyCryptodome module not available")
373
444
 
374
- if ciphertext[:3] in ["SH2", "AK1"]:
445
+ if input[:3] in ["SH2", "AK1"]:
375
446
  raise ValueError("Password is a hash (SHA-256 or SHA-1) and cannot be decrypted.")
376
447
 
377
- ciphertext = b64decode(ciphertext)
448
+ ciphertext = b64decode(input)
378
449
  iv = ciphertext[:4] + b"\x00" * 12
379
450
  key = b"Mary had a littl"
380
451
  cipher = AES.new(key, iv=iv, mode=AES.MODE_CBC)
381
452
  plaintext = cipher.decrypt(ciphertext[4:])
382
- return plaintext.split(b"\x00", 1)[0].decode()
453
+
454
+ try:
455
+ return plaintext.split(b"\x00", 1)[0].decode()
456
+ except UnicodeDecodeError:
457
+ return "ENC:" + input
458
+
459
+
460
+ def decrypt_rootfs(fh: BinaryIO, kernel_hash: str) -> BinaryIO:
461
+ """Attempt to decrypt an encrypted ``rootfs.gz`` file.
462
+
463
+ FortiOS releases as of 7.4.1 / 2023-08-31, have ChaCha20 encrypted ``rootfs.gz`` files.
464
+ This function attempts to decrypt a ``rootfs.gz`` file using a static key and IV
465
+ which can be found in the kernel.
466
+
467
+ Currently supported versions (each release has a new key):
468
+ - FortiGate VM 7.0.13
469
+ - FortiGate VM 7.4.1
470
+ - FortiGate VM 7.4.2
471
+
472
+ Resources:
473
+ - https://docs.fortinet.com/document/fortimanager/7.4.2/release-notes/519207/special-notices
474
+ - Reversing kernel (fgt_verifier_iv, fgt_verifier_decrypt, fgt_verifier_initrd)
475
+ """
476
+
477
+ if not HAS_PYCRYPTODOME:
478
+ raise RuntimeError("PyCryptodome module not available")
479
+
480
+ # SHA256 hashes of kernel files
481
+ KERNEL_KEY_MAP = {
482
+ # FortiGate VM 7.0.13
483
+ "25cb2c8a419cde1f42d38fc6cbc95cf8b53db41096d0648015674d8220eba6bf": (
484
+ bytes.fromhex("c87e13e1f7d21c1aca81dc13329c3a948d6e420d3a859f3958bd098747873d08"),
485
+ bytes.fromhex("87486a24637e9a66f09ec182eee25594"),
486
+ ),
487
+ # FortiGate VM 7.4.1
488
+ "a008b47327293e48502a121ee8709f243ad5da4e63d6f663c253db27bd01ea28": _kdf_7_4_x(
489
+ "366486c0f2c6322ec23e4f33a98caa1b19d41c74bb4f25f6e8e2087b0655b30f"
490
+ ),
491
+ # FortiGate VM 7.4.2
492
+ "c392cf83ab484e0b2419b2711b02cdc88a73db35634c10340037243394a586eb": _kdf_7_4_x(
493
+ "480767be539de28ee773497fa731dd6368adc9946df61da8e1253fa402ba0302"
494
+ ),
495
+ }
496
+
497
+ if not (key_data := KERNEL_KEY_MAP.get(kernel_hash)):
498
+ raise ValueError("Failed to decrypt: Unknown kernel hash.")
499
+
500
+ key, iv = key_data
501
+ # First 8 bytes = counter, last 8 bytes = nonce
502
+ # PyCryptodome interally divides this seek by 64 to get a (position, offset) tuple
503
+ # We're interested in updating the position in the ChaCha20 internal state, so to make
504
+ # PyCryptodome "OpenSSL-compatible" we have to multiply the counter by 64
505
+ cipher = ChaCha20.new(key=key, nonce=iv[8:])
506
+ cipher.seek(int.from_bytes(iv[:8], "little") * 64)
507
+ result = cipher.decrypt(fh.read())
508
+
509
+ if result[0:2] != b"\x1f\x8b":
510
+ raise ValueError("Failed to decrypt: No gzip magic header found.")
511
+
512
+ return BytesIO(result)
513
+
514
+
515
+ def _kdf_7_4_x(key_data: Union[str, bytes]) -> tuple[bytes, bytes]:
516
+ """Derive 32 byte key and 16 byte IV from 32 byte seed.
517
+
518
+ As the IV needs to be 16 bytes, we return the first 16 bytes of the sha256 hash.
519
+ """
520
+
521
+ if isinstance(key_data, str):
522
+ key_data = bytes.fromhex(key_data)
523
+
524
+ key = hashlib.sha256(key_data[4:32] + key_data[:4]).digest()
525
+ iv = hashlib.sha256(key_data[5:32] + key_data[:5]).digest()[:16]
526
+ return key, iv
527
+
528
+
529
+ def get_kernel_hash(sysvol: Filesystem) -> Optional[str]:
530
+ """Return the SHA256 hash of the (compressed) kernel."""
531
+ kernel_files = ["flatkc", "vmlinuz", "vmlinux"]
532
+ for k in kernel_files:
533
+ if sysvol.path(k).exists():
534
+ return sysvol.sha256(k)
@@ -16,13 +16,15 @@ class GenericPlugin(Plugin):
16
16
  @export(property=True)
17
17
  def install_date(self) -> Optional[datetime]:
18
18
  """Return the likely install date of FortiOS."""
19
- if (init_log := self.target.fs.path("/data/etc/cloudinit.log")).exists():
20
- return ts.from_unix(init_log.stat().st_mtime)
19
+ files = ["/data/etc/cloudinit.log", "/data/.vm_provisioned", "/data/etc/ssh/ssh_host_dsa_key"]
20
+ for file in files:
21
+ if (fp := self.target.fs.path(file)).exists():
22
+ return ts.from_unix(fp.stat().st_mtime)
21
23
 
22
24
  @export(property=True)
23
25
  def activity(self) -> Optional[datetime]:
24
26
  """Return last seen activity based on filesystem timestamps."""
25
- log_dirs = ["/var/log/log/root", "/var/log/root"]
27
+ log_dirs = ["/var/log/log/root", "/var/log/root", "/data"]
26
28
  for log_dir in log_dirs:
27
29
  if (var_log := self.target.fs.path(log_dir)).exists():
28
30
  return calculate_last_activity(var_log)
@@ -1,3 +1,5 @@
1
+ from typing import Optional
2
+
1
3
  from dissect.target.exceptions import UnsupportedPluginError
2
4
  from dissect.target.plugin import Plugin, export
3
5
 
@@ -8,13 +10,16 @@ class LocalePlugin(Plugin):
8
10
  raise UnsupportedPluginError("FortiOS specific plugin loaded on non-FortiOS target")
9
11
 
10
12
  @export(property=True)
11
- def timezone(self) -> str:
13
+ def timezone(self) -> Optional[str]:
12
14
  """Return configured UI/system timezone."""
13
- timezone_num = self.target._os._config["global-config"]["system"]["global"]["timezone"][0]
14
- return translate_timezone(timezone_num)
15
+ try:
16
+ timezone_num = self.target._os._config["global-config"]["system"]["global"]["timezone"][0]
17
+ return translate_timezone(timezone_num)
18
+ except KeyError:
19
+ pass
15
20
 
16
21
  @export(property=True)
17
- def language(self) -> str:
22
+ def language(self) -> Optional[str]:
18
23
  """Return configured UI language."""
19
24
  LANG_MAP = {
20
25
  "english": "en_US",
@@ -26,8 +31,11 @@ class LocalePlugin(Plugin):
26
31
  "simch": "zh_CN",
27
32
  "korean": "ko_KR",
28
33
  }
29
- lang_str = self.target._os._config["global-config"]["system"]["global"].get("language", ["english"])[0]
30
- return LANG_MAP.get(lang_str, lang_str)
34
+ try:
35
+ lang_str = self.target._os._config["global-config"]["system"]["global"].get("language", ["english"])[0]
36
+ return LANG_MAP.get(lang_str, lang_str)
37
+ except KeyError:
38
+ pass
31
39
 
32
40
 
33
41
  def translate_timezone(timezone_num: str) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.15.dev34
3
+ Version: 3.15.dev38
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