CJK Workbench
Fluxos de trabalho

Engenharia reversa prática, uma função por vez

03
O cenário

Como começar com a engenharia reversa prática

Escolha uma função pequena de um programa em C que você mesmo compilou e estude-a da primeira instrução até o return final. A lei e os termos de licença mudam de país para país, então use apenas código seu ou arquivos de prática. Seguem quatro passos.

01

Abra a pasta do seu projeto

Escolha uma pasta de trabalho que contenha o seu código-fonte em C, uma cópia do arquivo compilado e, mais tarde, a listagem exportada.

02

Exporte uma listagem em texto

Deixe o Shell rodar o comando de exportação do seu disassembler na cópia, ou salve você mesmo a listagem, para que o resultado seja um arquivo de texto.

03

Peça uma explicação

Peça ao agente que leia a listagem e explique a função linha por linha, e depois salve as notas com write_file.

04

Confira a resposta

Compare as notas com o seu código-fonte e a listagem, leia o diff no Ask first e teste o resultado em um laboratório, se isso for legal.

Uma listagem didática para ler

add_numbers.asm
; add_numbers.asm - teaching listing, x64 Windows
; Returns the sum of its first two integer arguments.
; Argument 1 arrives in ecx (low half of rcx).
; Argument 2 arrives in edx (low half of rdx).
add_numbers:
    mov eax, ecx    ; copy argument 1 into eax
    add eax, edx    ; add argument 2, the sum stays in eax
    ret             ; return to the caller, result in eax

Esta função soma dois inteiros. Pela convenção do Windows x64, os argumentos chegam em ecx e edx, a soma é montada em eax e ret devolve o controle a quem chamou.

Dois exercícios para uma aula de engenharia reversa

Comece com uma função que você escreveu

Uma dúvida comum de iniciante é como começar a aprender assembly, e a resposta é uma função que você mesmo escreveu. Escreva uma função curta em C, compile e exporte a listagem como texto. O read_file abre a listagem e o agente explica cada instrução: qual registrador guarda cada argumento, o que a pilha faz e onde o resultado volta. O write_file salva essas explicações em notes/begin.md. No Plan only, o agente primeiro lista esses passos. Nada é executado ainda. Depois troque para o Ask first e leia o diff antes de cada gravação. Por fim, compare as notas com o seu código e, se for legal, teste a função compilada em um laboratório.

Documente as funções da sua própria biblioteca

Um bom exercício de engenharia reversa de APIs é listar as funções que a sua própria biblioteca expõe e anotar o que cada argumento faz. Salve como texto a lista de funções importadas e expostas da sua própria ferramenta, e então o agente usa o grep para achar cada chamada a uma função e o read_file para abrir as linhas ao redor. Ele monta uma tabela em notes/api.md, e o edit_file mostra cada mudança como um diff. Comece com uma função. O mesmo método ajuda a recuperar como o seu próprio código antigo funcionava. O agente pode errar um tipo ou uma finalidade, então compare cada linha com o seu código-fonte e com um teste seu antes de aceitar.

CJK Workbench para Windows

Trabalhe com o seu próprio exemplo

Baixar o CJK Workbench ↗