dissect.target 3.20.dev36__tar.gz → 3.20.dev39__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. {dissect_target-3.20.dev36/dissect.target.egg-info → dissect_target-3.20.dev39}/PKG-INFO +1 -1
  2. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/config.py +1 -1
  3. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/path_common.py +5 -5
  4. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/configutil.py +31 -29
  5. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/cyber.py +2 -0
  6. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/docs.py +1 -1
  7. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/keychain.py +2 -0
  8. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/mount.py +2 -1
  9. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugin.py +15 -13
  10. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/av/mcafee.py +2 -0
  11. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/av/sophos.py +2 -0
  12. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/av/trendmicro.py +2 -0
  13. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/chromium.py +27 -6
  14. dissect_target-3.20.dev39/dissect/target/plugins/apps/editor/editor.py +23 -0
  15. {dissect_target-3.20.dev36/dissect/target/plugins/apps/texteditor → dissect_target-3.20.dev39/dissect/target/plugins/apps/editor}/windowsnotepad.py +40 -31
  16. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/shell/powershell.py +6 -2
  17. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/shell/wget.py +1 -1
  18. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/ssh/openssh.py +2 -0
  19. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/ssh/opensshd.py +2 -0
  20. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/vpn/wireguard.py +9 -9
  21. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webhosting/cpanel.py +2 -0
  22. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/caddy.py +2 -0
  23. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/nginx.py +2 -0
  24. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/esxi.py +3 -1
  25. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/virtuozzo.py +12 -8
  26. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/acquire_hash.py +2 -1
  27. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/icat.py +15 -11
  28. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/ntfs/mft.py +2 -0
  29. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +3 -1
  30. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +2 -0
  31. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/ntfs/utils.py +3 -1
  32. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/unix/suid.py +4 -1
  33. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/walkfs.py +2 -0
  34. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/example.py +2 -2
  35. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/loaders.py +1 -1
  36. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/network.py +7 -0
  37. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/osinfo.py +1 -0
  38. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/plugins.py +4 -0
  39. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/_os.py +2 -1
  40. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/citrix/history.py +2 -0
  41. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/osx/network.py +2 -0
  42. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/osx/user.py +4 -0
  43. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/cronjobs.py +8 -4
  44. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/etc/etc.py +4 -0
  45. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/generic.py +2 -0
  46. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/history.py +27 -25
  47. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/cmdline.py +2 -0
  48. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/apt.py +4 -1
  49. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +3 -3
  50. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/environ.py +2 -0
  51. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/fortios/generic.py +2 -0
  52. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/fortios/locale.py +2 -0
  53. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/modules.py +2 -0
  54. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/netstat.py +2 -0
  55. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/processes.py +2 -0
  56. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/redhat/yum.py +4 -1
  57. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/services.py +5 -3
  58. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/sockets.py +2 -0
  59. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/suse/zypper.py +4 -1
  60. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locale.py +2 -0
  61. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locate/gnulocate.py +4 -2
  62. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locate/mlocate.py +2 -0
  63. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locate/plocate.py +3 -1
  64. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/atop.py +2 -0
  65. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/audit.py +3 -1
  66. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/auth.py +4 -2
  67. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/lastlog.py +5 -3
  68. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/messages.py +2 -0
  69. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/utmp.py +4 -2
  70. dissect_target-3.20.dev39/dissect/target/plugins/os/unix/packagemanager.py +48 -0
  71. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/shadow.py +3 -1
  72. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/trash.py +1 -1
  73. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/activitiescache.py +9 -4
  74. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/adpolicy.py +2 -1
  75. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/amcache.py +16 -13
  76. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/defender.py +3 -3
  77. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/credhist.py +3 -0
  78. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/empty.py +3 -0
  79. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/keychain.py +3 -0
  80. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/lsa.py +3 -0
  81. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/env.py +1 -2
  82. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/exchange/exchange.py +6 -4
  83. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/generic.py +20 -18
  84. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/lnk.py +2 -0
  85. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/locale.py +9 -3
  86. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/etl.py +5 -4
  87. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/evt.py +12 -8
  88. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/evtx.py +9 -7
  89. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/pfro.py +2 -1
  90. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/network.py +2 -0
  91. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/notifications.py +6 -4
  92. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/prefetch.py +7 -2
  93. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/7zip.py +9 -1
  94. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/auditpol.py +2 -1
  95. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/bam.py +3 -1
  96. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/cit.py +14 -12
  97. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/clsid.py +6 -3
  98. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/firewall.py +2 -1
  99. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/mru.py +9 -8
  100. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/nethist.py +6 -3
  101. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/recentfilecache.py +3 -1
  102. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/regf.py +5 -1
  103. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/shimcache.py +1 -1
  104. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/usb.py +2 -1
  105. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/userassist.py +2 -1
  106. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/registry.py +11 -0
  107. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/services.py +3 -2
  108. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/startupinfo.py +7 -2
  109. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/syscache.py +3 -1
  110. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/tasks.py +1 -1
  111. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/thumbcache.py +11 -5
  112. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/ual.py +12 -9
  113. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/wua_history.py +0 -1
  114. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/dump/utils.py +4 -0
  115. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/shell.py +2 -1
  116. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39/dissect.target.egg-info}/PKG-INFO +1 -1
  117. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect.target.egg-info/SOURCES.txt +5 -6
  118. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/_docs/Makefile +1 -1
  119. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/_docs/conf.py +5 -0
  120. dissect_target-3.20.dev36/tests/plugins/apps/texteditor/test_texteditor.py → dissect_target-3.20.dev39/tests/plugins/apps/editor/test_windowsnotepad.py +12 -7
  121. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_plugins.py +4 -4
  122. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_cit.py +2 -0
  123. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_registry.py +11 -6
  124. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_plugin.py +69 -0
  125. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tox.ini +2 -1
  126. dissect_target-3.20.dev36/dissect/target/plugins/apps/texteditor/texteditor.py +0 -13
  127. dissect_target-3.20.dev36/dissect/target/plugins/os/unix/etc.py +0 -9
  128. dissect_target-3.20.dev36/dissect/target/plugins/os/unix/packagemanager.py +0 -81
  129. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/COPYRIGHT +0 -0
  130. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/LICENSE +0 -0
  131. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/MANIFEST.in +0 -0
  132. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/README.md +0 -0
  133. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/__init__.py +0 -0
  134. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/container.py +0 -0
  135. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/__init__.py +0 -0
  136. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/asdf.py +0 -0
  137. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/ewf.py +0 -0
  138. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/fortifw.py +0 -0
  139. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/hdd.py +0 -0
  140. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/hds.py +0 -0
  141. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/qcow2.py +0 -0
  142. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/raw.py +0 -0
  143. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/split.py +0 -0
  144. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/vdi.py +0 -0
  145. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/vhd.py +0 -0
  146. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/vhdx.py +0 -0
  147. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/containers/vmdk.py +0 -0
  148. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
  149. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/exceptions.py +0 -0
  150. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystem.py +0 -0
  151. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/__init__.py +0 -0
  152. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/ad1.py +0 -0
  153. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/btrfs.py +0 -0
  154. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/cb.py +0 -0
  155. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/cpio.py +0 -0
  156. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/dir.py +0 -0
  157. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/exfat.py +0 -0
  158. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/extfs.py +0 -0
  159. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/fat.py +0 -0
  160. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/ffs.py +0 -0
  161. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/itunes.py +0 -0
  162. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/jffs.py +0 -0
  163. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/ntfs.py +0 -0
  164. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/overlay.py +0 -0
  165. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/smb.py +0 -0
  166. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/squashfs.py +0 -0
  167. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/tar.py +0 -0
  168. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/vmfs.py +0 -0
  169. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/vmtar.py +0 -0
  170. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/xfs.py +0 -0
  171. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/filesystems/zip.py +0 -0
  172. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/__init__.py +0 -0
  173. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/cache.py +0 -0
  174. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/__init__.py +0 -0
  175. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/path_310.py +0 -0
  176. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/path_311.py +0 -0
  177. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/path_312.py +0 -0
  178. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/compat/path_39.py +0 -0
  179. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/config.py +0 -0
  180. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/data/windowsZones.xml +0 -0
  181. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/descriptor_extensions.py +0 -0
  182. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/fsutil.py +0 -0
  183. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/hashutil.py +0 -0
  184. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/lazy.py +0 -0
  185. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/loaderutil.py +0 -0
  186. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/localeutil.py +0 -0
  187. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/mui.py +0 -0
  188. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/polypath.py +0 -0
  189. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/protobuf.py +0 -0
  190. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/record.py +0 -0
  191. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/record_modifier.py +0 -0
  192. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/regutil.py +0 -0
  193. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/shell_application_ids.py +0 -0
  194. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/shell_folder_ids.py +0 -0
  195. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/helpers/utils.py +0 -0
  196. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loader.py +0 -0
  197. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/__init__.py +0 -0
  198. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/ab.py +0 -0
  199. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/ad1.py +0 -0
  200. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/asdf.py +0 -0
  201. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/cb.py +0 -0
  202. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/cyber.py +0 -0
  203. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/dir.py +0 -0
  204. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/hyperv.py +0 -0
  205. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/itunes.py +0 -0
  206. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/kape.py +0 -0
  207. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/libvirt.py +0 -0
  208. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/local.py +0 -0
  209. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/log.py +0 -0
  210. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/mqtt.py +0 -0
  211. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/multiraw.py +0 -0
  212. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/ova.py +0 -0
  213. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/overlay.py +0 -0
  214. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/ovf.py +0 -0
  215. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/phobos.py +0 -0
  216. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/profile.py +0 -0
  217. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/pvm.py +0 -0
  218. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/pvs.py +0 -0
  219. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/raw.py +0 -0
  220. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/remote.py +0 -0
  221. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/res.py +0 -0
  222. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/smb.py +0 -0
  223. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/tanium.py +0 -0
  224. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/tar.py +0 -0
  225. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/target.py +0 -0
  226. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/utm.py +0 -0
  227. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/vb.py +0 -0
  228. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/vbox.py +0 -0
  229. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/velociraptor.py +0 -0
  230. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/vma.py +0 -0
  231. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/vmwarevm.py +0 -0
  232. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/vmx.py +0 -0
  233. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/loaders/xva.py +0 -0
  234. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/__init__.py +0 -0
  235. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/__init__.py +0 -0
  236. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/av/__init__.py +0 -0
  237. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/av/symantec.py +0 -0
  238. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  239. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/brave.py +0 -0
  240. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/browser.py +0 -0
  241. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  242. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/edge.py +0 -0
  243. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  244. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  245. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/container/__init__.py +0 -0
  246. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/container/docker.py +0 -0
  247. {dissect_target-3.20.dev36/dissect/target/plugins/apps/other → dissect_target-3.20.dev39/dissect/target/plugins/apps/editor}/__init__.py +0 -0
  248. {dissect_target-3.20.dev36/dissect/target/plugins/apps/remoteaccess → dissect_target-3.20.dev39/dissect/target/plugins/apps/other}/__init__.py +0 -0
  249. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/other/env.py +0 -0
  250. {dissect_target-3.20.dev36/dissect/target/plugins/apps/shell → dissect_target-3.20.dev39/dissect/target/plugins/apps/remoteaccess}/__init__.py +0 -0
  251. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  252. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  253. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  254. {dissect_target-3.20.dev36/dissect/target/plugins/apps/ssh → dissect_target-3.20.dev39/dissect/target/plugins/apps/shell}/__init__.py +0 -0
  255. {dissect_target-3.20.dev36/dissect/target/plugins/apps/texteditor → dissect_target-3.20.dev39/dissect/target/plugins/apps/ssh}/__init__.py +0 -0
  256. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/ssh/putty.py +0 -0
  257. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
  258. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/virtualization/__init__.py +0 -0
  259. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/virtualization/vmware_workstation.py +0 -0
  260. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  261. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  262. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  263. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  264. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  265. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
  266. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  267. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  268. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/__init__.py +0 -0
  269. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/docker.py +0 -0
  270. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/hyperv.py +0 -0
  271. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/parallels.py +0 -0
  272. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/qemu.py +0 -0
  273. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  274. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/child/wsl.py +0 -0
  275. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/__init__.py +0 -0
  276. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
  277. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  278. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/resolver.py +0 -0
  279. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  280. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
  281. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/filesystem/yara.py +0 -0
  282. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/__init__.py +0 -0
  283. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/config.py +0 -0
  284. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/default.py +0 -0
  285. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/scrape.py +0 -0
  286. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/general/users.py +0 -0
  287. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/__init__.py +0 -0
  288. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/__init__.py +0 -0
  289. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
  290. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  291. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  292. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  293. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  294. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  295. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
  296. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
  297. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  298. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  299. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
  300. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
  301. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/datetime.py +0 -0
  302. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  303. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  304. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/etc/__init__.py +0 -0
  305. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  306. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
  307. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  308. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  309. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  310. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  311. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  312. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  313. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
  314. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
  315. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
  316. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  317. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/network_managers.py +0 -0
  318. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  319. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  320. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  321. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  322. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  323. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
  324. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
  325. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  326. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  327. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/__init__.py +0 -0
  328. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/_os.py +0 -0
  329. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/catroot.py +0 -0
  330. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/cim.py +0 -0
  331. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/clfs.py +0 -0
  332. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/credential/__init__.py +0 -0
  333. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/credential/credhist.py +0 -0
  334. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/credential/lsa.py +0 -0
  335. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/credential/sam.py +0 -0
  336. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/datetime.py +0 -0
  337. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/defender_helpers/__init__.py +0 -0
  338. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/defender_helpers/defender_patterns.py +0 -0
  339. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/defender_helpers/defender_records.py +0 -0
  340. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  341. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  342. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  343. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  344. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/__init__.py +0 -0
  345. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/keyprovider/keyprovider.py +0 -0
  346. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  347. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  348. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/jumplist.py +0 -0
  349. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  350. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  351. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
  352. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  353. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  354. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  355. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  356. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  357. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  358. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  359. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/sru.py +0 -0
  360. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
  361. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
  362. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
  363. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
  364. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/plugins/os/windows/wer.py +0 -0
  365. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/report.py +0 -0
  366. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/target.py +0 -0
  367. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/__init__.py +0 -0
  368. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/build_pluginlist.py +0 -0
  369. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/dd.py +0 -0
  370. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/dump/__init__.py +0 -0
  371. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/dump/run.py +0 -0
  372. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/dump/state.py +0 -0
  373. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/fs.py +0 -0
  374. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/fsutils.py +0 -0
  375. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/info.py +0 -0
  376. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/logging.py +0 -0
  377. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/mount.py +0 -0
  378. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/query.py +0 -0
  379. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/reg.py +0 -0
  380. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/utils.py +0 -0
  381. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/tools/yara.py +0 -0
  382. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volume.py +0 -0
  383. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/__init__.py +0 -0
  384. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/bde.py +0 -0
  385. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/ddf.py +0 -0
  386. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/disk.py +0 -0
  387. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/luks.py +0 -0
  388. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/lvm.py +0 -0
  389. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/md.py +0 -0
  390. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect/target/volumes/vmfs.py +0 -0
  391. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect.target.egg-info/dependency_links.txt +0 -0
  392. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect.target.egg-info/entry_points.txt +0 -0
  393. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect.target.egg-info/requires.txt +0 -0
  394. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/dissect.target.egg-info/top_level.txt +0 -0
  395. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/pyproject.toml +0 -0
  396. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/setup.cfg +0 -0
  397. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/__init__.py +0 -0
  398. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/_docs/index.rst +0 -0
  399. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/_utils.py +0 -0
  400. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/conftest.py +0 -0
  401. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/containers/__init__.py +0 -0
  402. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/containers/test_fortifw.py +0 -0
  403. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/containers/test_split.py +0 -0
  404. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/__init__.py +0 -0
  405. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_btrfs.py +0 -0
  406. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_cb.py +0 -0
  407. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_config.py +0 -0
  408. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_cpio.py +0 -0
  409. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_dir.py +0 -0
  410. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_exfat.py +0 -0
  411. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_extfs.py +0 -0
  412. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_fat.py +0 -0
  413. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_jffs2.py +0 -0
  414. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_ntfs.py +0 -0
  415. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_overlay.py +0 -0
  416. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_smb.py +0 -0
  417. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_tar.py +0 -0
  418. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_vmtar.py +0 -0
  419. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_xfs.py +0 -0
  420. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/filesystems/test_zip.py +0 -0
  421. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/__init__.py +0 -0
  422. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_cache.py +0 -0
  423. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_config.py +0 -0
  424. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_configutil.py +0 -0
  425. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_docs.py +0 -0
  426. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_fsutil.py +0 -0
  427. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_hashutil.py +0 -0
  428. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_keychain.py +0 -0
  429. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_loaderutil.py +0 -0
  430. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_localeutil.py +0 -0
  431. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_modifier.py +0 -0
  432. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_protobuf.py +0 -0
  433. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_record.py +0 -0
  434. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_regutil.py +0 -0
  435. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/helpers/test_utils.py +0 -0
  436. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/__init__.py +0 -0
  437. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_ab.py +0 -0
  438. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_asdf.py +0 -0
  439. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_cb.py +0 -0
  440. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_dir.py +0 -0
  441. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_hyperv.py +0 -0
  442. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_kape.py +0 -0
  443. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_libvirt.py +0 -0
  444. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_local.py +0 -0
  445. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_log.py +0 -0
  446. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_mqtt.py +0 -0
  447. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_multiraw.py +0 -0
  448. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_ova.py +0 -0
  449. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_overlay.py +0 -0
  450. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_ovf.py +0 -0
  451. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_phobos.py +0 -0
  452. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_pvm.py +0 -0
  453. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_pvs.py +0 -0
  454. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_remote.py +0 -0
  455. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_smb.py +0 -0
  456. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_tanium.py +0 -0
  457. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_tar.py +0 -0
  458. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_utm.py +0 -0
  459. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_vbox.py +0 -0
  460. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_velociraptor.py +0 -0
  461. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/loaders/test_vmwarevm.py +0 -0
  462. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/__init__.py +0 -0
  463. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/__init__.py +0 -0
  464. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/av/__init__.py +0 -0
  465. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/av/test_mcafee.py +0 -0
  466. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/av/test_sophos.py +0 -0
  467. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/av/test_symantec.py +0 -0
  468. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  469. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/__init__.py +0 -0
  470. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_brave.py +0 -0
  471. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_chrome.py +0 -0
  472. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_chromium.py +0 -0
  473. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_edge.py +0 -0
  474. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_firefox.py +0 -0
  475. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/browser/test_iexplore.py +0 -0
  476. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/container/__init__.py +0 -0
  477. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/container/test_docker.py +0 -0
  478. {dissect_target-3.20.dev36/tests/plugins/apps/other → dissect_target-3.20.dev39/tests/plugins/apps/editor}/__init__.py +0 -0
  479. {dissect_target-3.20.dev36/tests/plugins/apps/remoteaccess → dissect_target-3.20.dev39/tests/plugins/apps/other}/__init__.py +0 -0
  480. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/other/test_envfile.py +0 -0
  481. {dissect_target-3.20.dev36/tests/plugins/apps/shell → dissect_target-3.20.dev39/tests/plugins/apps/remoteaccess}/__init__.py +0 -0
  482. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  483. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  484. {dissect_target-3.20.dev36/tests/plugins/apps/ssh → dissect_target-3.20.dev39/tests/plugins/apps/shell}/__init__.py +0 -0
  485. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/shell/test_powershell.py +0 -0
  486. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/shell/test_wget.py +0 -0
  487. {dissect_target-3.20.dev36/tests/plugins/apps/texteditor → dissect_target-3.20.dev39/tests/plugins/apps/ssh}/__init__.py +0 -0
  488. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/ssh/test_openssh.py +0 -0
  489. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
  490. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/ssh/test_putty.py +0 -0
  491. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/virtualization/__init__.py +0 -0
  492. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/virtualization/test_vmware_workstation.py +0 -0
  493. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/vpn/__init__.py +0 -0
  494. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  495. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
  496. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webhosting/__init__.py +0 -0
  497. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  498. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/__init__.py +0 -0
  499. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_apache.py +0 -0
  500. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  501. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_citrix.py +0 -0
  502. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_iis.py +0 -0
  503. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  504. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/apps/webserver/test_webserver.py +0 -0
  505. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/__init__.py +0 -0
  506. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_docker.py +0 -0
  507. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_hyperv.py +0 -0
  508. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_parallels.py +0 -0
  509. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_qemu.py +0 -0
  510. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_virtuozzo.py +0 -0
  511. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_vmware_workstation.py +0 -0
  512. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/child/test_wsl.py +0 -0
  513. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/__init__.py +0 -0
  514. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  515. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  516. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  517. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
  518. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
  519. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_icat.py +0 -0
  520. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_resolver.py +0 -0
  521. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_walkfs.py +0 -0
  522. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/test_yara.py +0 -0
  523. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/unix/__init__.py +0 -0
  524. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  525. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  526. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/__init__.py +0 -0
  527. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_config.py +0 -0
  528. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_default.py +0 -0
  529. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_network.py +0 -0
  530. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_scrape.py +0 -0
  531. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/general/test_users.py +0 -0
  532. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/__init__.py +0 -0
  533. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/__init__.py +0 -0
  534. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  535. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  536. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  537. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
  538. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  539. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
  540. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/osx/test_network.py +0 -0
  541. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
  542. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/esxi/__init__.py +0 -0
  543. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/esxi/test__os.py +0 -0
  544. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/__init__.py +0 -0
  545. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  546. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  547. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  548. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  549. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  550. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
  551. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  552. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  553. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  554. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  555. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test__os.py +0 -0
  556. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  557. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  558. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  559. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  560. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  561. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  562. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  563. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_services.py +0 -0
  564. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  565. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/locate/__init__.py +0 -0
  566. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
  567. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
  568. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
  569. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/__init__.py +0 -0
  570. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_atop.py +0 -0
  571. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_audit.py +0 -0
  572. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_auth.py +0 -0
  573. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_journal.py +0 -0
  574. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  575. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_messages.py +0 -0
  576. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  577. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test__os.py +0 -0
  578. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_generic.py +0 -0
  579. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_history.py +0 -0
  580. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_ips.py +0 -0
  581. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_locale.py +0 -0
  582. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  583. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_shadow.py +0 -0
  584. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_trash.py +0 -0
  585. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_users.py +0 -0
  586. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/unix/test_version.py +0 -0
  587. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/__init__.py +0 -0
  588. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/credential/__init__.py +0 -0
  589. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/credential/test_credhist.py +0 -0
  590. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/credential/test_lsa.py +0 -0
  591. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/credential/test_sam.py +0 -0
  592. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/log/test_etl.py +0 -0
  593. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/log/test_evt.py +0 -0
  594. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  595. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
  596. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/__init__.py +0 -0
  597. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  598. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  599. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  600. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_shellbags.py +0 -0
  601. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  602. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_usb.py +0 -0
  603. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  604. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test__os.py +0 -0
  605. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  606. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_amcache.py +0 -0
  607. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_catroot.py +0 -0
  608. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_clfs.py +0 -0
  609. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_datetime.py +0 -0
  610. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_defender.py +0 -0
  611. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_dpapi.py +0 -0
  612. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_env.py +0 -0
  613. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_generic.py +0 -0
  614. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_jumplist.py +0 -0
  615. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_lnk.py +0 -0
  616. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_locale.py +0 -0
  617. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_mru.py +0 -0
  618. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_network.py +0 -0
  619. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_notifications.py +0 -0
  620. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_prefetch.py +0 -0
  621. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_recyclebin.py +0 -0
  622. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_shimcache.py +0 -0
  623. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_sru.py +0 -0
  624. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_syscache.py +0 -0
  625. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_tasks.py +0 -0
  626. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  627. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_ual.py +0 -0
  628. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_wer.py +0 -0
  629. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/plugins/os/windows/test_wua_history.py +0 -0
  630. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_container.py +0 -0
  631. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_filesystem.py +0 -0
  632. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_registration.py +0 -0
  633. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_report.py +0 -0
  634. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_target.py +0 -0
  635. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_tests.py +0 -0
  636. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/test_volume.py +0 -0
  637. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/__init__.py +0 -0
  638. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_dump.py +0 -0
  639. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_fs.py +0 -0
  640. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_fsutils.py +0 -0
  641. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_info.py +0 -0
  642. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_mount.py +0 -0
  643. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_query.py +0 -0
  644. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_reg.py +0 -0
  645. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_shell.py +0 -0
  646. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_utils.py +0 -0
  647. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/tools/test_yara.py +0 -0
  648. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/volumes/__init__.py +0 -0
  649. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/volumes/test_bde.py +0 -0
  650. {dissect_target-3.20.dev36 → dissect_target-3.20.dev39}/tests/volumes/test_md.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dissect.target
