ScratchABit é um desmontador incremental interativo com recursos de análise de fluxo de dados/controle. ScratchABit é dedicado aos esforços da comunidade de engenharia reversa OpenSource (engenharia reversa para produzir drivers/firmware OpenSource para hardware não suportado adequadamente pelos fornecedores, para interoperabilidade de hardware e software, para pesquisa de segurança).
ScratchABit suporta API IDAPython bem conhecida na comunidade para escrever módulos de desmontagem/extensão.
ScratchABit é um trabalho em andamento, recursos são adicionados conforme necessário, contribuições são bem-vindas.
ScratchABit é lançado sob os termos da Licença Pública Geral GNU v3 (GPLv3).
Não deve ser escrito em uma linguagem ofuscada. Isso inclui linguagens de nível muito baixo, que permitem acessar variáveis não inicializadas, que não diferenciam entre variáveis e funções/procedimentos, que iniciam índices de array a partir de números arbitrários, etc., etc. ScratchABit é escrito em Python ( versão moderna, Python3) para seu prazer e sanidade.
A estrutura da interface do usuário deve permitir a interação do usuário no nível necessário, sem adicionar dependências, inchaço, problemas e incompatibilidades entre as versões da estrutura. ScratchABit atualmente usa uma interface de usuário de texto simples em tela cheia, usando sequências de escape de terminal ANSI/VT100 (sim, até mesmo a biblioteca de maldições foi considerada uma dependência muito grande para ser imposta aos usuários).
Deve aproveitar formatos de texto fáceis de usar para armazenar "banco de dados", para facilitar a reutilização e escrita de ferramentas e armazenamento em sistemas de controle de versão.
Para usar ScratchABit, você precisa do Python3 instalado (testado com Python 3.3 a 3.7) e terminal VT100 (mínimo) ou XTerm (recomendado) ou emulador de terminal (qualquer sistema Unix deve ser compatível, como Linux/BSD/etc., veja FAQ abaixo para mais).
Clone o código usando:
git clone --recursive https://github.com/pfalcon/ScratchABit
Se você clonou o código sem --recursive
, execute git submodule update --init
no diretório ScratchABit.
ScratchABit agora vem com plug-ins de CPU baseados no Capstone Engine, que permitem acesso a diversas arquiteturas de CPU. Para usá-lo, o módulo de ligação Python recente para Capstone deve ser instalado (de preferência aos pacotes fornecidos pelas distribuições do sistema operacional, que geralmente estão desatualizados). A maneira mais fácil de instalá-lo é no diretório de pacotes do usuário Python:
pip3 install --no-cache-dir --user capstone
Uma alternativa é instalá-lo em um ambiente virtual Python dentro do diretório ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
Sempre que você abrir uma nova sessão de terminal para trabalhar com ScratchABit, execute o comando source .venv/bin/activate
novamente para ativar o ambiente virtual.
Se nada do acima funcionar, você pode tentar instalar o pacote capstone em todo o sistema (não recomendado):
sudo pip3 install --system capstone
Se você quiser desmontar um arquivo em formato executável autodescritivo (como ELF), basta passá-lo como argumento para ScratchABit.py
. O repositório inclui vários arquivos example-*.elf
para várias arquiteturas para um início rápido. Por exemplo, para experimentar a versão x86 de 32 bits:
python3 ScratchABit.py example-x86_32.elf
Alternativamente, se você deseja desmontar um arquivo binário bruto, você precisa criar um arquivo .def (definição), para especificar quais áreas de memória são definidas para o código, em qual endereço carregar o arquivo binário, etc. def também pode ser útil para .elf e arquivos semelhantes.) O repositório inclui um código binário bruto x86_64 simples e o arquivo example-x86_64.def correspondente (procure dentro a descrição das opções disponíveis):
python3 ScratchABit.py example-x86_64.def
Pressione F9 para acessar os menus (o mouse também funciona em terminais compatíveis com XTerm). Pressione F1 para obter ajuda sobre as combinações de teclas (a maioria das ações também pode ser acessada através do menu). O fluxo de trabalho do ScratchABit é semelhante a outros desmontadores interativos (alguma experiência anterior ou leitura prévia pode ser útil).
Os plug-ins do processador IDAPython podem ser carregados de qualquer lugar no caminho do módulo Python. Alternativamente, você pode criar um link simbólico/copiar o(s) arquivo(s) plugin .py
no subdiretório plugins/cpu/
.
Depois que o plugin for disponibilizado, crie um novo arquivo de definição baseado em example-x86_64.def
que define o nome do módulo do plugin (sem extensão .py
) na linha cpu xxx
.
Para um exemplo muito simples que usa um plugin externo, veja este arquivo esp8266.def que funciona com o plugin xtensa.py do repositório ida-xtensa2.
P: Quais processadores/arquiteturas são suportados?
R: ScratchABit não suporta nenhuma arquitetura de processador por si só, é totalmente redirecionável usando plug-ins da API IDAPython. Muitos plugins estão disponíveis, escrever um novo plugin é fácil. Para permitir que os usuários testem o ScratchABit, um plugin simples de processador x86 está incluído na distribuição, usando o desmontador Pymsasid sob o capô.
A partir da versão 2.0, o plugin Capstone também está incluído, permitindo acesso a diversas arquiteturas, incluindo x86, ARM, MIPS, PowerPC, SPARC, etc.
Você pode ler sobre os plugins enviados junto com o ScratchABit no README para plugins/cpu/
dir.
P: Depurador?
R: ScratchABit é dedicado à análise estática e fácil suporte para novas arquiteturas de CPU (basta codificar um novo plugin de CPU em Python - você pode obter resultados iniciais em poucas horas). A análise dinâmica não foi concebida para ser um recurso central e não há planos imediatos para implementá-la. Patches são bem-vindos.
P: Descompilador?
R: Existe um projeto relacionado, chamado ScratchABlock, para análise profunda, transformação e descompilação de programas. Espera-se que à medida que o ScratchABlock amadurece, algumas de suas funcionalidades estarão disponíveis no ScratchABit (talvez através de plugins).
P: Não uso Linux, como posso executar o ScratchABit?
R: Instale o Linux em um emulador/VM em seu sistema e alegre-se.
P: Captura de tela obrigatória?
R: Claro: