~/labs/workshops/gba-firered/00-comece-aqui
Comece aquiVisao geral do workshop, pre-requisitos e a ordem das aulas.
Este é o material do workshop. Ele ensina, do zero, como pegar um jogo de Game Boy Advance (vamos usar Pokémon FireRed) e descobrir como ele funciona por dentro, até o ponto de alterar o comportamento do jogo com um patch próprio.
Você não precisa saber Assembly antes de começar. O material explica cada coisa na ordem em que ela aparece.
O que você vai conseguir fazer no final
- Entender como o GBA liga, carrega a ROM e executa o jogo.
- Ler instruções ARM e Thumb e saber o que cada uma faz.
- Importar a ROM no Ghidra e navegar pelo código do jogo.
- Achar um valor na memória (o HP de um Pokémon) durante a batalha.
- Descobrir a instrução exata que escreve esse valor.
- Reconstruir a estrutura de dados do Pokémon em batalha.
- Fechar a função no Ghidra e deixar o decompile legível com nomes e struct.
- Escrever, montar e instalar um patch que faz o inimigo cair em um golpe.
A ordem das aulas
Siga os capítulos nesta ordem. Cada um depende do anterior.
01-arquitetura-do-gba.md O hardware, a CPU e o mapa de memória.
02-arm-e-thumb.md Como ler as instruções da CPU.
03-ferramentas.md mGBA, Ghidra, Python, GDB.
04-analise-estatica.md Importar no Ghidra e mapear o boot até o jogo.
05-analise-dinamica.md Achar o HP na RAM com mGBA e GDB.
06-encontrando-a-funcao.md Fechar e limpar a função de HP no Ghidra.
07-primeiro-patch.md Escrever e instalar o patch de dano.
O README.md na raiz do projeto tem o mapa detalhado do boot e os hashes da ROM.
O RAM.md tem a caça ao HP escrita em detalhe. Os capítulos abaixo costuram tudo
isso em um caminho único de aula.
Antes de começar
Você precisa de três coisas:
1. Uma dump legítima e própria de Pokémon FireRed USA 1.0.
SHA1: 41cb23d8dccc8ebd7c649cd8fbb58eeace6e2fdc
Coloque em: rom/PokemonFireRed.gba
2. Um save de batalha pronto (.sav), para não jogar o tutorial inteiro na aula.
Veja notes/save-prep.md.
3. As ferramentas instaladas. Veja o capítulo 03.
Não distribua ROM comercial. Cada participante usa a própria dump.