3
- Version: 3.20.dev36
3
+ Version: 3.20.dev39
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
@@ -133,7 +133,7 @@ class ConfigurationEntry(FilesystemEntry):
133
133
  Behaves like a ``directory`` when :attr:`parser_items` is a :class:`.ConfigurationParser` or a ``dict``.
134
134
  Behaves like a ``file`` otherwise.
135
135
 
136
- Attributes:
136
+ Args:
137
137
  parser_items: A dict-like object containing all configuration entries and values.
138
138
  In most cases this is either a :class:`.ConfigurationParser` or ``dict``.
139
139
  Otherwise, its the entry's value
@@ -56,11 +56,11 @@ class _DissectScandirIterator:
56
56
 
57
57
  The _DissectScandirIterator provides a context manager, so scandir can be called as:
58
58
 
59
- ```
60
- with scandir(path) as it:
61
- for entry in it
62
- print(entry.name)
63
- ```
59
+ .. code-block:: python
60
+
61
+ with scandir(path) as it:
62
+ for entry in it
63
+ print(entry.name)
64
64
 
65
65
  similar to os.scandir() behaviour since Python 3.6.
66
66
  """
@@ -69,9 +69,7 @@ def _update_dictionary(current: dict[str, Any], key: str, value: Any) -> None:
69
69
 
70
70
 
71
71
  class PeekableIterator:
72
- """Source gotten from:
73
- https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/more.html#peekable
74
- """
72
+ # https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/more.html#peekable
75
73
 
76
74
  def __init__(self, iterable):
77
75
  self._iterator = iter(iterable)
@@ -98,9 +96,6 @@ class PeekableIterator:
98
96
  class ConfigurationParser:
99
97
  """A configuration parser where you can configure certain aspects of the parsing mechanism.
