Pular para o conteúdo
Skillpedia
Bancos de dados35 mil · #6146

performing-sqlite-database-forensics

Faz seu agente analisar bancos de dados SQLite forensicamente. Ele recupera dados excluídos e extrai evidências de históricos e aplicativos.

O que ela faz

Esta ferramenta ajuda a investigar bancos de dados SQLite, que são usados por muitos aplicativos para guardar informações. Ela procura por dados que foram apagados ou que ainda não foram salvos definitivamente, como histórico de navegação ou mensagens.

Quando usar

  • ✓Ao investigar um incidente de segurança.
  • ✓Ao testar a segurança de aplicativos que usam SQLite.
  • ✓Ao tentar recuperar informações perdidas de um banco de dados.

Exemplo do que pedir para a IA

“Recupere os dados apagados do banco de dados do WhatsApp.”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/performing-sqlite-database-forensics/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/performing-sqlite-database-forensics/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

A ferramenta examina a estrutura interna do banco de dados SQLite, procurando por partes de dados que foram marcadas como apagadas mas ainda não foram removidas. Ela também analisa arquivos de log que registram as mudanças antes de serem confirmadas.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill performing-sqlite-database-forensics

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/performing-sqlite-database-forensics/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Realizando Forense em Bancos de Dados SQLite

Visão Geral

SQLite é o motor de banco de dados mais amplamente implantado no mundo, usado por praticamente todos os aplicativos móveis, navegadores web e muitos aplicativos desktop para armazenar dados do usuário. Em forense digital, bancos de dados SQLite são fontes críticas de evidências contendo histórico de navegação, registros de mensagens, registros de chamadas, locais GPS, preferências de aplicativos e conteúdo em cache. A análise forense vai além de simples consultas SQL para examinar as estruturas internas de páginas B-tree, páginas de lista livre (freelist) contendo registros excluídos, arquivos Write-Ahead Log (WAL) preservando o histórico de transações e espaço não alocado dentro das páginas do banco de dados onde dados recuperáveis podem persistir após a exclusão.

Quando Usar

  • Ao realizar avaliações de segurança que envolvam forense em bancos de dados SQLite
  • Ao seguir procedimentos de resposta a incidentes para eventos de segurança relacionados
  • Ao realizar testes de segurança ou atividades de auditoria agendadas
  • Ao validar controles de segurança através de testes práticos

Pré-requisitos

  • DB Browser for SQLite (sqlitebrowser)
  • Ferramentas de linha de comando SQLite (sqlite3)
  • Python 3.8+ com o módulo sqlite3
  • Belkasoft Evidence Center ou Axiom (comercial)
  • Editor hexadecimal (HxD, 010 Editor) para inspeção manual de páginas
  • Compreensão de estruturas de dados B-tree

Estrutura Interna do SQLite

Cabeçalho do Banco de Dados (Primeiros 100 Bytes)

Offset Tamanho Descrição
0 16 String mágica: "SQLite format 3\000"
16 2 Tamanho da página (512-65536 bytes)
18 1 Versão de escrita do formato do arquivo
19 1 Versão de leitura do formato do arquivo
24 4 Contador de alterações do arquivo
28 4 Tamanho do banco de dados em páginas
32 4 Número da primeira página tronco da lista livre
36 4 Total de páginas da lista livre
52 4 Codificação de texto (1=UTF-8, 2=UTF-16le, 3=UTF-16be)
96 4 Número de versão válida para

Tipos de Página

Tipo ID Descrição
Interior B-tree 0x05 Nó interno de tabela
Folha B-tree 0x0D Página folha de tabela contendo registros reais
Interior de Índice 0x02 Nó interno de índice
Folha de Índice 0x0A Página folha de índice
Tronco da Lista Livre - Rastreia páginas liberadas
Folha da Lista Livre - Página liberada com dados recuperáveis
Overflow - Continuação de registros grandes

Recuperação de Registros Excluídos

Método 1: Análise de Página da Lista Livre

Quando registros são excluídos, o SQLite pode colocar suas páginas na lista livre (freelist) em vez de sobrescrevê-las imediatamente.

import struct
import sqlite3
import os


def analyze_freelist(db_path: str) -> dict:
    """Analisa a lista livre do SQLite para identificar páginas contendo dados excluídos."""
    with open(db_path, "rb") as f:
        # Lê o cabeçalho
        header = f.read(100)
        page_size = struct.unpack(">H", header[16:18])[0]
        if page_size == 1:
            page_size = 65536
        first_freelist_page = struct.unpack(">I", header[32:36])[0]
        total_freelist_pages = struct.unpack(">I", header[36:40])[0]

        freelist_info = {
            "page_size": page_size,
            "first_freelist_page": first_freelist_page,
            "total_freelist_pages": total_freelist_pages,
            "trunk_pages": [],
            "leaf_pages": []
        }

        if first_freelist_page == 0:
            return freelist_info

        # Percorre a cadeia de troncos da lista livre
        trunk_page = first_freelist_page
        while trunk_page != 0:
            offset = (trunk_page - 1) * page_size
            f.seek(offset)
            page_data = f.read(page_size)

            next_trunk = struct.unpack(">I", page_data[0:4])[0]
            leaf_count = struct.unpack(">I", page_data[4:8])[0]

            leaves = []
            for i in range(leaf_count):
                leaf_page = struct.unpack(">I", page_data[8 + i * 4:12 + i * 4])[0]
                leaves.append(leaf_page)

            freelist_info["trunk_pages"].append({
                "page_number": trunk_page,
                "next_trunk": next_trunk,
                "leaf_count": leaf_count,
                "leaf_pages": leaves
            })
            freelist_info["leaf_pages"].extend(leaves)
            trunk_page = next_trunk

    return freelist_info


def extract_freelist_content(db_path: str, output_dir: str):
    """Extrai o conteúdo bruto das páginas da lista livre para análise."""
    info = analyze_freelist(db_path)
    os.makedirs(output_dir, exist_ok=True)

    with open(db_path, "rb") as f:
        page_size = info["page_size"]

…
Perguntas frequentes

O que é um banco de dados SQLite?

É um tipo de banco de dados leve e simples, usado por muitos aplicativos em celulares e computadores para guardar informações.

O que são 'dados apagados' neste contexto?

São informações que existiam no banco de dados, mas que foram removidas. A ferramenta tenta encontrar esses dados antes que sejam permanentemente sobrescritos.

O que é um arquivo WAL?

WAL significa Write-Ahead Log. É um arquivo que registra as alterações feitas no banco de dados antes que elas sejam permanentemente salvas, ajudando na recuperação de dados.

Detalhes

Descrição original do autor

Performs forensic analysis of SQLite databases by examining B-tree page structures, recovering deleted records from freelist pages and Write-Ahead Log (WAL) files, decoding encoded timestamps, and extracting evidence from browser history, messaging apps, and mobile device databases. Use when recovering deleted or unallocated data from a SQLite database during digital forensics or mobile/browser ev

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularidade

Estrelas no GitHub
35 mil
Posição no ranking
#6146
Licença
Apache-2.0
Atualizada em
31/08/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas