souleyez 2.24.0__tar.gz → 2.26.0__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 (400) hide show
  1. {souleyez-2.24.0 → souleyez-2.26.0}/BETA_README.md +12 -1
  2. {souleyez-2.24.0/souleyez.egg-info → souleyez-2.26.0}/PKG-INFO +13 -2
  3. {souleyez-2.24.0 → souleyez-2.26.0}/pyproject.toml +2 -2
  4. souleyez-2.26.0/souleyez/__init__.py +1 -0
  5. souleyez-2.26.0/souleyez/assets/__init__.py +1 -0
  6. souleyez-2.26.0/souleyez/assets/souleyez-icon.png +0 -0
  7. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/tool_chaining.py +126 -26
  8. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/README.md +1 -1
  9. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/installation.md +11 -0
  10. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/background.py +17 -1
  11. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/result_handler.py +89 -0
  12. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/main.py +93 -1
  13. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/crackmapexec_parser.py +101 -43
  14. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/dnsrecon_parser.py +50 -35
  15. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/enum4linux_parser.py +101 -21
  16. souleyez-2.26.0/souleyez/parsers/http_fingerprint_parser.py +319 -0
  17. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/hydra_parser.py +56 -5
  18. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/impacket_parser.py +123 -44
  19. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/john_parser.py +47 -14
  20. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/msf_parser.py +20 -5
  21. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/nmap_parser.py +48 -27
  22. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/smbmap_parser.py +39 -23
  23. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/sqlmap_parser.py +18 -9
  24. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/theharvester_parser.py +21 -13
  25. souleyez-2.26.0/souleyez/plugins/http_fingerprint.py +592 -0
  26. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/nuclei.py +41 -17
  27. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/interactive.py +96 -4
  28. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/setup_wizard.py +71 -0
  29. {souleyez-2.24.0 → souleyez-2.26.0/souleyez.egg-info}/PKG-INFO +13 -2
  30. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez.egg-info/SOURCES.txt +4 -0
  31. souleyez-2.24.0/souleyez/__init__.py +0 -1
  32. {souleyez-2.24.0 → souleyez-2.26.0}/LICENSE +0 -0
  33. {souleyez-2.24.0 → souleyez-2.26.0}/MANIFEST.in +0 -0
  34. {souleyez-2.24.0 → souleyez-2.26.0}/README.md +0 -0
  35. {souleyez-2.24.0 → souleyez-2.26.0}/setup.cfg +0 -0
  36. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/__init__.py +0 -0
  37. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/action_mapper.py +0 -0
  38. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/chain_advisor.py +0 -0
  39. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/claude_provider.py +0 -0
  40. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/context_builder.py +0 -0
  41. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/executor.py +0 -0
  42. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/feedback_handler.py +0 -0
  43. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/llm_factory.py +0 -0
  44. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/llm_provider.py +0 -0
  45. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/ollama_provider.py +0 -0
  46. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/ollama_service.py +0 -0
  47. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/path_scorer.py +0 -0
  48. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/recommender.py +0 -0
  49. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/report_context.py +0 -0
  50. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/report_prompts.py +0 -0
  51. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/report_service.py +0 -0
  52. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/result_parser.py +0 -0
  53. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ai/safety.py +0 -0
  54. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/__init__.py +0 -0
  55. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/audit.py +0 -0
  56. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/engagement_access.py +0 -0
  57. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/permissions.py +0 -0
  58. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/session_manager.py +0 -0
  59. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/auth/user_manager.py +0 -0
  60. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/__init__.py +0 -0
  61. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/audit.py +0 -0
  62. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/auth.py +0 -0
  63. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/deliverables.py +0 -0
  64. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/engagement.py +0 -0
  65. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/license.py +0 -0
  66. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/screenshots.py +0 -0
  67. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/commands/user.py +0 -0
  68. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/config.py +0 -0
  69. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/__init__.py +0 -0
  70. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/credential_tester.py +0 -0
  71. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/cve_mappings.py +0 -0
  72. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/cve_matcher.py +0 -0
  73. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_auto_mapper.py +0 -0
  74. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_chain_engine.py +0 -0
  75. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_database.py +0 -0
  76. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_integration.py +0 -0
  77. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_rpc_client.py +0 -0
  78. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_rpc_manager.py +0 -0
  79. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/msf_sync_manager.py +0 -0
  80. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/network_utils.py +0 -0
  81. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/parser_handler.py +0 -0
  82. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/pending_chains.py +0 -0
  83. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/templates.py +0 -0
  84. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/version_utils.py +0 -0
  85. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/vuln_correlation.py +0 -0
  86. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/core/web_utils.py +0 -0
  87. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/README.md +0 -0
  88. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/active_directory.json +0 -0
  89. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/cis_controls_v8.json +0 -0
  90. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/cloud_security.json +0 -0
  91. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/cmmc_2.0.json +0 -0
  92. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/external_network.json +0 -0
  93. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/ffiec_cat.json +0 -0
  94. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/gdpr_article32.json +0 -0
  95. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/glba_safeguards.json +0 -0
  96. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/hipaa_security.json +0 -0
  97. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/hitrust_csf.json +0 -0
  98. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/internal_network.json +0 -0
  99. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/iso27001.json +0 -0
  100. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/nerc_cip.json +0 -0
  101. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/nist_csf.json +0 -0
  102. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/owasp_top10_2021.json +0 -0
  103. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/pci_dss_4.0.json +0 -0
  104. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/ptes_standard.json +0 -0
  105. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/red_team.json +0 -0
  106. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/soc2_type2.json +0 -0
  107. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/templates/webapp_advanced.json +0 -0
  108. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/README.md +0 -0
  109. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/all_users.txt +0 -0
  110. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/api_endpoints.txt +0 -0
  111. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/default_credentials.txt +0 -0
  112. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/macos_users.txt +0 -0
  113. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/router_passwords.txt +0 -0
  114. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/router_users.txt +0 -0
  115. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/soul_pass.txt +0 -0
  116. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/soul_users.txt +0 -0
  117. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/subdomains_common.txt +0 -0
  118. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/top100.txt +0 -0
  119. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/top20_quick.txt +0 -0
  120. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/vnc_passwords.txt +0 -0
  121. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/web_dirs_common.txt +0 -0
  122. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/web_extensions.txt +0 -0
  123. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/data/wordlists/web_files_common.txt +0 -0
  124. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/detection/__init__.py +0 -0
  125. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/detection/attack_signatures.py +0 -0
  126. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/detection/mitre_mappings.py +0 -0
  127. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/detection/validator.py +0 -0
  128. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/devtools.py +0 -0
  129. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/api-reference/cli-commands.md +0 -0
  130. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/api-reference/engagement-api.md +0 -0
  131. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/api-reference/integration-guide.md +0 -0
  132. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/api-reference/parser-formats.md +0 -0
  133. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/architecture/decisions/000-template.md +0 -0
  134. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/architecture/decisions/001-local-llm-over-cloud.md +0 -0
  135. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/architecture/decisions/002-master-password-approach.md +0 -0
  136. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/architecture/decisions/003-database-schema-design.md +0 -0
  137. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/architecture/overview.md +0 -0
  138. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/database/MIGRATIONS.md +0 -0
  139. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/database/SCHEMA.md +0 -0
  140. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/database/SCHEMA_ERD.md +0 -0
  141. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/developer-guide/test_coverage_plan.md +0 -0
  142. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/developer-guide/ui-design-system.md +0 -0
  143. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/images/README.md +0 -0
  144. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/security/best-practices.md +0 -0
  145. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/security/credential-encryption.md +0 -0
  146. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/security/password-protected-commands.md +0 -0
  147. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/security/secure-defaults.md +0 -0
  148. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/security/threat-model.md +0 -0
  149. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/ai-integration.md +0 -0
  150. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/attack-surface.md +0 -0
  151. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/auto-chaining.md +0 -0
  152. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/configuration.md +0 -0
  153. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/deliverables-screenshots.md +0 -0
  154. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/dependencies.md +0 -0
  155. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/evidence-vault.md +0 -0
  156. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/exploit-suggestions.md +0 -0
  157. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/getting-started.md +0 -0
  158. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/metasploit-integration.md +0 -0
  159. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/rbac.md +0 -0
  160. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/report-generation.md +0 -0
  161. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/siem-integration.md +0 -0
  162. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/tools-reference.md +0 -0
  163. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/troubleshooting.md +0 -0
  164. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/uninstall.md +0 -0
  165. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/worker-management.md +0 -0
  166. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/docs/user-guide/workflows.md +0 -0
  167. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/__init__.py +0 -0
  168. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/base.py +0 -0
  169. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/job_status.py +0 -0
  170. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/loader.py +0 -0
  171. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/log_sanitizer.py +0 -0
  172. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/manager.py +0 -0
  173. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/engine/worker_manager.py +0 -0
  174. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/export/__init__.py +0 -0
  175. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/export/evidence_bundle.py +0 -0
  176. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/feature_flags/__init__.py +0 -0
  177. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/feature_flags/features.py +0 -0
  178. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/feature_flags.py +0 -0
  179. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/history.py +0 -0
  180. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/importers/__init__.py +0 -0
  181. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/importers/msf_importer.py +0 -0
  182. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/importers/smart_importer.py +0 -0
  183. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/__init__.py +0 -0
  184. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/__init__.py +0 -0
  185. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/base.py +0 -0
  186. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/elastic.py +0 -0
  187. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/factory.py +0 -0
  188. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/rule_mappings/__init__.py +0 -0
  189. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/rule_mappings/wazuh_rules.py +0 -0
  190. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/sentinel.py +0 -0
  191. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/splunk.py +0 -0
  192. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/siem/wazuh.py +0 -0
  193. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/wazuh/__init__.py +0 -0
  194. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/wazuh/client.py +0 -0
  195. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/wazuh/config.py +0 -0
  196. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/wazuh/host_mapper.py +0 -0
  197. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/integrations/wazuh/sync.py +0 -0
  198. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/__init__.py +0 -0
  199. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/correlation_analyzer.py +0 -0
  200. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/exploit_knowledge.py +0 -0
  201. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/exploit_suggestions.py +0 -0
  202. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/gap_analyzer.py +0 -0
  203. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/gap_detector.py +0 -0
  204. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/sensitive_tables.py +0 -0
  205. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/service_parser.py +0 -0
  206. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/surface_analyzer.py +0 -0
  207. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/intelligence/target_parser.py +0 -0
  208. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/licensing/__init__.py +0 -0
  209. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/licensing/validator.py +0 -0
  210. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/log_config.py +0 -0
  211. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/migrations/__init__.py +0 -0
  212. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/migrations/fix_job_counter.py +0 -0
  213. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/__init__.py +0 -0
  214. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/bloodhound_parser.py +0 -0
  215. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/dalfox_parser.py +0 -0
  216. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/ffuf_parser.py +0 -0
  217. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/gobuster_parser.py +0 -0
  218. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/hashcat_parser.py +0 -0
  219. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/nikto_parser.py +0 -0
  220. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/nuclei_parser.py +0 -0
  221. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/responder_parser.py +0 -0
  222. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/searchsploit_parser.py +0 -0
  223. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/whois_parser.py +0 -0
  224. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/parsers/wpscan_parser.py +0 -0
  225. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/__init__.py +0 -0
  226. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/afp.py +0 -0
  227. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/afp_brute.py +0 -0
  228. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/ard.py +0 -0
  229. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/bloodhound.py +0 -0
  230. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/crackmapexec.py +0 -0
  231. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/dalfox.py +0 -0
  232. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/dns_hijack.py +0 -0
  233. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/dnsrecon.py +0 -0
  234. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/enum4linux.py +0 -0
  235. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/ffuf.py +0 -0
  236. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/firmware_extract.py +0 -0
  237. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/gobuster.py +0 -0
  238. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/hashcat.py +0 -0
  239. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/hydra.py +0 -0
  240. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/impacket_getnpusers.py +0 -0
  241. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/impacket_psexec.py +0 -0
  242. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/impacket_secretsdump.py +0 -0
  243. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/impacket_smbclient.py +0 -0
  244. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/john.py +0 -0
  245. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/macos_ssh.py +0 -0
  246. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/mdns.py +0 -0
  247. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/msf_auxiliary.py +0 -0
  248. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/msf_exploit.py +0 -0
  249. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/nikto.py +0 -0
  250. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/nmap.py +0 -0
  251. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/plugin_base.py +0 -0
  252. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/plugin_template.py +0 -0
  253. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/responder.py +0 -0
  254. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/router_http_brute.py +0 -0
  255. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/router_ssh_brute.py +0 -0
  256. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/router_telnet_brute.py +0 -0
  257. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/routersploit.py +0 -0
  258. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/routersploit_exploit.py +0 -0
  259. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/searchsploit.py +0 -0
  260. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/smbmap.py +0 -0
  261. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/sqlmap.py +0 -0
  262. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/theharvester.py +0 -0
  263. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/tr069.py +0 -0
  264. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/upnp.py +0 -0
  265. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/upnp_abuse.py +0 -0
  266. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/vnc_access.py +0 -0
  267. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/vnc_brute.py +0 -0
  268. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/whois.py +0 -0
  269. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/plugins/wpscan.py +0 -0
  270. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/__init__.py +0 -0
  271. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/attack_chain.py +0 -0
  272. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/charts.py +0 -0
  273. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/compliance_mappings.py +0 -0
  274. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/detection_report.py +0 -0
  275. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/formatters.py +0 -0
  276. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/generator.py +0 -0
  277. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/reporting/metrics.py +0 -0
  278. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/scanner.py +0 -0
  279. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/security/__init__.py +0 -0
  280. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/security/validation.py +0 -0
  281. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/security.py +0 -0
  282. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/__init__.py +0 -0
  283. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/credentials.py +0 -0
  284. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/crypto.py +0 -0
  285. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/database.py +0 -0
  286. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/db.py +0 -0
  287. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/deliverable_evidence.py +0 -0
  288. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/deliverable_exporter.py +0 -0
  289. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/deliverable_templates.py +0 -0
  290. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/deliverables.py +0 -0
  291. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/engagements.py +0 -0
  292. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/evidence.py +0 -0
  293. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/execution_log.py +0 -0
  294. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/exploit_attempts.py +0 -0
  295. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/exploits.py +0 -0
  296. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/findings.py +0 -0
  297. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/hosts.py +0 -0
  298. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrate_to_engagements.py +0 -0
  299. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_001_add_credential_enhancements.py +0 -0
  300. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_002_add_status_tracking.py +0 -0
  301. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_003_add_execution_log.py +0 -0
  302. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_005_screenshots.py +0 -0
  303. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_006_deliverables.py +0 -0
  304. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_007_deliverable_templates.py +0 -0
  305. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_008_add_nuclei_table.py +0 -0
  306. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_009_add_cme_tables.py +0 -0
  307. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_010_evidence_linking.py +0 -0
  308. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_011_timeline_tracking.py +0 -0
  309. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_012_team_collaboration.py +0 -0
  310. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_013_add_host_tags.py +0 -0
  311. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_014_exploit_attempts.py +0 -0
  312. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_015_add_mac_os_fields.py +0 -0
  313. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_016_add_domain_field.py +0 -0
  314. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_017_msf_sessions.py +0 -0
  315. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_018_add_osint_target.py +0 -0
  316. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_019_add_engagement_type.py +0 -0
  317. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_020_add_rbac.py +0 -0
  318. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_021_wazuh_integration.py +0 -0
  319. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_022_wazuh_indexer_columns.py +0 -0
  320. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_023_fix_detection_results_fk.py +0 -0
  321. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +0 -0
  322. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/_025_multi_siem_support.py +0 -0
  323. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/__init__.py +0 -0
  324. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/migrations/migration_manager.py +0 -0
  325. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/msf_sessions.py +0 -0
  326. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/osint.py +0 -0
  327. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/recommendation_engine.py +0 -0
  328. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/schema.sql +0 -0
  329. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/screenshots.py +0 -0
  330. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/smb_shares.py +0 -0
  331. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/sqlmap_data.py +0 -0
  332. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/team_collaboration.py +0 -0
  333. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/timeline_tracker.py +0 -0
  334. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/wazuh_vulns.py +0 -0
  335. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/storage/web_paths.py +0 -0
  336. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/testing/__init__.py +0 -0
  337. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/testing/credential_tester.py +0 -0
  338. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/__init__.py +0 -0
  339. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/ai_quotes.py +0 -0
  340. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/attack_surface.py +0 -0
  341. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/chain_rules_view.py +0 -0
  342. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/correlation_view.py +0 -0
  343. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/dashboard.py +0 -0
  344. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/deliverables_view.py +0 -0
  345. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/design_system.py +0 -0
  346. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/errors.py +0 -0
  347. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/evidence_linking_view.py +0 -0
  348. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/evidence_vault.py +0 -0
  349. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/exploit_suggestions_view.py +0 -0
  350. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/export_view.py +0 -0
  351. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/gap_analysis_view.py +0 -0
  352. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/help_system.py +0 -0
  353. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/intelligence_view.py +0 -0
  354. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/interactive_selector.py +0 -0
  355. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/log_formatter.py +0 -0
  356. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/menu_components.py +0 -0
  357. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/msf_auxiliary_menu.py +0 -0
  358. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/pending_chains_view.py +0 -0
  359. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/progress_indicators.py +0 -0
  360. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/recommendations_view.py +0 -0
  361. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/rule_builder.py +0 -0
  362. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/shortcuts.py +0 -0
  363. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/splunk_gap_analysis_view.py +0 -0
  364. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/splunk_vulns_view.py +0 -0
  365. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/team_dashboard.py +0 -0
  366. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/template_selector.py +0 -0
  367. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/terminal.py +0 -0
  368. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/timeline_view.py +0 -0
  369. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/tool_setup.py +0 -0
  370. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/tutorial.py +0 -0
  371. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/tutorial_state.py +0 -0
  372. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui/wazuh_vulns_view.py +0 -0
  373. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/ui.py +0 -0
  374. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/utils/__init__.py +0 -0
  375. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/utils/tool_checker.py +0 -0
  376. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/utils.py +0 -0
  377. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez/wordlists.py +0 -0
  378. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez.egg-info/dependency_links.txt +0 -0
  379. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez.egg-info/entry_points.txt +0 -0
  380. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez.egg-info/requires.txt +0 -0
  381. {souleyez-2.24.0 → souleyez-2.26.0}/souleyez.egg-info/top_level.txt +0 -0
  382. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_config.py +0 -0
  383. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_config_enhanced.py +0 -0
  384. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_crypto.py +0 -0
  385. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_database_100_final.py +0 -0
  386. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_engagements.py +0 -0
  387. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_engagements_simple.py +0 -0
  388. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_job_status_tracking.py +0 -0
  389. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_logging.py +0 -0
  390. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_network_utils.py +0 -0
  391. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_ollama_service.py +0 -0
  392. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_plugin_base.py +0 -0
  393. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_recommender.py +0 -0
  394. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_result_handler_sqlmap.py +0 -0
  395. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_schema.py +0 -0
  396. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_security_hardening.py +0 -0
  397. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_security_validation.py +0 -0
  398. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_sqlmap_parser.py +0 -0
  399. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_storage.py +0 -0
  400. {souleyez-2.24.0 → souleyez-2.26.0}/tests/test_version_utils.py +0 -0
@@ -21,7 +21,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
21
21
 
22
22
  > ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
23
23
 
24
- ## Version: 2.24.0
24
+ ## Version: 2.26.0
25
25
 
26
26
  ### What's Included
27
27
 
@@ -59,6 +59,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
59
59
  - **Python**: 3.8 or newer
60
60
  - **Storage**: ~500MB for SoulEyez + tools
61
61
 
62
+ > **🐉 Kali Linux Recommended**
63
+ >
64
+ > SoulEyez performs significantly better on **Kali Linux** than other distributions:
65
+ > - All pentesting tools pre-installed and optimized
66
+ > - Metasploit database and RPC already configured
67
+ > - Security-focused kernel and networking stack
68
+ > - No dependency hunting or version conflicts
69
+ > - Wordlists, databases, and tool configs ready to go
70
+ >
71
+ > While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
72
+
62
73
  ### Known Issues
63
74
 
64
75
  - Very large scan outputs (>10MB) may slow the interface
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.24.0
3
+ Version: 2.26.0
4
4
  Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
5
5
  Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
6
6
  Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
@@ -72,7 +72,7 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
72
72
 
73
73
  > ⚠️ **Important**: Only use SoulEyez on systems you have explicit authorization to test.
74
74
 
75
- ## Version: 2.24.0
75
+ ## Version: 2.26.0
76
76
 
77
77
  ### What's Included
78
78
 
@@ -110,6 +110,17 @@ Welcome to the SoulEyez beta! Thank you for helping us test and improve this pen
110
110
  - **Python**: 3.8 or newer
111
111
  - **Storage**: ~500MB for SoulEyez + tools
112
112
 
113
+ > **🐉 Kali Linux Recommended**
114
+ >
115
+ > SoulEyez performs significantly better on **Kali Linux** than other distributions:
116
+ > - All pentesting tools pre-installed and optimized
117
+ > - Metasploit database and RPC already configured
118
+ > - Security-focused kernel and networking stack
119
+ > - No dependency hunting or version conflicts
120
+ > - Wordlists, databases, and tool configs ready to go
121
+ >
122
+ > While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
123
+
113
124
  ### Known Issues
114
125
 
115
126
  - Very large scan outputs (>10MB) may slow the interface
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "souleyez"
7
- version = "2.24.0"
7
+ version = "2.26.0"
8
8
  description = "AI-Powered Penetration Testing Platform with 40+ integrated tools"
9
9
  readme = "BETA_README.md"
10
10
  license = {text = "MIT"}
@@ -71,7 +71,7 @@ include = ["souleyez*"]
71
71
  exclude = ["tests*", "scripts*", "reports*", "venv*", "debian*"]