100
98
 
101
- Attributes:
102
- parsed_data: The resulting dictionary after parsing.
103
-
104
99
  Args:
105
100
  collapse: A ``bool`` or an ``Iterator``:
106
101
  If ``True``: it will collapse all the resulting dictionary values.
@@ -195,6 +190,8 @@ class Default(ConfigurationParser):
195
190
 
196
191
  This parser splits only on the first ``separator`` it finds:
197
192
 
193
+ .. code-block::
194
+
198
195
  key<separator>value -> {"key": "value"}
199
196
 
200
197
  key<separator>value\n
@@ -316,7 +313,7 @@ class Bin(ConfigurationParser):
316
313
 
317
314
 
318
315
  class Xml(ConfigurationParser):
319
- """Parses an XML file. Ignores any constructor parameters passed from ``ConfigurationParser`."""
316
+ """Parses an XML file. Ignores any constructor parameters passed from ``ConfigurationParser``."""
320
317
 
321
318
  def _tree(self, tree: ElementTree, root: bool = False) -> dict:
322
319
  """Very simple but robust xml -> dict implementation, see comments."""
@@ -395,8 +392,9 @@ class ListUnwrapper:
395
392
  def unwrap(data: Union[dict, list]) -> Union[dict, list]:
396
393
  """Transforms a list with dictionaries to a dictionary.
397
394
 
398
- The order of the list is preserved. If no dictionary is found,
399
- the list remains untouched:
395
+ The order of the list is preserved. If no dictionary is found, the list remains untouched:
396
+
397
+ .. code-block::
400
398
 
401
399
  ["value1", "value2"] -> ["value1", "value2"]
402
400
 
@@ -622,6 +620,8 @@ class Indentation(Default):
622
620
 
623
621
  The parser parses this as the following:
624
622
 
623
+ .. code-block::
624
+
625
625
  key value
626
626
  key2 value2
627
627
  -> {"key value": {"key2": "value2"}}
@@ -644,7 +644,7 @@ class Indentation(Default):
644
644
  Args:
645
645
  manager: A :class:`ScopeManager` that contains the logic to ``push`` and ``pop`` scopes. And keeps state.
646
646
  line: The line to be parsed.
647
- key: The key that should be updated during a :method:`ScopeManager.push``.
647
+ key: The key that should be updated during a :method:`ScopeManager.push`.
648
648
  next_line: The next line to be parsed.
649
649
 
650
650
  Returns:
@@ -694,26 +694,28 @@ class SystemD(Indentation):
694
694
  """A :class:`ConfigurationParser` that specifically parses systemd configuration files.
