forensic-cli 1.2.5__py3-none-any.whl

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 (44) hide show
  1. cli/__init__.py +0 -0
  2. cli/commands/__init__.py +0 -0
  3. cli/commands/browser.py +220 -0
  4. cli/commands/describe.py +54 -0
  5. cli/commands/email.py +3 -0
  6. cli/commands/network.py +126 -0
  7. cli/commands/utils.py +3 -0
  8. cli/main.py +18 -0
  9. core/__init__.py +0 -0
  10. core/browser/browser_history.py +156 -0
  11. core/browser/common_words.py +60 -0
  12. core/browser/downloads_history.py +129 -0
  13. core/browser/fav_screen.py +70 -0
  14. core/browser/logins.py +108 -0
  15. core/browser/unusual_patterns.py +111 -0
  16. core/data/__init__.py +0 -0
  17. core/data/data_recovery.py +157 -0
  18. core/db/db.py +12 -0
  19. core/email/email_parser.py +87 -0
  20. core/email/header_analysis.py +87 -0
  21. core/models/orm.py +48 -0
  22. core/models/schemas.py +76 -0
  23. core/network/__init__.py +0 -0
  24. core/network/arp_scan.py +16 -0
  25. core/network/dns_recon.py +90 -0
  26. core/network/fingerprinting.py +117 -0
  27. core/network/ip_info.py +29 -0
  28. core/network/network_map.py +120 -0
  29. core/network/ping_sweep.py +53 -0
  30. core/network/port_scanner.py +93 -0
  31. core/network/smb_scan.py +32 -0
  32. core/network/snmp_scan.py +43 -0
  33. core/network/traceroute.py +40 -0
  34. core/network/utils.py +27 -0
  35. core/registry.py +25 -0
  36. core/utils/__init__.py +0 -0
  37. core/utils/gerar_amostras.py +33 -0
  38. forensic_cli-1.2.5.dist-info/METADATA +293 -0
  39. forensic_cli-1.2.5.dist-info/RECORD +44 -0
  40. forensic_cli-1.2.5.dist-info/WHEEL +5 -0
  41. forensic_cli-1.2.5.dist-info/entry_points.txt +2 -0
  42. forensic_cli-1.2.5.dist-info/licenses/LICENSE +21 -0
  43. forensic_cli-1.2.5.dist-info/licenses/LICENSE-GPL +675 -0
  44. forensic_cli-1.2.5.dist-info/top_level.txt +2 -0