72
72
 
73
73
  [tool.setuptools.package-data]
74
- souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md"]
74
+ souleyez = ["docs/**/*.md", "data/wordlists/*.txt", "data/wordlists/*.md", "data/templates/*.json", "data/templates/*.md", "assets/*.png"]
75
75
 
76
76
  [tool.pytest.ini_options]
77
77
  testpaths = ["tests"]
@@ -0,0 +1 @@
1
+ __version__ = '2.26.0'
@@ -0,0 +1 @@
1
+ # SoulEyez assets package
@@ -15,6 +15,17 @@ CATEGORY_CTF = "ctf" # Lab/learning scenarios - vulnerable by design
15
15
  CATEGORY_ENTERPRISE = "enterprise" # Real-world enterprise testing
16
16
  CATEGORY_GENERAL = "general" # Standard recon that applies everywhere
17
17
 
18
+ # Managed hosting platforms - skip CGI enumeration (pointless on these)
19
+ # These are detected from server headers/banners and product names
20
+ MANAGED_HOSTING_PLATFORMS = {
21
+ 'squarespace', 'wix', 'shopify', 'webflow', 'weebly',
22
+ 'wordpress.com', 'ghost.io', 'medium', 'tumblr', 'blogger',
23
+ 'netlify', 'vercel', 'github.io', 'pages.dev', 'cloudflare',
24
+ 'heroku', 'railway', 'render.com', 'fly.io',
25
+ 'aws cloudfront', 'akamai', 'fastly', 'cloudflare',
26
+ 'azure', 'google cloud', 'firebase',
27
+ }
28
+
18
29
  # Category display icons