695
695
 
696
696
  Examples:
697
- >>> systemd_data = textwrap.dedent(
698
- '''
699
- [Section1]
700
- Key=Value
701
- [Section2]
702
- Key2=Value 2\\
703
- Value 2 continued
704
- '''
705
- )
706
- >>> parser = SystemD(io.StringIO(systemd_data))
707
- >>> parser.parser_items
708
- {
709
- "Section1": {
710
- "Key": "Value
711
- },
712
- "Section2": {
713
- "Key2": "Value2 Value 2 continued
714
- }
715
- }
716
697
 
698
+ .. code-block::
699
+
700
+ >>> systemd_data = textwrap.dedent(
701
+ '''
702
+ [Section1]
703
+ Key=Value
704
+ [Section2]
705
+ Key2=Value 2\\
706
+ Value 2 continued
707
+ '''
708
+ )
709
+ >>> parser = SystemD(io.StringIO(systemd_data))
710
+ >>> parser.parser_items
711
+ {
712
+ "Section1": {
713
+ "Key": "Value
714
+ },
715
+ "Section2": {
716
+ "Key2": "Value2 Value 2 continued
717
+ }
718
+ }
717
719
  """
718
720
 
719
721
  def _change_scope(
@@ -52,6 +52,8 @@ MATRIX_REVEAL_SECONDS = 4
52
52
 
53
53
 
54
54
  class Color(Enum):
55
+ """Cyber colors."""
56
+
55
57
  BLACK = 30
56
58
  RED = 31
57
59
  GREEN = 32
@@ -46,7 +46,7 @@ def get_real_func_obj(func: Callable) -> Tuple[Type, Callable]:
46
46
  return (klass, func)
47
47
 
48
48
 
49
- def get_docstring(obj: Any, placeholder=NO_DOCS) -> str:
49
+ def get_docstring(obj: Any, placeholder: str = NO_DOCS) -> str:
50
50
  """Get object's docstring or a placeholder if no docstring found"""
