
Disassembler interativo facilmente redirecionável e hackeável com API de plugin compatível com IDAPython
ScratchABit é um desmontador incremental interativo com capacidades 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 adequadamente suportado pelos fabricantes, para interoperabilidade de hardware e software, para pesquisa de segurança).
ScratchABit suporta a API IDAPython, bem conhecida na comunidade, para escrever módulos de desmontagem/extensão.
ScratchABit é um trabalho em andamento, funcionalidades são adicionadas conforme a necessidade, contribuições são bem-vindas.
ScratchABit é lançado sob os termos da GNU General Public License v3 (GPLv3).
Não deve ser escrito em uma linguagem ofuscada. Isso inclui linguagens que são muito baixo nível, que permitem acessar variáveis não inicializadas, que não diferenciam entre variáveis e funções/procedimentos, que iniciam índices de arrays a partir de números arbitrários, etc., etc. ScratchABit é escrito em Python (versão moderna, Python3) para seu prazer e sanidade mental.
O framework de interface do usuário deve permitir interação do usuário no nível necessário, sem adicionar dependências, inchaço, problemas e incompatibilidades entre versões do framework. ScratchABit atualmente usa uma interface de usuário de texto em tela cheia simples, utilizando sequências de escape de terminal ANSI/VT100 (sim, até a biblioteca curses foi considerada uma dependência muito pesada para impor aos usuários).
Deve aproveitar formatos de texto fáceis de usar para armazenar o "banco de dados", facilitando a reutilização e criação de ferramentas, e o armazenamento em sistemas de controle de versão.
Para usar o ScratchABit, você precisa ter o Python3 instalado (testado com Python 3.3 até 3.7) e um terminal ou emulador de terminal VT100 (mínimo) ou XTerm (recomendado) (qualquer sistema Unix deve ser compatível, como Linux/BSD/etc., veja FAQ abaixo para mais detalhes).
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 do ScratchABit.
O ScratchABit agora vem com plugin(s) de CPU baseado(s) no Capstone Engine, que permitem acesso a várias arquiteturas de CPU. Para usá-lo, o módulo de bindings Python recente para o Capstone deve estar instalado (de preferência aos pacotes fornecidos pelas distribuições do sistema, que geralmente estão desatualizados). A maneira mais fácil de instalá-lo é no diretório de pacotes do usuário do Python:
pip3 install --no-cache-dir --user capstone
Uma alternativa é instalá-lo em um ambiente virtual Python dentro do diretório do 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 o ScratchABit, execute o comando source .venv/bin/activate novamente para ativar o ambiente virtual.
Se nada disso funcionar, você pode tentar instalar o pacote capstone a nível de sistema (não recomendado):
sudo pip3 install --system capstone
Se você deseja desmontar um arquivo em formato executável auto-descritivo (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 testar a versão x86 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 estão definidas para o código, em qual endereço carregar o arquivo binário, etc. (Nota: um arquivo .def pode ser útil também para arquivos .elf e similares.) O repositório inclui um código binário bruto x86_64 simples, e o arquivo example-x86_64.def correspondente (veja dentro para descrição das opções disponíveis):
python3 ScratchABit.py example-x86_64.def
Pressione F9 para acessar menus (o mouse também funciona em terminais compatíveis com XTerm). Pressione F1 para obter ajuda sobre os atalhos do teclado (a maioria das ações também é acessível via menu). O fluxo de trabalho do ScratchABit é semelhante ao de outros desmontadores interativos (alguma experiência anterior ou leitura de fundo pode ser útil).
Plugins de processador IDAPython podem ser carregados de qualquer lugar no caminho de módulo do Python. Alternativamente, você pode criar um link simbólico/copiar o(s) arquivo(s) .py do plugin para o subdiretório plugins/cpu/.
Depois que o plugin estiver disponível, crie um novo arquivo de definição baseado em example-x86_64.def que defina o nome do módulo do plugin (sem a 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: O ScratchABit não suporta nenhuma arquitetura de processador por conta própria, ele é totalmente redirecionável usando plugins 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 por baixo dos panos.
A partir da versão 2.0, o plugin Capstone também está incluído, permitindo acesso a várias arquiteturas, incluindo x86, ARM, MIPS, PowerPC, SPARC, etc. (o suporte a arquiteturas é ativado gradualmente com base em testes de usuários).
Você pode ler sobre os plugins fornecidos junto com o ScratchABit no README do diretório plugins/cpu/.
P: Depurador?
R: O ScratchABit é dedicado à análise estática e suporte fácil para novas arquiteturas de CPU (apenas codifique um novo plugin de CPU em Python - você pode obter resultados iniciais em algumas horas). A análise dinâmica não foi concebida como um recurso central e não há planos imediatos para implementá-la. Patches são bem-vindos, no entanto.
P: Descompilador?
R: Existe um projeto relacionado, chamado ScratchABlock para análise profunda de programas, transformação e descompilação. Espera-se que à medida que o ScratchABlock amadurecer, algumas de suas funcionalidades estarão disponíveis dentro do ScratchABit (talvez via plugins).
P: Não estou no Linux, como posso executar o ScratchABit?
R: Instale o Linux em um emulador/VM no seu sistema e alegre-se.
P: Captura de tela obrigatória?
R: Claro:
