forensic-cli 1.4.2__tar.gz → 1.4.4__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.
- {forensic_cli-1.4.2/src/forensic_cli.egg-info → forensic_cli-1.4.4}/PKG-INFO +22 -39
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/README.md +21 -38
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/pyproject.toml +1 -1
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/setup.py +2 -2
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/commands/browser.py +11 -8
- forensic_cli-1.4.4/src/cli/commands/describe.py +153 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4/src/forensic_cli.egg-info}/PKG-INFO +22 -39
- forensic_cli-1.4.2/src/cli/commands/describe.py +0 -54
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/LICENSE +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/LICENSE-GPL +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/setup.cfg +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/commands/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/commands/email.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/commands/network.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/commands/utils.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/cli/main.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/browser_history.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/common_words.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/downloads_history.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/fav_screen.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/logins.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/browser/unusual_patterns.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/data/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/data/data_recovery.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/db/db.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/email/email_parser.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/email/header_analysis.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/models/orm.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/models/schemas.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/arp_scan.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/dns_recon.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/fingerprinting.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/ip_info.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/network_map.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/ping_sweep.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/port_scanner.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/smb_scan.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/snmp_scan.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/traceroute.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/network/utils.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/registry.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/utils/__init__.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/core/utils/gerar_amostras.py +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/forensic_cli.egg-info/SOURCES.txt +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/forensic_cli.egg-info/dependency_links.txt +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/forensic_cli.egg-info/entry_points.txt +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/forensic_cli.egg-info/requires.txt +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/src/forensic_cli.egg-info/top_level.txt +0 -0
- {forensic_cli-1.4.2 → forensic_cli-1.4.4}/tests/test_file_inspector.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forensic-cli
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.4
|
|
4
4
|
Summary: DevKit Forense - CLI para análise de navegadores e rede
|
|
5
5
|
Home-page: https://github.com/ErickG123/devkit_forense
|
|
6
6
|
Author: Erick Gabriel dos Santos Alves
|
|
@@ -95,7 +95,9 @@ Dynamic: requires-python
|
|
|
95
95
|
|
|
96
96
|
# DevKit Forense – Ferramenta Educacional de Perícia Digital
|
|
97
97
|
|
|
98
|
-
   