51
51
  # Use of `inspect.cleandoc()` is preferred to `textwrap.dedent()` here
52
52
  # because many multi-line docstrings in the codebase
@@ -8,6 +8,8 @@ log = logging.getLogger(__name__)
8
8
 
9
9
 
10
10
  class KeyType(Enum):
11
+ """Valid key types."""
12
+
11
13
  RAW = "raw"
12
14
  PASSPHRASE = "passphrase"
13
15
  RECOVERY_KEY = "recovery_key"
@@ -8,7 +8,6 @@ from dissect.util.feature import Feature, feature_enabled
8
8
 
9
9
  from dissect.target.filesystem import Filesystem, FilesystemEntry
10
10
 
11
- HAS_FUSE3 = False
12
11
  if feature_enabled(Feature.BETA):
13
12
  from fuse3 import FuseOSError, Operations
14
13
  from fuse3.c_fuse import fuse_config_p, fuse_conn_info_p
@@ -20,6 +19,8 @@ else:
20
19
  fuse_config_p = c_void_p
21
20
  fuse_conn_info_p = c_void_p
22
21
 
22
+ HAS_FUSE3 = False
23
+
23
24
 
24
25
  log = logging.getLogger(__name__)
25
26
 
@@ -1,6 +1,6 @@
1
1
  """Dissect plugin system.
2
2
 
3
- See dissect/target/plugins/general/example.py for an example plugin.
3
+ See ``dissect/target/plugins/general/example.py`` for an example plugin.
4
4
  """
5
5
 
6
6
  from __future__ import annotations
@@ -76,18 +76,19 @@ def export(*args, **kwargs) -> Callable:
76
76
  Supported keyword arguments:
77
77
  property (bool): Whether this export should be regarded as a property.
78
78
  Properties are implicitly cached.
79
+
79
80
  cache (bool): Whether the result of this function should be cached.
81
+
80
82
  record (RecordDescriptor): The :class:`flow.record.RecordDescriptor` for the records that this function yields.
81
83
  If the records are dynamically made, use DynamicRecord instead.
82
- output (str): The output type of this function. Can be one of:
83
84
 