19
30
  CATEGORY_ICONS = {
20
31
  CATEGORY_CTF: "🎯",
@@ -140,6 +151,75 @@ def classify_os_device(os_string: str, services: list) -> dict:
140
151
  return {'os_family': 'unknown', 'device_type': 'unknown', 'vendor': None}
141
152
 
142
153
 
154
+ def is_managed_hosting(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> bool:
155
+ """
156
+ Detect if target is a managed hosting platform.
157
+
158
+ These platforms don't have CGI directories, so tools like nikto
159
+ should skip CGI enumeration to avoid long, pointless scans.
160
+
161
+ Args:
162
+ services: List of service dicts from nmap parser
163
+ http_fingerprint: Optional fingerprint data from http_fingerprint plugin
164
+
165
+ Returns:
166
+ True if managed hosting detected, False otherwise
167
+ """
168
+ # Check fingerprint data first (most reliable, comes from actual HTTP headers)
169
+ if http_fingerprint:
170
+ managed = http_fingerprint.get('managed_hosting')
171
+ if managed:
172
+ return True
173
+
174
+ # Fall back to checking services data (less reliable, from nmap banners)
175
+ for service in services:
176
+ # Check product field
177
+ product = (service.get('product') or '').lower()
178
+ raw_version = (service.get('raw_version') or '').lower()
179
+ service_name = (service.get('service') or '').lower()
180
+
181
+ # Combine all fields for matching
182
+ combined = f"{product} {raw_version} {service_name}"
183
+
184
+ # Check against known managed hosting platforms
185
+ for platform in MANAGED_HOSTING_PLATFORMS:
186
+ if platform in combined:
187
+ return True
188
+
189
+ return False
190
+
191
+
192
+ def get_managed_hosting_platform(services: List[Dict[str, Any]], http_fingerprint: Dict[str, Any] = None) -> Optional[str]:
193
+ """
194
+ Get the name of the managed hosting platform if detected.
195
+
196
+ Args:
197
+ services: List of service dicts from nmap parser
198
+ http_fingerprint: Optional fingerprint data from http_fingerprint plugin
199
+
200
+ Returns:
201
+ Platform name or None
202
+ """
203
+ # Check fingerprint data first
204
+ if http_fingerprint:
205
+ managed = http_fingerprint.get('managed_hosting')
206
+ if managed:
207
+ return managed
208
+
209
+ # Fall back to services check
210
+ for service in services:
211
+ product = (service.get('product') or '').lower()
212
+ raw_version = (service.get('raw_version') or '').lower()
213
+ service_name = (service.get('service') or '').lower()
214
+ combined = f"{product} {raw_version} {service_name}"
215
+
216
+ for platform in MANAGED_HOSTING_PLATFORMS:
217
+ if platform in combined:
218
+ return platform.title()
219
+
220
+ return None
221
+
222
+
143
223
  # Technology to Nuclei tags mapping
144
224
  # Maps detected products/technologies to relevant nuclei template tags
145
225
  TECH_TO_NUCLEI_TAGS = {
@@ -575,6 +655,25 @@ class ChainRule:
575
655
  new_args.append(arg)
576
656
  args = new_args
577
657
 
658
+ # For Nikto: Skip CGI enumeration on managed hosting platforms
659
+ # This prevents long, pointless scans on Squarespace, Wix, etc.
660
+ if self.target_tool == 'nikto':
661
+ services = context.get('services', [])
662
+ http_fingerprint = context.get('http_fingerprint', {})
663
+ if is_managed_hosting(services, http_fingerprint):
664
+ # Add -C none to skip CGI dirs (pointless on managed hosting)
665
+ if '-C' not in str(args):
666
+ args.extend(['-C', 'none'])
667
+ # Add -Tuning x6 to skip remote file inclusion tests
668
+ if '-Tuning' not in str(args):
669
+ args.extend(['-Tuning', 'x6'])
670
+ # Log which platform was detected
671
+ platform = get_managed_hosting_platform(services, http_fingerprint)
672
+ if platform:
673
+ from souleyez.log_config import get_logger
674
+ logger = get_logger(__name__)
675
+ logger.info(f"[FINGERPRINT] Managed hosting detected ({platform}) - nikto using optimized scan config")
676
+
578
677
  # For SQLMap with POST injections, add --data if we have POST data
579
678
  if self.target_tool == 'sqlmap' and post_data and '--data' not in str(args):
580
679
  # Insert --data after -u argument
@@ -642,32 +741,42 @@ class ToolChaining:
642
741
 
643
742
  # Web service discovered → run web scanners
644
743
  self.rules.extend([
645
- # Modern vulnerability scanner (Nuclei) - PRIORITY
646
- # Uses {nuclei_tags} placeholder to auto-detect tech and run relevant templates
744
+ # HTTP Fingerprinting - runs FIRST to detect WAF/CDN/managed hosting
745
+ # This enables smarter tool configuration for downstream scanners
647
746
  ChainRule(
648
747
  trigger_tool='nmap',
649
748
  trigger_condition='service:http',
749
+ target_tool='http_fingerprint',
750
+ priority=11, # Highest priority - runs before all other web tools
751
+ args_template=[],
752
+ description='Web server detected, fingerprinting for WAF/CDN/platform detection'
753
+ ),
754
+ # Nikto triggered by http_fingerprint (uses fingerprint data for smart config)
755
+ ChainRule(
756
+ trigger_tool='http_fingerprint',
757
+ trigger_condition='has:services',
758
+ target_tool='nikto',
759
+ priority=8,
760
+ args_template=['-nointeractive', '-timeout', '10'],
761
+ description='Fingerprinting complete, scanning for server misconfigurations with Nikto'
762
+ ),
763
+ # Nuclei triggered by http_fingerprint
764
+ ChainRule(
765
+ trigger_tool='http_fingerprint',
766
+ trigger_condition='has:services',
650
767
  target_tool='nuclei',
651
768
  priority=9,
652
769
  args_template=['-tags', '{nuclei_tags}', '-severity', 'critical,high', '-rate-limit', '50', '-c', '10', '-timeout', '10'],
653
- description='Web server detected (HTTP/HTTPS), scanning with Nuclei'
770
+ description='Fingerprinting complete, scanning with Nuclei'
654
771
  ),
772
+ # Gobuster triggered by http_fingerprint
655
773
  ChainRule(
656
- trigger_tool='nmap',
657
- trigger_condition='service:http',
774
+ trigger_tool='http_fingerprint',
775
+ trigger_condition='has:services',
658
776
  target_tool='gobuster',
659
777
  priority=7,
660
778
  args_template=['dir', '-u', 'http://{target}:{port}', '-w', 'data/wordlists/web_dirs_common.txt', '-x', 'js,json,php,asp,aspx,html,txt,bak,old,zip', '--no-error', '--timeout', '30s', '-t', '5', '--delay', '20ms'],
661
- description='Web server detected (HTTP/HTTPS), discovering directories and files'
662
- ),
663
- # Nikto - web server vulnerability scanner (complements nuclei)
664
- ChainRule(
665
- trigger_tool='nmap',
666
- trigger_condition='service:http',
667
- target_tool='nikto',
668
- priority=8,
669
- args_template=['-nointeractive', '-timeout', '10'],
670
- description='Web server detected, scanning for server misconfigurations with Nikto'
779
+ description='Fingerprinting complete, discovering directories and files'
671
780
  ),
672
781
  # Dalfox - XSS scanner triggered after gobuster finds pages
673
782
  ChainRule(
@@ -746,17 +855,8 @@ class ToolChaining:
746
855
  args_template=['-a', '{target}'],
747
856
  description='SMB service detected, enumerating shares and users (runs after CrackMapExec)'
748
857
  ),
749
- # DISABLED: smbmap has upstream pickling bug with impacket (affects all versions)
750
- # Use crackmapexec/netexec --shares instead (rule #10 above)
751
- ChainRule(
752
- trigger_tool='nmap',
753
- trigger_condition='service:smb',
754
- target_tool='smbmap',
755
- priority=7,
756
- enabled=False, # Disabled due to impacket pickling bug
757
- args_template=['-H', '{target}'],
758
- description='SMB service detected, mapping shares (DISABLED - use netexec)'
759
- ),
858
+ # NOTE: smbmap removed - has upstream impacket pickling bug on Python 3.13+
859
+ # Use crackmapexec/netexec --shares instead (enum4linux rule above)
760
860
  ])
761
861
 
762
862
  # Active Directory attacks - smart chaining workflow
@@ -1,6 +1,6 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.24.0
3
+ **Version:** 2.26.0
4
4
  **Last Updated:** January 8, 2026
5
5
  **Organization:** CyberSoul Security
6
6
 
@@ -22,6 +22,17 @@ This guide walks you through installing souleyez on your system. The process tak
22
22
  - **RAM Usage**: Running multiple heavy tools (Metasploit, SQLMap, Hashcat) simultaneously requires additional RAM
23
23
  - **Disk I/O**: SSD recommended for database operations and log processing
24
24
 
25
+ > **🐉 Kali Linux Recommended**
26
+ >
27
+ > SoulEyez performs significantly better on **Kali Linux** than other distributions:
28
+ > - All pentesting tools pre-installed and optimized
29
+ > - Metasploit database and RPC already configured
30
+ > - Security-focused kernel and networking stack
31
+ > - No dependency hunting or version conflicts
32
+ > - Wordlists, databases, and tool configs ready to go
33
+ >
34
+ > While Ubuntu and other Debian-based distros are supported, you may experience slower setup times and occasional tool compatibility issues.
35
+
25
36
  ### Software Requirements
26
37
 
27
38
  - **Operating System**: Linux (Kali Linux recommended, any Debian-based distro supported)
@@ -1039,7 +1039,8 @@ def _is_true_error_exit_code(rc: int, tool: str) -> bool:
1039
1039
  # Tools that use non-zero exit codes for non-error conditions
1040
1040
  # Parser will determine the actual status based on output
1041
1041
  # msf_exploit returns 1 when no session opened (exploit ran but target not vulnerable)
1042
- tools_with_nonzero_success = ['gobuster', 'hydra', 'medusa', 'msf_exploit']
1042
+ # nikto returns non-zero when it finds vulnerabilities (not an error!)
1043
+ tools_with_nonzero_success = ['gobuster', 'hydra', 'medusa', 'msf_exploit', 'nikto']
1043
1044
 
1044
1045
  if tool.lower() in tools_with_nonzero_success:
1045
1046
  # Let parser determine status
@@ -1433,6 +1434,21 @@ def _detect_and_recover_stale_jobs() -> int:
1433
1434
  "status": status,
1434
1435
  "parse_result": parse_result
1435
1436
  })
1437
+
1438
+ # Mark for auto-chaining if conditions are met
1439
+ try:
1440
+ from souleyez.core.tool_chaining import ToolChaining
1441
+ chaining = ToolChaining()
1442
+ if chaining.is_enabled() and is_chainable(status):
1443
+ _update_job(jid, chainable=True)
1444
+ _append_worker_log(f"job {jid} stale recovery marked as chainable")
1445
+ logger.info("Stale job marked as chainable", extra={
1446
+ "job_id": jid,
1447
+ "tool": tool,
1448
+ "status": status
1449
+ })
1450
+ except Exception as chain_err:
1451
+ _append_worker_log(f"job {jid} stale recovery chainable error: {chain_err}")
1436
1452
  except Exception as parse_err:
1437
1453
  _append_worker_log(f"job {jid} stale recovery parse exception: {parse_err}")
1438
1454
 
@@ -108,6 +108,8 @@ def handle_job_result(job: Dict[str, Any]) -> Optional[Dict[str, Any]]:
108
108
  parse_result = parse_nikto_job(engagement_id, log_path, job)
109
109
  elif tool == 'dalfox':
110
110
  parse_result = parse_dalfox_job(engagement_id, log_path, job)
111
+ elif tool == 'http_fingerprint':
112
+ parse_result = parse_http_fingerprint_job(engagement_id, log_path, job)
111
113
 
112
114
  # NOTE: Auto-chaining is now handled in background.py after parsing completes
113
115
  # This avoids duplicate job creation and gives better control over timing
@@ -204,6 +206,8 @@ def reparse_job(job_id: int) -> Dict[str, Any]:
204
206
  parse_result = parse_nikto_job(engagement_id, log_path, job)
205
207
  elif tool == 'dalfox':
206
208
  parse_result = parse_dalfox_job(engagement_id, log_path, job)
209
+ elif tool == 'http_fingerprint':
210
+ parse_result = parse_http_fingerprint_job(engagement_id, log_path, job)
207
211
  else:
208
212
  return {'success': False, 'message': f'No parser available for tool: {tool}'}
209
213
 
@@ -3068,6 +3072,91 @@ def parse_nikto_job(engagement_id: int, log_path: str, job: Dict[str, Any]) -> D
3068
3072
  return {'error': str(e)}
3069
3073
 
3070
3074
 
3075
+ def parse_http_fingerprint_job(engagement_id: int, log_path: str, job: Dict[str, Any]) -> Dict[str, Any]:
3076
+ """
3077
+ Parse HTTP fingerprint results.
3078
+
3079
+ Returns fingerprint data for use in auto-chaining context.
3080
+ This enables downstream tools (nikto, nuclei, etc.) to make smarter decisions
3081
+ based on detected WAF, CDN, or managed hosting platform.
3082
+ """
3083
+ try:
3084
+ from souleyez.parsers.http_fingerprint_parser import (
3085
+ parse_http_fingerprint_output,
3086
+ build_fingerprint_context,
3087
+ get_tool_recommendations
3088
+ )
3089
+ from souleyez.storage.hosts import HostManager
3090
+ from urllib.parse import urlparse
3091
+
3092
+ target = job.get('target', '')
3093
+
3094
+ # Read log file
3095
+ with open(log_path, 'r', encoding='utf-8', errors='replace') as f:
3096
+ output = f.read()
3097
+
3098
+ parsed = parse_http_fingerprint_output(output, target)
3099
+
3100
+ # Extract host from target URL
3101
+ parsed_url = urlparse(target)
3102
+ target_host = parsed_url.hostname or target
3103
+
3104
+ # Update host with fingerprint info if we have useful data
3105
+ if target_host and (parsed.get('server') or parsed.get('managed_hosting')):
3106
+ hm = HostManager()
3107
+ host_data = {
3108
+ 'ip': target_host,
3109
+ 'status': 'up'
3110
+ }
3111
+ # Store server info in notes or a dedicated field
3112
+ # For now, we just ensure the host exists
3113
+ hm.add_or_update_host(engagement_id, host_data)
3114
+
3115
+ # Build fingerprint context for chaining
3116
+ fingerprint_context = build_fingerprint_context(parsed)
3117
+
3118
+ # Get tool recommendations
3119
+ recommendations = get_tool_recommendations(parsed)
3120
+
3121
+ # Determine status
3122
+ if parsed.get('error'):
3123
+ status = STATUS_ERROR
3124
+ elif parsed.get('managed_hosting') or parsed.get('waf') or parsed.get('cdn'):
3125
+ status = STATUS_DONE # Found useful info
3126
+ elif parsed.get('server'):
3127
+ status = STATUS_DONE
3128
+ else:
3129
+ status = STATUS_NO_RESULTS
3130
+
3131
+ return {
3132
+ 'tool': 'http_fingerprint',
3133
+ 'status': status,
3134
+ 'target': target,
3135
+ 'target_host': target_host,
3136
+ # Core fingerprint data
3137
+ 'server': parsed.get('server'),
3138
+ 'managed_hosting': parsed.get('managed_hosting'),
3139
+ 'waf': parsed.get('waf', []),
3140
+ 'cdn': parsed.get('cdn', []),
3141
+ 'technologies': parsed.get('technologies', []),
3142
+ 'status_code': parsed.get('status_code'),
3143
+ # For auto-chaining context
3144
+ 'http_fingerprint': fingerprint_context.get('http_fingerprint', {}),
3145
+ 'recommendations': recommendations,
3146
+ # Pass through for downstream chains
3147
+ 'services': [{
3148
+ 'ip': target_host,
3149
+ 'port': parsed_url.port or (443 if parsed_url.scheme == 'https' else 80),
3150
+ 'service_name': 'https' if parsed_url.scheme == 'https' else 'http',
3151
+ 'product': parsed.get('server', ''),
3152
+ }],
3153
+ }
3154
+
3155
+ except Exception as e:
3156
+ logger.error(f"Error parsing http_fingerprint job: {e}")
3157
+ return {'error': str(e)}
3158
+
3159
+
3071
3160
  def parse_dalfox_job(engagement_id: int, log_path: str, job: Dict[str, Any]) -> Dict[str, Any]:
3072
3161
  """Parse Dalfox XSS scanner results."""
3073
3162
  try:
@@ -173,7 +173,7 @@ def _check_privileged_tools():
173
173
 
174
174
 
175
175
  @click.group()
176
- @click.version_option(version='2.24.0')
176
+ @click.version_option(version='2.26.0')
177
177
  def cli():
178
178
  """SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
179
179
  from souleyez.log_config import init_logging
@@ -1520,6 +1520,98 @@ def tutorial():
1520
1520
  run_tutorial()
1521
1521
 
1522
1522
 
1523
+ @cli.command('install-desktop')
1524
+ @click.option('--remove', is_flag=True, help='Remove the desktop shortcut')
1525
+ def install_desktop(remove):
1526
+ """Install SoulEyez desktop shortcut in Applications menu.
1527
+
1528
+ Creates a .desktop file so SoulEyez appears in your
1529
+ Applications > Security menu with its icon.
1530
+ """
1531
+ import shutil
1532
+ from importlib import resources
1533
+
1534
+ applications_dir = Path.home() / '.local' / 'share' / 'applications'
1535
+ icons_dir = Path.home() / '.local' / 'share' / 'icons'
1536
+ desktop_file = applications_dir / 'souleyez.desktop'
1537
+ icon_dest = icons_dir / 'souleyez.png'
1538
+
1539
+ if remove:
1540
+ # Remove desktop shortcut
1541
+ removed = False
1542
+ if desktop_file.exists():
1543
+ desktop_file.unlink()
1544
+ click.echo(click.style(" Removed desktop shortcut", fg='green'))
1545
+ removed = True
1546
+ if icon_dest.exists():
1547
+ icon_dest.unlink()
1548
+ click.echo(click.style(" Removed icon", fg='green'))
1549
+ removed = True
1550
+ if removed:
1551
+ click.echo(click.style("\nSoulEyez removed from Applications menu.", fg='cyan'))
1552
+ else:
1553
+ click.echo(click.style("No desktop shortcut found.", fg='yellow'))
1554
+ return
1555
+
1556
+ click.echo(click.style("\nInstalling SoulEyez desktop shortcut...\n", fg='cyan', bold=True))
1557
+
1558
+ # Create directories
1559
+ applications_dir.mkdir(parents=True, exist_ok=True)
1560
+ icons_dir.mkdir(parents=True, exist_ok=True)
1561
+
1562
+ # Find and copy icon
1563
+ try:
1564
+ # Try importlib.resources first (Python 3.9+)
1565
+ try:
1566
+ from importlib.resources import files
1567
+ icon_source = files('souleyez.assets').joinpath('souleyez-icon.png')
1568
+ with open(icon_source, 'rb') as src:
1569
+ icon_data = src.read()
1570
+ except (ImportError, TypeError, FileNotFoundError):
1571
+ # Fallback: find icon relative to this file
1572
+ icon_source = Path(__file__).parent / 'assets' / 'souleyez-icon.png'
1573
+ with open(icon_source, 'rb') as src:
1574
+ icon_data = src.read()
1575
+
1576
+ with open(icon_dest, 'wb') as dst:
1577
+ dst.write(icon_data)
1578
+ click.echo(click.style(" Installed icon", fg='green'))
1579
+ except Exception as e:
1580
+ click.echo(click.style(f" Warning: Could not copy icon: {e}", fg='yellow'))
1581
+ icon_dest = "utilities-terminal" # Fallback to system icon
1582
+
1583
+ # Create .desktop file
1584
+ desktop_content = f"""[Desktop Entry]
1585
+ Name=SoulEyez
1586
+ Comment=AI-Powered Penetration Testing Platform
1587
+ Exec=souleyez interactive
1588
+ Icon={icon_dest}
1589
+ Terminal=true
1590
+ Type=Application
1591
+ Categories=Security;System;Network;
1592
+ Keywords=pentest;security;hacking;nmap;metasploit;
1593
+ """
1594
+
1595
+ desktop_file.write_text(desktop_content)
1596
+ click.echo(click.style(" Created desktop entry", fg='green'))
1597
+
1598
+ # Update desktop database (optional, may not be available)
1599
+ try:
1600
+ import subprocess
1601
+ subprocess.run(['update-desktop-database', str(applications_dir)],
1602
+ capture_output=True, check=False)
1603
+ except Exception:
1604
+ pass # Not critical if this fails
1605
+
1606
+ click.echo()
1607
+ click.echo(click.style("SoulEyez added to Applications menu!", fg='green', bold=True))
1608
+ click.echo()
1609
+ click.echo("You can find it under:")
1610
+ click.echo(click.style(" Applications > Security > SoulEyez", fg='cyan'))
1611
+ click.echo()
1612
+ click.echo("To remove: souleyez install-desktop --remove")
1613
+
1614
+
1523
1615
  def main():
1524
1616
  """Main entry point."""
1525
1617
  cli()