|
|
99
|
+
|
|
100
|
+
**ForenseLab** é um toolkit modular de análise forense digital, desenvolvido como um Trabalho de Conclusão de Curso em Engenharia da Computação. Seu principal objetivo é servir como uma ponte educacional para estudantes, educadores e entusiastas da área de segurança da informação.
|
|
99
101
|
|
|
100
102
|
## Sumário
|
|
101
103
|
1. [Introdução](#introdução)
|
|
@@ -111,43 +113,31 @@ Dynamic: requires-python
|
|
|
111
113
|
|
|
112
114
|
---
|
|
113
115
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
## 📖 Introdução
|
|
117
|
-
|
|
118
|
-
O estudo da perícia forense digital, embora fascinante, apresenta uma curva de aprendizado íngreme. Ferramentas profissionais são poderosas, mas muitas vezes complexas e pouco intuitivas para estudantes que estão dando os primeiros passos na área.
|
|
119
|
-
|
|
120
|
-
Para endereçar essa lacuna, o **DevKit Forense** foi desenvolvido como um projeto de TCC. Trata-se de uma suíte de ferramentas projetada desde o início com um **foco educacional**. Nosso objetivo é simplificar a análise de evidências digitais, tornando o processo de aprendizado mais interativo, visual e didático.
|
|
116
|
+
## 🎯 O Problema
|
|
117
|
+
O ensino prático de computação forense enfrenta uma barreira significativa. Ferramentas comerciais padrão de mercado, como EnCase e FTK, são robustas, mas possuem um custo proibitivo para ambientes acadêmicos. Por outro lado, alternativas open-source consolidadas, como Autopsy e Volatility Framework, embora poderosas e gratuitas, apresentam uma curva de aprendizado íngreme que pode intimidar e frustrar iniciantes.
|
|
121
118
|
|
|
122
|
-
|
|
119
|
+
Essa dualidade cria uma lacuna educacional: falta uma plataforma que permita ao estudante focar na **metodologia investigativa**, sem se perder na complexidade operacional da ferramenta.
|
|
123
120
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
## ✨ Recursos em Destaque
|
|
121
|
+
## 💡 A Proposta do ForenseLab
|
|
122
|
+
O **ForenseLab** nasce para preencher essa lacuna, atuando como um "laboratório digital" introdutório. Ele não busca competir em funcionalidades com as suítes profissionais, mas sim oferecer um ambiente controlado, simplificado e didático para a aplicação de conceitos teóricos.
|
|
127
123
|
|
|
128
|
-
|
|
124
|
+
Este projeto é destinado a **estudantes e professores da área de Segurança da Informação e Perícia Digital**, servindo como uma ponte entre a teoria e a prática.
|
|
129
125
|
|
|
130
|
-
|
|
131
|
-
* Navegadores Web (histórico, cache, downloads)
|
|
132
|
-
* Clientes de E-mail
|
|
133
|
-
* Tráfego de Rede (análise de pacotes)
|
|
126
|
+
## ✨ Recursos Principais
|
|
134
127
|
|
|
135
|
-
|
|
128
|
+
* **💻 Interface de Linha de Comando (CLI) Intuitiva:** Todas as análises são executadas através de uma CLI clara e bem documentada, ideal para automação, scripts e para quem busca agilidade no terminal.
|
|
129
|
+
* **🧩 Arquitetura Modular e Extensível:** O toolkit é organizado em módulos independentes (Navegadores, Rede, E-mails), o que permite que a comunidade adicione facilmente novas capacidades de análise sem alterar o núcleo do sistema.
|
|
130
|
+
* **🎓 Foco Didático:** Ao abstrair complexidades desnecessárias, a ferramenta permite que o aluno se concentre em entender os artefatos digitais e desenvolver o raciocínio investigativo.
|
|
136
131
|
|
|
137
132
|
## 🏛️ Arquitetura do Projeto
|
|
138
133
|
|
|
139
|
-
Para garantir
|
|
140
|
-
|
|
141
|
-
1. **`CLI (Command-Line Interface)`**
|
|
142
|
-
* **O que faz:** É a porta de entrada para a execução direta dos módulos forenses. Ideal para automação de tarefas, scripts e para usuários que preferem a agilidade do terminal.
|
|
134
|
+
Para garantir a manutenibilidade e a clareza do código, o ForenseLab adota uma arquitetura de duas camadas principais, organizada em um monorepositório:
|
|
143
135
|
|
|
144
|
-
|
|
145
|
-
* **O que faz:**
|
|
136
|
+
1. **`Core`**
|
|
137
|
+
* **O que faz:** É o cérebro do projeto. Contém toda a lógica de negócio, as classes de análise forense e as funções utilitárias. Centralizar a lógica no Core garante que as regras sejam consistentes e o código seja reutilizável.
|
|
146
138
|
|
|
147
|
-
|
|
148
|
-
* **O que faz:** É
|
|
149
|
-
|
|
150
|
-
---
|
|
139
|
+
2. **`CLI (Command-Line Interface)`**
|
|
140
|
+
* **O que faz:** É a interface do usuário e o ponto de entrada para todas as funcionalidades. Construída com Typer, ela invoca a lógica do `Core` para executar as análises e apresentar os resultados de forma estruturada no terminal.
|
|
151
141
|
|
|
152
142
|
## 3. Módulos Forenses
|
|
153
143
|
|
|
@@ -181,16 +171,11 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
181
171
|
| `email_parser` | Extrai e organiza informações de emails. |
|
|
182
172
|
| `header_analysis` | Analisa cabeçalhos para identificar origem, roteamento e possíveis fraudes. |
|
|
183
173
|
|
|
184
|
-
---
|
|
185
|
-
|
|
186
174
|
## 4. Tecnologias Utilizadas
|
|
187
175
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
- **SQLite** – Banco de dados local leve.
|
|
192
|
-
|
|
193
|
-
---
|
|
176
|
+
* **Python:** Linguagem principal do projeto, escolhida por sua simplicidade e pelo vasto ecossistema de bibliotecas para manipulação de dados.
|
|
177
|
+
* **Typer:** Utilizado para criar a interface de linha de comando (CLI) de forma robusta e intuitiva.
|
|
178
|
+
* **SQLite:** Várias análises, como a de históricos de navegadores, interagem diretamente com bancos de dados SQLite.
|
|
194
179
|
|
|
195
180
|
## 5. Planejamento e Futuras Extensões
|
|
196
181
|
|
|
@@ -202,8 +187,6 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
202
187
|
| 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 |
|
|
203
188
|
| Ferramentas auxiliares | Suporte a módulos existentes e novos | Exportação avançada de relatórios, dashboards customizáveis, notificações em tempo real |
|
|
204
189
|
|
|
205
|
-
---
|
|
206
|
-
|
|
207
190
|
## 6. Instalação
|
|
208
191
|
A forma mais simples de instalar a CLI é utilizando o **PyPI**.
|
|
209
192
|
Execute o seguinte comando no terminal:
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# DevKit Forense – Ferramenta Educacional de Perícia Digital
|
|
2
2
|
|
|
3
|
-
   
|
|
4
|
+
|
|
5
|
+
**ForenseLab** é um toolkit modular de análise forense digital, desenvolvido como um Trabalho de Conclusão de Curso em Engenharia da Computação. Seu principal objetivo é servir como uma ponte educacional para estudantes, educadores e entusiastas da área de segurança da informação.
|
|
4
6
|
|
|
5
7
|
## Sumário
|
|
6
8
|
1. [Introdução](#introdução)
|
|
@@ -16,43 +18,31 @@
|
|
|
16
18
|
|
|
17
19
|
---
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## 📖 Introdução
|
|
22
|
-
|
|
23
|
-
O estudo da perícia forense digital, embora fascinante, apresenta uma curva de aprendizado íngreme. Ferramentas profissionais são poderosas, mas muitas vezes complexas e pouco intuitivas para estudantes que estão dando os primeiros passos na área.
|
|
24
|
-
|
|
25
|
-
Para endereçar essa lacuna, o **DevKit Forense** foi desenvolvido como um projeto de TCC. Trata-se de uma suíte de ferramentas projetada desde o início com um **foco educacional**. Nosso objetivo é simplificar a análise de evidências digitais, tornando o processo de aprendizado mais interativo, visual e didático.
|
|
21
|
+
## 🎯 O Problema
|
|
22
|
+
O ensino prático de computação forense enfrenta uma barreira significativa. Ferramentas comerciais padrão de mercado, como EnCase e FTK, são robustas, mas possuem um custo proibitivo para ambientes acadêmicos. Por outro lado, alternativas open-source consolidadas, como Autopsy e Volatility Framework, embora poderosas e gratuitas, apresentam uma curva de aprendizado íngreme que pode intimidar e frustrar iniciantes.
|
|
26
23
|
|
|
27
|
-
|
|
24
|
+
Essa dualidade cria uma lacuna educacional: falta uma plataforma que permita ao estudante focar na **metodologia investigativa**, sem se perder na complexidade operacional da ferramenta.
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## ✨ Recursos em Destaque
|
|
26
|
+
## 💡 A Proposta do ForenseLab
|
|
27
|
+
O **ForenseLab** nasce para preencher essa lacuna, atuando como um "laboratório digital" introdutório. Ele não busca competir em funcionalidades com as suítes profissionais, mas sim oferecer um ambiente controlado, simplificado e didático para a aplicação de conceitos teóricos.
|
|
32
28
|
|
|
33
|
-
|
|
29
|
+
Este projeto é destinado a **estudantes e professores da área de Segurança da Informação e Perícia Digital**, servindo como uma ponte entre a teoria e a prática.
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
* Navegadores Web (histórico, cache, downloads)
|
|
37
|
-
* Clientes de E-mail
|
|
38
|
-
* Tráfego de Rede (análise de pacotes)
|
|
31
|
+
## ✨ Recursos Principais
|
|
39
32
|
|
|
40
|
-
|
|
33
|
+
* **💻 Interface de Linha de Comando (CLI) Intuitiva:** Todas as análises são executadas através de uma CLI clara e bem documentada, ideal para automação, scripts e para quem busca agilidade no terminal.
|
|
34
|
+
* **🧩 Arquitetura Modular e Extensível:** O toolkit é organizado em módulos independentes (Navegadores, Rede, E-mails), o que permite que a comunidade adicione facilmente novas capacidades de análise sem alterar o núcleo do sistema.
|
|
35
|
+
* **🎓 Foco Didático:** Ao abstrair complexidades desnecessárias, a ferramenta permite que o aluno se concentre em entender os artefatos digitais e desenvolver o raciocínio investigativo.
|
|
41
36
|
|
|
42
37
|
## 🏛️ Arquitetura do Projeto
|
|
43
38
|
|
|
44
|
-
Para garantir
|
|
45
|
-
|
|
46
|
-
1. **`CLI (Command-Line Interface)`**
|
|
47
|
-
* **O que faz:** É a porta de entrada para a execução direta dos módulos forenses. Ideal para automação de tarefas, scripts e para usuários que preferem a agilidade do terminal.
|
|
39
|
+
Para garantir a manutenibilidade e a clareza do código, o ForenseLab adota uma arquitetura de duas camadas principais, organizada em um monorepositório:
|
|
48
40
|
|
|
49
|
-
|
|
50
|
-
* **O que faz:**
|
|
41
|
+
1. **`Core`**
|
|
42
|
+
* **O que faz:** É o cérebro do projeto. Contém toda a lógica de negócio, as classes de análise forense e as funções utilitárias. Centralizar a lógica no Core garante que as regras sejam consistentes e o código seja reutilizável.
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
* **O que faz:** É
|
|
54
|
-
|
|
55
|
-
---
|
|
44
|
+
2. **`CLI (Command-Line Interface)`**
|
|
45
|
+
* **O que faz:** É a interface do usuário e o ponto de entrada para todas as funcionalidades. Construída com Typer, ela invoca a lógica do `Core` para executar as análises e apresentar os resultados de forma estruturada no terminal.
|
|
56
46
|
|
|
57
47
|
## 3. Módulos Forenses
|
|
58
48
|
|
|
@@ -86,16 +76,11 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
86
76
|
| `email_parser` | Extrai e organiza informações de emails. |
|
|
87
77
|
| `header_analysis` | Analisa cabeçalhos para identificar origem, roteamento e possíveis fraudes. |
|
|
88
78
|
|
|
89
|
-
---
|
|
90
|
-
|
|
91
79
|
## 4. Tecnologias Utilizadas
|
|
92
80
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
- **SQLite** – Banco de dados local leve.
|
|
97
|
-
|
|
98
|
-
---
|
|
81
|
+
* **Python:** Linguagem principal do projeto, escolhida por sua simplicidade e pelo vasto ecossistema de bibliotecas para manipulação de dados.
|
|
82
|
+
* **Typer:** Utilizado para criar a interface de linha de comando (CLI) de forma robusta e intuitiva.
|
|
83
|
+
* **SQLite:** Várias análises, como a de históricos de navegadores, interagem diretamente com bancos de dados SQLite.
|
|
99
84
|
|
|
100
85
|
## 5. Planejamento e Futuras Extensões
|
|
101
86
|
|
|
@@ -107,8 +92,6 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
107
92
|
| 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 |
|
|
108
93
|
| Ferramentas auxiliares | Suporte a módulos existentes e novos | Exportação avançada de relatórios, dashboards customizáveis, notificações em tempo real |
|
|
109
94
|
|
|
110
|
-
---
|
|
111
|
-
|
|
112
95
|
## 6. Instalação
|
|
113
96
|
A forma mais simples de instalar a CLI é utilizando o **PyPI**.
|
|
114
97
|
Execute o seguinte comando no terminal:
|
|
@@ -2,11 +2,11 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="forensic_cli",
|
|
5
|
-
version="1.4.
|
|
5
|
+
version="1.4.4",
|
|
6
6
|
author="Erick Gabriel dos Santos Alves",
|
|
7
7
|
author_email="erickgabrielalves0@gmail.com",
|
|
8
8
|
description="Toolkit modular para análise de evidências digitais",
|
|
9
|
-
long_description=open("README.md").read(),
|
|
9
|
+
long_description=open("README.md", encoding="utf-8").read(),
|
|
10
10
|
long_description_content_type="text/markdown",
|
|
11
11
|
url="https://github.com/ErickG123/devkit_forense",
|
|
12
12
|
packages=find_packages(),
|
|
@@ -10,14 +10,17 @@ from core.browser.unusual_patterns import processar_historico_da_pasta
|
|
|
10
10
|
from core.browser.logins import collect_chrome_logins, collect_edge_logins
|
|
11
11
|
from core.browser.common_words import extract_words
|
|
12
12
|
|
|
13
|
-
browser_app = typer.Typer(
|
|
13
|
+
browser_app = typer.Typer(
|
|
14
|
+
help="Conjunto de ferramentas para extrair e processar artefatos de navegadores "
|
|
15
|
+
"(histórico, downloads, logins, favicons/screens e análises de padrões)."
|
|
16
|
+
)
|
|
14
17
|
|
|
15
|
-
@browser_app.command("history")
|
|
18
|
+
@browser_app.command("history", help="Extrai o histórico dos navegadores especificados (Chrome, Edge, Firefox ou todos).")
|
|
16
19
|
def history(
|
|
17
20
|
chrome: bool = typer.Option(False, "--chrome", help="Extrair histórico do Chrome"),
|
|
18
21
|
edge: bool = typer.Option(False, "--edge", help="Extrair histórico do Edge"),
|
|
19
22
|
firefox: bool = typer.Option(False, "--firefox", help="Extrair histórico do Firefox"),
|
|
20
|
-
all: bool = typer.Option(False, "--all", help="Extrair histórico de todos navegadores")
|
|
23
|
+
all: bool = typer.Option(False, "--all", help="Extrair histórico de todos os navegadores")
|
|
21
24
|
):
|
|
22
25
|
usuario = os.getlogin()
|
|
23
26
|
home = str(Path.home())
|
|
@@ -52,7 +55,7 @@ def history(
|
|
|
52
55
|
else:
|
|
53
56
|
typer.echo("[!] Perfis do Firefox não encontrados.")
|
|
54
57
|
|
|
55
|
-
@browser_app.command("downloads")
|
|
58
|
+
@browser_app.command("downloads", help="Extrai registros de downloads dos navegadores e salva artefatos no diretório indicado.")
|
|
56
59
|
def downloads(
|
|
57
60
|
output_dir: Path = typer.Option(
|
|
58
61
|
Path("artefatos/downloads"),
|
|
@@ -87,7 +90,7 @@ def downloads(
|
|
|
87
90
|
|
|
88
91
|
typer.echo("✅ Extração concluída!")
|
|
89
92
|
|
|
90
|
-
@browser_app.command("favscreen")
|
|
93
|
+
@browser_app.command("favscreen", help="Processa JSONs de histórico, extrai URLs válidas e captura favicons/screenshots.")
|
|
91
94
|
def favscreen(
|
|
92
95
|
input_dir: Path = typer.Option(
|
|
93
96
|
Path("artefatos/historico"),
|
|
@@ -130,7 +133,7 @@ def favscreen(
|
|
|
130
133
|
except Exception as erro:
|
|
131
134
|
typer.echo(f"\n❌ Erro geral: {erro}")
|
|
132
135
|
|
|
133
|
-
@browser_app.command("logins")
|
|
136
|
+
@browser_app.command("logins", help="Coleta credenciais/entradas de login dos navegadores suportados e grava JSONs com os resultados.")
|
|
134
137
|
def logins(
|
|
135
138
|
chrome: bool = typer.Option(False, "--chrome", help="Extrair logins do Chrome"),
|
|
136
139
|
edge: bool = typer.Option(False, "--edge", help="Extrair logins do Edge"),
|
|
@@ -169,7 +172,7 @@ def logins(
|
|
|
169
172
|
json.dump(data_edge, f, indent=2, ensure_ascii=False)
|
|
170
173
|
typer.echo(f"✅ Logins do Edge salvos em: {arquivo_edge}")
|
|
171
174
|
|
|
172
|
-
@browser_app.command("patterns")
|
|
175
|
+
@browser_app.command("patterns", help="Analisa históricos para identificar padrões incomuns e gera gráficos/relatórios na pasta de saída.")
|
|
173
176
|
def patterns(
|
|
174
177
|
input_dir: Path = typer.Option(
|
|
175
178
|
Path("artefatos/historico"),
|
|
@@ -204,7 +207,7 @@ def patterns(
|
|
|
204
207
|
except Exception as erro:
|
|
205
208
|
typer.echo(f"\n❌ Erro ao executar patterns: {erro}")
|
|
206
209
|
|
|
207
|
-
@browser_app.command("words")
|
|
210
|
+
@browser_app.command("words", help="Extrai palavras/termos mais frequentes do histórico (ex.: pesquisas) e salva um JSON com os resultados.")
|
|
208
211
|
def words(
|
|
209
212
|
chrome: bool = typer.Option(True, "--chrome", help="Extrair palavras mais pesquisadas do Chrome"),
|
|
210
213
|
output_dir: Path = typer.Option(
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import difflib
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
from rich import print
|
|
7
|
+
from rich.table import Table
|
|
8
|
+
from rich.pretty import Pretty
|
|
9
|
+
|
|
10
|
+
describe_app = typer.Typer(help="Ajuda interativa para os comandos/funcionalidades do toolkit forense.")
|
|
11
|
+
|
|
12
|
+
docs = {
|
|
13
|
+
"map": {
|
|
14
|
+
"name": "map / run_network_map",
|
|
15
|
+
"description": "Retorna informações detalhadas de cada host da rede.",
|
|
16
|
+
"example_return": [
|
|
17
|
+
{
|
|
18
|
+
"host": "192.168.1.1",
|
|
19
|
+
"hostname": "router",
|
|
20
|
+
"mac": "AA:BB:CC:DD:EE:FF",
|
|
21
|
+
"vendor": "Cisco",
|
|
22
|
+
"open_ports": [22, 80],
|
|
23
|
+
"os_info": "Linux"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
"sweep": {
|
|
28
|
+
"name": "sweep / ping_sweep",
|
|
29
|
+
"description": "Faz um ping sweep na rede e retorna os hosts ativos.",
|
|
30
|
+
"example_return": ["192.168.1.1", "192.168.1.3"],
|
|
31
|
+
},
|
|
32
|
+
"scan": {
|
|
33
|
+
"name": "scan / port_scanner",
|
|
34
|
+
"description": "Verifica quais portas estão abertas, fechadas e filtradas.",
|
|
35
|
+
"example_return": [
|
|
36
|
+
{
|
|
37
|
+
"port": 53,
|
|
38
|
+
"protocol": "UDP",
|
|
39
|
+
"status": "open|filtered",
|
|
40
|
+
"banner": "sem resposta",
|
|
41
|
+
"alert": "DNS"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
"fingerprinting": {
|
|
46
|
+
"name": "fingerprinting / detect_os",
|
|
47
|
+
"description": "Detecta o sistema operacional, tipo de host, serviços e possíveis alertas de vulnerabilidade de um host.",
|
|
48
|
+
"example_return": {
|
|
49
|
+
"os": "Windows",
|
|
50
|
+
"host_type": "Servidor",
|
|
51
|
+
"services": ["SMB", "Web HTTP", "MySQL"],
|
|
52
|
+
"alerts": ["SMB vulnerável (Samba 3.0)"]
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
"traceroute": {
|
|
56
|
+
"name": "traceroute / traceroute_host",
|
|
57
|
+
"description": "Executa um traceroute até um host e retorna a rota (hops) percorrida.",
|
|
58
|
+
"example_return": [
|
|
59
|
+
{"hop": 1, "ip": "192.168.1.1", "rtt_ms": 1.2},
|
|
60
|
+
{"hop": 2, "ip": "10.0.0.1", "rtt_ms": 10.5},
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
"arp_scan": {
|
|
64
|
+
"name": "arp_scan / arp_scan",
|
|
65
|
+
"description": "Faz uma varredura ARP na sub-rede para descobrir MACs/IPs ativos.",
|
|
66
|
+
"example_return": [
|
|
67
|
+
{"ip": "192.168.1.10", "mac": "AA:BB:CC:11:22:33", "vendor": "Intel"},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
"parse_ports": {
|
|
71
|
+
"name": "parse_ports",
|
|
72
|
+
"description": "Função auxiliar que transforma a saída do scanner em um formato padronizado.",
|
|
73
|
+
"example_return": [
|
|
74
|
+
{"port": 22, "state": "open", "service": "ssh"},
|
|
75
|
+
{"port": 80, "state": "open", "service": "http"},
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
"parse_network": {
|
|
79
|
+
"name": "parse_network / ping_sweep.parse_network",
|
|
80
|
+
"description": "Analisa e normaliza a representação da rede (ex: 192.168.0.0/24).",
|
|
81
|
+
"example_return": {"network": "192.168.0.0/24", "hosts": 254},
|
|
82
|
+
},
|
|
83
|
+
"scan_host": {
|
|
84
|
+
"name": "scan_host",
|
|
85
|
+
"description": "Escaneia portas de um único host (wrapper do port_scanner).",
|
|
86
|
+
"example_return": [
|
|
87
|
+
{"port": 443, "protocol": "tcp", "status": "open", "service": "https"},
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
"ping_host": {
|
|
91
|
+
"name": "ping_host",
|
|
92
|
+
"description": "Faz ping em um host e retorna latência e status.",
|
|
93
|
+
"example_return": {"host": "192.168.1.5", "alive": True, "rtt_ms": 2.3},
|
|
94
|
+
},
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
def _find_key(key: str) -> str | None:
|
|
98
|
+
key_lower = key.lower()
|
|
99
|
+
keys = list(docs.keys())
|
|
100
|
+
for k in keys:
|
|
101
|
+
if k == key_lower or docs[k].get("name", "").lower().split()[0] == key_lower:
|
|
102
|
+
return k
|
|
103
|
+
|
|
104
|
+
matches = difflib.get_close_matches(key_lower, keys, n=3, cutoff=0.5)
|
|
105
|
+
|
|
106
|
+
return matches[0] if matches else None
|
|
107
|
+
|
|
108
|
+
def _print_example(example: Any, full: bool):
|
|
109
|
+
if full:
|
|
110
|
+
print(Pretty(example))
|
|
111
|
+
else:
|
|
112
|
+
try:
|
|
113
|
+
s = json.dumps(example, indent=2, ensure_ascii=False)
|
|
114
|
+
except Exception:
|
|
115
|
+
s = str(example)
|
|
116
|
+
print(s)
|
|
117
|
+
|
|
118
|
+
@describe_app.command("func", help="Mostra a descrição e exemplo de retorno de uma função/command do toolkit.")
|
|
119
|
+
def describe(
|
|
120
|
+
func: str = typer.Argument(..., help="Nome da função que você deseja entender (ex: map, scan, sweep)"),
|
|
121
|
+
full: bool = typer.Option(False, "--full", "-f", help="Mostrar exemplo formatado (mais detalhado)."),
|
|
122
|
+
):
|
|
123
|
+
key = _find_key(func)
|
|
124
|
+
if not key:
|
|
125
|
+
candidates = difflib.get_close_matches(func.lower(), list(docs.keys()), n=5, cutoff=0.4)
|
|
126
|
+
if candidates:
|
|
127
|
+
print(f"[yellow]Função '{func}' não encontrada. Você quis dizer:[/yellow]")
|
|
128
|
+
for c in candidates:
|
|
129
|
+
print(f" • {c} — {docs[c]['description']}")
|
|
130
|
+
raise typer.Exit(code=1)
|
|
131
|
+
else:
|
|
132
|
+
print(f"[red]Função '{func}' não encontrada e nenhuma sugestão foi localizada.[/red]")
|
|
133
|
+
raise typer.Exit(code=1)
|
|
134
|
+
|
|
135
|
+
info = docs[key]
|
|
136
|
+
|
|
137
|
+
print(f"[bold blue]Nome da Função:[/bold blue] {info.get('name', key)}")
|
|
138
|
+
print(f"[bold blue]Descrição:[/bold blue] {info.get('description')}")
|
|
139
|
+
print("[bold blue]Exemplo de Retorno:[/bold blue]")
|
|
140
|
+
_print_example(info.get("example_return"), full=full)
|
|
141
|
+
|
|
142
|
+
@describe_app.command("list", help="Lista todas as funções/commands documentados.")
|
|
143
|
+
def list_commands():
|
|
144
|
+
table = Table(title="Comandos documentados", show_lines=False)
|
|
145
|
+
table.add_column("chave", style="cyan", no_wrap=True)
|
|
146
|
+
table.add_column("nome", style="magenta")
|
|
147
|
+
table.add_column("descrição", style="white")
|
|
148
|
+
for k, v in sorted(docs.items()):
|
|
149
|
+
table.add_row(k, v.get("name", ""), v.get("description", ""))
|
|
150
|
+
print(table)
|
|
151
|
+
|
|
152
|
+
if __name__ == "__main__":
|
|
153
|
+
describe_app()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: forensic-cli
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.4
|
|
4
4
|
Summary: DevKit Forense - CLI para análise de navegadores e rede
|
|
5
5
|
Home-page: https://github.com/ErickG123/devkit_forense
|
|
6
6
|
Author: Erick Gabriel dos Santos Alves
|
|
@@ -95,7 +95,9 @@ Dynamic: requires-python
|
|
|
95
95
|
|
|
96
96
|
# DevKit Forense – Ferramenta Educacional de Perícia Digital
|
|
97
97
|
|
|
98
|
-
   
|
|
99
|
+
|
|
100
|
+
**ForenseLab** é um toolkit modular de análise forense digital, desenvolvido como um Trabalho de Conclusão de Curso em Engenharia da Computação. Seu principal objetivo é servir como uma ponte educacional para estudantes, educadores e entusiastas da área de segurança da informação.
|
|
99
101
|
|
|
100
102
|
## Sumário
|
|
101
103
|
1. [Introdução](#introdução)
|
|
@@ -111,43 +113,31 @@ Dynamic: requires-python
|
|
|
111
113
|
|
|
112
114
|
---
|
|
113
115
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
## 📖 Introdução
|
|
117
|
-
|
|
118
|
-
O estudo da perícia forense digital, embora fascinante, apresenta uma curva de aprendizado íngreme. Ferramentas profissionais são poderosas, mas muitas vezes complexas e pouco intuitivas para estudantes que estão dando os primeiros passos na área.
|
|
119
|
-
|
|
120
|
-
Para endereçar essa lacuna, o **DevKit Forense** foi desenvolvido como um projeto de TCC. Trata-se de uma suíte de ferramentas projetada desde o início com um **foco educacional**. Nosso objetivo é simplificar a análise de evidências digitais, tornando o processo de aprendizado mais interativo, visual e didático.
|
|
116
|
+
## 🎯 O Problema
|
|
117
|
+
O ensino prático de computação forense enfrenta uma barreira significativa. Ferramentas comerciais padrão de mercado, como EnCase e FTK, são robustas, mas possuem um custo proibitivo para ambientes acadêmicos. Por outro lado, alternativas open-source consolidadas, como Autopsy e Volatility Framework, embora poderosas e gratuitas, apresentam uma curva de aprendizado íngreme que pode intimidar e frustrar iniciantes.
|
|
121
118
|
|
|
122
|
-
|
|
119
|
+
Essa dualidade cria uma lacuna educacional: falta uma plataforma que permita ao estudante focar na **metodologia investigativa**, sem se perder na complexidade operacional da ferramenta.
|
|
123
120
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
## ✨ Recursos em Destaque
|
|
121
|
+
## 💡 A Proposta do ForenseLab
|
|
122
|
+
O **ForenseLab** nasce para preencher essa lacuna, atuando como um "laboratório digital" introdutório. Ele não busca competir em funcionalidades com as suítes profissionais, mas sim oferecer um ambiente controlado, simplificado e didático para a aplicação de conceitos teóricos.
|
|
127
123
|
|
|
128
|
-
|
|
124
|
+
Este projeto é destinado a **estudantes e professores da área de Segurança da Informação e Perícia Digital**, servindo como uma ponte entre a teoria e a prática.
|
|
129
125
|
|
|
130
|
-
|
|
131
|
-
* Navegadores Web (histórico, cache, downloads)
|
|
132
|
-
* Clientes de E-mail
|
|
133
|
-
* Tráfego de Rede (análise de pacotes)
|
|
126
|
+
## ✨ Recursos Principais
|
|
134
127
|
|
|
135
|
-
|
|
128
|
+
* **💻 Interface de Linha de Comando (CLI) Intuitiva:** Todas as análises são executadas através de uma CLI clara e bem documentada, ideal para automação, scripts e para quem busca agilidade no terminal.
|
|
129
|
+
* **🧩 Arquitetura Modular e Extensível:** O toolkit é organizado em módulos independentes (Navegadores, Rede, E-mails), o que permite que a comunidade adicione facilmente novas capacidades de análise sem alterar o núcleo do sistema.
|
|
130
|
+
* **🎓 Foco Didático:** Ao abstrair complexidades desnecessárias, a ferramenta permite que o aluno se concentre em entender os artefatos digitais e desenvolver o raciocínio investigativo.
|
|
136
131
|
|
|
137
132
|
## 🏛️ Arquitetura do Projeto
|
|
138
133
|
|
|
139
|
-
Para garantir
|
|
140
|
-
|
|
141
|
-
1. **`CLI (Command-Line Interface)`**
|
|
142
|
-
* **O que faz:** É a porta de entrada para a execução direta dos módulos forenses. Ideal para automação de tarefas, scripts e para usuários que preferem a agilidade do terminal.
|
|
134
|
+
Para garantir a manutenibilidade e a clareza do código, o ForenseLab adota uma arquitetura de duas camadas principais, organizada em um monorepositório:
|
|
143
135
|
|
|
144
|
-
|
|
145
|
-
* **O que faz:**
|
|
136
|
+
1. **`Core`**
|
|
137
|
+
* **O que faz:** É o cérebro do projeto. Contém toda a lógica de negócio, as classes de análise forense e as funções utilitárias. Centralizar a lógica no Core garante que as regras sejam consistentes e o código seja reutilizável.
|
|
146
138
|
|
|
147
|
-
|
|
148
|
-
* **O que faz:** É
|
|
149
|
-
|
|
150
|
-
---
|
|
139
|
+
2. **`CLI (Command-Line Interface)`**
|
|
140
|
+
* **O que faz:** É a interface do usuário e o ponto de entrada para todas as funcionalidades. Construída com Typer, ela invoca a lógica do `Core` para executar as análises e apresentar os resultados de forma estruturada no terminal.
|
|
151
141
|
|
|
152
142
|
## 3. Módulos Forenses
|
|
153
143
|
|
|
@@ -181,16 +171,11 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
181
171
|
| `email_parser` | Extrai e organiza informações de emails. |
|
|
182
172
|
| `header_analysis` | Analisa cabeçalhos para identificar origem, roteamento e possíveis fraudes. |
|
|
183
173
|
|
|
184
|
-
---
|
|
185
|
-
|
|
186
174
|
## 4. Tecnologias Utilizadas
|
|
187
175
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
- **SQLite** – Banco de dados local leve.
|
|
192
|
-
|
|
193
|
-
---
|
|
176
|
+
* **Python:** Linguagem principal do projeto, escolhida por sua simplicidade e pelo vasto ecossistema de bibliotecas para manipulação de dados.
|
|
177
|
+
* **Typer:** Utilizado para criar a interface de linha de comando (CLI) de forma robusta e intuitiva.
|
|
178
|
+
* **SQLite:** Várias análises, como a de históricos de navegadores, interagem diretamente com bancos de dados SQLite.
|
|
194
179
|
|
|
195
180
|
## 5. Planejamento e Futuras Extensões
|
|
196
181
|
|
|
@@ -202,8 +187,6 @@ Para garantir modularidade e flexibilidade, o DevKit foi estruturado em três ca
|
|
|
202
187
|
| 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 |
|
|
203
188
|
| Ferramentas auxiliares | Suporte a módulos existentes e novos | Exportação avançada de relatórios, dashboards customizáveis, notificações em tempo real |
|
|
204
189
|
|
|
205
|
-
---
|
|
206
|
-
|
|
207
190
|
## 6. Instalação
|
|
208
191
|
A forma mais simples de instalar a CLI é utilizando o **PyPI**.
|
|
209
192
|
Execute o seguinte comando no terminal:
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import typer
|
|
2
|
-
from rich import print
|
|
3
|
-
|
|
4
|
-
describe_app = typer.Typer()
|
|
5
|
-
|
|
6
|
-
@describe_app.command("func")
|
|
7
|
-
def describe(
|
|
8
|
-
func: str = typer.Argument(..., help="Digite o nome da função que você deseja entender")
|
|
9
|
-
):
|
|
10
|
-
docs = {
|
|
11
|
-
"map": {
|
|
12
|
-
"description": "Retorna informações detalhadas de cada host da rede.",
|
|
13
|
-
"example_return": [{
|
|
14
|
-
"host": "192.168.1.1",
|
|
15
|
-
"hostname": "router",
|
|
16
|
-
"mac": "AA:BB:CC:DD:EE:FF",
|
|
17
|
-
"vendor": "Cisco",
|
|
18
|
-
"open_ports": [22, 80],
|
|
19
|
-
"os_info": "Linux"
|
|
20
|
-
}]
|
|
21
|
-
},
|
|
22
|
-
"sweep": {
|
|
23
|
-
"description": "Faz um ping sweep na rede e retorna os hosts ativos.",
|
|
24
|
-
"example_return": ["192.168.1.1", "192.168.1.3"]
|
|
25
|
-
},
|
|
26
|
-
"scan": {
|
|
27
|
-
"description": "Verifica quais portas estão abertas, fechadas e filtradas.",
|
|
28
|
-
"example_return": [{
|
|
29
|
-
"port": 53,
|
|
30
|
-
"protocol": "UDP",
|
|
31
|
-
"status": "open|filtered",
|
|
32
|
-
"banner": "sem resposta",
|
|
33
|
-
"alert": "DNS"
|
|
34
|
-
}]
|
|
35
|
-
},
|
|
36
|
-
"fingerprinting": {
|
|
37
|
-
"description": "Detecta o sistema operacional, tipo de host, serviços e possíveis alertas de vulnerabilidade de um host.",
|
|
38
|
-
"example_return": {
|
|
39
|
-
"os": "Windows",
|
|
40
|
-
"host_type": "Servidor",
|
|
41
|
-
"services": ["SMB", "Web HTTP", "MySQL"],
|
|
42
|
-
"alerts": ["SMB vulnerável (Samba 3.0)"]
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if func in docs:
|
|
48
|
-
info = docs[func]
|
|
49
|
-
print(f"[bold blue]Nome da Função:[/bold blue] {func}")
|
|
50
|
-
print(f"[bold blue]Descrição:[/bold blue] {info['description']}")
|
|
51
|
-
print("[bold blue]Exemplo de Retorno:[/bold blue]")
|
|
52
|
-
print(info['example_return'])
|
|
53
|
-
else:
|
|
54
|
-
typer.echo(f"Função {func} não encontrada.")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|