@@ -0,0 +1,93 @@
1
+ import socket
2
+ from concurrent.futures import ThreadPoolExecutor, as_completed
3
+ import threading
4
+ import typer
5
+
6
+ COMMON_TCP_PORTS = [
7
+ 21, 22, 23, 25, 53, 80, 110, 139, 143, 443, 445,
8
+ 3389, 3306, 8080, 8443, 5900, 135, 995, 993, 1723
9
+ ]
10
+ COMMON_UDP_PORTS = [53, 67, 68, 69, 123, 161, 162, 500, 514]
11
+
12
+ PORT_ALERTS = {
13
+ 21: "FTP",
14
+ 22: "SSH",
15
+ 23: "Telnet",
16
+ 25: "SMTP",
17
+ 53: "DNS",
18
+ 80: "HTTP",
19
+ 443: "HTTPS",
20
+ 445: "SMB",
21
+ 3306: "MySQL",
22
+ 3389: "RDP"
23
+ }
24
+
25
+ lock = threading.Lock()
26
+
27
+ def scan_tcp(ip, port):
28
+ result = None
29
+ try:
30
+ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
31
+ s.settimeout(1)
32
+ if s.connect_ex((ip, port)) == 0:
33
+ banner = ""
34
+ try:
35
+ if port in [21, 22, 25, 80, 443, 3306]:
36
+ s.send(b"HEAD / HTTP/1.0\r\n\r\n")
37
+ banner = s.recv(1024).decode(errors="ignore").strip()
38
+ except (socket.timeout, ConnectionResetError):
39
+ pass
40
+
41
+ result = {
42
+ "port": port,
43
+ "protocol": "TCP",
44
+ "status": "open",
45
+ "banner": banner if banner else "sem banner",
46
+ "alert": PORT_ALERTS.get(port)
47
+ }
48
+ except (socket.timeout, OSError):
49
+ pass
50
+ return result
51
+
52
+ def scan_udp(ip, port):
53
+ result = None
54
+ try:
55
+ with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
56
+ s.settimeout(1)
57
+ s.sendto(b"", (ip, port))
58
+ try:
59
+ data, _ = s.recvfrom(1024)
60
+ banner = data.decode(errors="ignore").strip()
61
+ status = "open"
62
+ except socket.timeout:
63
+ banner = "sem resposta"
64
+ status = "open|filtered"
65
+ result = {
66
+ "port": port,
67
+ "protocol": "UDP",
68
+ "status": status,
69
+ "banner": banner,
70
+ "alert": PORT_ALERTS.get(port)
71
+ }
72
+ except (OSError, socket.timeout):
73
+ pass
74
+ return result
75
+
76
+ def scan_host(ip, tcp_ports=None, udp_ports=None):
77
+ tcp_ports = tcp_ports or COMMON_TCP_PORTS
78
+ udp_ports = udp_ports or COMMON_UDP_PORTS
79
+ all_ports = tcp_ports + udp_ports
80
+ results = []
81
+
82
+ with typer.progressbar(all_ports, label=f"Scanning {ip}") as progress:
83
+ with ThreadPoolExecutor(max_workers=100) as executor:
84
+ futures = {executor.submit(scan_tcp if port in tcp_ports else scan_udp, ip, port): port for port in all_ports}
85
+
86
+ for future in as_completed(futures):
87
+ res = future.result()
88
+ if res:
89
+ with lock:
90
+ results.append(res)
91
+ progress.update(1)
92
+
93
+ return results
@@ -0,0 +1,32 @@
1
+ from smbprotocol.connection import Connection
2
+ from smbprotocol.session import Session
3
+ from smbprotocol.tree import TreeConnect
4
+ import typer
5
+
6
+ def smb_scan_host(ip, username="", password=""):
7
+ try:
8
+ conn = Connection(guid=None, server_name=ip, port=445, require_signing=True)
9
+ conn.connect()
10
+ session = Session(conn, username=username, password=password)
11
+ session.connect()
12
+
13
+ tree = TreeConnect(session, fr"\\{ip}\IPC$")
14
+ tree.connect()
15
+
16
+ shares = ["IPC$"]
17
+ return {"ip": ip, "shares": shares}
18
+
19
+ except Exception as e:
20
+ return {"ip": ip, "shares": [], "error": str(e)}
21
+
22
+
23
+ def smb_scan(hosts, username="", password=""):
24
+ results = []
25
+
26
+ typer.echo(f"[+] Iniciando SMB Scan ({len(hosts)} hosts)...")
27
+ with typer.progressbar(hosts, label="SMB Scan") as progress:
28
+ for ip in hosts:
29
+ results.append(smb_scan_host(ip, username, password))
30
+ progress.update(1)
31
+
32
+ return results
@@ -0,0 +1,43 @@
1
+ from pysnmp.hlapi.v3arch.asyncio import (
2
+ SnmpEngine,
3
+ CommunityData,
4
+ UdpTransportTarget,
5
+ ContextData,
6
+ ObjectType,
7
+ ObjectIdentity,
8
+ )
9
+ from pysnmp.hlapi.v3arch.asyncio.cmdgen import getCmd
10
+
11
+ def snmp_scan(ip: str, community: str = "public"):
12
+ oid_list = {
13
+ "sysDescr": "1.3.6.1.2.1.1.1.0",
14
+ "sysName": "1.3.6.1.2.1.1.5.0",
15
+ "sysUpTime": "1.3.6.1.2.1.1.3.0",
16
+ }
17
+
18
+ result = {}
19
+
20
+ for key, oid in oid_list.items():
21
+ try:
22
+ iterator = getCmd(
23
+ SnmpEngine(),
24
+ CommunityData(community, mpModel=1),
25
+ UdpTransportTarget((ip, 161)),
26
+ ContextData(),
27
+ ObjectType(ObjectIdentity(oid))
28
+ )
29
+
30
+ errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
31
+
32
+ if errorIndication:
33
+ result[key] = f"Erro: {errorIndication}"
34
+ elif errorStatus:
35
+ result[key] = f"{errorStatus.prettyPrint()}"
36
+ else:
37
+ for varBind in varBinds:
38
+ result[key] = f"{varBind[1]}"
39
+
40
+ except Exception as e:
41
+ result[key] = f"Erro: {e}"
42
+
43
+ return result
@@ -0,0 +1,40 @@
1
+ import platform
2
+ import subprocess
3
+ import re
4
+
5
+ def traceroute_host(ip: str):
6
+ system = platform.system()
7
+ if system == "Windows":
8
+ cmd = ["tracert", "-d", ip]
9
+ else:
10
+ cmd = ["traceroute", "-n", ip]
11
+
12
+ result = subprocess.run(cmd, capture_output=True, text=True)
13
+ lines = result.stdout.splitlines()
14
+ hops = []
15
+
16
+ for line in lines[1:]:
17
+ if system == "Windows":
18
+ match = re.search(r"^\s*(\d+)\s+([\d<]+ ms)\s+([\d<]+ ms)\s+([\d<]+ ms)\s+([\d.]+)", line)
19
+ if match:
20
+ hop = int(match.group(1))
21
+ rtt_values = []
22
+ for g in match.groups()[1:4]:
23
+ g_clean = g.replace("ms", "").replace("<", "").strip()
24
+ try:
25
+ rtt_values.append(float(g_clean))
26
+ except:
27
+ pass
28
+ rtt = sum(rtt_values) / len(rtt_values) if rtt_values else None
29
+ ip_hop = match.group(5)
30
+ hops.append({"hop": hop, "ip": ip_hop, "rtt": rtt})
31
+ else:
32
+ parts = line.split()
33
+ if len(parts) >= 2 and parts[0].isdigit():
34
+ hop = int(parts[0])
35
+ ip_hop = parts[1]
36
+ rtt_values = [float(x) for x in parts[2:] if re.match(r"\d+\.?\d*", x)]
37
+ rtt = sum(rtt_values)/len(rtt_values) if rtt_values else None
38
+ hops.append({"hop": hop, "ip": ip_hop, "rtt": rtt})
39
+
40
+ return hops
core/network/utils.py ADDED
@@ -0,0 +1,27 @@
1
+ from scapy.all import ARP, Ether, srp
2
+ import socket
3
+ import requests
4
+
5
+ def get_mac(ip):
6
+ pkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip)
7
+ ans, _ = srp(pkt, timeout=2, verbose=0)
8
+ for _, rcv in ans:
9
+ return rcv[Ether].src
10
+ return None
11
+
12
+ def get_vendor(mac):
13
+ if not mac:
14
+ return "Desconhecido"
15
+ try:
16
+ resp = requests.get(f"https://api.macvendors.com/{mac}", timeout=3)
17
+ if resp.status_code == 200:
18
+ return resp.text
19
+ except:
20
+ return "Desconhecido"
21
+ return "Desconhecido"
22
+
23
+ def get_hostname(ip):
24
+ try:
25
+ return socket.gethostbyaddr(ip)[0]
26
+ except:
27
+ return "N/A"
core/registry.py ADDED
@@ -0,0 +1,25 @@
1
+ from core.network.network_map import run as run_network_map
2
+
3
+ def run_port_scanner_placeholder(*args, **kwargs):
4
+ print("Função Port Scanner ainda não implementada")
5
+ return {}
6
+
7
+ def run_chrome_history_placeholder(usuario=None, output_dir=None):
8
+ print(f"Função Chrome History chamada para {usuario}")
9
+ return {}
10
+
11
+ def run_firefox_history_placeholder(usuario=None, output_dir=None):
12
+ print(f"Função Firefox History chamada para {usuario}")
13
+ return {}
14
+
15
+ def run_edge_history_placeholder(usuario=None, output_dir=None):
16
+ print(f"Função Edge History chamada para {usuario}")
17
+ return {}
18
+
19
+ FUNCTIONALITIES = {
20
+ "network_map": run_network_map,
21
+ "port_scanner": run_port_scanner_placeholder,
22
+ "chrome_history": run_chrome_history_placeholder,
23
+ "firefox_history": run_firefox_history_placeholder,
24
+ "edge_history": run_edge_history_placeholder,
25
+ }
core/utils/__init__.py ADDED
File without changes
@@ -0,0 +1,33 @@
1
+ import os
2
+ import zipfile
3
+
4
+ base_dir = "amostras_forenses"
5
+ zip_path = "amostras_forenses.zip"
6
+
7
+ arquivos = {
8
+ "documento_legitimo.pdf": "Este é um arquivo PDF legítimo.",
9
+ "foto.jpg": b"\xff\xd8\xff\xe0" + "JPEG conteúdo simulado".encode("utf-8"),
10
+ "foto.jpg.exe": "Executável disfarçado de imagem.",
11
+ "relatorio.docx": "Relatório original",
12
+ "relatorio_copia.docx": "Relatório original",
13
+ "planilha.xls.scr": "Arquivo renomeado para enganar",
14
+ "vazio.txt": b"",
15
+ }
16
+
17
+ os.makedirs(base_dir, exist_ok=True)
18
+
19
+ for nome, conteudo in arquivos.items():
20
+ caminho = os.path.join(base_dir, nome)
21
+ with open(caminho, "wb") as f:
22
+ if isinstance(conteudo, str):
23
+ conteudo = conteudo.encode("utf-8")
24
+ f.write(conteudo)
25
+
26
+ with zipfile.ZipFile(zip_path, "w") as zipf:
27
+ for root, _, files in os.walk(base_dir):
28
+ for file in files:
29
+ full_path = os.path.join(root, file)
30
+ arcname = os.path.relpath(full_path, base_dir)
31
+ zipf.write(full_path, arcname=os.path.join(base_dir, arcname))
32
+
33
+ print(f"Arquivos gerados e compactados com sucesso em: {zip_path}")
@@ -0,0 +1,293 @@
1
+ Metadata-Version: 2.4
2
+ Name: forensic-cli
3
+ Version: 1.2.5
4
+ Summary: DevKit Forense - CLI para análise de navegadores e rede
5
+ Home-page: https://github.com/ErickG123/devkit_forense
6
+ Author: Erick Gabriel dos Santos Alves
7
+ Author-email: Erick Gabriel dos Santos Alves <erickgabrielalves0@gmail.com>
8
+ License: MIT
9
+ Project-URL: Documentation, https://erickg123.github.io/devkit_forense/docs
10
+ Project-URL: Changelog, https://erickg123.github.io/devkit_forense/changelog
11
+ Project-URL: Source, https://github.com/ErickG123/devkit_forense
12
+ Keywords: forensics,cli,network,browser
13
+ Requires-Python: >=3.11
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ License-File: LICENSE-GPL
17
+ Requires-Dist: altgraph==0.17.4
18
+ Requires-Dist: annotated-types==0.7.0
19
+ Requires-Dist: anyio==4.10.0
20
+ Requires-Dist: attrs==25.3.0
21
+ Requires-Dist: certifi==2025.8.3
22
+ Requires-Dist: cffi==1.17.1
23
+ Requires-Dist: charset-normalizer==3.4.3
24
+ Requires-Dist: click==8.2.1
25
+ Requires-Dist: colorama==0.4.6
26
+ Requires-Dist: contourpy==1.3.3
27
+ Requires-Dist: cryptography==45.0.6
28
+ Requires-Dist: cycler==0.12.1
29
+ Requires-Dist: defusedxml==0.7.1
30
+ Requires-Dist: dnspython==2.7.0
31
+ Requires-Dist: docopt==0.6.2
32
+ Requires-Dist: docutils==0.22
33
+ Requires-Dist: fastapi==0.116.1
34
+ Requires-Dist: fonttools==4.59.1
35
+ Requires-Dist: greenlet==3.2.4
36
+ Requires-Dist: h11==0.16.0
37
+ Requires-Dist: id==1.5.0
38
+ Requires-Dist: idna==3.10
39
+ Requires-Dist: ipwhois==1.3.0
40
+ Requires-Dist: jaraco.classes==3.4.0
41
+ Requires-Dist: jaraco.context==6.0.1
42
+ Requires-Dist: jaraco.functools==4.3.0
43
+ Requires-Dist: keyring==25.6.0
44
+ Requires-Dist: kiwisolver==1.4.9
45
+ Requires-Dist: markdown-it-py==4.0.0
46
+ Requires-Dist: matplotlib==3.10.5
47
+ Requires-Dist: mdurl==0.1.2
48
+ Requires-Dist: more-itertools==10.7.0
49
+ Requires-Dist: nh3==0.3.0
50
+ Requires-Dist: numpy==2.3.2
51
+ Requires-Dist: outcome==1.3.0.post0
52
+ Requires-Dist: packaging==25.0
53
+ Requires-Dist: pandas==2.3.2
54
+ Requires-Dist: pefile==2023.2.7
55
+ Requires-Dist: pillow==11.3.0
56
+ Requires-Dist: pyasn1==0.6.1
57
+ Requires-Dist: pycparser==2.22
58
+ Requires-Dist: pycryptodome==3.23.0
59
+ Requires-Dist: pydantic==2.11.7
60
+ Requires-Dist: pydantic_core==2.33.2
61
+ Requires-Dist: pyinstaller==6.15.0
62
+ Requires-Dist: pyinstaller-hooks-contrib==2025.8
63
+ Requires-Dist: pyparsing==3.2.3
64
+ Requires-Dist: pysnmp==7.1.21
65
+ Requires-Dist: PySocks==1.7.1
66
+ Requires-Dist: pyspnego==0.11.2
67
+ Requires-Dist: python-dateutil==2.9.0.post0
68
+ Requires-Dist: pytz==2025.2
69
+ Requires-Dist: pywin32==311
70
+ Requires-Dist: pywin32-ctypes==0.2.3
71
+ Requires-Dist: requests==2.32.5
72
+ Requires-Dist: requests-toolbelt==1.0.0
73
+ Requires-Dist: rfc3986==2.0.0
74
+ Requires-Dist: rich==14.1.0
75
+ Requires-Dist: scapy==2.6.1
76
+ Requires-Dist: selenium==4.35.0
77
+ Requires-Dist: six==1.17.0
78
+ Requires-Dist: smbprotocol==1.15.0
79
+ Requires-Dist: sniffio==1.3.1
80
+ Requires-Dist: sortedcontainers==2.4.0
81
+ Requires-Dist: SQLAlchemy==2.0.43
82
+ Requires-Dist: starlette==0.47.2
83
+ Requires-Dist: trio==0.30.0
84
+ Requires-Dist: trio-websocket==0.12.2
85
+ Requires-Dist: typer==0.16.1
86
+ Requires-Dist: typing-inspection==0.4.1
87
+ Requires-Dist: typing_extensions==4.14.1
88
+ Requires-Dist: tzdata==2025.2
89
+ Requires-Dist: urllib3==2.5.0
90
+ Requires-Dist: uvicorn==0.35.0
91
+ Requires-Dist: websocket-client==1.8.0
92
+ Requires-Dist: wsproto==1.2.0
93
+ Requires-Dist: yarg==0.1.10
94
+ Dynamic: author
95
+ Dynamic: home-page
96
+ Dynamic: license-file
97
+ Dynamic: requires-python
98
+
99
+ # DevKit Forense – Ferramenta Educacional de Perícia Digital
100
+
101
+ ![Python](https://img.shields.io/badge/Python-3.11-blue.svg) ![FastAPI](https://img.shields.io/badge/FastAPI-0.100-green.svg) ![Typer](https://img.shields.io/badge/Typer-0.7-orange.svg) ![SQLite](https://img.shields.io/badge/SQLite-3.41.2-lightgrey.svg)
102
+
103
+ ## Sumário
104
+ 1. [Introdução](#introdução)
105
+ 2. [Estrutura do Projeto](#estrutura-do-projeto)
106
+ 3. [Módulos Forenses](#módulos-forenses)
107
+ - [Network](#network)
108
+ - [Browser](#browser)
109
+ - [Email](#email)
110
+ 4. [Aplicações de Apoio](#aplicações-de-apoio)
111
+ - [Dashboard](#dashboard)
112
+ - [Visualizadores de Resultados](#visualizadores-de-resultados)
113
+ - [Assistente Interativo (Wizard)](#assistente-interativo-wizard)
114
+ 5. [Fluxo de Integração](#fluxo-de-integração)
115
+ 6. [Tecnologias Utilizadas](#tecnologias-utilizadas)
116
+ 7. [Planejamento e Futuras Extensões](#planejamento-e-futuras-extensões)
117
+ 8. [Instalação](#instalação)
118
+ 9. [Exemplos de Execução](#exemplos-de-execução)
119
+ 10. [Considerações Finais](#considerações-finais)
120
+
121
+ ---
122
+
123
+ ## 1. Introdução
124
+
125
+ **Objetivo:**
126
+ O DevKit Forense é uma suíte de ferramentas educacionais para análise de evidências digitais, projetada para auxiliar no ensino de perícia digital. Combina **CLI**, **API** e **aplicações de apoio**, tornando o uso mais interativo, visual e didático.
127
+
128
+ **Escopo:**
129
+ - Execução de análises forenses em browsers, arquivos, emails e redes.
130
+ - Visualização interativa de resultados.
131
+ - Geração de relatórios automáticos.
132
+ - Assistente interativo (Wizard) para guiar o usuário em tarefas complexas.
133
+
134
+ **Público-alvo:**
135
+ - Estudantes e professores de Segurança da Informação e Perícia Digital.
136
+
137
+ ---
138
+
139
+ ## 2. Estrutura do Projeto
140
+
141
+ O DevKit está organizado em três camadas principais:
142
+
143
+ 1. **CLI** – Executa os módulos forenses pelo terminal.
144
+ 2. **API** – Interface programática para execução de módulos e integração com dashboards.
145
+ 3. **Core** – Contém a lógica central, classes, funções e utilitários compartilhados pelos módulos.
146
+
147
+ ---
148
+
149
+ ## 3. Módulos Forenses
150
+
151
+ ### Network
152
+ | Módulo | Descrição |
153
+ |--------|-----------|
154
+ | `arp_scan` | Varre a rede para identificar dispositivos conectados via ARP. |
155
+ | `dns_recon` | Realiza levantamento de informações de DNS de domínios e hosts. |
156
+ | `fingerprinting` | Identifica sistemas, serviços e versões na rede. |
157
+ | `ip_info` | Consulta informações detalhadas sobre um endereço IP. |
158
+ | `network_map` | Gera mapa visual de hosts e conexões detectadas. |
159
+ | `ping_sweep` | Verifica quais hosts estão ativos em uma faixa de IP. |
160
+ | `port_scanner` | Identifica portas abertas e serviços ativos em hosts. |
161
+ | `snmp_scan` | Realiza varredura SNMP em dispositivos de rede. |
162
+ | `traceroute` | Traça o caminho percorrido por pacotes até um host alvo. |
163
+
164
+ ### Browser
165
+ | Módulo | Descrição |
166
+ |--------|-----------|
167
+ | `browser_history` | Coleta histórico de navegação de diferentes browsers. |
168
+ | `common_words` | Identifica palavras mais comuns em histórico de navegação e downloads. |
169
+ | `downloads_history` | Lista arquivos baixados pelos usuários. |
170
+ | `fav_screen` | Captura e organiza screenshots de sites favoritos ou acessados. |
171
+ | `full_browser_history` | Consolida todo histórico de navegação em um único relatório. |
172
+ | `logins_chrome` | Extração de credenciais armazenadas no Chrome. |
173
+ | `logins_edge` | Extração de credenciais armazenadas no Edge. |
174
+ | `unusual_patterns` | Identifica padrões suspeitos em histórico de navegação ou downloads. |
175
+
176
+ ### Email
177
+ | Módulo | Descrição |
178
+ |--------|-----------|
179
+ | `email_parser` | Extrai e organiza informações de emails. |
180
+ | `header_analysis` | Analisa cabeçalhos para identificar origem, roteamento e possíveis fraudes. |
181
+
182
+ ---
183
+
184
+ ## 4. Aplicações de Apoio
185
+
186
+ ### Dashboard
187
+ **Objetivo:** Centralizar informações e permitir execução rápida de módulos.
188
+
189
+ **Funcionalidades:**
190
+ - Menu lateral com módulos do DevKit.
191
+ - Cards com resumo de análises recentes.
192
+ - Acesso direto a visualizadores e Wizard.
193
+
194
+ **Tecnologias sugeridas:** Streamlit (web), PyQt (desktop).
195
+
196
+ ### Visualizadores de Resultados
197
+ **Objetivo:** Transformar saídas da CLI em gráficos e tabelas interativas.
198
+
199
+ **Exemplos:**
200
+ - Mapas de rede interativos.
201
+ - Timeline de eventos e logs.
202
+ - Gráficos de arquivos analisados, tipos e padrões suspeitos.
203
+
204
+ **Integração:** Recebe dados da CLI em formato JSON ou CSV.
205
+
206
+ ### Assistente Interativo (Wizard)
207
+ **Objetivo:** Guiar o usuário passo a passo em tarefas complexas.
208
+
209
+ **Exemplo de fluxo:**
210
+ 1. Seleção do tipo de análise (pendrive, rede, logs, etc.)
211
+ 2. Configuração de opções (scan de malware, intervalo de IP, dispositivo alvo)
212
+ 3. Execução automática dos módulos necessários
213
+ 4. Geração de relatórios e acesso aos visualizadores
214
+
215
+ **Tecnologias sugeridas:**
216
+ - Terminal interativo (`questionary`, `PyInquirer`)
217
+ - Web/Desktop (mesmo framework do Dashboard)
218
+
219
+ ---
220
+
221
+ ## 5. Fluxo de Integração
222
+
223
+ 1. CLI executa módulos → gera resultados.
224
+ 2. API possibilita integração programática com dashboards e outras aplicações.
225
+ 3. Dashboard centraliza execução e resumo dos resultados.
226
+ 4. Visualizadores transformam dados em gráficos e tabelas interativas.
227
+ 5. Wizard guia o usuário em tarefas complexas.
228
+
229
+ ---
230
+
231
+ ## 6. Tecnologias Utilizadas
232
+
233
+ - **Python** – Linguagem principal do projeto.
234
+ - **FastAPI** – API para integração e execução de módulos.
235
+ - **Typer** – CLI estruturada e interativa.
236
+ - **SQLite** – Banco de dados local leve.
237
+
238
+ ---
239
+
240
+ ## 7. Planejamento e Futuras Extensões
241
+
242
+ | Aplicação / Módulo | Objetivo | Possíveis Extensões |
243
+ |-------------------|----------|------------------|
244
+ | Dashboard | Painel central para visualização e execução de módulos | Filtros avançados, alertas em tempo real, integração direta com relatórios |
245
+ | Visualizadores | Transformar dados da CLI em gráficos, mapas e tabelas | Timeline interativa, heatmaps de rede, gráficos de comportamento de usuários |
246
+ | Wizard | Guiar o usuário passo a passo | Templates de análise rápida, integração automática com módulos de email e data, relatórios PDF/HTML |
247
+ | Novos módulos CLI | Expansão da análise forense | Logs de sistemas, recuperação de dispositivos móveis, análise de mídia, detecção de malware, integração com threat intelligence |
248
+ | Ferramentas auxiliares | Suporte a módulos existentes e novos | Exportação avançada de relatórios, dashboards customizáveis, notificações em tempo real |
249
+
250
+ ---
251
+
252
+ ## 8. Instalação
253
+
254
+ ```bash
255
+ # Clonar o repositório
256
+ git clone https://github.com/ErickG123/devkit_forense.git
257
+ cd devkit-forense
258
+
259
+ # Criar ambiente virtual
260
+ python -m venv venv
261
+ source venv/bin/activate # Linux/macOS
262
+ venv\Scripts\activate # Windows
263
+
264
+ # Instalar dependências
265
+ pip install -r requirements.txt
266
+ ```
267
+
268
+ ---
269
+
270
+ ## 9. Exemplos de Execução
271
+
272
+ **CLI:**
273
+ ```bash
274
+ # Executar módulo de network scan
275
+ python cli.py network_map --target 192.168.0.0/24
276
+
277
+ # Coletar histórico do Chrome
278
+ python cli.py browser_history --browser chrome
279
+ ```
280
+
281
+ **API:**
282
+ ```bash
283
+ # Executar API
284
+ uvicorn api.main:app --reload
285
+ ```
286
+
287
+ ---
288
+
289
+ ## 10. Considerações Finais
290
+
291
+ O DevKit Forense combina **educação e prática**, permitindo que usuários explorem análise forense digital de forma segura, didática e interativa.
292
+ As aplicações de apoio aumentam a acessibilidade e engajamento, tornando o estudo da perícia digital mais visual e intuitivo.
293
+ O planejamento de novos módulos e ferramentas garante evolução contínua da plataforma, mantendo-a atualizada e relevante para atividades acadêmicas e laboratoriais.
@@ -0,0 +1,44 @@
1
+ cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ cli/main.py,sha256=saKD2uVcfAho2VwZa9GiQf84Abv5MdjPEMj1IVpHy0g,817
3
+ cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ cli/commands/browser.py,sha256=65g5BQsyFBiIxQsoj0BaBZ578pU0EFsdhxUYsAcExfs,8028
5
+ cli/commands/describe.py,sha256=u-PPIzxrMEMu0ghby1oL6vKN_PrMd_epRWkSCgFqvZQ,1906
6
+ cli/commands/email.py,sha256=PGroEJFTEFUfCQEVEZLw2GkcwPvU6Hst3p9CV4n6ZsI,40
7
+ cli/commands/network.py,sha256=nN3DIUnG5Ba0URElY8Ywp3lW6R7hCKKWd_iSDwQzA7k,4850
8
+ cli/commands/utils.py,sha256=RcRSx8UjthHSSvqfH9dBSHT8U67Stua2Ahwp3uFdU3g,40
9
+ core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ core/registry.py,sha256=21eLrDJlwHe80K4i49Wt4Jck3GRNf63f7B-TlzCuqqc,881
11
+ core/browser/browser_history.py,sha256=Gdr0jYFV0hxnvsMK-pDVWGm0W4R-FykWVp9M_-NCdTw,5243
12
+ core/browser/common_words.py,sha256=r2YQTQhYmv71BA_LktFgRA9YIfWsWfPRHzRlSAzoj5k,2129
13
+ core/browser/downloads_history.py,sha256=ZRtiSvB3tpZ8ymeYWZC8wFUO4h_JzyF7wzDi4V8iE5g,4582
14
+ core/browser/fav_screen.py,sha256=9cJiypsIs7Aqccg4Aql6b_Ojwzg5me5GghkrqAOSwRQ,2429
15
+ core/browser/logins.py,sha256=vv_cOgMaI2uxl3-TAXuATdkNyMF85VJtVyNb03HTdXY,3553
16
+ core/browser/unusual_patterns.py,sha256=y2clOPSXTm-MdY-mqMsFazvvWTk5kFhhq4hbPnh_dh8,4219
17
+ core/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ core/data/data_recovery.py,sha256=JpUaur0cs-FaFho7INVtVsSqr0SuFD1UIYh7rxE3tIQ,5539
19
+ core/db/db.py,sha256=BQFaEZtvcfASMCwiJW6eXtyfX8luabq_hDUE-Ld3IPM,348
20
+ core/email/email_parser.py,sha256=-LANRbXVpJDqNBO_W2y-QjnzSUwebijRiLRwPDr5qGg,3011
21
+ core/email/header_analysis.py,sha256=8V0zbid1n0HgW44vvHxvLmIkLFN5-dedWEUGYYgRCWk,3108
22
+ core/models/orm.py,sha256=K8odXMvFNSsQV2HL4z8DuxTtGiO7TI2h729lMCVCuoc,1835
23
+ core/models/schemas.py,sha256=nMxG_5Baqv68I06OxriM3W-H6O-M8EmcGWc_TzjjyKw,1455
24
+ core/network/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ core/network/arp_scan.py,sha256=TDs2XWC2SYFVuaRSZupfYygNVkpy99xDeHIfghofI1E,506
26
+ core/network/dns_recon.py,sha256=odg9D32xW1oQljOdKaRku7gCsCpn0N5duckN68_kP44,3093
27
+ core/network/fingerprinting.py,sha256=zUmo3cv3890bYTD8WbNbhky-9tIm4zD4cmYtMK50Lp4,3899
28
+ core/network/ip_info.py,sha256=MX1ityaIxLDECnUADBa0ivhFUAHDIxXYez2fovgQO7o,835
29
+ core/network/network_map.py,sha256=EYpibTWUuePiBO8Ps3rkDt4KniO8uzF9PedAhqPcZ8Q,4077
30
+ core/network/ping_sweep.py,sha256=Sx0k_tvmHdU80OJLI3c-JewopkALf2cLspoQ5X_EXOo,1603
31
+ core/network/port_scanner.py,sha256=Qzl1v89UJYOOiQqyLqtbS956Rxeb1Sb95UwKncudpOc,2824
32
+ core/network/smb_scan.py,sha256=35ndZCfnnOdOcqK_uMsT0EvSa8p4YNskM10QRt2zwEE,976
33
+ core/network/snmp_scan.py,sha256=dIcNV4DLV3gpf_q_FvNL1kO8FCgCeszlksFgE2Omo8g,1192
34
+ core/network/traceroute.py,sha256=0VLmifNV_6lCMRsRmOjsgSkLBdA5FsmSdR_Z3OU9eLk,1469
35
+ core/network/utils.py,sha256=L77SgGz-3EUDu1A8nQfmuEYybvsX_0EV9e3znmg9mag,649
36
+ core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ core/utils/gerar_amostras.py,sha256=BG9KaMFHTH97UjayOW-FtDpZJV8wraKIKn8w4Y_Fy2k,1129
38
+ forensic_cli-1.2.5.dist-info/licenses/LICENSE,sha256=UAyslgL9-LOF_uHDwe6webS9QStw1wKoE1wiK3hVDtw,1087
39
+ forensic_cli-1.2.5.dist-info/licenses/LICENSE-GPL,sha256=vTQ2KWY5j4zsbXhaw1Eei4DDeX8zM1FtqqHI8H0eYlk,35085
40
+ forensic_cli-1.2.5.dist-info/METADATA,sha256=hSZKUTPgcRQcOQpS015pg_gwPKyLY09vta3HGBR9lxI,10972
41
+ forensic_cli-1.2.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
+ forensic_cli-1.2.5.dist-info/entry_points.txt,sha256=bFWaw4_Bz8PDVqddLXxHQ5HuIm3vnGFIk9wVFcosR4g,46
43
+ forensic_cli-1.2.5.dist-info/top_level.txt,sha256=3d1SrIv4s8kkUKftU2GUWApholP9j4ktB3LaSaSWSNM,9
44
+ forensic_cli-1.2.5.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ forensic-cli = cli.main:app
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Erick Gabriel dos Santos Alves
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.