85
+ output (str): The output type of this function. Must be one of:
84
86
  - default: Single return value
85
87
  - record: Yields records. Implicit when record argument is given.
86
88
  - yield: Yields printable values.
87
89
  - none: No return value. Plugin is responsible for output formatting and should return ``None``.
88
90
 
89
91
  The ``export`` decorator adds some additional private attributes to an exported method or property:
90
-
91
92
  - ``__output__``: The output type to expect for this function, this is the same as ``output``.
92
93
  - ``__record__``: The type of record to expect, this value is the same as ``record``.
93
94
  - ``__exported__``: set to ``True`` to indicate the method or property is exported.
@@ -173,7 +174,7 @@ class Plugin:
173
174
  class attribute. Namespacing results in your plugin needing to be prefixed
174
175
  with this namespace when being called. For example, if your plugin has
175
176
  specified ``test`` as namespace and a function called ``example``, you must
176
- call your plugin with ``test.example``::
177
+ call your plugin with ``test.example``.
177
178
 
178
179
  A ``Plugin`` class has the following private class attributes:
179
180
 
@@ -430,15 +431,13 @@ def register(plugincls: Type[Plugin]) -> None:
430
431
  """Register a plugin, and put related data inside :attr:`PLUGINS`.
431
432
 
432
433
  This function uses the following private attributes that are set using decorators:
433
-
434
- - ``__exported__``: Set in :func:`export`.
435
- - ``__internal__``: Set in :func:`internal`.
434
+ - ``__exported__``: Set in :func:`export`.
435
+ - ``__internal__``: Set in :func:`internal`.
436
436
 
437
437
  Additionally, ``register`` sets the following private attributes on the `plugincls`:
438
-
439
- - ``__plugin__``: Always set to ``True``.
440
- - ``__functions__``: A list of all the methods and properties that are ``__internal__`` or ``__exported__``.
441
- - ``__exports__``: A list of all the methods or properties that were explicitly exported.
438
+ - ``__plugin__``: Always set to ``True``.
439
+ - ``__functions__``: A list of all the methods and properties that are ``__internal__`` or ``__exported__``.
440
+ - ``__exports__``: A list of all the methods or properties that were explicitly exported.
442
441
 
443
442
  Args:
444
443
  plugincls: A plugin class to register.
@@ -1138,6 +1137,9 @@ class PluginFunction:
1138
1137
  method_name: str
1139
1138
  plugin_desc: PluginDescriptor = field(hash=False)
1140
1139
 
1140
+ def __repr__(self) -> str:
1141
+ return self.path
1142
+
1141
1143
 
1142
1144
  def plugin_function_index(target: Optional[Target]) -> tuple[dict[str, PluginDescriptor], set[str]]:
1143
1145
  """Returns an index-list for plugins.
@@ -1292,7 +1294,7 @@ def find_plugin_functions(
1292
1294
  path=index_name,
1293
1295
  class_object=loaded_plugin_object,
1294
1296
  method_name=method_name,
1295
- output_type=getattr(fobject, "__output__", "text"),
1297
+ output_type=getattr(fobject, "__output__", "none"),
1296
1298
  plugin_desc=func,
1297
1299
  )
1298
1300
  )
@@ -1337,7 +1339,7 @@ def find_plugin_functions(
1337
1339
  path=f"{description['module']}.{funcname}",
1338
1340
  class_object=loaded_plugin_object,
1339
1341
  method_name=funcname,
1340
- output_type=getattr(fobject, "__output__", "text"),
1342
+ output_type=getattr(fobject, "__output__", "none"),
1341
1343
  plugin_desc=description,
1342
1344
  )
1343
1345
  )
@@ -40,6 +40,8 @@ re_strip_tags = re.compile(r"<[^!][^>]*>")
40
40
 
41
41
 
42
42
  class McAfeePlugin(Plugin):
43
+ """McAfee antivirus plugin."""
44
+
43
45
  __namespace__ = "mcafee"
44
46
 
45
47
  DIRS = [
@@ -30,6 +30,8 @@ SophosLogRecord = TargetRecordDescriptor(
30
30
 
31
31
 
32
32
  class SophosPlugin(Plugin):
33
+ """Sophos antivirus plugin."""
34
+
33
35
  __namespace__ = "sophos"
34
36
 
35
37
  LOG_SOPHOS_HOME = "sysvol/ProgramData/Sophos/Clean/Logs/Clean.log"
@@ -51,6 +51,8 @@ c_pfwlog = cstruct().load(pfwlog_def)
51
51
 
52
52
 
53
53
  class TrendMicroPlugin(Plugin):
54
+ """TrendMicro antivirus plugin."""
55
+
54
56
  __namespace__ = "trendmicro"
55
57
 
56
58
  LOG_FOLDER = "sysvol/Program Files (x86)/Trend Micro/Security Agent"
@@ -608,6 +608,15 @@ def remove_padding(decrypted: bytes) -> bytes:
608
608
 
609
609
 
610
610
  def decrypt_v10(encrypted_password: bytes) -> str:
611
+ """Decrypt a version 10 encrypted password.
612
+
613
+ Args:
614
+ encrypted_password: The encrypted password bytes.
615
+
616
+ Returns:
617
+ Decrypted password string.
618
+ """
619
+
611
620
  if not HAS_CRYPTO:
612
621
  raise ValueError("Missing pycryptodome dependency for AES operation")
613
622
 
@@ -625,12 +634,24 @@ def decrypt_v10(encrypted_password: bytes) -> str:
625
634
 
626
635
 
627
636
  def decrypt_v10_2(encrypted_password: bytes, key: bytes) -> str:
628
- """
629
- struct chrome_pass {
630
- byte signature[3] = 'v10';
631
- byte iv[12];
632
- byte ciphertext[EOF];
633
- }
637
+ """Decrypt a version 10 type 2 password.
638
+
639
+ References:
640
+
641
+ .. code-block::
642
+
643
+ struct chrome_pass {
644
+ byte signature[3] = 'v10';
645
+ byte iv[12];
646
+ byte ciphertext[EOF];
647
+ }
648
+
649
+ Args:
650
+ encrypted_password: The encrypted password bytes.
651
+ key: The encryption key.
652
+
653
+ Returns:
654
+ Decrypted password string.
634
655
  """
635
656
 
636
657
  if not HAS_CRYPTO:
@@ -0,0 +1,23 @@
1
+ from dissect.target.plugin import NamespacePlugin, export
2
+
3
+ COMMON_EDITOR_FIELDS = [
4
+ ("datetime", "ts"),
5
+ ("string", "editor"),
6
+ ("path", "source"),
7
+ ]
8
+
9
+
10
+ class EditorPlugin(NamespacePlugin):
11
+ """Editor plugin."""
12
+
13
+ __namespace__ = "editor"
14
+
15
+ @export
16
+ def extensions(self) -> None:
17
+ """Yields installed extensions."""
18
+ raise NotImplementedError
19
+
20
+ @export
21
+ def history(self) -> None:
22
+ """Yields history of files."""
23
+ raise NotImplementedError
@@ -16,11 +16,8 @@ from dissect.target.helpers.record import (
16
16
  WindowsUserRecord,
17
17
  create_extended_descriptor,
18
18
  )
19
- from dissect.target.plugin import export
20
- from dissect.target.plugins.apps.texteditor.texteditor import (
21
- GENERIC_TAB_CONTENTS_RECORD_FIELDS,
22
- TexteditorPlugin,
23
- )
19
+ from dissect.target.plugin import alias, export
20
+ from dissect.target.plugins.apps.editor.editor import COMMON_EDITOR_FIELDS, EditorPlugin
24
21
  from dissect.target.target import Target
25
22
 
26
23
  # Thanks to @Nordgaren, @daddycocoaman, @JustArion and @ogmini for their suggestions and feedback in the PR
@@ -94,16 +91,25 @@ struct options_v2 {
94
91
  };
95
92
  """
96
93
 
97
- WINDOWS_SAVED_TABS_EXTRA_FIELDS = [("datetime", "modification_time"), ("digest", "hashes"), ("path", "saved_path")]
94
+ GENERIC_TAB_CONTENTS_RECORD_FIELDS = [
95
+ ("string", "content"),
96
+ ("path", "path"),
97
+ ("string", "deleted_content"),
98
+ ]
98
99
 
99
100
  WindowsNotepadUnsavedTabRecord = create_extended_descriptor([UserRecordDescriptorExtension])(
100
- "texteditor/windowsnotepad/tab/unsaved",
101
- GENERIC_TAB_CONTENTS_RECORD_FIELDS,
101
+ "application/editor/windowsnotepad/tab/unsaved",
102
+ COMMON_EDITOR_FIELDS + GENERIC_TAB_CONTENTS_RECORD_FIELDS,
102
103
  )
103
104
 
104
105
  WindowsNotepadSavedTabRecord = create_extended_descriptor([UserRecordDescriptorExtension])(
105
- "texteditor/windowsnotepad/tab/saved",
106
- GENERIC_TAB_CONTENTS_RECORD_FIELDS + WINDOWS_SAVED_TABS_EXTRA_FIELDS,
106
+ "application/editor/windowsnotepad/tab/saved",
107
+ COMMON_EDITOR_FIELDS
108
+ + GENERIC_TAB_CONTENTS_RECORD_FIELDS
109
+ + [
110
+ ("digest", "digest"),
111
+ ("path", "saved_path"),
112
+ ],
107
113
  )
108
114
 
109
115
  c_windowstab = cstruct().load(windowstab_def)
@@ -264,7 +270,7 @@ class WindowsNotepadTab:
264
270
  self.deleted_content = deleted_content if deleted_content else None
265
271
 
266
272
 
267
- class WindowsNotepadPlugin(TexteditorPlugin):
273
+ class WindowsNotepadPlugin(EditorPlugin):
268
274
  """Windows notepad tab content plugin."""
269
275
 
270
276
  __namespace__ = "windowsnotepad"
@@ -273,28 +279,27 @@ class WindowsNotepadPlugin(TexteditorPlugin):
273
279
 
274
280
  def __init__(self, target: Target):
275
281
  super().__init__(target)
276
- self.users_tabs: list[TargetPath, UnixUserRecord | WindowsUserRecord] = []
282
+ self.users_tabs: set[TargetPath, UnixUserRecord | WindowsUserRecord] = set()
277
283
  for user_details in self.target.user_details.all_with_home():
278
284
  for tab_file in user_details.home_path.glob(self.GLOB):
279
- # These files seem to contain information on different settings / configurations,
280
- # and are skipped for now
285
+ # These files contain information on different settings / configurations, and are skipped for now.
281
286
  if tab_file.name.endswith(".1.bin") or tab_file.name.endswith(".0.bin"):
282
287
  continue
283
288
 
284
- self.users_tabs.append((tab_file, user_details.user))
289
+ self.users_tabs.add((tab_file, user_details.user))
285
290
 
286
291
  def check_compatible(self) -> None:
287
292
  if not self.users_tabs:
288
293
  raise UnsupportedPluginError("No Windows Notepad tab files found")
289
294
 
295
+ @alias("tabs")
290
296
  @export(record=[WindowsNotepadSavedTabRecord, WindowsNotepadUnsavedTabRecord])
291
- def tabs(self) -> Iterator[WindowsNotepadSavedTabRecord | WindowsNotepadUnsavedTabRecord]:
297
+ def history(self) -> Iterator[WindowsNotepadSavedTabRecord | WindowsNotepadUnsavedTabRecord]:
292
298
  """Return contents from Windows 11 Notepad tabs - and its deleted content if available.
293
299
 
294
300
  Windows Notepad application for Windows 11 is now able to restore both saved and unsaved tabs when you re-open
295
301
  the application.
296
302
 
297
-
298
303
  Resources:
299
304
  - https://github.com/fox-it/dissect.target/pull/540
300
305
  - https://github.com/JustArion/Notepad-Tabs
@@ -304,37 +309,41 @@ class WindowsNotepadPlugin(TexteditorPlugin):
304
309
  - https://github.com/Nordgaren/tabstate-util/issues/1
305
310
  - https://medium.com/@mahmoudsoheem/new-digital-forensics-artifact-from-windows-notepad-527645906b7b
306
311
 
307
- Yields a WindowsNotepadSavedTabRecord or WindowsNotepadUnsavedTabRecord. with fields:
312
+ Yields ``WindowsNotepadSavedTabRecord`` or ``WindowsNotepadUnsavedTabRecord`` records:
308
313
 
309
314
  .. code-block:: text
310
315
 
311
- content (string): The content of the tab.
312
- path (path): The path to the tab file.
313
- deleted_content (string): The deleted content of the tab, if available.
314
- hashes (digest): A digest of the tab content.
315
- saved_path (path): The path where the tab was saved.
316
- modification_time (datetime): The modification time of the tab.
316
+ ts (datetime): The modification time of the tab.
317
+ content (string): The content of the tab.
318
+ path (path): The path to the tab file.
319
+ deleted_content (string): The deleted content of the tab, if available.
320
+ digest (digest): A digest of the tab content.
321
+ saved_path (path): The path where the tab was saved.
317
322
  """
318
323
  for file, user in self.users_tabs:
319
- # Parse the file
320
- tab: WindowsNotepadTab = WindowsNotepadTab(file)
324
+ tab = WindowsNotepadTab(file)
321
325
 
322
326
  if tab.is_saved:
323
327
  yield WindowsNotepadSavedTabRecord(
328
+ ts=wintimestamp(tab.tab_header.timestamp),
329
+ editor="windowsnotepad",
324
330
  content=tab.content,
325
331
  path=tab.file,
326
332
  deleted_content=tab.deleted_content,
327
- hashes=digest((None, None, tab.tab_header.sha256.hex())),
333
+ digest=digest((None, None, tab.tab_header.sha256.hex())),
328
334
  saved_path=tab.tab_header.filePath,
329
- modification_time=wintimestamp(tab.tab_header.timestamp),
330
- _target=self.target,
335
+ source=file,
331
336
  _user=user,
337
+ _target=self.target,
332
338
  )
339
+
333
340
  else:
334
341
  yield WindowsNotepadUnsavedTabRecord(
342
+ editor="windowsnotepad",
335
343
  content=tab.content,
344
+ deleted_content=tab.deleted_content,
336
345
  path=tab.file,
337
- _target=self.target,
346
+ source=file,
338
347
  _user=user,
339
- deleted_content=tab.deleted_content,
348
+ _target=self.target,
340
349
  )
@@ -1,3 +1,5 @@
1
+ from typing import Iterator
2
+
1
3
  from dissect.target.exceptions import UnsupportedPluginError
2
4
  from dissect.target.helpers.descriptor_extensions import UserRecordDescriptorExtension
3
5
  from dissect.target.helpers.record import create_extended_descriptor
@@ -14,6 +16,8 @@ ConsoleHostHistoryRecord = create_extended_descriptor([UserRecordDescriptorExten
14
16
 
15
17
 
16
18
  class PowerShellHistoryPlugin(Plugin):
19
+ """Windows PowerShell history plugin."""
20
+
17
21
  PATHS = [
18
22
  "AppData/Roaming/Microsoft/Windows/PowerShell/psreadline",
19
23
  ".local/share/powershell/PSReadLine",
@@ -35,10 +39,10 @@ class PowerShellHistoryPlugin(Plugin):
35
39
  raise UnsupportedPluginError("No ConsoleHost_history.txt files found")
36
40
 
37
41
  @export(record=ConsoleHostHistoryRecord)
38
- def powershell_history(self):
42
+ def powershell_history(self) -> Iterator[ConsoleHostHistoryRecord]:
39
43
  """Return PowerShell command history for all users.
40
44
 
41
- The PowerShell ConsoleHost_history.txt file contains information about the commands executed with PowerShell in
45
+ The PowerShell ``ConsoleHost_history.txt`` file contains information about the commands executed with PowerShell in
42
46
  a terminal. No data is recorded from terminal-less PowerShell sessions. Commands are saved to disk after the process has completed.
43
47
  PSReadLine does not save commands containing 'password', 'asplaintext', 'token', 'apikey' or 'secret'.
44
48
 
@@ -52,7 +52,7 @@ class WgetPlugin(Plugin):
52
52
  - https://gitlab.com/gnuwget/wget/-/blob/master/src/hsts.c
53
53
  - https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security
54
54
 
55
- Yields ``WgetHstsRecord``s with the following fields:
55
+ Yields ``WgetHstsRecord`` records with the following fields:
56
56
 
57
57
  .. code-block:: text
58
58
 
@@ -31,6 +31,8 @@ def find_sshd_directory(target: Target) -> TargetPath:
31
31
 
32
32
 
33
33
  class OpenSSHPlugin(SSHPlugin):
34
+ """OpenSSH plugin."""
35
+
34
36
  __namespace__ = "openssh"
35
37
 
36
38
  SSHD_DIRECTORIES = ["/sysvol/ProgramData/ssh", "/etc/ssh"]
@@ -74,6 +74,8 @@ SSHD_MULTIPLE_DEFINITIONS_ALLOWED_FIELDS = (
74
74
 
75
75
 
76
76
  class SSHServerPlugin(SSHPlugin):
77
+ """OpenSSHd server plugin."""
78
+
77
79
  __namespace__ = "opensshd"
78
80
 
79
81
  def __init__(self, target: Target):
@@ -52,15 +52,13 @@ class WireGuardPlugin(Plugin):
52
52
 
53
53
  __namespace__ = "wireguard"
54
54
 
55
- """
56
- TODO: NetworkManager uses a different stanza format
57
- "/etc/NetworkManager/system-connections/Wireguard*",
58
- TODO: systemd uses a different stanza format
59
- "/etc/systemd/network/wg*.netdev",
60
- "/etc/systemd/network/*wg*.netdev",
61
- TODO: other locations such as $HOME/.config/wireguard
62
- TODO: parse native network manager formats from MacOS, Ubuntu and Windows.
63
- """
55
+ # TODO: NetworkManager uses a different stanza format
56
+ # "/etc/NetworkManager/system-connections/Wireguard*",
57
+ # TODO: systemd uses a different stanza format
58
+ # "/etc/systemd/network/wg*.netdev",
59
+ # "/etc/systemd/network/*wg*.netdev",
60
+ # TODO: other locations such as $HOME/.config/wireguard
61
+ # TODO: parse native network manager formats from MacOS, Ubuntu and Windows.
64
62
 
65
63
  CONFIG_GLOBS = [
66
64
  # Linux
@@ -160,6 +158,8 @@ def _parse_config(content: str) -> ConfigParser:
160
158
 
161
159
 
162
160
  class MultiDict(OrderedDict):
161
+ """OrderedDict implementation which allows multiple values for the keys ``Peer`` and ``Interface``."""
162
+
163
163
  def __init__(self, *args, **kwargs):
164
164
  self._unique = 0
165
165
  super().__init__(*args, **kwargs)
@@ -23,6 +23,8 @@ CPANEL_LASTLOGIN_PATTERN = re.compile(
23
23
 
24
24
 
25
25
  class CPanelPlugin(Plugin):
26
+ """cPanel webhosting plugin."""
27
+
26
28
  # TODO: Parse other log files https://support.cartika.com/portal/en/kb/articles/whm-cpanel-log-files-and-locations
27
29
  __namespace__ = "cpanel"
28
30
 
@@ -22,6 +22,8 @@ LOG_REGEX = re.compile(
22
22
 
23
23
 
24
24
  class CaddyPlugin(WebserverPlugin):
25
+ """Caddy webserver plugin."""
26
+
25
27
  __namespace__ = "caddy"
26
28
 
27
29
  def __init__(self, target: Target):
@@ -18,6 +18,8 @@ LOG_REGEX = re.compile(
18
18
 
19
19
 
20
20
  class NginxPlugin(WebserverPlugin):
21
+ """Nginx webserver plugin."""
22
+
21
23
  __namespace__ = "nginx"
22
24
 
23
25
  def __init__(self, target: Target):