Escolar Documentos
Profissional Documentos
Cultura Documentos
com
RÁPIDO6191
13 de janeiro de 2016
1
Seção Conteúdo para fazer, melhorar ou x.
Parte 2
Seção 1 Links de descompactação iso do PS3, para dreamcast certifique-se e inclua Iso
Correção LBA (iso x) por DeXT
Mais links de documentação de hardware. nocash para PS1, SNES
e mais. Também depuradores.
https://wiki.neogeodev.org/index.php?title=Main_Page
Seção 2 Matrizes 3D, ponto de vista (analisar truques de mario kart) e polimento
resto do 3d
Rastreamento DS
Exemplos de hacks
Seção Python e lote básico os
romulano descartado para radare2, precisa de acabamento e arrumação.
Possivelmente considere apenas python.
Links e leituras adicionais
Parte 4 Formatos (todos)
Mais glossário?
Índice?
2
Abstrato
O hacking de ROM para os fins deste documento será definido como a
edição de imagens ROM e imagens ISO (sendo ISO o termo tradicional para
imagens de mídia óptica) com a intenção de mudar a forma como o código do
jogo subjacente ou seus ativos funcionam em uma maneira útil. Simplesmente
alterar seções de uma imagem sem rima ou razão não é hackear ROM, pois
hackear ROM geralmente é o resultado final de uma medida de engenharia
reversa.
O documento a seguir aborda métodos de hacking de ROM com foco nas
técnicas de hacking de GBA e DS, mas com aparições ocasionais em outros
consoles domésticos. Em termos gerais, existem dois métodos principais de
produzir hacks de ROM úteis, sendo o mais eficaz, mas inicialmente mais complexo,
a definição tradicional de hacking de ROM (às vezes chamado de hacking de ROM
de baixo nível), onde formatos e métodos de interação passam por engenharia
reversa antes de serem alterados e estendido. O outro tipo, mais frequentemente
associado à franquia Pokémon, mas longe de ser exclusivo dela, gira em torno do
uso de ferramentas pré-fabricadas para mudar extensivamente os jogos de uma
maneira mais próxima dos textos, gráficos e edição de níveis mais tradicionais,
porém com o uso de tais ferramentas pode ser hacks muito extensos criados em
um curto período de tempo por aqueles com conhecimento mínimo dos processos
subjacentes. Deve-se notar também que nos últimos tempos surgiu um terceiro e
possivelmente um quarto tipo, especialmente no DS, onde os desenvolvedores são
comumente vistos usando formatos do SDK ou alguma outra biblioteca de
desenvolvimento que traz aspectos de hacking de baixo nível e hacking orientado
por ferramentas. juntos, permitindo a rápida decodificação de formatos e
exportando-os antes de realizar operações de nível inferior para inserir as
modificações e o quarto candidato potencial foi visto em programas que permitem
a criação de plug-ins ou scripts usando formatos simples, geralmente de texto ou
XML, para fazer coisas semelhantes .
No que diz respeito às ferramentas pré-fabricadas, elas não serão o foco deste
documento, embora, se existirem, possam ser mencionadas.
A categorização pode ocorrer várias vezes, com uma em particular
formando o esboço deste documento. Resumindo, as quatro categorias
principais de hacking de ROM vistas hoje são edição gráfica, edição de texto,
edição multimídia e lógica de jogo (que inclui codificação assembly). Cada um
deles pode ser subdividido pelo menos mais uma vez, para não falar de cada
um deles extraído de outras categorias ou com elementos cruzados (por
exemplo, em muitos jogos de quebra-cabeça, o texto é codificado como
formatos gráficos regulares). A outra categorização, neste caso dos próprios
hacks, que será discutida um pouco é tradução, melhoria, alteração e
falsificação. Tais categorizações são de utilidade limitada para este
documento, pois todas podem apresentar técnicas muito avançadas em cada
uma das categorizações discutidas anteriormente.
Este documento é amplamente destinado àqueles que não sabem muito sobre
hacking de ROM ou computação de baixo nível além, talvez, da interface de linha de
comando, que diz que aqueles em todos os níveis de conhecimento de computação
e hacking de ROM devem ser capazes de obter algo com isso e espera-se que o
foco no GBA e no DS ajudará aqueles que desejam transferir de outros consoles.
3
Prefácio
Esta é uma atualização rápida para 2016 do meu guia de hacking de ROM, um guia sobre o
qual venho escrevendo há vários anos. Esta versão é uma continuação da edição de 2012,
que em si foi quase uma reescrita completa dos esforços anteriores e contém
principalmente alguns links quebrados. Não foi adicionado muito desde a versão de 2014,
que por sua vez foi para atualizar alguns links. Um guia foi tentado pela primeira vez pouco
menos de um ano depois que eu decidi começar a hackear ROM a sério, um período que
coincidiu com o surgimento do carrinho de cinzas DS dedicado. Dê ou receba algum
brincar com jogos de PC muitos anos antes de minha primeira experiência provavelmente foi
aprender a reduzir imagens ROM para caber em dispositivos da era GBA que não foram
construídos para atender aos tamanhos de arquivo vistos em títulos comerciais de DS. A primeira
versão era pouco mais do que coleções de postagens em fóruns que fiz sobre diversos assuntos e
breves resumos das áreas com o objetivo de apontar as pessoas na direção certa caso quisessem
aprender como fazer algo, as versões posteriores visavam ensinar às pessoas algumas das
princípios subjacentes e isso continua nesse caminho.
A certa altura, havia um documento irmão voltado mais para a invasão de hardware e
dispositivos. Várias partes foram fundidas nele, mas na maior parte o projeto foi colocado
em espera por tempo indeterminado. Além disso, pode ser considerado fora do escopo
deste documento, no entanto, está longe de ser incomum ver pessoas com sérias
habilidades em engenharia elétrica e mecânica se tornarem hackers de ROM talentosos, já
que os processos de pensamento e a mentalidade tendem a se encaixar bem.
Sempre desmontei as coisas e vasculhei diretórios de programas na tentativa de
ver como eles os marcavam ou ajustavam de acordo com minha preferência. No que
diz respeito ao hacking de ROM, o ponto de viragem veio quando decidi que se algo
não se revelasse através de meios super ciais (texto simples ou alguma marcação
menor, clicando duas vezes nos arquivos e talvez uma pesquisa rápida do programa/
extensão), então eu iria tente se aprofundar para descobrir. Logo me ocorreu que isso
exigiria conhecimento de como as coisas funcionam desde o início (ou próximo o
suficiente disso), de modo que isso se tornou o que eu procurei fazer. Este foi o início
de um processo contínuo que pude aplicar em muitos aspectos da vida e que incutiu
uma mentalidade que continua a me servir bem.
Inúmeros sites, hackers, conversas e ferramentas foram usadas para obter este
documento e o autor até este ponto, mas menções especiais vão para a seção de hacking
de DS ROM do GBAtemp, romhacking.net e qualquer pessoa com quem eu tenha discutido
nesses sites, para saber quem foi o autor do tutorial de programação de GBA, Tonc e
Martin Korth, que é o autor das especificações no$gba, embora eles detalhem muito pouco
sobre o uso direto para muitos hacks de ROM, pode-se facilmente dizer que a maioria dos
hacks atuais de GBA e DS ROM seriam não teríamos saído do chão sem eles. Por último,
mas não menos importante, os responsáveis pelo programa Crystaltile2, que reúne várias
ferramentas interessantes em um único programa, o que me permite rasgar as imagens
ROM em um ritmo alucinante de uma maneira que seria difícil de fazer usando ferramentas
básicas e, de fato, demorou até 2011 para vermos outras ferramentas que se equiparam a
ele, ao tentar descobrir como funciona uma ROM.
4
Conteúdo
I. Introdução 12
5
2 Gráficos 65
2.0.1Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.0.2Halo. . . . . . . . . . . . . . . . . . . . . . . . . . . . Profundidade de 66
2.0.3bits. . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.1 Paletas e cores ......................... 67
2.1.1 Cores GBA (15 bits) . . . . . . . . . . . . . . . . . . . . . 67
2.2 Azulejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.1 1Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.2 4 Bpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.3 8Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.2.4 GBA3 Xbpp ......................... 70
2.2.5 GBA2 4BPP ......................... 71
2.2.6 Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.7 Formatos conhecidos . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.8 Exportação e importação do Crystaltile2. . . . . . . . . . . . . . . . 73
2.2.9 Evitando gradientes, AA, compressão com perdas, ruído e
coisas assim. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.3 Layout, temporização, OAM e efeitos especiais. . . . . . . . . . . . . . 78
2.3.1 Introdução aos modos OAM e BG. . . . . . . . . . 78
2.3.2 Tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
2.3.3 GBA e DS OAM (sprites) . . . . . . . . . . . . . . . . 79
2.3.4 Modos GBA e DS BG . . . . . . . . . . . . . . . . . . . 82
2.3.5 Animação básica. . . . . . . . . . . . . . . . . . . . . . . 86
2.3.6 Recurso de janela. . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.7 Recursos especiais (ipping, transformação ane, alfa e
outros). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.8 Mapeamento e formatos básicos de layout do DS . . . . . . . . . . . 93
2.3.9 Manipulação e alinhamento da memória de vídeo . . . . . . . . . . . 96
2.4 3d. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.4.1 3D básico (ossos, coordenadas, quadros-chave) . . . . . . . . . . 98
2.4.2 Pontos de Vista . . . . . . . . . . . . . . . . . . . . . . . . . . 100
2.4.3 Texturas e cores de materiais . . . . . . . . . . . . . . . . 100
2.4.4 Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
2.4.5 Iluminação/sombras . . . . . . . . . . . . . . . . . . . . . . 102
2.4.6 Fumaça e neblina 3D . . . . . . . . . . . . . . . . . . . . . . . 103
2.4.7 Animações . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.4.8 Hardware DS 3D . . . . . . . . . . . . . . . . . . . . . . . 105
2.4.9 A mudança do 3D para o DS 2d. . . . . . . . . . . . . . . . 107
2.4.10 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.4.11 Não NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . 117
2.5 Notas e leituras adicionais . . . . . . . . . . . . . . . . . . . . . . 118
3 Texto 119
3.1 Tabelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.1.1 Pesquisa relativa. . . . . . . . . . . . . . . . . . . . . . 121
3.1.2 Corrupção e alteração. . . . . . . . . . . . . . . . . . 127
3.1.3 Visualização e corrupção de memória . . . . . . . . . . . . . . 130
3.1.4 Análise de frequência . . . . . . . . . . . . . . . . . . . . . . 131
3.1.5 Análise de linguagem. . . . . . . . . . . . . . . . . . . . . . 133
3.1.6 Ponteiro e análise de codificação/hex. . . . . . . . . . . . . 134
6
3.1.7 Rastreamento de montagem . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.8 Visualização de fontes . . . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.9 Comparação de idiomas . . . . . . . . . . . . . . . . . . . . . 135
3.1.10 Ferramentas de criação de tabelas . . . . . . . . . . . . . . . . . . . . . 135
3.2 Indicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
3.2.1 Casos especiais e conceitos não ponteiros. . . . . . . . . . . 139
3.2.2 Exemplo de engenharia reversa de ponteiros. . . . . . . . . . 140
3.3 Marcação, códigos de controle e espaços reservados . . . . . . . . . . . . . . 144
3.3.1 Exemplo resolvido. . . . . . . . . . . . . . . . . . . . . . . 144
3.4 Fontes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.4.1 NFTR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.4.2 Hacks comuns . . . . . . . . . . . . . . . . . . . . . . . . 156
3.5 Script e layout . . . . . . . . . . . . . . . . . . . . . . . . . 160
3.5.1 Layout e limites . . . . . . . . . . . . . . . . . . . . . . . 168
3.6 Extração e inserção de texto . . . . . . . . . . . . . . . . . . . . 169
3.6.1 Extração de texto . . . . . . . . . . . . . . . . . . . . . . . . 170
3.6.2 Inserção de texto . . . . . . . . . . . . . . . . . . . . . . . . . 172
3.7 Detecção de idioma em jogos de DS . . . . . . . . . . . . . . . . . . 174
3.8 Hacking de tradução . . . . . . . . . . . . . . . . . . . . . . . . . 174
3.8.1 Os tipos de caracteres japoneses e como funcionam - . 176
3.8.2 Glifos/caracteres japoneses e observações sobre o
idioma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
3.8.3 Sobre o idioma . . . . . . . . . . . . . . . . . . . . . . . . . 180
3.8.4 Idiomas e tradução da direita para a esquerda. . . . . . . . . . . 180
3.9 Editores de texto e ferramentas de tradução em japonês. . . . . . . . . . . . . 181
3.9.1 Editores de texto com capacidade geral para japonês . . . . . . . . . . . 181
3.9.2 Ferramentas de hacking de ROM . . . . . . . . . . . . . . . . . . . . . . 182
3.9.3 Ferramentas CAT . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
4 Multimídia 184
4.1 Som . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
4.1.1 SDAT (NDS) . . . . . . . . . . . . . . . . . . . . . . . . . 188
4.1.2 Outros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
4.1.3 Formatos do rastreador . . . . . . . . . . . . . . . . . . . . . . . . 197
4.1.4 Regra geral para formatos de áudio personalizados. . . . . 197
4.1.5 Hacks comuns de áudio DS SDAT (retirada de dublagem,
injeção, ajustes e relinking) . . . . . . . . . . . . . . . . . . . . 197
4.1.6 Áudio GBA. . . . . . . . . . . . . . . . . . . . . . . . . . 216
4.2 Vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
4.2.1 Teoria geral do vídeo. . . . . . . . . . . . . . . . . . . . . 221
4.2.2 Mods/VX/act imaginados por Mobiclip. . . . . . . . . . . . . 222
4.2.3 RAD/Bink . . . . . . . . . . . . . . . . . . . . . . . . . . 222
4.2.4 Criware . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
4.3 Cenas cortadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
7
5.1.4 Randomizador de RPG . . . . . . . . . . . . . . . . . . . . . . . 238
5.2 Compressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
5.2.1 Com perdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2.2 Sem perdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2.3 Teoria básica das implementações reais. . . . . . . . 240
5.2.4 Compressão em nível hexadecimal . . . . . . . . . . . . . . 246
5.3 Trapaça. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
5.3.1 Criação geral de cheats . . . . . . . . . . . . . . . . . . . . 249
5.3.2 Criação de cheats no GBA. . . . . . . . . . . . . . . . . . . . . . 251
5.3.3 Criação de cheats no DS . . . . . . . . . . . . . . . . . . . . . . . 253
5.3.4 Criação básica de um cheat. . . . . . . . . . . . . . . . . . . 256
5.3.5 Métodos de prevenção de trapaças e frustrações. . . . . . . . 260
5.3.6 Trapaças na edição de instruções . . . . . . . . . . . . . . . . . 264
5.4 Conceitos de programação . . . . . . . . . . . . . . . . . . . . . . . . 267
5.4.1 Funções e programação processual. Também programação
orientada a retorno/ROP . . . . . . . . . . . . . . . . . . 267
5.4.2 SE OUTRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.3 Recursão . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.4 Iteração . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.4.5 Laços . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.4.6 Turing concluído. . . . . . . . . . . . . . . . . . . . . . . 269
5.4.7 Fundamentos de Montagem . . . . . . . . . . . . . . . . . 270
5.5 Montagem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
5.5.1 BRAÇO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.5.2 Especificações de montagem do GBA. . . . . . . . . . . . . . . . . . . 275
5.5.3 Especificações da montagem do DS. . . . . . . . . . . . . . . . . . . . 279
5.5.4 O GBA e o DS comparados. . . . . . . . . . . . . . . . 284
5.5.5 Nos controles . . . . . . . . . . . . . . . . . . . . . . . . . . 285
5.5.6 Enganchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
5.5.7 Carrinho GBA como memória extra para hacks de DS. . . . . . . . . . 287
5.6 Discussão em assembleia não específica. . . . . . . . . . . . . . . . . . . 287
5.6.1 Exemplo de modificação de idioma. . . . . . . . . . . . . . . . . . . 287
5.6.2 Não código em ASM . . . . . . . . . . . . . . . . . . . . . . 290
5.6.3 Edição de montagem destrutiva versus não destrutiva . . . . . . 291
5.6.4 Código polimórfico e dinâmico. . . . . . . . . . . . . . . 292
5.6.5 Desaceleração e aceleração . . . . . . . . . . . . . . . . . . . 294
5.6.6 Criptografia (criptografia, checksums e assinaturas) . . 295
5.6.7 Multiplayer e a falha da segurança online do DS da Nintendo.301
5.6.8 Salvar edição . . . . . . . . . . . . . . . . . . . . . . . . . . 301
5.6.9 Linguagens interpretadas . . . . . . . . . . . . . . . . . . . . 303
5.6.10 IA de jogos, lógica de jogos e teoria de jogos . . . . . . . . . . . 303
5.7 Flash cart e teoria do emulador . . . . . . . . . . . . . . . . . . . 307
5.7.1 GBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
5.7.2 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
5.8 Proteção contra hacking de ROM . . . . . . . . . . . . . . . . . . . . . . 313
8
7 Rastreamento de GBA 320
7.0.1 Exemplos resolvidos . . . . . . . . . . . . . . . . . . . . . . . 321
8 Rastreamento DS 321
. . . . . . . . . . . . . . . . . . . . . . . . . 322
8.1 Comando de leitura do carrinho
8.1.1 Pesquisa básica e métodos para isso . . . . . . . . . . . . . . 322
8.1.2 Engenharia reversa do cabeçalho/valores gerados . . . . . . . . 322
13 truques de desenvolvedor, também conhecidos como pensar como um desenvolvedor de jogos 328
13.0.1 Projeto de nível e mecanismo . . . . . . . . . . . . . . . . . 328
13.0.2 Reutilização de Sprites e paletas . . . . . . . . . . . . . . . . . . . 329
13.0.3 Pré-renderização . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.4 Desfoque de velocidade e neblina. . . . . . . . . . . . . . . . . . . . . . 330
13.0.5 Carregando tampas . . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.6 Otimização de carregamento . . . . . . . . . . . . . . . . . . . 330
13.0.7 Imagens 3D em geral. . . . . . . . . . . . . . . . . . . . 331
13.0.8 Geração processual . . . . . . . . . . . . . . . . . . . . 332
13.0.9 Ruído em imagens e sons. . . . . . . . . . . . . . . . . 332
13.0.10Utilizar os limites do sistema/trabalhar com eles . . . . . . 332
13.0.11 Codificação de rede . . . . . . . . . . . . . . . . . . . . . . . . 333
9
16 hackeamento de programas de PC 335
16.1 Depuração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
16.2 Descompilação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
22 Som 344
22.1 SDAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.2 SSEQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.3 STRM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.4 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22,5 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22.6 BANCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
22.7 Outros formatos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
23 Gráficos 347
23.1 NCER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.2 NANR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.3 NCGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.4 RSN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23,5 NMCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.6 NFTR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.7 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23,8 NSBTX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23.9 NSBCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
10
25 Texto 350
25.1 BMG. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
11
Parte I
Introdução
Embora as seções anteriores tenham detalhado um pouco do que está por vir e como
funcionará, a introdução ainda é necessária. Em termos gerais, este documento
contém quatro partes, incluindo esta seção introdutória. A maior parte deste
documento será ocupada por partes nas áreas de hacking de ROM (edição gráfica,
edição de texto, edição multimídia e lógica de jogos) e uma parte mais livre onde são
mostrados ao leitor alguns exemplos de hacks, métodos e jogos em uma tentativa de
transmitir alguma base do mundo real para muitos dos exemplos na seção mais geral
que teria sido muito difícil manter naquela parte, muito problemático categorizá-los
ou se eles fossem pequenas curiosidades descobertas ao longo dos anos (é são essas
pequenas curiosidades que mantêm as coisas interessantes para muitos hackers de
ROM).
Tradicionalmente, em tais guias, algo limítrofe filosófico ou geral tende a ser dito sobre
o agora e há pouca necessidade de romper com a tradição neste momento. Para este fim,
no que diz respeito às qualidades que constituem um bom hacker de ROM, elas são
indiscutivelmente paciência, ou talvez uma aceitação profunda de que todos os problemas
de computação podem ser resolvidos, e uma curiosidade quase ilimitada. Grandes hackers
de ROM vieram de todas as esferas da vida, mas o mais interessante é que a educação
tradicional, boas ou ruins, não é necessariamente um grande indicador de quão bem uma
pessoa aceitará o hacking de ROM.
As ferramentas do comércio são muitas e variadas, mas geralmente podem ser
divididas em cinco princípios básicos, sendo apenas o último específico para hackear ROM.
1. Um editor hexadecimal. A menos que a computação quântica apareça e assuma o controle
amanhã, todos os computadores com os quais você lidará se resumirão em binário
(abordado mais tarde, mas este é o 1 e 0 stu ), que é simplesmente abstraído para
hexadecimal. Geralmente não é aconselhável fazer nada além de visualizar um formato
como um todo amplo, procurar em profundidade um padrão ou uma pequena seção, ou
fazer uma simples alteração (seja uma simples edição de uma linha, e substituir, um
operação básica ou inserção de algo novo) em um editor hexadecimal, mas essas
pequenas alterações podem ser o que faz um hack de ROM funcionar. 1a poderia ser
considerado uma ferramenta de manipulação de compactação, já que a compactação é
frequentemente padronizada e muitas vezes fornece uma barreira imediata e, pelo menos
hoje em dia, simplesmente contornada para ver um formato como o próprio programa o
verá.
3. Um editor de texto. Relacionado aos dois itens acima, muitas vezes é benéfico ser
capaz de manipular seções de texto e hexadecimais e realizar pesquisas extensas
sobre elas, uma área na qual os editores de texto há muito tempo têm sérias
habilidades.
4. Um navegador da web. Embora muitas vezes você desmonte coisas que nunca
foram desmontadas antes (e como linguagens de programação de alto nível
12
tornar-se mais viáveis para os sistemas atuais que podem ser mais verdadeiros do
que nunca), você também estará sempre apoiado nos ombros dos outros. Para esse
fim, é muito necessário ser capaz de ver o que outros fizeram antes de você e
pesquisar os métodos subjacentes. Como a porta de entrada para o mundo técnico
hoje em dia é um navegador da web...
5. Um editor de blocos. Usado corretamente, um editor hexadecimal permitirá que você veja padrões em
código e texto, mas os gráficos são uma grande parte de quase todos os jogos, portanto, ser capaz de
ver os gráficos é imensamente útil. Veja também a nota sobre compactação para editores hexadecimais,
pois ela pode ser aplicada ainda mais aqui (em um editor hexadecimal você ainda pode acompanhar
razoavelmente o que está acontecendo, mas qualquer pessoa que use um editor de blocos por mais de
alguns minutos normalmente verá como uma bagunça de pixels podem se transformar em uma
imagem visível muito rapidamente e ser quebrados com a mesma facilidade).
Uma familiaridade com o uso básico da linha de comando (executar algo a partir de uma
usando algumas opções, a ideia de tubulação e como criar um arquivo em lote no nível de
apenas uma série de comandos) e o uso de uma planilha (quais células são , o comando ll e
como inserir funções básicas) serão úteis, mas quaisquer detalhes específicos ou conceitos
mais complexos serão abordados quando apropriado.
Seu computador para fazer tudo isso não precisa necessariamente ser tão poderoso
para os padrões de qualquer época e especialmente nos tempos atuais. Naturalmente,
existem técnicas como algumas de busca de ponta, algumas atividades relacionadas à
compressão e emulação de outros consoles que forçam os sistemas, mas muitos danos
podem ser causados com sistemas consideravelmente mais modestos. O bônus adicional
de começar a hackear ROM em comparação com desmontar dispositivos do mundo real
(embora essas atividades também sejam muito divertidas) é que, desde que haja backups
adequados, e você realmente deve praticar a realização de backups regulares e, de
preferência, incrementais de seu trabalho (algumas menções aos métodos pelos quais você
pode fazer isso são feitas na parte 3), qualquer dano pode ser desfeito pressionando
desfazer ou copiando e colando outra coisa, sem mencionar o bônus adicional de permitir
que você siga muitos caminhos ramificados na tentativa de resolver seu problema. No
entanto, muitos sugerirão que se você conseguir uma máquina com pelo menos dois
monitores de resolução razoavelmente alta, você estará se saindo bem.
No jargão. Sem voltar às reflexões filosóficas em outras partes desta parte ou
contemplar algumas das áreas mais extremas da física, chega um ponto em que
descrever algo se torna desnecessariamente prolixo, de modo que é abstraído para
um termo ou série de termos ao custo de ter alguém em algum lugar (em algum
momento?) falta um quadro de referência para isso. Esperamos que quaisquer termos
técnicos encontrados sejam explicados no parágrafo, tenham sido explicados antes ou
não sejam de relevância imediata para o assunto em questão. Observe que esta
definição difere ligeiramente da definição do The Jargon File.
Aviso
Muito do que você está prestes a ler irá treiná-lo em como desmontar as coisas, isso
eventualmente o levará a ser capaz de desmontar as coisas apenas olhando para elas
e isso se tornará um instinto; você provavelmente já viu variações disso em outras
pessoas que passam seus dias preocupadas ou tiveram treinamento em um campo e
constantemente notarão problemas onde outros tentaram fazer algo nesse campo.
Existem maneiras de os criadores de obras diminuirem isso, mas
13
são caros de fazer e como a maioria das pessoas não gasta seu tempo desmontando as coisas,
eles tendem a não ser feitos. Isso significa que muitas vezes você verá como as coisas funcionam
e, além disso, verá exatamente como elas falharam, o que pode arruinar coisas que você poderia
ter gostado anteriormente.
Se você não tomar cuidado, isso pode transformá-lo em um esnobe/crítico de arte.
Outra variação é a melhor versão disso, onde você possivelmente será capaz de ver o valor
de praticamente qualquer coisa e se divertir. Para tanto, esteja avisado sobre cada uma
dessas possibilidades.
14
parte II
Conceitos de hacking de ROM
Foi feita uma tentativa de dividir seções, mas é aconselhável não prestar muita
atenção a elas, ou pelo menos não considerá-las indivisíveis, se por nenhuma outra
razão que não seja qualquer uma delas, é digno de ser objeto de uma documento
mais longo que este. Embora seja a posição padrão deste guia, esta parte se
concentrará mais no hardware que sustenta as coisas, em quaisquer formatos/
conceitos dominantes e em algumas técnicas básicas para usar, em vez do simples
uso de ferramentas (embora muito disso também seja abordado) na próxima parte
sendo entregue a exemplos totalmente trabalhados, em vez de técnicas simplistas ou
visões gerais favorecidas nesta seção.
1 Básico
Esta seção contém alguns dos termos básicos, conceitos e ideias que tornarão o hacking de
ROM e este documento um pouco mais fácil de entender. Antes que isso comece, há três
verdades igualmente importantes a saber
1. Algum problema quanto ao que isso representa? vai pode ser resolvido.
2. Os bits que você está vendo podem significar qualquer coisa e somente com o
contexto você descobrirá o que eles fazem naquele caso.
3. Os bits podem representar qualquer coisa, mas qualquer sistema moderno e não trivial
colocará coisas umas sobre as outras em um processo conhecido como abstração.
Aprofunde ou aprofunde o quanto for necessário, mas geralmente haverá um limite em
que ir mais longe é apenas por curiosidade intelectual e não muito mais.
1.1 Hexadecimal
Como você deve saber, todos os computadores atuais são máquinas binárias, o que significa que
operam com a ideia de uma alimentação razoavelmente contínua de valores 1 e 0 para vários
pinos para fazer o que precisa ser feito. 1 e 0 ficam muito difíceis de ler, então eles são
empilhados em 4 profundidades para formar hexadecimal (uma lógica muito semelhante a
escrever coisas como 1x10 ^ 9 em vez de 1000000000). 4 coisas, cada uma com a capacidade de
ser um de dois estados diferentes, significam 16 combinações e, então, é desejável poder exibir
cada combinação como um único caractere, de modo que as letras de A a F se juntem aos
números arábicos (0 a 9) para formar 16 (A = 10 decimal, B = 11 e assim por diante até F = 15,
momento em que é encerrado e 10 = 16 decimal).
Uma tabela de referência rápida
15
Decimal Hexadecimal Binário
0 0 0000
1 1 0001
2 2 0010
3 3 0011
4 4 0100
5 5 0101
6 6 0110
7 7 0111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13 D 1101
14 E 1110
15 F 1111
O que devemos lembrar sobre binário é que ele é muito parecido com o número 1567
decimal significa 1 contagem de 1000, 5 contagens de 100, 6 contagens de 10 e 7 contagens de 1
ou em palavras é uma lista de contagens de dez elevadas a um poder. Para binário em vez de dez,
você usa 2, então 1110 significa uma contagem de 8, uma contagem de 4, uma contagem de 2 e
zero contagens de 1. Existem todos os tipos de truques e coisas que você pode aprender aqui,
muitos dos quais serão abordados em pouco tempo, e alguns são quase tão essenciais quanto o
hexadecimal quando se trata de entender o documento que está por vir.
Você pode aprender a convertê-lo e fazer contas com ele em sua cabeça, se quiser, e é
certamente uma habilidade útil; no entanto, na maioria das vezes, você estará apenas
encontrando o valor (nesse caso, um programa provavelmente estará fazendo isso) e tudo,
desde a calculadora incluída no Windows (no modo científico) para cima, será convertido
entre as várias bases (base10 = decimal, base2 = binário, base16 = hexadecimal) e será
capaz de realizar matemática com ela.
Existe um quarto método chamado Octal, também conhecido como base 8, que usa de
0 a 7 e representa 3 bits, mas 3 é um número terrível para trabalhar e multiplicar (sendo
um número primo e tudo), então tende a não ser usado fora das especificações. c
aplicações. Existem outras variações deste tema em coisas como Base64, mas esse é um
esquema de codificação para transmissão de dados e será abordado posteriormente em
hacking de texto.
Em resumo, hex (adecimal) é apenas um esquema de numeração que funciona melhor
que o decimal normal para fins de computação e nada mais. Muitas vezes, novos hackers
atribuem um status quase mágico ao hexadecimal, quando na verdade ele não merece
nada disso; a coisa mágica é hackear assembly. Certamente é muito difícil dar uma olhada
em uma ROM inteira e editá-la apenas a partir de um editor hexadecimal, e é por isso que
ninguém faz isso do zero, se eles parecem fazer isso, é quase certo que eles trabalharam
muito para chegar a isso ponto (existem muitos programas que divulgam localizações e
valores interessantes). Investir tempo na engenharia reversa do trabalho original foi o que
finalmente permitiu a edição simples, na falta de que o arquivo esteja em conformidade
com um padrão conhecido (abra qualquer DS ROM adequado e a primeira linha será uma
sequência de texto codificada em ASCII do nome interno da ROM e há coisas semelhantes
para a maioria dos arquivos/formatos do DS) ou um padrão suficiente para que uma edição
básica seja possível.
16
1.1.1 Representação
Há uma piada muito exagerada sobre computação: existem 10 tipos de pessoas no
mundo (aquelas que conhecem binário e aquelas que não conhecem).
Como a piada que acabamos de ilustrar, é difícil ou mesmo impossível saber que
conjunto de números está sendo usado. Como você pode derrubar um sistema inteiro com
um bit errado, e muito menos com uma interpretação totalmente errada, é preciso haver
uma maneira de indicar o que está sendo usado. Em matemática, é usado um valor decimal
subscrito da base que você está usando, mas é difícil escrever em um editor de texto
básico, portanto, várias notações foram usadas. Os mais comuns são 0x???????? (às vezes o
0x se repete depois de tantos valores, mas nem sempre), ????????h/h?????????,
#????????? (é assim que o HTML faz, mas poucos hackers de ROM o usarão),%?????????? (é
assim que seu navegador provavelmente sinaliza com %20, por exemplo, sendo a
codificação de texto ASCII para um espaço) ou simplesmente ???????? hexadecimal. A
maioria das pessoas fica muito feliz em aceitar um pouco de redundância em troca da falta
de confusão aqui.
Junte dois números hexadecimais (às vezes chamados de nibbles/nybbles) e você
terá um byte. A partir daí, ele pode empilhar ainda mais, embora possa ser um pouco
complicado, pois varia entre arquiteturas de computador (32 vs 64 bits, por exemplo),
sistemas operacionais e, às vezes, linguagens de programação. Em geral, a maioria
das pessoas se aterá às interpretações C de 32 bits de tudo isso e é isso que este
documento usará, salvo indicação em contrário.
Indo além, os termos halfword, word, double word (dword), quad word, short,
long e int são o que é interessante e provavelmente vale a pena conhecer.
Na maioria das vezes, ele segue bytes, com meia palavra sendo 16 bits, também
conhecida como 2 bytes, palavras sendo 32 bits, também conhecidas como 4 bytes, dwords
sendo 64 bits e assim por diante. No hacking de ROM, poucas pessoas usarão os termos
curto e longo e especialmente não o termo int, pois o bit do processador em questão irá
variar isso, a principal exceção será se eles estiverem de nindo um formato de maneira
semelhante ao usado em uma linguagem de programação. (nesse caso, uint para número
inteiro sem sinal, u8, u16 e coisas semelhantes aparecem). Se você procurar, typedef é o
termo comum para descrever esse tipo de coisa e muitos tutoriais de programação
gastarão muito tempo cobrindo esses conceitos. De muitas maneiras, não é tão útil hackear
ROM até que você analise o que pode ter acontecido na fonte original para chegar até aqui,
neste ponto você provavelmente já conhece a/uma linguagem de programação.
Um termo extra importante ao discutir isso é limite/alinhamento. A menos que você esteja
escrevendo poesia, provavelmente não precisará formar suas frases com um determinado
número de letras/palavras, mas os computadores tendem a gostar mais se os dados começarem
com um múltiplo de um determinado valor (às vezes pode ser "alinhado por bytes", mas mais
muitas vezes é alinhado por palavra ou até mais alto1) ou envolve a manipulação de um
determinado comprimento de memória (várias funções internas do DS e GBA preferem operar
apenas em seções de memória alinhadas de forma semelhante).
Um link que tem algumas coisas boas se você quiser ir mais longe é a arte da montagem,
mas se as coisas forem preferidas um pouco mais próximas da matemática convencional, sorria
1Existem limites de hardware no GBA e no DS dependendo do que você está fazendo (isso será abordado em
gráficos e compactação posteriormente), mas em teoria nada precisa ser alinhado por palavras. A maioria das
coisas será palavra ou alinhada a um múltiplo ainda maior, a menos que você possa demonstrar o contrário,
fique com o que vê primeiro. Certamente, para as passagens iniciais da maioria dos arquivos, assuma pelo
menos o alinhamento de bytes.
17
nell.edu tem uma página legal.
18
1.1.3 Endian grande e pequeno
19
ComplementoPara aqueles que complementam, uma operação NOT bit a bit (abordada
com mais detalhes posteriormente, mas em resumo, transforma cada 0 em 1 e cada 1 em
0) é aplicada a um número positivo, formando a contraparte negativa. Tem problemas
porque a matemática básica não pode ser feita tão facilmente e tem o problema de dois
valores para 0.
20
8-1-3 + 6 + 9 = 19
Uma equação simples, mas com uma calculadora ou na cabeça é bem
possível errar e bagunçar tudo.
Adicionar, neste caso, dez a todos os números torna-os todos positivos
18 + 9 + 7 + 16 + 19 = 69
Cinco números, todos 10 maiores, tornam o por 50, mas simples adição
resultado muito mais fácil de evitar erros.
A razão para a digressão para truques matemáticos simples é que um princípio semelhante é usado
para o excesso de 7.
No caso do excesso de 7 (também chamado de excesso de 8 bits 127), geralmente
é 01111111 ou 127 em decimal. Aqui, o valor que você deseja codificar é obtido
(números positivos) ou adicionado (números negativos) a esse valor. Em teoria, e
provavelmente em algum lugar de um jogo, o excesso não precisa ser 127.
Se você preferir, pode ser visto como uma contagem começando no número mais
baixo possível, que seria -(-1 +2^m) ou para 8 bits -(-1 + 2^7) que é negativo 127 e
chame isso de início / valor zero. 0 (como em nada) é então o valor de polarização.
Tem a vantagem de ser facilmente comparado com outros números, por isso vale a
pena conhecer.
Exemplos
Número para codificar -7 ou (-) 0000 0111
0111 1111 0000 0111 = 0111 1000
Número para codificar 18 ou 0001 0010
0111 1111 + 0001 0010 = 1001 0001
Exemplos
0000 0000 -127
0000 0001 -126
0000 0010 -125
0111 1111 0
1.000.0000 +1
1000 0001 1111 1111 +128
Na prática/no mundo real, isso é coberto pelo padrão quase universal IEEE 754, que é
mais comumente visto quando se lida com números de ponto flutuante. Você poderia criar
outro método, mas ninguém realmente o faz e o hardware é construído para usá-lo, então,
novamente, ninguém o faz, mais ou menos algumas coisas usando números de pontos
fixos. Aqui, 32 bits ou mais podem ser usados, sendo o primeiro o sinal, o próximo o valor
de polarização e o restante o número codificado em questão. Falando em números
fracionários
21
Ponto flutuanteÀ primeira vista, o ponto flutuante parece relacionado ao método do
excesso 7 de exibição de números assinados; na prática, ele está mais próximo da
notação científica padrão para exibição de números grandes. O conceito disso então é
a ideia de números de ponto flutuante, em essência eles são
1. Um valor de sinal
3. O número em si, mas sem a parte 1, pois é assumido como 1 para poder
economizar um pouco.
Para 3. acima, da mesma forma que você nunca escreveria 0,31x10 ^ -3, a menos que
você seja um engenheiro onde as potências usadas são geralmente múltiplas de três,
sempre se assume que o primeiro bit é 1, pois você está trabalhando em binário, isso
significa o único valor que pode ser é 1 e você pode omiti-lo do número transmitido,
desde que se lembre de reconstruí-lo.
Provavelmente não é preciso muita imaginação para ver como isso se torna muito complexo
para operar com múltiplos valores (potências diferentes ou não) muito rapidamente. Para esse
fim, embora a maioria dos kits e sistemas de desenvolvimento de software apresentem
habilidades para lidar com essas coisas, seu uso é idealmente salvo para quando não há outra
opção; na verdade, sistemas mais novos/de alto desempenho geralmente têm a potência do
computador comparada por quantas operações (ponto flutuante operações por segundo) ou
mesmo criticado por sua falta de suporte para várias versões de ponto flutuante (precisão
simples, precisão dupla.....). Ao contrário do binário e do hexadecimal acima, a capacidade de
decodificá-lo é algo que você deve ser capaz de executar, mas a maioria espera que você use
ferramentas para lidar com isso.
Existe uma classe de compressão baseada nesta ideia conhecida como codificação aritmética. Ele
trabalha com a ideia de que, para o arquivo que pode representar, ele ainda é um número e alguns
números podem ser representados de forma mais curta, codificando-os como um ponto flutuante.
A versão curta
32 bits de comprimento, o primeiro bit é o sinal do multiplicador, os próximos 8
bits são o valor do expoente do multiplicador em excesso de notação 7 e os bits finais
são o valor básico que precisa ser multiplicado, exceto pelo valor oculto 1 que o
fracionário parte é adicionada.
Isso é um pouco prolixo, então exemplos
Decodificação hexadecimal 40a4cccd
A representação binária é a seguinte: 0100 0000
1010 0100 1100 1100 1100 1101 0 começando
significa que é positivo.
O excesso de 7 bits
1000 0001
0111 1111 + ???? ???? = 1000 0001
???? ???? = 0000 0010 = 2 decimais (levando a 2 ^ 2 ou 4)
Pegando a seção restante e adicionando o invisível 1 1010
0100 1100 1100 1100 1101
Muito parecido com o binário são potências de dois, a parte fracionária vai para o
outro lado e diminui nas potências de dois, pegando esse padrão e comparando-o
com ele.
22
1 0 0,25 0 0 0,03125 e assim por diante
Usando apenas os números 1,28125
Multiplicando por 4 dá 5,125
Aquém do número real que deveria representar, que é 5,15, mas se você
continuasse adicionando números do padrão binário, ele chegaria muito perto
disso.
Representando 3.14
Positivo então o primeiro é 0
Dividir por 2 resulta em 1. algo e 2^1 = 2 2 em
excesso 7 é 10000000
0,57 é o número que precisa ser representado. 0,5
+ 0 + 0 + 0,0625 e assim por diante
Por enquanto, parando aí 1001000000000000000000 Trabalhando novamente, deixa-o
em 0100000001001000000000000000000 binário ou 4048 0000 hexadecimal
Decodificação que fornece 3,125, então o padrão deveria ter sido continuado ainda
mais
Além disso, os valores do expoente, em teoria, variam pelo menos de -126 a 127 (00000001 e
11111110), o que significa que todos os valores 0 e todos os 1 não estão disponíveis. Na prática,
eles são usados da seguinte forma
0Todo 0 indica 0 exato ou com mais precisão valores menores que o mais baixo
valor viável.
Para obter mais representações de números reais em ponto flutuante do IEEE, há uma visão
geral básica e O que todo cientista da computação deve saber sobre aritmética de ponto
flutuante tem uma discussão muito mais aprofundada e uma análise histórica. Se você quer
apenas algo para brincar e organizar em sua cabeça, o FloatConverter é muito bom.
Para compensar algumas das deficiências do método, existem duas
funções comuns que são usadas ao lidar com essas coisas.
23
ChãoResumindo, arredonde para um determinado valor, independentemente do que uma
rodada convencional faria. Também não necessariamente limitado a números fracionários.
O ponto fixo tenta contornar alguns dos problemas do ponto flutuante ao custo
potencial de alguma precisão e alguma flexibilidade. É visto em partes do sistema DS 3d,
entre outras coisas, onde 4 bits de número natural e 12 bits fracionários estão
frequentemente na ordem do dia. Isso quer dizer que o computador assume que todos os
números após um determinado dígito binário são fracionários. Alguns preferem vê-la como
uma função do tipo intervalo com 0000 a 1111 representando a diferença entre dois
números inteiros (ou no caso de seno e cosseno -1 a 1).
Os temporizadores são comumente feitos assim, embora também possam ser apenas
múltiplos, o temporizador usado para o formato de áudio DS SSEQ sendo um bom exemplo
deste último.
O que os números significam geralmente é a extensão lógica das potências binárias (2
^ -1 = 0,5 decimal, 2 ^ -2 = 0,25 decimal .....) ou eles contam novamente e o número após o
ponto é efetivamente assumido ser um número normal. Decimais codificados em binário,
quase invariavelmente no arranjo 8421, também podem aparecer aqui.
Tal como acontece com os valores assinados, seu uso evita que o número seja lido como um
número inteiro simples e usado em matemática simples, embora com um pouco de mudança,
rotação e coisas assim você possa fazer bastante e até mesmo fazer algumas comparações e
matemáticas básicas. Falando em mudar e girar
1.2.1 Turno
Deslocamento para a direita e para a esquerda é útil quando você precisa cortar um pouco de um
valor, você precisa gerar um valor onde não possa ajustá-lo em um comprimento menor que o
destino ou em alguns formatos que deixam as coisas em uma forma inalterada Por qualquer
motivo. Na prática, 32 bits permitem muitos endereços e 31 bits ainda podem lidar facilmente
com a maioria das necessidades de endereçamento GBA e DS, de modo que o bit superior pode
ser usado para indicar coisas como de fato os arquivos NARC fazem para indicar um subdiretório.
Além disso, muitos componentes internos do DS precisam apenas de alguns bits para as coisas
que fazem, de modo que são combinados com outras coisas, às vezes não relacionadas, que você
pode precisar perder para ver o que está acontecendo. Em um editor hexadecimal,
provavelmente seria melhor usar a lógica booleana (abordada em um momento) em vez de
mudanças, mas no hardware isso pode acontecer de qualquer maneira.
Uma mudança pode ser para a direita (você desloca os números para a direita, perdendo os
dados mais à esquerda) ou para a esquerda, perdendo os dados mais à direita.
Também é útil como um multiplicador rápido (pense em como você desloca
tecnicamente os números ao multiplicar ou dividir por 10 em decimal).
24
Há também a distinção entre deslocamento lógico e deslocamento aritmético, onde no caso deste último
você não perde os dados se deslocar para a esquerda e depois para a direita. Você também pode fazer
deslocamentos de bloco, mas eles são apenas um caso especial, o que geralmente significa que um determinado
número de bits é deslocado.
1.2.2 Girar
Relacionado ao deslocamento, mas onde você perde dados se você deslocar, ele aparece do outro lado
quando você gira.
1011 gira 1 bit para a esquerda formando 0111
1.2.3 Virar
Flip é mais útil quando você está trabalhando com endian grande e pequeno. Já foi
visto quando big e little endian foram abordados acima, mas um ip de 32 bits de A036
0104 lê 0401 36A0.
Em alguns casos pode ser útil ip valores maiores ou menores, por exemplo, embora
muitos formatos usem 32 bits completos para um comprimento, o arquivo pode ser muito
curto e precisar apenas dos primeiros 16 bits. Mais útil (e nem sempre uma função de
editores hexadecimais), o formato de imagem GBA 4BPP usa 4 bits por pixel, mas irá ipá-los
entre o armazenamento e a exibição na tela.
Na figura abaixo você pode ver o hexágono que representa a peça destacada
(é o ícone da versão wi do Yakuman DS, um título competitivo de Mahjong).
ˆNa primeira linha você pode ver 0000 D0DD onde os pixels rosa (na prática
eles seriam transparentes, mas mais sobre isso quando os gráficos são discutidos) que são
representados por 0, neste caso executados por 5 pixels.
ˆNa próxima linha você pode ver 4 pixels rosa como eles são, mas depois o cinza
pixel (neste caso D) está após o valor F que representa o pixel branco
ˆNa próxima linha você pode ver o pixel de cor creme (E) sendo o penúltimo
em vez de realmente durar. Isso foi feito porque é assim que o hardware funciona/espera
as coisas, mas pode ser complicado se você estiver tentando simplesmente editá-lo.
25
1.2.4 Lógica booleana
Freqüentemente, um conjunto de técnicas mais útil do que os turnos básicos e outras
operações já abordadas. Existem vários tipos, embora você provavelmente verá padrões
em breve (principalmente que NAND, NOR e XNOR são apenas o inverso de suas
contrapartes). A lógica booleana existe em duas grandes áreas com as quais o hacking de
ROM e atividades relacionadas podem estar preocupados; um é programação e o outro é
lógica eletrônica, onde eles executam funções idênticas, mas em alguns aspectos são
pensados de forma um pouco diferente.
Provavelmente é útil discutir aqui a ideia de alto e baixo conforme ela se aplica à
computação e à eletrônica. Na grande maioria dos casos (especialmente hacking de
software e ROM), você deve sempre assumir que, salvo indicação em contrário, um valor
alto corresponde a 1 e um valor baixo corresponde a 0. Isso é diferente de algumas outras
coisas nesta seção onde você normalmente desejará busque esclarecimentos sobre as
coisas (que método de números negativos ou de pontos você está usando, por exemplo).
Há, no entanto, uma variação nesta chamada lógica de borda negativa (referindo-se a
certos chips que mudam na borda descendente de um pulso de clock) que pode ser
descrita com o oposto, onde 0 é alto e 1 é baixo.
Os exemplos serão feitos em binário.
NÃO também conhecido como inversoFaz o que diz e ips cada bit.
1001 1110 torna-se 0110 0001
EAqui você pega dois números (de preferência de comprimento igual, mas se não, a sequência
mais curta é repetida conforme apropriado na maioria dos casos) e combina o resultado de modo
que somente se ambas as entradas forem altas o resultado será alto
1100 1111 E 1010 0100 torna-se 1000 0100
NANDMuito parecido com AND, você pega dois números e os junta, mas em vez de
ambos serem altos, é se ambos forem baixos. É muito útil porque é uma operação
lógica fundamental; você pode empilhar operações NAND ou mesmo portas NAND de
forma que possa realizar qualquer outra operação booleana.
1100 1111 NAND 1010 0100 torna-se 0111 1011
OUNovamente dois números, mas se qualquer uma das entradas for alta, o resultado será alto.
1100 1111 OU 1010 0100 torna-se 1110 1111
NEM Dois números, mas apenas altos se ambas as entradas forem baixas
1100 1111 NOR 1010 0100 torna-se 0001 0000
XORDois números, mas apenas altos se apenas uma entrada for alta. Útil como criptografia por si
só e como base de muitos métodos de criptografia mais úteis. Como um aparte rápido, há sérias
desvantagens quando se trata de realmente ser usado como criptografia; se feito corretamente, é
um dos poucos que não pode ser quebrado com poder de computação suficiente. Além disso,
onde os outros podem facilmente ter múltiplas entradas em eletrônica, um XOR de múltiplas
entradas é, na melhor das hipóteses, complicado.
1100 1111 XOR 1010 0100 torna-se 0110 1011
26
XNORDuas entradas, apenas saídas altas quando nenhuma ou ambas as entradas são
iguais. Sendo o inverso do XOR, tem problemas semelhantes.
1100 1111 XNOR 1010 0100 torna-se 1001 0100
Algumas pessoas podem operar em hexadecimal, mas na maioria das vezes a matemática
se assemelha à divisão longa e à matemática longa. É bastante útil saber rapidamente o
que é 9 + 3 em hexadecimal.
A resposta é C, mas provavelmente usando decimal durante toda a sua vida, seu
pensamento imediato pode muito bem ter sido 12, o que poderia bagunçar todo o seu
hack se você colocar isso na ROM.
A subtração funciona da mesma maneira até chegar a números negativos
(sinalizados); nesse caso, você consegue descobrir qual método está usando para isso.
Multiplicar é bastante fácil
1D x 09 é 10 x 9 + 0D x 9 ou 90 + 75 = 105
A divisão é uma dor e, mais importante, depende da função da linguagem de
programação usada; muitos métodos básicos irão eliminar o material depois do dec-
ponto final onde outros o transformarão em um número flutuante. Ponto flutuante
pode não ser tão preciso, pois hexadecimal é um pouco menos capaz de exibir os
resultados de divisões comuns, sem mencionar que será arredondado em algum momento.
27
Esse truque é frequentemente usado para confundir e, assim, ensinar novos programadores e até mesmo
surpreender os mais antigos; os pacotes de financiamento são especialmente perturbados por esta situação,
pois se falharem alguns pontos de arredondamento, isso pode fazer com que grandes quantias de dinheiro não
vão para onde deveriam ir. No entanto, existem alguns conceitos dignos de nota à medida que surgem nas
linguagens de programação e nos processadores em que são executadas.
ˆUPS. Feito como sucessor direto do IPS, encontrou alguma utilidade em sistemas mais antigos.
consoles e patches posteriores de GBA, mas chegaram um pouco tarde demais e os
métodos de patch abaixo roubaram os holofotes. Chateado, Tsukuyomi UPS e NUPS
são boas ferramentas para UPS.
28
ˆPPF. Feito originalmente para corrigir jogos PS1 (Pestação de repousoPanexandoFformato
sendo a forma mais longa), ele passou por algumas revisões e, como tal, alguns estão
cautelosos, no entanto, ele teve alguma utilidade no Wii e continua funcionando. Os
limites de tamanho não são realmente um problema (não se sabe qual é o limite superior)
e as mudanças são tratadas corretamente. PPF-O-Matic é um bom programa de patch de
GUI e o programa PPF original deve fornecer uma boa alternativa de patch
multiplataforma e criação de patch.
ˆXdelta e BSDi. Ambos os formatos gerais de patch (na verdade, eles tendem a
posicionam-se como formatos rivais) que foram usados para o DS e consoles mais
recentes (os hackers de ROM tendem a favorecer o Xdelta, onde o BSDi viu mais uso
na forma de treinadores e patches de cena). As mudanças são tratadas bem o
suficiente (embora possam não ser perfeitas) e os tamanhos provavelmente não
chegarão ao limite tão cedo (embora algumas implementações do BSDi sejam
bastante baixas). Apresenta algum suporte para verificação e hash de arquivos
originais. A versão atual do Xdelta foi vinculada, mas há uma versão mais antiga que
foi usada há algum tempo e houve alguns problemas de compatibilidade.
ˆNinja. Um candidato anterior para substituir o IPS e caiu em desgraça por vários
razões. Alguns patches foram usados para usá-lo e, em muitos aspectos, funciona muito
bem.
ˆPersonalizado. Havia alguns outros formatos feitos para várias coisas (Jump
Super Stars, por exemplo) e outros voltados para coisas mais específicas (Fire-
Ower é um formato de patch voltado para certos hacks gráficos, por exemplo), mas
eles não serão abordados aqui. Algumas pessoas decidiram descompactar os
arquivos ISO/ROM, corrigi-los individualmente e construir uma ROM/ISO
posteriormente. Isso proporcionou os menores tamanhos de patch, geralmente
contornava o problema de realocação de arquivos, proporcionava a melhor
compatibilidade com várias versões de ROM e dava a opção de ter várias opções
para o patch; uma tradução gráfica pode traduzir gráficos que são em sua maioria
decorativos, em vez de ter que tomar uma decisão executiva, você pode apenas fazer
uma opção no nível do patch. A principal desvantagem é que ele pode muito bem ser
específico da plataforma, exigir a criação de vários arquivos em lote ou a instalação
de tempos de execução. Também pode ajudar onde os arquivos são criptografados
ou compactados e, ao fazer um patch, você ainda está redistribuindo tecnicamente o
código que não pertence a você (criptografia e compactação parecem diferenças em
relação a uma função básica de comparação).
Algumas pessoas levaram esse conceito de formato personalizado um passo adiante no Wii e em alguns
outros consoles, criando uma espécie de jump loader usando um hack de console no nível do painel/
menu para aplicar um patch aos dados de um jogo quando ele estava mantido na memória. Isso
também teve a vantagem adicional de permitir que aqueles com o jogo original e
29
um Wii não hackeado para jogar o jogo hackeado. A Nintendo faria algo semelhante para
corrigir um bug no resort esportivo do Wii, já que o Wii não possui um recurso real de
gerenciamento de patches como o 360 e o PS3.
Método - geralmente carrinhos de cinzas de vários formatos que podem não existir de
forma atualizada ou ser bastante caros, se existirem. A emulação geralmente está
disponível e de alto nível se você quiser, e além disso, tudo até o final da era de 16 bits e um
pouco além geralmente pode ser emulado em consoles e dispositivos portáteis mais novos
em algum nível.
Como o GBA é o foco deste guia, ele recebe uma seção adequada, mas em geral
os dispositivos mais antigos que o DS ou que não usam mídia óptica tendem a não ter
um sistema de arquivos, isso significa que você pode empregar várias técnicas
abordadas no GBA seção abaixo. Eles são frequentemente acessíveis diretamente na
memória, mas além do GBA, muitas vezes têm peculiaridades que você precisa
resolver (mapeadores no NES, hirom e lorom no SNES e controladores de banco de
memória no gameboy original e no GBC). Deve-se notar que essas peculiaridades
geralmente oferecem recursos extras sérios, mas além de serem difíceis de lidar, são
extremamente difíceis de adicionar ou remover de um jogo.
Hoje, além do GBA, você tenderá a encontrar apenas a falta de um sistema de
arquivos ao editar os executáveis para coisas (embora isso não seja uma certeza) e
se você começar a editar os programas de segurança/processador secundário/
hipervisor para os consoles (coisas como IOS no Wii e código de segurança para os
coprocessadores do PS3 Cell).
romhacking.net mantém um banco de dados de informações de hardware para consoles mais
antigos e alguns mais novos. Você também pode gostar de infrid.com para o N64.
1.4.2GBA
Método - carrinho de cinzas ou emulador.
O GBA é independente, mas o local do executável (ou o início dele e o início do
material útil) é facilmente encontrado.
GBAtek e CowBite são geralmente considerados os principais documentos de hardware;
também existe alguma documentação mais específica para certas áreas de hardware, como a
configuração de áudio.
30
Além de alguns homebrew, o GBA realmente não possui um sistema de arquivos, o que
significa que não existe algo como explodir a imagem da ROM em um grupo de arquivos
dos quais ela é composta. Existe uma técnica avançada conhecida como rastreamento que
pode encontrar onde qualquer dado está localizado na ROM e um punhado de variações
mais simples, embora às vezes menos eficazes, sobre o tema (registro de chamadas SWI do
BIOS e pesquisa de campo de ponteiro) que serão abordadas nas seções apropriadas.
Algumas ferramentas como as vistas nos editores Golden Sun da Atrius contêm rotinas de
busca por sub arquivos, a compactação pode ser pesquisada com várias ferramentas, o formato
de áudio GBA sentimental que pode ser detectado em alguns casos e ferramentas mais gerais
para jogos como Pokémon também conterá uma lista da localização de vários componentes do
jogo (ou das coisas que apontam para eles), assim como alguns outros jogos. Além de carrinhos
de cinzas, algumas imagens ROM não despejadas (vídeos completos) e alguns daqueles carrinhos
30 em 1 que você encontra em armadilhas para turistas, o carrinho inteiro fica visível na memória
o tempo todo e isso significa que o limite de espaço é de 32 megabytes.
1.4.3 DS
Método - carrinho de cinzas ou emulador. DS e DS Lite executam código GBA nativamente se você tiver
um carrinho de slot GBA.
Os formatos executáveis para o DS são ARM9, ARM7 e arquivos de sobreposição
que geralmente vêm com a extensão .bin e às vezes SRL.
GBAtek é o principal documento de referência de hardware para o DS.
Ferramenta NDSNDStool na linha de comando letrip e muito rápido e fácil, mas falha
para reconstruir certas imagens ROM corretamente (a maioria ainda funciona).
O sistema de arquivos do DS é bem conhecido e bem compreendido, então você tem muito mais opções
aqui; na verdade, é geralmente o primeiro recurso que os aspirantes a ferramentas de edição de ROM
do DS ganham. Jogos compatíveis com DSi geralmente podem ser analisados por ferramentas padrão e
o código específico do DSi agora deve ter chaves relevantes para ajudar, embora não possa realmente
ser executado. A maioria dos jogos terá formatos de arquivo para alguns
arquivos empilhados em cima, mas observou-se que alguns jogos de DS usam grandes arquivos únicos
para todos ou a maioria de seus arquivos, sendo os arquivos não colocados no arquivo geralmente
componentes de reprodução para download, som ou vídeo.
31
A maior parte do uso será coberta ou bastante óbvia, exceto para o ndstool, que possui um
comando básico de extração como
ndstool -x *.nds -9 arm9.bin -7 arm7.bin -y9 y9.bin -y7 y7.bin -d dados -y
sobreposição -t banner .bin -h header.bin
Substitua -x por -c e *.nds por um nome válido e você poderá reconstruir uma
ROM. O NDStool não é tão útil para hacks finais, mas é bastante útil para testes
rápidos. ndstool -l *.nds fará uma listagem dos arquivos dentro de uma ROM e
suas localizações.
1.4.4 3DS
Vários hacks, embora as coisas estejam frequentemente em um estado de ux, pois é um firmware
sistema que pode ser atualizado. A tendência é a customização moderno, embora ash
carrinhos também existem. A descriptografia de jogos inteiros é possível, consulte XORpad e similares, e
pode ter métodos independentes em pouco tempo. ROMs descriptografadas podem estar disponíveis
on-line e alguns arquivos podem ser obtidos em despejos de memória.
A execução de código modificado está dentro do escopo dos hacks capazes de
executar versões copiadas dos jogos.
3dbrew é a principal documentação do hardware 3ds. Uma rápida visão geral diz que ele
compartilha muito de sua história com o DS, mas também está um pouco mais próximo de uma
arquitetura de computador totalmente moderna (hipervisores/kernels, memória segmentada e
similares), também apresenta uma implementação de 3d semelhante a opengl.
1.4.5 GC (gamecube)
Método - chip mod e caixa miniDVD/modded e DVD normal, carregador SD,
adaptador IDE. Emuladores exigentes, mas viáveis.
boot.dol é o principal formato executável.
Hitmen YAGCD é geralmente considerado o melhor documento de hardware do
gamecube.
Ferramenta de GC
1.4.6Wii
Método - Carregamento de Softmod de USB externo. Modchips e alguns softmods
suportam gamecube. Emulação exigente, mas viável.
Wiibrew abriga a principal coleção de informações de hardware e informações
internas de software, embora existam outras que se movem mais para formatos e
edição de software interno.
. dol é novamente o formato principal, embora ELF apareça no homebrew. Os jogos e
arquivos de Wii vêm em dois sabores originais e um usado por alguns tipos de carregamento
iso.
DiscosVárias ferramentas disponíveis, mas o limpador de Wii será o método de escolha aqui
32
Console virtual e Wiiware, também conhecido como arquivos WADNão deve ser confundido com
doom wad les.
Uma das ferramentas anteriores para isso era o WWpacker, mas existem exemplos melhores nos
binários de exemplo do libwiisharp. Ferramentas simples, mas que podem descompactar bem as
coisas. showmiiwads. Uma ferramenta GUI com a capacidade de descompactar arquivos wad e lidar
com coisas comuns feitas nos arquivos que eles contêm depois disso.
Muitos títulos também aninham coisas em um formato conhecido como u8 (e muitas vezes
combinam a compactação yaz0), mas ambas as ferramentas podem extrair, descompactar e lidar
com isso também.
https://github.com/BtbN/libwiisharp página
showmiiwads do github
Disco rígidoA maioria das pessoas não usa mais imagens iso inteiras ou pequenos ajustes
e, em vez disso, usa um disco rígido USB e talvez um formato personalizado. Eles vêm em
vários formatos e camadas de suporte, mas WBFS é o método principal que geralmente é
empilhado sobre sistemas de arquivos FAT ou NTFS. As ferramentas ISO do Wiimms
vinculadas acima têm certo suporte para algumas dessas coisas.
1.4.7 Xbox
Método - Softmods e hardmods, ambos usando pequenas variações na ideia de disco rígido
interno ou DVDs copiados. A emulação não é realmente adequada para a maioria das
coisas, mas está melhorando, o 360 apresenta uma medida de suporte a jogos xbox
hackeados quando hackeado corretamente.
O formato executável do 360 é arquivos xbe.
Tal como acontece com a maioria das coisas aqui, existem várias opções, embora três se
comparem aqui.
Ferramenta C-Xbox
Qwix
Craxação
Download do Filetrip (todos os três)
1.4.8Xbox360
Método - nenhum softmod real. DVD mod (não permite jogos alterados, XBLA ou DLC, a
menos que combinado com um dos seguintes métodos), JTAG (hardware mais antigo
necessário) e RGH (pode ser feito na maioria dos hardwares, embora atualizações
posteriores possam ser mais difíceis de contornar) levam a onboard e carregamento USB.
Emulação nem perto.
Free60 apresenta muitas informações de hardware.
Os jogos do Xbox 360 vêm em dois aspectos gerais, com um terceiro método
mencionado. O formato executável do 360 é arquivos .xex. Eles podem ser extraídos
posteriormente (eles são baseados no formato executável portátil/Windows PE usado em
arquivos exe e dll).
XexXextool e xextool GUI são ferramentas que podem ajudar aqui. Eles podem
descompactar o formato, aplicar vários patches nos próprios arquivos e aplicar os patches
de atualização do título.
Baixar Xextool letrip Baixar
XextoolGUI letrip
33
DiscosVários programas extraem coisas, incluindo a ferramenta de verificação ISO
conhecida como ABGX360, mas muitos são pesados, então o e-xiso é o principal método.
Extraia a página inicial do xiso
Download de viagem de arquivo
As instalações GOD e NXE/disco rígido vieram de discos e têm apenas alguns bytes
de diferença entre si. Eles podem ser transformados em isos mais ou menos
inutilizáveis com GOD2ISO.
Os arquivos XEX são os binários do 360, podem haver vários. Os patches existem na forma de
atualizações de títulos e podem ser aplicados aos arquivos XEX se você realmente desejar.
USBNão é realmente um formato, mas um dos principais métodos de acesso, por isso é notado.
Mais tarde, na vida do 360, a Microsoft adicionou suporte para um formato USB personalizado (na
prática, era uma seção reservada de uma unidade USB). XTAF.
Suportado por várias ferramentas, mas USBXTAF é o método principal. Download de
viagem de arquivo
34
Ambos usam uma versão dos formatos executáveis conhecidos como ELF como
executáveis.
1.4.10 PS3
Método diferente- softmod (talvez com gatilho de hardware) levando ao carregamento do
USB e do disco rígido. Emulação nem perto.
Tecnicamente, o PS3 usa uma versão do ELF para os executáveis.
ISO
Arquivos PUP (atualizações)
Conteúdo DLC e PSN.
1.4.11 PSP
Método - carregamento de softmod a partir de cartão de memória (adaptadores Memory Stick PRO Duo
oficiais ou microSDHC disponíveis) ou carregamento de armazenamento integrado (PSP Go). A emulação
é mais possível do que antes, mas pouco desenvolvida em comparação com muitos outros sistemas.
O processador PSP MIPS R4000 (aviso PDF) é uma análise do nível de desenvolvedor do
sistema do processador PSP.
Formato executável formato pbp (geralmente chamado eboot.pbp).
Existem algumas ferramentas aqui, mas o UMDGen é a dominante e há poucos motivos
para usar outra. Suporta extração, inserção de qualquer comprimento, reconstrução da
tabela de localização de arquivos e religação de arquivos, bem como criação de imagens
compactadas.
Link de viagem de arquivo
1.4.12 Saturno
Método - Modchip em sua maior parte. A emulação é surpreendentemente boa, embora a
arquitetura do Saturn signifique que a emulação é exigente para a idade relativa do
sistema.
Yabause (um dos emuladores mais populares para o Saturn) possui muitas
informações de hardware.
Uma ligeira variação no formato iso, embora possível com ferramentas padrão.
Guia envolvendo a manipulação de Saturno Les
1.4.13 Dreamcast
Método - Basta inserir o disco copiado ou usar um carregador de disco conhecido como Utopia.
Emulação, o que não é ruim para alguns jogos.
O manuseio da imagem do disco varia. Gravadores de CD eram um conceito novo
quando o DC foi lançado e havia muitos formatos concorrentes para mídia óptica, então
você vai querer uma ferramenta iso padrão para explodi-lo nas trilhas componentes (o bom
é normalmente a terceira trilha em diante). As faixas funcionam mais ou menos como isos
padrão, exceto pelo fato de que estão deslocadas e a maioria das ferramentas iso normais
não conseguem lidar com isso como estão. Felizmente, o Iso LBA Fix (iso x) da DeXT existe e
mudará o LBA para começar do zero, ponto em que tudo irá lidar com isso.
35
1.4.14 Amigo
Método - discos copiados. Emulação bem desenvolvida.
As imagens ADF são as mais comuns (ADZ são apenas versões compactadas do ADF), mas,
sendo provenientes de disquetes, elas tendem a ter um sistema de arquivos.
amigadev tem muita informação de primeira qualidade. UnADF
deve permitir que você descompacte imagens ADF. Página inicial
da Unadf
Link de viagem de arquivo
EDUCAÇAO FISICAO formato principal do Windows é o formato PE, geralmente conhecido pelo
extensões exe e dll. Isso pode ser descompactado com muitas coisas,
incluindo 7zip.
DUENDEUsado como base para muitos formatos executáveis (incluindo muitos dos
consoles abordados em outro lugar).
Lote/bashA maioria dos sistemas operacionais fornece uma linha de comando onde os comandos
pode ser digitado e colocado em camadas sobre isso é o conceito de pequenos scripts de
texto que podem fazer coisas bastante extensas, mas na prática são apenas uma lista de
comandos com alguns extras.
Roteiros (Python, lua, Java, visual basic e muito mais). Muitas programações
linguagens operam fora dos domínios do executável padrão (ou o possuem
como wrapper) e podem ter seu código original, ou algo próximo a ele,
recuperado por vários meios.
SD/CF/XDAlguns pontos que você pode precisar para copiar um SD, CF, XD ou algum outro
cartão de memória setor por setor. Nessas ocasiões existe um programa
chamado DD que é popular no Linux e também possui uma porta Windows.
36
Existem técnicas aqui que vão do óbvio ao sutil, do básico ao complexo e do bruto ao preciso
e muitas serão inúteis para você sem conhecer várias outras coisas detalhadas em outras partes
deste documento. Muitos hackers de ROM que estão começando verão os métodos mais
avançados de localização de dados e entrarão em pânico, mas para dispositivos como o DS e a
maioria dos outros dispositivos esportivos de sistema de arquivos, o principal método que as
pessoas usam para encontrar os arquivos que desejam é o
nomes de arquivos (a maioria dos jogos os apresenta mesmo que não os usem diretamente),
tamanhos e extensões de arquivos diretamente (English.bmg pode muito bem ser o texto em
uma ROM do DS) ou indiretamente (sound_data.sdat provavelmente será o som, então você pode
eliminar esse pedaço da sua pesquisa pelo texto de um jogo que é duplamente bom, já que o
som geralmente ocupa uma boa parte do espaço em uma ROM) com uma rápida olhada nos
nomes dos diretórios ao lado (o som provavelmente conterá som, 3d provavelmente conterá 3d e
dwc\utility.bin provavelmente são download play2).
Além disso, existem diversas extensões e valores de cabeçalho conhecidos para vários
formatos onde os primeiros bytes são decodificados como uma string ASCII ou
hexadecimal conhecida. Muitos mais exemplos depois, mas por enquanto o sdat é um
formato de som extremamente comum no DS e o bmg é um formato de texto bastante
comum. Deve-se notar que as extensões muitas vezes podem revelar a presença de
compactação com exemplos comuns, sendo que se um arquivo termina com .l , .lz , ._ ou
algo nesse sentido, especialmente se tiver outra extensão conhecida antes dele, então pode
bem, seja comprimido e você poderá agir de acordo.
A corrupção da ROM também deve ser mencionada aqui. Fica um pouco caro se você tiver
que gravar discos todas as vezes, mas quando emuladores e carrinhos de cinzas estão
disponíveis, você pode corromper uma parte da ROM, executá-la e, quando ocorrer um erro ou
travar, você poderá ver quais partes fazem o quê. O método simples é usar uma das operações
hexadecimais que você aprendeu anteriormente, mas existem ferramentas de corrupção
dedicadas. Da mesma forma, a técnica pode precisar ser refinada para certas coisas, já que coisas
como gráficos só podem usar uma série selecionada de valores que a ferramenta de corrupção
pode usar inadvertidamente. Você também pode refinar o conceito a um ponto onde alteração é
provavelmente um termo melhor, por exemplo, ao tentar descobrir como o texto é codificado,
pode ser útil repetir um valor ou sequência em vez de usar lixo aleatório.
Depois disso, você começa a seguir para técnicas de nível de programação, como
pesquisa relativa, que usa o fato de que em caracteres romanos usando idiomas, A é
seguido por B, que é seguido por C e, portanto, se você souber que a palavra CAB está em
uma ROM, você pode procurar por um string o que tem um valor seguido por um valor dois
a menos que ele e aquele seguido por um valor um a menos que o valor de abertura
(embora na prática um termo de pesquisa mais longo seja mais útil).
O rastreamento é considerado o método definitivo e ainda é bastante
diferente da simples análise hexadecimal e nomes de arquivos, porém não é tão
difícil acompanhar a ideia básica. Ao rastrear, você encontra o que deseja ver na
memória (se estiver na tela ou saindo dos alto-falantes, provavelmente está na
memória) e o que o colocou lá, e onde foi dito para procurar arquivos
e assim por diante até que você tenha a localização do na ROM ou dados suficientes para
encontrá-lo, e possivelmente também os meios pelos quais tudo é decodificado. Naturalmente é
2O componente de download de uma ROM às vezes atua como uma versão reduzida do jogo
principal, mas separá-lo e usar os dados coletados lá para tentar fazer engenharia reversa da ROM
principal não é tão útil. Às vezes, ele pode gerar uma bela arte, talvez fornecer mais alguns arquivos de
exemplo, mas não é a primeira opção ao fazer engenharia reversa de uma ROM DS para a maioria.
37
uma técnica bastante complicada, mas muito precisa e confiável. Ao lidar com jogos para
PC e em menor grau com alguns emuladores você pode observar quais arquivos estão
abertos e carregados durante a execução do jogo, mas isso nem sempre está disponível/
viável para os consoles. Existe o método menor de observar as chamadas do BIOS (o BIOS
geralmente usado para lidar com a compactação pode levar você diretamente ao local no
GBA) e você pode fazer coisas como procurar um campo de ponteiros (no GBA isso
geralmente significa uma lista de 08 com 3 bytes depois, pois o endereço GBA mais comum
tem o formato 08XXXXXX), o que pode ajudar.
1.6 Abstração
Certamente um tema digno de um documento por si só, a ideia principal aqui está
relacionada ao jargão anterior. Ao custo de não ser imediatamente acessível a todos
(ou neste caso ao computador em questão), você constrói um método pelo qual
interpreta algo em um formato compreensível para um alvo, neste caso geralmente o
console em questão que o traduz para um formato utilizável. Tal movimento
obviamente tem penalidades de velocidade, mas o bônus é que você pode usar um
método mais simples para armazenar, lidar e, com sorte, alterar o item escolhido
conforme necessário.
As linguagens de programação tratam disso, pois todas tentam se afastar de um
usuário que alimenta o computador com uma sequência de 1s e 0s. Um bom exemplo seria
comparar o GBA e o DS, pois, se você se lembrar, o GBA agrupa tudo em um arquivo onde o
DS pode explodir uma ROM em uma série de outros arquivos. Agora, se você deseja
adicionar uma seção de código ao GBA, você altera todas as referências a tudo após a seção
cujo tamanho está aumentando de acordo (um processo muito tedioso que ninguém faz)
ou adiciona ao final da ROM (ou algum outro espaço em branco). No DS, sua ferramenta de
reconstrução de ROM simplesmente adiciona o extra aos locais dos arquivos subsequentes
(e outros tamanhos, conforme necessário) e como os arquivos geralmente não estão
vinculados uns aos outros como um todo (obviamente, os arquivos podem funcionar juntos
de vez em quando), nada é problemático. . No entanto, quando comparado ao GBA, isso
significa que o DS terá que realizar uma etapa extra quando se trata de executar a ROM
para descobrir para onde apontar o comando de leitura. Muito parecido com uma teoria
unificada da física, existe um nível de abstração teórico, mas perfeito, no qual você poderia
inserir um valor inicial e executá-lo de acordo, mas assim como a física, você
ocasionalmente deseja realizar algum trabalho real, então interrompê-lo e possivelmente
simplificar/restringir as coisas para começar a fazer algo.
Relacionado a isso é que nem todos os dados que você vê em uma ROM serão usados nela.
Por exemplo, quaisquer nomes de arquivo contidos em subarquivos ou ocasionalmente até
mesmo os próprios arquivos podem ser completamente irrelevantes, assim como alguns dos
ponteiros/valores de tamanho. Geralmente, vale a pena conhecer e entender o que cada valor
pode significar e considerá-lo à medida que você edita os arquivos, a menos que você possa
provar comprovadamente que isso não importa.
Isso também se aplica ao contrário, com alguns desenvolvedores optando por codificar
valores em algum lugar, apesar de não ser necessário ou mesmo de ser tão bom do ponto
de vista da qualidade da programação (como um hacker de ROM, você pode ter que corrigir
vários bugs introduzidos dessa maneira); lembre-se de que os programadores de jogos
também são pessoas e não são estranhos ao hackear algo juntos e derrubar
para a rotina do almoço.
Se for necessário estabelecer uma regra prática, seria compreender o nível apenas
38
acima, o que você está tentando fazer tenderá a ser benéfico e essa lógica sustenta
grande parte do conteúdo deste documento.
Como parte do projeto subjacente, este documento faz parte de vários editores hexadecimais que
foram testados e avaliados quanto à sua utilidade, de modo a criar uma lista restrita. A maioria
dos hackers de ROM terá vários à sua disposição, cada um voltado para tarefas diferentes. No
entanto, se você puder escolher um pago, obtenha as quatro sugestões de freeware e obtenha
uma ROM específica para hackear, a maioria das coisas pode ser feita com relativa facilidade.
Resumindo, um editor hexadecimal é um editor hexadecimal e todo o resto é muito extra que um
dia poderá tornar sua vida um pouco mais fácil. A GUI para a maioria deles é amplamente
personalizável, mas na maioria das vezes as imagens são aquelas do editor de estoque com
alguns menus exibidos conforme apropriado.
Os recursos que facilitam a vida dos hackers de ROM são
ˆIpping de bytes
ˆPesquisar e substituir
ˆDistribuição hexadecimal
ˆScripts
ˆDesfazer refazer
ˆInserir
39
ˆDespejos de strings (ocasionalmente você pode querer apenas todas as strings de um jogo
mesmo que inseri-lo novamente seja uma dor sem as informações ao redor)
40
PagoOs editores freeware fornecem, de muitas maneiras, um substituto mais do que adequado
para as ferramentas comerciais, mas muitos ainda gostam das ofertas comerciais. Os dois
melhores são bastante caros e têm aproximadamente a mesma capacidade.
41
Editor 010página inicial do editor 010
Outro editor pago no mesmo nível do workshop hexadecimal
42
freewareAs ofertas de freeware aqui, ao contrário de algumas outras áreas da computação, não
estão no mesmo nível, mas com uma GUI ligeiramente diferente. No entanto, quando as
sugestões da categoria freeware são combinadas, obtém-se todas as funcionalidades das ofertas
comerciais.
43
XVI32Pagina inicial
Ainda está sendo desenvolvido ativamente e está aqui principalmente porque apresenta uma
linguagem de script poderosa que pode realizar a maioria das tarefas que os editores freeware
pagos e funcionais usam um pouco mais depois disso, por ser uma verdadeira linguagem de
script.
44
Hexer minúsculoDownload de viagem de arquivo
Um editor descontinuado, mas com algumas características muito
impressionantes, iguais e às vezes até melhores que as ofertas comerciais.
45
HxDPagina inicial
Download de viagem de arquivo
Provavelmente o editor mais simples desta lista, mas é o editor freeware para
muitas pessoas.
46
Específico para hackear ROMTão maravilhosos quanto os editores, comerciais ou não, acima, eles
carecem de recursos como suporte de tabela de alto nível (a maioria dos acima suporta uma certa
quantidade de caracteres personalizados, mas nada verdadeiramente personalizado como o que
é visto em hackers), o que é bastante essencial para texto propósitos de hacking.
47
48
Windhex32Não deve ser confundido com o popular editor hexadecimal de grau forense
de disco winhex, que não está na lista paga devido à falta de recursos bit a bit e coisas
semelhantes (embora seja muito bom em análise forense de disco).
Página Romhacking.net
Excelente suporte para tabelas e textos (incluindo suporte para múltiplas mesas entre as quais você
pode alternar), alguns mapeamentos de memória específicos do SNES e editor de blocos SNES/NES.
Principalmente apenas um editor hexadecimal com capacidade de texto muito bom, com suporte de
tabela e algumas ferramentas para complementar isso. Falta suporte para desfazer e algumas opções de
GUI são um pouco estranhas, o que impede que seja uma substituição para HxD.
49
Dedo de ouro Página Romhacking.net Não deve ser confundida com o GBA as-
sembler Goldroad, a tradução comum do termo chinês para cheats ou a
tradução comum do termo chinês para pins de carrinho.
Suporte para 9 tabelas ao mesmo tempo, não vem com leitura ASCII como padrão,
então você terá que encontrar/criar uma. Ele apresenta algumas habilidades de edição de
tabela.
Embora não seja muito adequado para exibição de texto completo, é diferente da maioria
dos outros editores, pois não está necessariamente vinculado ao final da linha. Isso o torna uma
ótima opção para edição de texto sem a necessidade de criar uma ferramenta personalizada ou
descartar o texto e tentar fazer algo em um editor de texto mais convencional.
50
TraduçãoPágina Romhacking.net Novo fork/
versão Tópico do fórum Romhacking.net
Para muitos, o editor hexadecimal de hacking de ROM padrão já existe há muito tempo
(embora o Crystaltile2 esteja um pouco além).
Ajuste do tamanho da janela hexadecimal possível através do editor, mas não do
agrupamento. Salto incluindo suporte de salto relativo disponível e pode manipular bits.
Pode pesquisar usando tabelas e suporte de pesquisa relativa está disponível.
Não há suporte para desfazer, mas uma boa opção somente leitura pressionando tab.
51
1.7.2 Editor de blocos
Embora você possa editar qualquer coisa com um editor hexadecimal, fica muito complexo fazer
qualquer coisa além da edição mais básica usando um e a primeira coisa a mudar para uma
ferramenta de nível superior são os gráficos 2D que recebem um editor de blocos. Existem vários
disponíveis, embora apenas alguns sejam focados aqui. Vários kits de desenvolvimento de
homebrew também possuem alguns programas interessantes voltados para a conversão de
formatos comuns para formatos um tanto estranhos usados por dispositivos portáteis e outros
consoles.
52
TileEd2002Pagina inicial
Download de viagem de arquivo
53
TelhaGGDPágina do Github
Baixar Romhacking.net
Embora os dois acima devam servir para a maioria dos propósitos de edição, este programa
tem suporte extremamente personalizável, o que significa que a maioria dos formatos de
hardware concebíveis devem ser cobertos (de 1 a 32bpp com suporte big e little endian) e, de
certa forma, tem uma interface de usuário um pouco melhor do que o crystaltile2. Ao contrário
dos outros dois, não há capacidade de edição incorporada no programa, mas há exportação e as
informações podem ser usadas para direcionar um editor de outro programa.
54
1.7.3 Planilha e linha de comando
A seguir estão algumas ferramentas básicas que podem ser usadas para ajudar ao hackear ROM quando
as ferramentas existentes são insuficientes e antes/em vez de pular para a programação de uma
ferramenta específica de jogo/formato.
ColandoPelo menos um de seus editores hexadecimais deve ter uma opção de exportação de
texto que, quando você definir a quantidade apropriada de colunas, possa exportar uma lista de
texto hexadecimal (efetivamente criando uma matriz) e igualmente uma opção de pesquisa
deverá ser capaz de exportar os resultados . De qualquer forma, você precisará colar isso na
planilha, que em sua maior parte é bastante intuitiva e automatizada, mas ocasionalmente você
terá que importar como uma largura fixa ou como um conjunto delimitado de texto (geralmente
um espaço ou tabulação fazendo a delimitação). Mesclar células (digamos, para um valor de 32
bits distribuído por 2 colunas onde você não deseja alterar o comportamento do seu editor) pode
ser feito, mas a maneira rápida e fácil é colar as colunas em um editor de texto e pesquisar e
substituir o valor delimitador .
Se for necessário, é melhor abusar de uma função matemática e multiplicar
pelo valor hexadecimal apropriado (65025 e 255 para mudar o equivalente
hexadecimal em 2 e 1 bytes, respectivamente) e vice-versa usando mod, oor e
outras funções.
As operações bit a bit, booleanas e ipping são melhor executadas em um editor hexadecimal
e, com a opção, você também desejará importar como texto (todas as funções ainda funcionarão),
pois os números têm o hábito de serem analisados em alguma coisa.
PreencherUm comando/opção básico, mas que nem todo mundo conhece. No canto inferior
direito de uma determinada célula, quando selecionada, haverá um pequeno quadrado no qual
você pode clicar e segurar antes de arrastar para baixo ou para cima (ou transversalmente) e as
células terão o conteúdo replicado nas células cobertas pelo intervalo de arrastar. Se você tiver
um padrão, ele tenderá a ser continuado e se você tiver uma fórmula que tenderá a ser
continuada, mas o conteúdo da célula estiver alinhado com a mesma coisa (se o original era c4 -
c3, o próximo provavelmente será c5-c4), não é infalível e algumas das coisas mais avançadas que
você deseja fazer podem ser difíceis de executar, mas funcionou com muito mais frequência do
que não.
55
DiferençasÉ verdade que isso é mais uma técnica do que uma função real, mas é o
conceito mais usado que realmente altera/gera dados. Se você tiver um campo de
ponteiros (abordado posteriormente, mas a ideia geral é um valor que contém a localização
de outro valor) e os resultados de uma pesquisa por algo que indica o início de um valor,
você pode precisar que eles se alinhem, mas pode não ser facilmente aparente. Na maioria
das vezes, os valores dos ponteiros mudam entre eles (se os dados estiverem a uma
distância fixa, não há necessidade de incorrer na penalidade de tempo para procurar o
ponteiro e talvez fazer algumas operações sobre ele) e isso pode revelar coisas. Para fazer
isso, basta pegar o próximo valor do ponteiro e subtrair o atual. O resultado será a
diferença e se você fizer isso para um conjunto de ponteiros desconhecido, poderá
facilmente combinar as coisas e determinar se elas estão fora de um determinado valor.
Você pode fazer algo semelhante ao contrário para gerar novos comprimentos de arquivo
para economizar o cálculo e a alteração manual de uma tabela de ponteiros inteira, mas
neste ponto provavelmente é melhor construir um programa adequado.
Função de classificaçãoNão tão útil no hacking de ROM quanto no uso diário é a capacidade
de classificar por um valor (seja na ordem das letras ou na ordem dos números)
GetmyhexBaixar Romhacking.net
Download de viagem de arquivo
56
Uma ferramenta simples para obter a leitura hexadecimal de várias seções curtas de
texto.
1.7.4 Compressão
A compactação já foi a ruína dos hackers de ROM, mas ficou muito mais fácil de
manusear no DS e também não é tão ruim para o GBA. Neste ponto, pode até ter sido
reduzido a uma simples etapa extra usando uma ferramenta conhecida ao extrair algo
de uma ROM ou colocá-la de volta, mas não muito mais.
DSdempPágina do Github
Suporta compactação e descompactação de formatos LZSS vistos no GBA
e DS (tipo 10, 11, 40 e binário/BLZ), RLE e Hu man.
unLZ-GBAbaixar romhacking.net
Uma ferramenta um pouco mais antiga, mas uma das poucas capazes de pesquisar por compactação.
57
Lz77restructor2Download de viagem de arquivo
Uma ferramenta mais recente com recursos de extração e inserção/edição de gráficos e
texto, além da capacidade de pesquisar compactação e restringir essas pesquisas.
GBADecmpbaixar romhacking.net
Uma ferramenta simples para descompactar e recompactar dados de/para um local conhecido.
1.7.5 Música
Ferramentas específicas de formato e console serão abordadas nas seções relevantes. No
entanto, é útil ter algumas ferramentas de alto nível.
58
Edição geral - estúdio AwavePágina inicial do estúdio Awave
Um software amplamente pago que pode ajudar a converter arquivos e lidar com
implementações nada perfeitas de alguns formatos de áudio que várias ferramentas específicas
de jogos podem produzir. Suporte Midi e DLS está disponível.
1.7.6 ASM/Montagem
O uso costuma ser tão extenso quanto a própria montagem, mas mesmo assim algumas ferramentas
DShá vários emuladores disponíveis, mas apenas três têm suporte real
para imagens ROM comerciais e depuração.
Desmume
Desmume página de download
As versões desenvolvedor e regular apresentam visualizadores de memória, desmontadores,
VRAM, OAM e outros visualizadores. Também oferece suporte para depuração do tipo GDB e LUA,
como visto em emuladores focados em hackers de alto nível, como FCEUX. Suas opções de
criação de cheats também estão bastante desenvolvidas hoje em dia.
não$gba
página de versão do desenvolvedor no$gba
A versão para jogos do no$gba apresenta poucos recursos de depuração (embora existam
alguns editores de memória que fazem interface com ele), mas há uma versão de depuração, que
agora pode ser baixada gratuitamente, disponível com extensas capacidades de depuração.
Observe que as imagens ROM podem precisar ter sua área segura criptografada para serem
executadas, mas o eNDryptS Advanced deve ser capaz de lidar com isso.
Ideias
Página inicial do iDeaS
Embora um pouco menos desenvolvido que o Desmume na frente da ROM
comercial, ele suporta algo mais próximo dos pontos de interrupção, como visto no
no$gba e nos emuladores GBA como padrão. Os logs de função e o comando executar
para seleção são mais proeminentes na seção de depuração e não são um substituto
completo para no$gba.
GBAO GBA tem uma coleção um pouco maior e com mais recursos de emuladores
de nível de depuração.
VBA-SDL-h
Página inicial do VBA-SDL-h
Página de compartilhamento VBA-SDL-
h Download do Filetrip
Versão do popular emulador GBA retrabalhado para adicionar suporte de depuração, como a
capacidade de definir pontos de interrupção.
VBA-h
Download de viagem de arquivo
59
não$gba
página de versão do desenvolvedor no$gba
Junto com o DS, o GBA é bem suportado nas edições de depuração do
no$gba.
BoicoteAvanço
Download de viagem de arquivo
Alguns preferem isso ao VBA-SDL-h e certamente é um pouco mais feliz com a GUI. Pode
demorar um pouco mais para que algumas imagens ROM funcionem e alguns dos recursos não
são tão extensos, mas possuem pontos de interrupção que contam muito.
60
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
ˆIDA Página inicial do IDA Software pago, a edição freeware está bastante bloqueada
embora (basicamente X86 ou nada). Esta é a ferramenta de desmontagem/depuração de
uso geral e uma para a qual todos os novos desmontadores e plug-ins/ferramentas de
depuração para várias plataformas tendem a ser escritos.
baixar romhacking.net
Para o GBA você também pode gostar deste script do Dwedit.
61
estrada do ouro
baixar romhacking.net
Por um bom tempo, o principal montador disponível para o GBA no que diz respeito ao
hacking de ROM. Não é a ferramenta mais limpa que existe, mas pode fazer as coisas e,
para algumas axilas, substituí-la, mas as ferramentas acima são agora o método preferido.
militar
Página inicial do projeto
Escrito em lisp e voltado mais para programação homebrew, é mais um montador
para a família de processadores ARM.
braço sdt
É mais um montador de programação e apresenta algumas funções muito
interessantes para ajudar no desenvolvimento de programas. Muitos dos emuladores
homebrew GBA, e algumas versões do moonshell no DS, foram codificados usando isso em
preferência às cadeias de ferramentas GNU, algo que tornou a manutenção, bifurcação e
contribuições de terceiros mais difíceis em alguns casos.
FASMARM
Um plugin ARM para o montador FASM X86 e x86-64. Você pode encontrar
FASMARM aqui.
62
1.8 Conceitos básicos de formato de arquivo
Grande parte do restante deste guia gira em torno da capacidade de extrair formatos de
arquivos de peças e será abordado e relacionado um pouco ao hardware subjacente e aos
conceitos nos quais a área é baseada, mas há coisas a serem observadas ao desmontar um
arquivo .
formato é muito importante ter. Não precisa estar presente se você puder calcular os
comprimentos de outra forma.
Ponteirosbem como os comprimentos, é útil ter as localizações dos arquivos, assim como
as subseções de um formato de arquivo complexo e estas tenderão a ter valores que
indicam a localização delas (aponte se desejar).
Cabeçalhoo início (ou às vezes o fim) de um arquivo que geralmente contém informações sobre
o resto do arquivo.
Fica muito mais complexo, específico para uma área e existem vários métodos e armadilhas,
alguns dos quais já foram mencionados (coisas como alinhamento de palavras), mas se você
puder encontrar um ou mais dos itens acima e documentá-los, geralmente estará bem. sua
maneira de fazer engenharia reversa em um formato de arquivo.
Também para dar um exemplo de por que seu editor hexadecimal desejará alterar o
tamanho da janela (de preferência quando maximizada e com um simples clique e arrastar
o mouse)
63
Apenas abrindo o arquivo e depois de um rápido redimensionamento e uma pequena exclusão
64
2 Gráficos
Seja copiando-os ou desejando editá-los, o campo do hacking gráfico é, e tem sido,
uma grande parte do hacking de ROM. Geralmente há uma linha que pode ser traçada
entre imagens 2D e 3D, pois elas tendem a ter hardware diferente por baixo de tudo,
no entanto, ambas podem ser usadas em conjunto para influenciar e aumentar a
outra; imagens isométricas e sprites usados para gerar uma visão 3D em primeira
pessoa não são novidade, mas muitos ficam surpresos ao saber que New Super Mario
Brothers no DS usou modelos 3D em vez de sprites para fazer um jogo de plataforma
2D bastante tradicional. O hardware 3D do DS é usado de várias maneiras que podem
não estar imediatamente alinhadas com a percepção geral do 3D.
1. Tem que replicar cores suficientes que o olho humano não consegue perceber
(normalmente é considerado cerca de 24 bits, também conhecido como 16,7 milhões de
cores, embora aqueles que editam imagens gostem de ir para 32 bits (4294967296
valores) para ter mais informações para editar e evitar que as cores pulem de uma para
outra) e embora a tela do GBA e do DS seja de 16 bits, ela pode dar conta do recado se
você fizer direito.
2. Tem que ter informações suficientes, isso normalmente significa ter um ponto e
o ponto próximo a ele não serem distinguíveis um do outro (se você puder ver
os pontos que compõem a imagem média, algo deu errado). Agora, existem
maneiras de contornar isso, pois o olho humano é melhor em brilho
(luminância) do que em cores e existe algo como ampliação vazia, onde você
pode ampliar/ampliar coisas, mas nenhuma informação nova real será obtida,
para não mencionar os humanos não veem ultravioleta, então tende a não
3Origina-se da robótica, mas existe um conceito conhecido como vale misterioso, que pode ser
resumido. À medida que um robô ganha mais qualidades humanas, os humanos reagirão mais
favoravelmente a ele em um nível emocional, até que um ponto de inflexão seja alcançado onde o robô
é bastante semelhante a um humano, mas não exatamente, e os humanos começarão a reagir de forma
menos favorável, ou mesmo negativa, em um nível emocional, até que o robô se torne
consideravelmente mais realista (o que não é pouca coisa). Nesse ponto, a reação emocional volta-se
para o positivo. A ideia tem paralelos na mídia e em outras tentativas de emular um ser humano ou algo
que é visto no mundo real. Para este fim, optar pelo ultra-realismo nem sempre é a melhor aposta.
65
para ser replicado em imagens. Na verdade, grande parte da compactação com perdas tem a tarefa de
fazer exatamente isso.
2.0.1 Aliases
A maioria das telas do mundo (e no que diz respeito aos jogos é principalmente apenas o
Vectrex que difere aqui) usa uma grade de pixels que pode ser definida individualmente em
várias cores para exibir imagens. Renderizar isso significa que uma linha bem definida pode
aparecer como uma sequência de alguns pixels e depois parecer deslocar um pixel e depois
outra sequência. O olho humano é bastante hábil em captar isso e, ao contrário de outros
conceitos em vídeo e gráficos, mesmo quando não treinado para isso (veja o exemplo
abaixo), foram desenvolvidas técnicas (conhecidas como anti-aliasing) para diminuir o
efeito.
Exemplo (pode ser necessário aumentar um pouco o zoom)
Isso também é um problema quando você pega uma imagem que foi feita em um tamanho e
a amplia, ou às vezes quando você a reduz, para algo que não seja uma simples metade (ou um
quarto ou assim por diante) do tamanho do original, além que embora o dimensionamento de
imagens não vetoriais tenha várias armadilhas potenciais, faça-o com moderação ou, melhor
ainda, não o faça.
2.0.2 Halo
Relacionado de certa forma ao alias acima, o alias e as técnicas para evitá-lo podem causar
problemas. Aqui, ao tentar selecionar apenas o contorno de um item em um fundo
complexo, ele pode ser prejudicado pelo anti-aliasing, que tem o hábito de causar uma leve
fusão/suavização de cores e transições, como resultado, um contorno colorido pode
aparecer ao redor dele, o que não parece muito diferente de uma auréola.
66
Esta é uma das razões pelas quais folhas de sprites e coisas semelhantes geralmente vêm
como uma seleção de sprites em um fundo rosa choque ou verde limão, o que diminui os
efeitos de fusão.
Em imagens gerais significa uma coisa: quantos bits são atribuídos às cores, algo que
foi abordado na introdução desta seção, mas em imagens de console 2D significa qual
número é atribuído para representar cada pixel com valores típicos sendo 4 e 8,
embora 1 e 2 sejam vistos com bastante frequência em vários sistemas, incluindo GBA
e DS. Agora, isso não significa cores de 4 e 8 bits, mas que você pode selecionar entre
uma variedade de cores de uma seleção pré-fabricada composta por cores de 16 bits.
Posteriormente, é abordado um conceito conhecido como endereçamento setorial,
que funciona com base em um princípio relacionado.
67
Na maioria das operações o DS e o GBA fazem uma paleta de várias cores usando o
método acima e as imagens se referem a isso para gerar as cores. Se você precisar
transformá-lo em um valor de cor de 32 bits, digamos para notação de cores HTML, na
maioria das vezes ele é diretamente interpolado (multiplique por 7,96875 que é 255
dividido por 32) sem correção, exceto talvez por um arredondamento (isso pode variar
entre implementações), e como a maioria das telas não são calibradas corretamente e as
telas do GBA/DS não são excelentes para começar, ele funciona bem o suficiente.
Também deve ser observado que o DS possui uma seção mestre de brilho logo
antes da imagem ser exibida e hardware de captura opcional que altera a forma como
uma imagem é exibida e isso é um acréscimo a alguns dos recursos extras
encomendados ao GBA e DS que será abordado mais tarde.
2.2 Azulejos
Embora você possa desenhar uma imagem inteira na tela de uma só vez (muitos jogos de DS são
grandes fãs disso e efetivamente fazem um bloco de 256 de largura por 192 de altura, necessitando de
um editor de blocos capaz de lidar com isso, um truque que muitos jogos legados não são capazes de
fazer). ) a maioria dos gráficos 2D é construída a partir de pequenos blocos de construção conhecidos
como blocos. Normalmente, esses blocos têm 8 por 8 ou 16 por 16 pixels, embora as fontes de texto e as
texturas 3D, bem como os blocos de tela inteira mencionados anteriormente, gostem de quebrar a
forma aqui. A maneira simples de pensar sobre eles é considerá-los versões muito chatas (graças aos
pixels quadrados) de uma imagem pintada por números, com os números sendo procurados em uma
paleta. Embora a maioria das pessoas nunca precise mexer nos gráficos com um editor hexadecimal, é
necessária uma apreciação de como o hardware funciona para fazer engenharia reversa de alguns dos
formatos mais complexos. Da mesma forma, para obter uma apreciação dos mecanismos de animação/
manuseio, aprender sobre os métodos pelos quais os blocos e as paletas operam é praticamente
obrigatório.
2.2.1 1Bpp
Tecnicamente, é um método de compactação (o hardware de tela/vídeo em si não exibe o
modo em nenhum sentido real), mas é um caso especial, pois é tão simples que um editor
básico de blocos pode lidar com ele e pode ser editado no local sem problema como de fato
o Crystaltile2 faz, para esse fim ele está aqui e não mais tarde, quando a compressão for
discutida. A idéia é que se você tiver uma fonte em preto e branco ou alguma outra imagem
de duas cores a cada quatro bits, o comprimento mínimo de um pixel que o hardware
aceita será de fato um ou outro, permitindo compactar a imagem em 1 bit por pixel.
Embora não seja obrigatório para os desenvolvedores usá-lo ao lidar com imagens de
1bpp, o BIOS do GBA e do DS, na verdade, carrega um método de descompactação no
SWI10h conhecido como BitUnPack.
2.2.2 4 Bpp
O carro-chefe do GBA e uma boa parte do DS. Trazendo de volta o ícone do Yakuman DS. A
seleção das formigas em marcha é a seção visualizada no editor hexadecimal, que é como
está na ROM original (certos editores hexadecimais podem fazer ip nibbles, mas isso não foi
feito aqui). Como você pode ver, cada nibble procura o valor de uma única cor (uma de 16),
que pode ser qualquer coisa no formato de 15 bits que o GBA e o DS podem usar. Da
mesma forma, existem 32 paletas, cada uma com a opção de 16 cores entre as quais o jogo
pode alternar em tempo de execução. Embora não seja
68
a única animação colorida possível (a paleta também pode ser editada em tempo de execução)
um desenvolvedor pode usar essas paletas múltiplas para alterar a aparência dos itens dentro do
jogo e se você vir a opção de alterar, digamos, no início de uma batalha (avançar guerras guerra
room é bom para isso) ou mesmo em tempo de execução, então é quase certo que você esteja
olhando para isso.
Paleta
Como podem imaginar o fundo não é cor-de-rosa no jogo real e isto acontece porque a
primeira cor numa paleta é tratada como se fosse transparente independentemente do que
seja (embora na prática seja bastante inútil tendo em conta a forma como o ecrã funciona
permite uma gama completa de cores sem a perda de uma única cor).
2.2.3 8Bpp
Apesar de disponível e bem utilizado no GBA ele realmente começou a ser utilizado no
DS.
Aqui cada entrada de paleta tem 8 bits e duas paletas de 256 cores estão
disponíveis, embora apenas uma para cada modo (BG e OAM)
69
Aqui cada dígito hexadecimal é a busca pela paleta com o primeiro sendo a linha e o
segundo sendo a coluna (embora se você realmente quisesse você poderia ipá-los e de fato
o hardware provavelmente faz exatamente isso mas isso está introduzindo um trabalho
completamente desnecessário para nenhum ganho real).
70
O segundo par de blocos é totalmente verde (01 binário na paleta). Dito isso,
são 4 bits entre o início de um pixel em um determinado bloco e o início do
próximo pixel no bloco que dá origem aos números visto
1 hexadecimal é 0001 binário, portanto, 00 vai para o segundo bloco (inferior) e 01
vai para o primeiro bloco (superior).
O segundo par é verde e é representado por 5 hex 5 hex
corresponde a 0101 binário
O padrão ainda é válido para o ladrilho único azul e preto. Os
ladrilhos azuis duplos
Um hexadecimal corresponde a 1010 binários.
Um exemplo mais complexoA maior parte disso será deixada como um exercício para
o leitor, mas como mencionado, os nibbles são ipados de maneira semelhante a 4bpp
e isso não é imediatamente aparente no exemplo acima.
O bloco mais à esquerda (superior) fica em branco por 4 pixels verticais, mas o bloco inferior contém
dados.
00 08 08 00 hexadecimal
00000000000010000000100000000000 binário 80 88 88
00 hexadecimal
10000000100010001000100000000000 binário
O primeiro pixel está em branco em ambas as contagens, assim como o segundo, portanto o
00 é válido. O terceiro não está em branco, mas ainda é 00, o quarto está em branco, mas é
10 (10 binário = 3, lembre-se). Como mencionado, os nibbles são cortados em relação aos pixels
que representam.
O quinto pixel é azul, mas é 00 e o sexto pixel é 10 (novamente ipped). Indo
para a próxima linha
Em branco e depois azul. Invertido novamente (10 e 00 sendo vistos no binário).
71
A faixa em questão é o valor 0-3, 4-7, 8-B e CF. Eles poderiam aumentar de 0 a 3 para
permitir os primeiros quatro pixels (seleção 0), de 4 a 7 para permitir os segundos quatro
pixels (seleção 1) e assim por diante, mas é necessário um pouco mais de fundo antes que
isso faça sentido.
O primeiro nibble seleciona entre as primeiras quatro cores usando o intervalo (0 a 3
pixel 0, 4 a 7 pixel 1 e assim por diante)
O segundo nibble seleciona uma das quatro cores também em uma linha, mas as
quatro que ele pode selecionar são determinadas pelo valor do primeiro nibble. Dentro dos
valores, embora possa não importar para o primeiro pixel, o segundo tem os quatro pixels
também em um intervalo de quatro e estes são selecionados pelo valor real dentro do
primeiro pixel.
Exemplos
A seleção 0 valor 2 (na prática seria 2 hexadecimais para o primeiro pixel)
permite o terceiro grupo de cores da paleta para o segundo pixel.
A seleção 3 valor 2 (na prática seria E hexadecimal para o primeiro pixel)
permite o terceiro grupo de cores da paleta para o segundo pixel.
A seleção 0 valor 0 (na prática seria 0 hexadecimal para o primeiro pixel)
permite o primeiro grupo de cores da paleta para o segundo pixel (0 a 3 na
numeração padrão).
72
2.2.6 Bitmap
Provavelmente será melhor servido após discussão sobre modos gráficos e hardware,
mas saiba que isso não se refere ao formato de imagem bitmap visto em todos os
editores de imagens básicos e mais avançados, embora alguns modos tenham muito
em comum com esse formato.
O GBA tem a capacidade de evitar blocos e apenas desenhar imagens
linha por linha em toda a tela, embora limite o que pode ser feito, pois ocupa
a maior parte da VRAM e não é viável alterar tudo a cada quadro, tão poucos
os jogos usam isso.
Nos gráficos é conhecido como modos 3, 4 e 5
3é um modo de 16 bits de 240x160 (também conhecido como resolução GBA) onde as cores são definidas
ali mesmo (mesmo estilo BGR do resto do hardware)
4é um modo 240x160 de 8 bits onde a paleta completa de 256 cores é usada (modos 3
e 5 não permitem cores transparentes ao contrário deste) e permite que 2 quadros sejam de
nidos na memória ao mesmo tempo.
5é um modo 160x128 (menos que resolução GBA) usando a mesma ideia do modo
3, mas o tamanho reduzido permite que dois quadros sejam armazenados na VRAM.
O DS tem um tipo de modo de bloco relacionado onde blocos grandes ainda compostos ou
referências de paleta como blocos normais podem ser usados e é bastante popular, mas o DS
tem um tamanho de VRAM ligeiramente aumentado para gerenciar melhor isso. Ele também tem
a capacidade de manter e manipular imagens maiores que a resolução em modos bitmap (é útil
para algumas representações finais de 3D), embora, novamente, isso seja melhor servido para
uma discussão sobre hardware.
Alguns jogos usam formatos conhecidos/comuns como GIF, PNG e JPEG, sendo o
mais prolífico o do navegador DS Opera. Ter que decodificá-los como parte da
operação geral (afinal, o que é a web sem imagens) significava que ele poderia
usar esses formatos internamente com bastante satisfação, mas certamente
outros jogos também fizeram isso. Isso se torna ainda mais comum em outros
consoles mais poderosos, mas o DS tem alguns formatos que a Nintendo fornece
no SDK que permitem algumas habilidades bastante extensas, mais sobre
aquelas na seção layout/OAM.
73
Primeiro selecione os blocos/área que deseja editar. Clique com o botão direito ou clique no
menu suspenso de edição
Você pode copiar a imagem se tiver algumas pequenas edições, mas a maioria optará
por exportá-la. Crystaltile2 tem algumas opções básicas, mas o BMP funciona para a
maioria dos propósitos. Aqui você pode importá-lo para o editor escolhido
Há também a segunda opção de exportação 1:1 que divide as coisas ao longo das linhas dos
blocos e permite a formação de uma espécie de expressão regular.
74
Uma vez no editor, você pode editá-lo adequadamente
75
Clicar com o botão direito ou clicar no menu suspenso de edição e pressionar importar
importará a imagem recém-salva de volta para o editor, onde você poderá movê-la (ela se
ajustará às linhas de grade). Novamente, você pode usar copiar e colar se preferir, mas
lembre-se de mesclar camadas se o seu editor suportar.
76
Mova-o de acordo e clique duas vezes na imagem para defini-la
2.2.9 Evitando gradientes, AA, compressão com perdas, ruído e coisas assim.
O nome disso já diz tudo e a maioria dos artistas de pixel já sabe disso, no entanto,
isso precisa ser mencionado para poupar você do incômodo de ter que refazer toda a
paleta, o que pode até não ser viável se a paleta for usada em outro lugar, não
77
mencionar que se você tiver apenas cores limitadas disponíveis, faz sentido não desperdiçá-las, a
menos que você realmente tenha a opção de fazê-lo. Para este fim, você deve evitar gradientes
(espero que já exista um, se você precisar), opções de anti-aliasing (muitas vezes adicionadas ao
adicionar texto), redimensionamento (o algoritmo do vizinho mais próximo é provavelmente o
pior método de escala de uso geral, mas tem o benefício Não é possível usar as cores com as
quais você realmente precisa, se você realmente precisar de uma), funções de ruído e outras
coisas que adicionarão cores extras aleatórias à sua imagem (como salvar como JPEG, mesmo em
100%). Isso significa que, diferentemente da maioria das edições de imagens que você pode ter
feito em outros momentos da vida, você está limitado aqui.
Em uma nota diferente, assim como mudar as paletas pode mudar coisas em outras
partes da ROM que você também tem que enfrentar, ou pior, você enfrenta memória
limitada, o que pode limitar os blocos que você pode editar, mas isso é o assunto da
próxima seção.
O GBA e o DS são praticamente iguais, embora o DS tenha dois motores conhecidos como A e
B, que são ostensivamente um para cada tela, embora não estejam vinculados a uma
determinada tela e possam ser facilmente trocados em tempo de execução. O mecanismo A tem
mais memória, a capacidade de fazer bitmaps VRAM completos, bem como o que abriga
principalmente os resultados do 3d (o mecanismo B pode usar os resultados do 3d, mas requer
um pouco de reflexão) e usa o hardware de captura que pode ser usado para criar
78
efeitos, embora os efeitos/funções gerais mais gerais ainda funcionem no motor B.
Tal como acontece com a maioria das outras coisas nos dispositivos portáteis, o próprio hardware
possui seções dedicadas à execução de vários aspectos do hardware, com gráficos formando uma
grande parte dele. Deixando o DS 3d de lado, existem dois componentes principais que entram no vídeo
ˆO manipulador principal conhecido como DISPCNT é encontrado em 4000000 hexadecimais
no GBA e no DS (embora o DS o tenha apenas nos mapeamentos de memória ARM9 e tenha um
segundo para o mecanismo B em 4001000 hexadecimal).
ˆO BG real (4 seções de 16 bits) e o material OAM que lida com todas as coisas de nível
inferior para cada um dos vários modos.
2.3.2 Tempo
O hardware gráfico tende a atuar como um temporizador para grande parte do resto do sistema,
no que diz respeito ao software, com um componente muito significativo das verificações,
atualizações e coisas semelhantes sendo iniciadas quando ocorre um vblank (branco vertical).
A idéia geral é que a tela seja redesenhada em uma linha de varredura (uma linha
horizontal na tela) de cada vez. No entanto, após cada scanline ser desenhada, há uma
pausa conhecida como hblank (equivalente ao tempo necessário para desenhar 68 pixels
no GBA) e depois de todas as scanlines serem desenhadas, há outra pausa conhecida como
vblank (no GBA, parece ser cerca de o tempo para desenhar 68 linhas ou apenas 84.000
ciclos e as 71 linhas para o DS significa que há mais ou menos a mesma taxa de atualização
lá). Como a atualização da localização das coisas poderia causar rasgos na tela se fosse feita
no meio da atualização, quaisquer atualizações na tela e outras coisas intimamente
relacionadas a ela são acionadas nesses momentos (na verdade, o próprio hardware dedica
os primeiros bits nas interrupções apenas para vblank e co). De qualquer forma, a taxa de
atualização é ligeiramente inferior a 60 Hz, e é por isso que a maioria dos jogos busca uma
taxa de quadros logo abaixo de 60 FPS ou metade disso em 30 FPS.
Embora definitivamente valha a pena conhecer como o hardware funciona nesse
aspecto, deve-se dizer que, a menos que você esteja fazendo programação de baixo nível
ou se conectando ao código usando temporizadores baseados nele, a maior parte do
hacking de ROM não está muito preocupada com isso. e mais foco é colocado no OAM, nos
registros de exibição e no manuseio de memória. A seção de montagem cobrirá mais sobre
interrupções, mas enquanto isso, se você quiser ler mais, a seção de vídeo do Tonc tem um
bom exemplo trabalhado e o GBAtek tem muitos números.
Além disso, como mencionado, as interrupções são importantes, então GBAtek nas interrupções.
07000000 hex é a localização do OAM no GBA com obj 0 em 07000000 hex, obj1
em 07000008 hex, obj2 em 07000010 hex, obj3 em 07000018 hex e assim por diante.
O DS é praticamente o mesmo, mas possui um segundo banco de 7000400 hexadecimais que também tem 1 Kbyte
de comprimento para o mecanismo B.
79
Fica bastante complexo e não é necessário muito além de uma apreciação básica dos
conceitos para a maioria dos trabalhos de hacking (se você entende como funciona, pode
pesquisar e com a ajuda dos documentos decodificar os valores encontrados que são bons
suficiente para a maioria das coisas), ainda assim você será encaminhado ao GBAtek, que
possui uma lista completa, se desejar.
Três valores de 16 bits constituem a maior parte das coisas úteis e agrupados em cada um
desses 16 bits
Atributo 0 - Primeiros 16 bits - Coordenadas Y (bits 0 a 7 levando a 256
opções) Atributo 0 - Segundos 16 bits - Coordenadas X (bits 0 a 8 levando a
512 opções)
Atributo 0 - Terceiros 16 bits - nome, prioridade e seleção de paleta de 4 bpp A prioridade é
para cada objeto em relação aos planos de fundo e os valores mais baixos dos objetos têm
uma prioridade mais alta em relação uns aos outros.
Os outros bits são usados para opções de rotação, ip, tamanho e escala, com os
16 bits restantes no intervalo usado para a carga útil das funções de rotação e escala
quando são empregadas.
Na maioria das vezes, as edições neles são feitas manualmente com apenas alguns ajustes ou
tratadas no nível da função ao lidar com a montagem, mas se você precisar editá-los, existem
ferramentas. Da mesma forma, existem formatos no caso do DS que lidam com valores/
configuração iniciais dele para vários arquivos, portanto editá-los geralmente é mais útil.
80
DSDesmume.
81
2.3.4 Modos GBA e DS BG
Os modos BG tendem a ser para planos de fundo, texto e alguns menus, além de
fornecer o resultado final da renderização 3D no DS. Tanto no GBA quanto no DS
há 4 fundos com nomes de 0 a 3 (novamente o DS tem um segundo conjunto de
modos BG para o motor B).
No GBA existem 4 camadas BG (0 a 3) e 7 modos, embora diferentes camadas sejam
restritas no que podem executar. As camadas BG podem ter uma resolução mais alta do
que a tela se forem fornecidas as opções/condições corretas e essas coisas podem ser
usadas para animação e uso geral do jogo para evitar a necessidade de transmitir
82
contente.
Como funcionaExistem duas opções principais aqui para os desenvolvedores usarem em jogos.
O segundo é superior na maioria dos casos devido à capacidade de fazer animações com
mais facilidade (como mencionado anteriormente o hardware é incapaz de atualizar um
bitmap inteiro a cada atualização de tela) e como tal é usado pela maioria dos jogos.
Fotos do emulador
Outro bom exemplo existe nas primeiras guerras avançadas que realmente fazem uso da
habilidade de embrulhar (veja a falta de uma imagem/logotipo completo do Cometa Amarelo)
83
Efeitos de camadasO exemplo clássico desse recurso utilizado são as camas em jogos
de RPG onde o personagem terá a cabeça visível acima do travesseiro, mas o resto
fica coberto. Para fazer isso, haverá pelo menos duas camadas, sendo uma atribuída
uma prioridade mais alta do que o sprite e a segunda uma prioridade inferior.
84
Depois de desativar o BG1
85
Exemplo de feixes de Phantasy Star 2
1. Movimento da tela
2. Troca de Sprites
Como você verá mais adiante no vídeo, se você trocar as imagens exibidas em uma
tela com rapidez suficiente, o olho humano parecerá que elas estão se movendo. Isso
significa que você pode trocar sprites para os locais relevantes após um determinado
número de quadros (a tela é atualizada a cada vblank, que é o ponto convencional e
sugerido em que isso é feito). Combine isso com o movimento da tela ou do fundo e
você terá a impressão de movimento. Agora, como você deve ter visto na seção de
representação de imagens, as imagens tendem a ser compostas de vários blocos,
então você não precisa trocar um conjunto inteiro de sprites se puder trocar a metade
superior de um corpo e fazer com que o personagem jogue seu Como resultado,
levante os braços, embora essa técnica possa ir muito além.
Os formatos serão abordados em algumas seções daqui, mas o SDK do DS fornece aos
desenvolvedores um formato de animação raramente usado, conhecido como NANR, mas
86
voltando ao hardware, há vários bons exemplos disso na série Ace Attorney
(Phoenix Wright).
87
Animação original de Phoenix WrightO texto acima foi uma animação simples via OAM,
mas os jogos ocasionalmente ficam mais interessantes.
O primeiro jogo Phoenix Wright tinha algumas animações de personagens bastante notáveis,
mas em vez de redesenhar cada quadro da animação, os próprios personagens foram divididos
em componentes (geralmente rosto e mãos) e esses foram trocados conforme necessário para
criar a animação. A visualização lado a lado não é exatamente como os formatos internos
funcionam (aqueles que geralmente são configurados para aproveitar as mãos e o rosto são um
conceito visual).
88
Animação de fundoO efeito de rolagem já foi mencionado, mas se você estiver
usando um fundo lado a lado, você pode alterar os blocos que compõem o fundo
e criar animação nele. Animações com imagens bitmap costumam ser feitas com
base em programação, mas muito disso é muito óbvio ou bastante misterioso e
impregnado de métodos de programação.
Outro uso do efeito de rolagem é mais comumente usado como animação de câmera
em imagens 3D, mas aqui, se você se mover rapidamente pelo mapa BG, um efeito de
vibração da câmera é criado e está bem documentado/enraizado na cinematografia como
algo visto quando um personagem ou local é assustado ou atingido.
89
O jogo, ao contrário da maioria do GBA, também apresenta alguns modos de cores
diferentes para o GBA original, GBA-SP, TV e a opção de alterar o brilho em um controle
deslizante.
Truques do desenvolvedorHá mais sobre isso na parte III, mas alguns em 2D por enquanto.
A ideia aqui é que o desenvolvedor fará coisas para diminuir a demanda pelos recursos do
sistema e, ao fazê-lo, permitir-lhes o potencial para uma quantidade maior de outras coisas
a serem feitas, o que é sempre bom.
Por exemplo, um personagem andando para a esquerda é praticamente o mesmo que
um personagem andando para a direita, então você só precisa animar uma direção e virar
os sprites. Isso também pode atingir o próprio sprite, que não será visto segurando uma
arma ou algo que o marque como um sprite ipped.
Se uma área de um nível não estiver sendo vista no momento, não há necessidade
de animá-la. O porão/forja do Summon Night Swordcraft Story 2 usado no
90
a seção de animação da paleta fornece um ótimo exemplo. O equivalente 3D disso é a seleção do
backface e a renderização do ponto de vista.
Outro efeito comumente visto em animação 3D, mas ainda útil em 2D, e visto
em vários jogos, é a adição de um único círculo escuro como sombra.
Um nãoMuitos guias e documentos se referirão a isso pelas duas coisas mais comuns
que ele faz, que são as outras duas grandes transformações feitas na geometria,
conhecidas pela maioria como rotação e escala (a terceira, translação, sendo bastante
bem cuidada por todo o resto ). Estritamente falando, porém, permite a
transformação de cisalhamento e algumas outras coisas e, portanto, o termo
transformação fina é mais adequado.
No caso de sprites/objs ele é dividido entre os dois primeiros atributos e os quartos ocultos.
O s em uns não é um erro de digitação, pois o quarto atributo normalmente incomum é na
verdade um bom dado de transformação, mas permite 32 atributos (um pouco menos do que os
128 objetos possíveis, mas isso não é tão ruim, pois não há nada que impeça as coisas de
compartilhar um conjunto de atributos) ao todo, pois os primeiros quatro atributos ocultos são
usados para um único valor de transformação e isso é repetido.
O atributo 0 ativa o modo
91
O atributo 1 seleciona o agrupamento da transformação nos bits 9 a 13.
O atributo oculto 3 é de fato dividido em quatro atributos ocultos conforme
mencionado e cada um carrega um valor de 16 bits (sinal de 1 bit com sinal, número inteiro
de 7 bits, formato de fração de 8 bits) correspondente ao que é conhecido como PA, PB, PC
e PD que pode ser usado para efetuar rotação, escala e transformação de cisalhamento e
tudo ao mesmo tempo, se necessário (não funciona bem assim, mas se você imaginar ter
controle de cada canto e como você pode usar isso para dimensionar coisas, distorcer
coisas e girar coisas ao mesmo tempo).
Tonc tem um exemplo prático de muitas matemáticas envolvidas (em muitos aspectos,
é tão complexo quanto a matemática no hacking de ROM fica fora de alguns hacks de
montagem muito aprofundados), ele também retorna de uma forma para o sistema 3D. Ele
será devolvido para lá com seriedade, pois sustenta todo o sistema 3D.
Para aqueles acostumados com a matemática, o ponto de referência é o canto superior
esquerdo do objeto, e não a tela, e o centro de rotação é definido como o meio do sprite.
De certa forma, isto é bastante limitante, pois algumas coisas interessantes podem ser
realizadas com diferentes origens e centros de rotação, mas serve para simplificar as coisas
para transformações básicas.
GBAtek tem listagens básicas e tonc tem exemplos mais trabalhados.
A transformação BG a ne é um pouco mais envolvente, mas segue a mesma
lógica, GBAtek tem mais.
MosaicoGeralmente visto como o pixel de canto único se repete para cada pixel não definido no
resto da tela, mas está disponível para valores menores. Deve ser habilitado no registro de
controle individual e então definido de acordo em 400004C hexadecimal, mas está disponível
para todas as camadas BG, bem como equivalentes para sprites. A seção de mosaico GBAtek e
Tonc têm alguns bons exemplos trabalhados.
Alfa e brilhoA mistura alfa é um método pelo qual duas imagens podem ser mescladas,
sendo o termo não totalmente preciso, mas equivalente para leigos, chamado de
transparência, e pode ser usado para obter uma variedade de efeitos. Observe que o
sistema DS 3d possui uma configuração alfa um pouco mais complexa, dependendo das
texturas usadas e muito mais.
Na maior parte, alfa é uma ag e variável que quer dizer se ele quer ag dizer
mistura alfa, haverá um isso e em algum outro lugar uma variável para
diga quanto (é também aqui que o 3D difere ligeiramente em alguns modos).
O ajuste de brilho, para o qual o DS possui um modo especial na unidade de captura,
também é possível estando disponível em vez de alfa, se você desejar. Observe que muitos
desenvolvedores optaram por alterar o brilho no nível da paleta para o modelo GBA
original, daí os hacks para restaurar cores que pareciam um tanto desbotadas em modelos
GBA posteriores.
Três registros são usados aqui com 04000050 hex, também conhecido como BLDCNT, sendo o
principal, selecione este modo, 4000052 hex, também conhecido como BLDALPHA, sendo os modos alfa
e 4000054 hex, também conhecido como BLDY, fazendo para o brilho. Observe que embora os sprites
possam ser mesclados aqui, a configuração pode ser substituída para sempre mesclar no OAM.
GBAtek tem listagens mais detalhadas e completas.
Modo 7O SNES (ao qual o GBA deve muito em termos de habilidades e design de hardware)
foi um dos primeiros a permitir a transformação de perspectiva de uma imagem. Embora
agora pareça bastante ruim para aqueles acostumados com imagens 3D modernas
92
foi revolucionário na época, tanto que o termo hardware do SNES tornou-se
uma abreviação para a técnica. Tonc tem mais.
Embora os jogos e, de fato, muitos jogos usem formatos brutos e declarem como devem ser
renderizados/mapeados em outro lugar (ou apenas tenham um bloco para cada bloco na tela), o
nitroSDK fornece vários formatos para os desenvolvedores usarem. Eles variam de simples
wrappers para um layout até formatos completos de animação. Também vale a pena notar que se
uma imagem for composta por peças, algumas dessas peças podem ser reutilizadas como uma
espécie de compressão, então você pode ter que editá-las (este é frequentemente o caso em
jogos de quebra-cabeça japoneses onde o texto faz parte da imagem e os dois kanji podem ter
um bloco em branco no meio).
93
Uma demonstração básica do conceito de compressão/reutilização de blocos
94
Formatos de paleta
Armazenamento de azulejosOs próprios blocos precisam ser armazenados e vários formatos de arquivo
foram criados para eles
NCGRUm formato que inclui todos os dados relevantes sobre os dados armazenados
(larguras, alturas, profundidades de cores, sejam ladrilhos ou não e muito mais). Voltado mais
para sprites/objs, mas lembre-se de que imagens em tela cheia são possíveis e ainda são usadas
para imagens do tipo BG.
NTFTOutro formato bruto que tecnicamente faz parte de outro (neste caso
NCGR), mas visto por si só ocasionalmente.
NCERVoltado para sprites e fornece dados iniciais de OAM, entre outras coisas.
Animação
FontesIsso será abordado posteriormente na seção de hacking de texto, mas há um formato de fonte
bastante complexo que muitos jogos de DS usam. Muitos outros jogos usam formatos igualmente
complexos, enquanto outros podem usar peças simples (talvez em um tamanho um pouco estranho).
95
Observações geraisA maioria dos programas de edição de DS contará com recursos de
edição para esses formatos e outros relacionados, e exportar e importar não deve ser um
problema. No entanto, se você procura um editor de imagens mais geral e possui um que
suporte o formato de plug-in Susie (um formato de plug-in bastante popular visto em
muitos editores de imagens japoneses), o nitroscrap do loveemu segue esse caminho.
Embora possam ser encontrados sozinhos e frequentemente sejam encontrados, eles podem
ser colocados em formatos de contêineres básicos como narc, formatos personalizados, como
será abordado várias vezes ao longo deste guia, ocasionalmente despojados de componentes de
(mapas sendo ignorados e outros), ser reduzido a seus componentes básicos (basicamente um
arquivo sem cabeçalho), tem uma única paleta para uma gama completa de imagens (muitas
vezes isso será nomeado de acordo, mas nem sempre e de qualquer forma pode confundir
programas que esperam o mesmo nome, o que é mais deles). Isto é especialmente verdadeiro
para animações que raramente usam o formato NANR.
Os formatos permaneceram praticamente estáticos ao longo das coisas, embora Pokémon tenha o
hábito de mudar algumas coisas, usar recursos raramente usados e retrabalhar alguns outros, de
modo que ferramentas construídas de acordo com padrões anteriores possam não funcionar
corretamente com essa franquia.
Os nomes acima são as extensões que os arquivos que os carregam geralmente
possuem, mas ocasionalmente são conhecidos pelo carimbo mágico que geralmente é uma
versão invertida da extensão (NCLR=RLCN e outros).
Na ausência dos formatos no final do documento
Lowlines especificações atuais
Lowlines especificações mais antigas
Código fonte do Tinke (trunk/ Tinke/ Imagen e trunk/ Plugins) Código
fonte do Nintendo Viewer (python)
Eles são amplamente voltados para a programação, sendo os dois últimos códigos-
fonte para vários programas.
Os sistemas de vídeo GBA e DS são bastante aprofundados, o que serve tanto para solucionar
problemas de baixo consumo de energia quanto para fornecer aos desenvolvedores as opções de
fazer coisas que, de outra forma, teriam que gastar muito tempo programando. Um dos aspectos
mais interessantes disso é o manuseio da memória, pois é bem possível esgotar e há outras
peculiaridades, como o alinhamento.
Gerenciamento de memória 2DOs jogos, especialmente no GBA, mas no DS não são uma
rua fácil, frequentemente ultrapassam os limites da memória e isso significa que
certamente não há tanta memória que você nunca possa acabar e com certos modos
gráficos é muito fácil de fazer . Como o hacking de ROM muitas vezes deseja adicionar
coisas, você provavelmente encontrará isso eventualmente. Os cenários mais comuns são:
você tem uma sobreposição 2D em um plano de fundo e os blocos repetidos desejam ser
editados ou você deseja estender um pouco a sobreposição e ficar sem memória dessa
forma.
pineight.com detalha um método de streaming que os programadores homebrew podem
usar para nunca ficar sem memória RAM. Os programadores de DS não têm tanta sorte e tendem
a ter que mexer com mapas e blocos ou aceitar uma imagem um pouco menor.
96
com. Teve um efeito tão grande que levou toda uma classe de métodos a ser descritos
como seguros para VRAM ou seguros para WRAM se não funcionarem em VRAM. A menos
que você esteja gerenciando fisicamente a VRAM como parte de um hack (e não dizendo
que depende de uma função para ler tanto do carrinho para ela), geralmente é apenas uma
questão de selecionar a função de compactação segura da VRAM de qualquer programa
que você estão usando.
2.4 3d
Embora alguns jogos em consoles estejam experimentando imagens vetoriais entre blocos
e 2D acima e 3D abordados nesta seção, a grande maioria do uso de imagens em jogos é
abordada. Observe que está longe de ser inédito jogos usarem seu hardware 3D para exibir
imagens e animações 2D (várias telas de título de jogos foram vistas fazendo isso em vários
níveis e até mesmo trocando 3D por 2D convencional em alguns pontos), já era mencionou
como vários jogos aparentemente 2D usaram modelos 3D no lugar de sprites (New Super
Mario Brothers sendo conhecido por isso) e outros aumentaram as imagens 2D fazendo
coisas como ter planos de fundo renderizados no hardware 3D (vários motivos, mas
principalmente porque isso realmente incomodava a cena nascente da emulação de DS faz
com que o primeiro jogo Castlevania seja conhecido por isso).
Na maior parte, esta seção conterá conceitos gerais muito básicos e especificações do
DS, já que o GBA não possui hardware 3D adequado e qualquer coisa que possa ser pré-
renderizada e dada ao 2D, um truque como imagens isométricas ou técnicas de estilo modo
7. Esta seção também pressupõe um conhecimento do hardware GBA/DS 2d e pode ser
considerada uma continuação direta dele.
Em computadores e, em menor medida, em consoles também (embora eles usem o
hardware projetado para isso, os desenvolvedores do kit de desenvolvimento de software muitas
vezes ainda criarão seus próprios métodos de programação para isso), os dois métodos
dominantes para renderizar 3D no momento da escrita, e para algum tempo antes, são
conhecidos como DirectX (uma tecnologia 3D da Microsoft e usada no Windows e na linha de
consoles Xbox) e OpenGL (uma tecnologia 3D de poder e escopo semelhantes, mas como é
relativamente aberta, é usada na maioria dos outros lugares como além de estar disponível para
uso no Windows).
Os limites são confusos entre o hardware que executa as coisas e os padrões
construídos sobre eles; DirectX e OpenGL lançarão padrões para os quais os fabricantes de
hardware irão construir e os fabricantes de hardware (e desenvolvedores de motores)
também terão uma palavra a dizer sobre o que deve acontecer nas próximas versões dos
padrões DirectX e OpenGL, ficando cada vez mais confuso à medida que aqueles as
tecnologias também começam a abranger tarefas gerais de computação (física e outras
para jogos, mas devido à forma como são construídas, também são muito boas para
aspectos de computação de alto desempenho), sendo GPGPU o termo de escolha a ser
pesquisado. Também no caso do DirectX o padrão também define métodos de entrada e
ajuda com o som.
Na maior parte, embora o GBA e o DS tenham todos os recursos de animação 2D que
os consoles ou a animação 2D em geral sempre desejaram (naturalmente, suporte para
maiores quantidades de sprites e outros, sendo mais rápidos e operando em resoluções
mais altas são desejáveis), os sistemas 3D do DS são não muito parecido com os sistemas
3D atuais ou mesmo com os anteriores. Basicamente, se você soubesse tudo o que há para
saber sobre o GBA 2d e os métodos subjacentes, você poderia fazer qualquer coisa em 2d,
exceto saber tudo o que há para saber sobre o DS 3d e os métodos subjacentes.
97
métodos deixarão uma grande lacuna em seu conhecimento (a ideia de shaders, muito do
reflexo de luz e algumas das ideias que levaram a atalhos/aproximações serão, na melhor
das hipóteses, abordadas), embora não devam prestar um desserviço a qualquer intenções
futuras de aprender imagens 3D. Aprender imagens 3D é perfeitamente possível graças à
internet e o The Guerrilla CG Project lançou uma bela série que cobre muitos dos conceitos
básicos.
Ângulos e comprimentos são bastante úteis, pois podem ser manipulados um pouco mais
facilmente de algumas maneiras (a ideia geral é que uma linha é definida na origem com um
ângulo em relação aos eixos dados e um comprimento e então talvez traduzida, o que fornece a
mesma informação que um conjunto de coordenadas, mas permite uma rotação mais fácil e
muito mais). Estritamente falando, não é usado no hardware, mas muitas vezes alimenta vários
sistemas de coordenadas.
Vários sistemas de coordenadas são extremamente úteis quando você ultrapassa o 3D
básico, pois, como mencionado, eles permitem que você gire uma forma inteira e não
precise se preocupar em recalcular todos os componentes dentro dela e lidar com ângulos
estranhos, sem mencionar que permite animação independente. Por exemplo, considere
sua mão ao enrolar o braço, ela está no final do pulso, mas se você enrolar o braço
deixando a mão na posição inicial e depois tentar mapear as coordenadas pelas quais sua
mão acabou de passar, fica terrivelmente complexo, apesar de sua mão não mudando de
posição em relação ao seu pulso.
Na maioria dos jogos são definidos pontos que se tornam os cantos, ou mais
precisamente vértices, de um modelo e linhas desenhadas entre eles para fazer a imagem e
esses pontos serem movidos de acordo (geralmente através da técnica de ossos), embora
as técnicas mais recentes na época de Writing estão experimentando uma tecnologia
conhecida como shaders de geometria, onde novas linhas podem ser geradas após uma
explosão ou algo assim. Voltando ao tópico, na maioria das vezes esta linha é reta, embora
alguns sistemas mais avançados possam definir um tipo de linha para criar uma imagem
curva (outras vezes você vê isso, podem ser texturas), que geralmente cai sob a
responsabilidade da subdivisão, embora existe um truque de iluminação conhecido como
sombreamento Gouraud que atinge um efeito semelhante.
98
Outro tipo de imagem visto principalmente na digitalização 3D (medicina e partes de
dispositivos de engenharia reversa) e certos tipos de modelagem computacional (geralmente de
natureza científica) é conhecido como dados de nuvem de pontos, onde pontos individuais são
usados e expandidos a partir daí. Como você pode imaginar isso pode ser muito caro em termos
de recursos que para um uso mais em tempo real leva a voxels onde a imagem é composta por
pequenas caixas ou se preferir os próprios pontos expandidos de forma a encontrarem seus
vizinhos e podem ser vistos em voxelstein3d entre outras coisas.
Aula opcional de matemática sobre arrays/matrizesArrays são um conceito que surge cedo
nas discussões sobre 3D e programação em geral e como possuem algumas funções muito
úteis, elas nunca desaparecem. Com um deles você pode efetivamente definir em poucos
números uma coisa realmente primitiva; um array 3 x 3 armazena 9 valores que funcionam
muito bem quando você tem um valor X, Y e Z e três conjuntos deles podem definir um
triângulo (o bloco de construção da maioria das imagens 3D) e muito mais, embora o DS
favoreça 4x4 para um muitas coisas (mesmo que transforme esses 4x4 em 3x3 definindo
todas as coordenadas, exceto a inferior direita como 0 e a inferior direita como 1,0) e não as
use para definir vértices em si, mas o formato do modelo pode muito bem armazenar
coisas em um. A matemática subjacente não é difícil, apenas não é como a maioria das
pessoas que já passaram algum tempo fazendo álgebra espera imediatamente. Para
algumas das transformações 2D mais profundas, surgirão a mesma matemática e muitos
dos mesmos conceitos.
Tanto GBAtek quanto Tonc têm mais sobre isso, com este último voltado para o GBA
2d.
Ainda existem alguns conceitos selecionados que vale a pena conhecer
ˆProduto escalar
ˆProduto cruzado
ˆMultiplicação escalar
99
que podem ser usados ao reutilizar uma coordenada anterior (defina X e Y, mas use o
mesmo Z ou as outras permutações desse conceito).
Assim como a iluminação (abordada em outra parte desta seção), a ideia do ponto de
vista/câmera é importante onde em 2D ambos são, na melhor das hipóteses, um
conceito abstrato. Como o nome indica, é o que decide o que é renderizado (3D
aprendeu desde o início, você só precisa renderizar o que a(s) câmera(s) pode(m) ver)
e, mais importante, pode ser usado para animação (embora na prática haja bugs no
hardware do DS às vezes significa que a câmera não está animada, mas sim o mundo).
Além disso, o DS suporta um valor cuto para que itens além de uma certa distância não
sejam renderizados (isso ajuda o hardware por ter menos tarefas e provavelmente a
imagem resultante por ter coisas que só são visíveis quando pixels únicos não são
renderizados.
É aqui que as matrizes são mais prevalentes, sendo o exemplo principal o de
obter uma visão em perspectiva. O hardware DS suporta renderização ortogonal
que é útil para jogos 2D como New Super Mario Brothers ou jogos que o utilizam
para animações básicas (certas sequências de batalha de RPG) ou renderização
com perspectiva que é útil para jogos do tipo primeira e terceira pessoa onde a
câmera está atrás do jogador.
100
w8_bridge.nsbmd é um bom exemplo aqui.
A primeira imagem é o que parece, a segunda é sem textura.
Também digno de nota é que o 3D viu vários títulos permitirem ao jogador criar
suas próprias texturas, sendo Mario Kart o mais notável e outros comuns incluem
jogos de roupas e jogos como The Sims. Houve um pouco disso em 2D também, mas
não a metade, embora na maioria das vezes as texturas tendam a se manifestar como
imagens 2D de qualquer maneira (certamente algumas edições foram feitas com
editores de blocos 2D quando necessário).
Isso traz à tona um problema secundário que desenvolvedores e hackers há muito
precisam pensar ao tentar mapear uma imagem 2D para um objeto 3D. Fazer isso tende a
causar alguma distorção, então os modelos tendem a ser pintados em 3D com um
programa e depois convertidos em uma textura 2D para armazenamento; para saber mais
sobre esse assunto Desembrulhar textura e Mapeamento UV são bons termos de pesquisa.
2.4.4 Modelos
Construções básicas
Existe a ideia de um primitivo 3D, embora isso assuma duas formas como
o DS e hardware de baixo nível e modelagem 3D mais geral.
O hardware DS usa quatro conceitos
ˆTiras triangulares (três pontos definidos no sentido anti-horário para começar e depois
de cima para baixo ou se preferir no sentido horário no sentido anti-horário)
ˆFaixas quadriláteras (quatro pontos definidos para cima e depois para baixo)
Linhas retas (segmentos de linha) geralmente são feitas definindo dois dos
pontos em um triângulo com o mesmo valor. Da mesma forma, embora haja
pouco suporte ou necessidade de subdivisão no DS, alguns modelos evitaram o
101
dependência de triângulos que diferencia a maioria dos consoles de jogos da modelagem
3D convencional, que opta por quadriláteros.
Embora a modelagem 3D mais convencional reconheça esses tipos como
primitivos (e se não forem primitivos, certamente são fundamentais), além disso,
e ao lidar com ideias de nível um pouco mais alto, existem três outros primitivos
ˆEsferas
ˆCilindros
ˆCubóides
De qualquer forma, quando se faz engenharia reversa de um modelo, os desenvolvedores devem ter
sido gentis o suficiente para deixar uma seleção dessas primitivas e quando se faz engenharia reversa
de um formato, buscá-los e/ou criá-los é uma etapa útil, mas falaremos mais sobre isso mais tarde.
Pai e filhoMuitas vezes é aqui que entra em jogo a ideia de múltiplos sistemas de
coordenadas.
A ideia básica é que existe um conjunto primário de coordenadas conhecido como
mundo (embora observe que alguns chamam o nível inteiro de mundo e é um conceito
separado) e a partir daqui vários sistemas de coordenadas extras podem ser definidos e
conhecidos como filhos; os filhos podem ter mais filhos, mas cada um está vinculado ao pai,
voltando diretamente para o mundo.
Torna-se útil porque ter um nível grande e defini-lo apenas para querer mover um item
dentro dele ou pior em relação a outro item que toca pode se tornar um pesadelo muito rápido e
ainda mais quando há, digamos, 300 pontos definindo aquele item que todos devem ser
contabilizados, possivelmente usando um sistema de coordenadas com uma origem de várias
centenas de uma determinada unidade a partir da localização do modelo no momento.
2.4.5 Iluminação/sombras
Onde 2d é inerentemente considerado iluminado, na verdade todo o esquema de cores é
projetado em torno das diferenças no brilho das cores componentes, iluminação e sombras
como um conceito extra não existem realmente, mas a maioria dos sistemas 3D permitirá
que o fenômeno seja modelado e assim iluminação e sombras precisam ser discutidas.
LuzExistem três fontes e todas elas se combinam para criar imagens que os humanos
estão acostumados a ver. Embora o DS os suporte, a maior parte é uma aproximação pré-
calculada/boa. A aproximação, entretanto, é comum em grande parte do 3D,
independentemente de onde ela esteja.
102
Di usoEsta é a luz espalhada frequentemente vista em estruturas cristalinas, mas
muitos materiais terão uma medida de reflexão difusa.
Existem também três tipos de fonte de luz e, embora seja a chave para a maioria das
modelagens de luz, são uma fonte esférica (luz em todas as direções e diminuindo de
intensidade com a distância), uma fonte cônica (luz se expandindo como um cone com a
distância e também caindo com a distância). intensidade) e um tubo/fonte paralela (pense
no feixe de laser onde um único conjunto de feixes de luz paralelos e sem diminuir a
intensidade com a distância). Eles não são tão importantes aqui, pois apenas as fontes
paralelas estão disponíveis para o DS, embora possa haver múltiplas fontes provenientes
de vários locais e são refletidas de acordo. GBAtek também observa que o mecanismo de
luz di use do DS está bugado e não reflete corretamente se a câmera for girada, então
nesses casos o di use não é usado ou o mundo inteiro é girado.
Noções básicas do DSO DS suporta luz nas três formas, embora seja apenas re-
diretamente para a câmera e não para outros objetos. Como mencionado, no entanto, fornece a opção
de criar sombras usando um polígono para que os desenvolvedores possam pré-calcular as sombras e
adicioná-las às imagens e muitas vezes optam por adicionar também uma sombra básica (nenhuma
sombra é bastante perceptível, mas mesmo uma sombra básica de bolha/círculo ajudará credibilidade).
Fumaça Supondo que não seja o resultado do motor de neblina ser usado com mais fumaça
é uma animação 2D simples, talvez como uma textura para um item com uma textura
animada ou como imagens 2D convencionais. Em outros computadores houve
103
vários algoritmos de geração de fumaça que são consideravelmente menos exigentes, mas
geralmente estão fora do alcance do DS e certamente não são suportados em hardware.
2.4.7 Animações
A animação básica foi mencionada em outro lugar, mas assume três formas principais.
Animação de texturaAs texturas podem ser adicionadas, removidas, ter seu nível de alfa
alterado, combinadas com outras texturas (digamos, o resultado de uma explosão), ter o
espelhamento e a expansão/escala desativados e em sistemas mais avançados que incluem
o DS, a origem da textura pode ser mudou criando um efeito semelhante ao BG de rolagem
da animação 2D. Além disso, por que se esforçar para desacoplar o volante de um carro e
fazê-lo se mover quando você pode simplesmente girar a textura do volante (ou mesmo
fazer com que uma linha branca brilhante se mova para cima e para baixo ou trema).
Animação de câmeraMuito parecido com a vida real, embora você possa girar o
mundo inteiro para que algo apareça de cabeça para baixo, geralmente é mais fácil
mudar, virar a coisa vendo-a de cabeça para baixo e da mesma forma para os outros
tipos de transformações. Eles se lembram do bug com a rotação no DS e a reflexão
difusa (se uma câmera faz um ângulo holandês, provavelmente é o mundo que girou).
104
a ideia pode ser vista em map_point.nsbmd de New Super Mario Brothers no
DS.
Na verdade é o pequeno marcador para os níveis que foram feitos a partir do
mapa mundial mostrar como está no jogo, como wireframe e como está sem textura.
Observe também o potencial para um destaque especular que neste caso é feito em
texturas.
Animações também podem acontecer aqui e fumaça ou faíscas podem ser simples animações 2D
definidas em um determinado ponto.
Basicamente, independentemente do que é feito, as imagens 2D desempenham um papel
importante na criação de mundos 3D. Falando nisso acaba ficando 2d no caso do DS.
2.4.8 Hardware DS 3D
GBAteka tem muitos detalhes sobre o assunto, mas vale a pena conhecer o básico por trás
do hardware 3D.
A ideia geral é que exista um mecanismo de geometria e um mecanismo de
renderização. O mecanismo de geometria é com o qual o DS se comunica e calcula as
alterações necessárias antes de passá-las para o mecanismo de renderização (um processo
acionado por um comando Swap Bu ers) que reúne tudo e cria uma imagem do resultado
ou seria, mas em vez de Em um quadro inteiro renderizado (também conhecido como uso
de framebu er), apenas 48 linhas são renderizadas por vez e colocadas em um cache.
105
Embora exista uma pilha de matrizes que permite que as coisas sejam trocadas em um
curto espaço de tempo, existem quatro pilhas principais que são úteis em qualquer
momento. Uma vez que você sabe que a matriz de direção se refere à direção da luz, a
maioria é bastante autoexplicativa e se você se lembrar de uma nova transformação e
modo7 do lado 2D das coisas, a maior parte delas se encaixa.
Ainda
106
Texturalida com o mapeamento de textura usando os modos de textura que o hardware
apoia.
Eles são definidos selecionando o modo escrevendo em 4000440 hex, também conhecido como registro MTX_MODE,
também conhecido como comando 10h, após o qual existem comandos de gravação de matriz, comandos de leitura
(para recorte), vários comandos de multiplicação e leitura, bem como comandos de manipulação de pilha.
2.4.10 NSBMD
NSBMD é o formato SDK 3D padrão usado por muitos jogos, o que significa que alguns
apareceram antes do NSBMD ser finalizado e outros, como alguns jogos de Yu Gi Oh, têm
seu próprio formato personalizado. Também foi visto algumas vezes com as texturas
mapeadas para um quadrado simples nas telas de título e, como mencionado em outro
lugar, alguns jogos de plataforma ostensivamente 2D, como New Super Mario Brothers,
usaram os sistemas 3D no lugar de sprites 2D; observe que esta não é a pré-renderização
do estilo SNES Donkey Kong ou Resident Evil da Rare, mas o movimento 3D real restrito a
um mundo 2D. Também levou à introdução do 2.5D, mas essa é uma discussão diferente.
Ferramentas e especificações
ˆferramenta nsbmd
ˆmexer
107
ˆExtrator NSBTX
Nsbmdtool é a ferramenta criada a partir das primeiras tentativas de engenharia reversa do
formato NSBMD e embora não tenha a capacidade de renderizar muitas imagens desde que foi
descoberto, ele tem a capacidade de analisar modelos 3D e fornecer localizações dos modelos,
texturas e ideias semelhantes contidas dentro do formato, o que significa que ainda é inestimável
para editar modelos, sejam eles de títulos novos ou antigos.
A ferramenta de console do lowlines é uma tentativa mais recente de engenharia reversa das
especificações e se saiu melhor que o nsbmdtool em muitos casos.
Tinke inclui um visualizador de textura e versões posteriores incluem um visualizador de
modelo, bem como uma excelente versão legível dos eventos.
O extrator de curso MKDS inclui recursos de visualização NSMBD e alguma capacidade de
manipulação.
O NSBTXExtractor visa principalmente a extração de texturas, mas funciona em
muitas coisas e simplesmente ser capaz de extrair texturas ajuda em muitos casos.
Existem ferramentas adicionais, mas geralmente são editores de salvamento específicos do jogo e
similares (editores de emblemas de Mario Kart, editores de textura de Animal Crossing em salvamentos
e outros).
Existem quatro hacks principais feitos aqui, embora muitos deles também sejam traduzidos
para outros formatos 3D.
Os hacks do sistema de arquivos são muitos e variados, mas foram vistos no início, como os hacks
do curso Mario Kart (foi mencionado em outro lugar, mas Mario Kart usou um formato KCL para o
layout da pista, portanto, ao contrário de muitos jogos em máquinas mais poderosas,
simplesmente editar o modelo não fazer muito) e vários hacks desde então. Observe que
animações e texturas muitas vezes podem ser vinculadas a um determinado modelo e coisas
estranhas podem acontecer se forem alteradas, com alguns bons exemplos sendo vistos em
alguns dos hacks do Super Smash Brothers para Wii. Ocasionalmente, foi tentada injeção de
outros jogos, embora geralmente funcione melhor quando se trata de uma franquia semelhante.
Hacks de modificação de textura não são tão comuns, mas também não são tão difíceis.
Geralmente, uma combinação de algo como nsbmdtool, tinke e olhar as especificações
permitirá que você direcione um editor de blocos para o local apropriado, obtenha as
dimensões necessárias (geralmente são um múltiplo simples de 8 para cada dimensão, mas
nem sempre) e obtenha a paleta apropriada classificada que permite a edição 2D
convencional. Por meio de paletas lógicas semelhantes e quaisquer ajustes para as texturas
também podem ser editados.
Escala e pequenos hacks. Com os modelos 3D sendo vinculados diretamente
aos pontos que os criaram, pequenos hacks são bem possíveis se o possível
hacker conseguir controlar o layout do modelo no arquivo.
A injeção completa usa várias técnicas que vão desde o uso de partes vazadas do
nitroSDK (partes vazaram e incluíam plug-ins para versões mais antigas do
108
vários programas de modelagem 3D padrão da indústria, como 3ds max, maya e Softimage 3D/XSI, que
exportavam arquivos para um formato intermediário e software de conversão para esse intermediário),
onde outros fizeram coisas como exportar imagens para um formato legível por humanos e entre
visualizadores e edição hexadecimal conseguiu mudar os modelos o suficiente para contar como um
hack de injeção completa. No momento em que este artigo foi escrito, não havia nada que se parecesse
com um editor de alto nível dos próprios modelos, seja autônomo ou por meio de plug-ins.
polygon0 é o item de escolha e depois dele devem estar os comandos. Observe que,
como é um quadrado e, portanto, compartilha algumas coordenadas de ponto a ponto, os
comandos de hardware 3D menores podem ser usados para gerá-lo; caso os pontos sejam
diferentes em todas as três coordenadas, serão necessários comandos mais longos.
109
É melhor mudar um único vértice para começar, então 01D9 foi alterado para
80
Wireframe da versão modificada e da versão original
110
Com texturas
O jogo é Fire Emblem – Shin Monshou no Nazo Hikari to Kage no Eiyuu. Ele usou (como
a maioria dos títulos de emblemas do DS) texturas 3D para ajudar com imagens 2D.
O arquivo é title_logo.md (a série tem o curioso hábito de usar apenas as duas
últimas letras das extensões do SDK) do diretório title12.
111
Saída da ferramenta NSBMD
Nsbmdtool, apesar de ser antigo e não funcionar em muitos NSBMD, eles, podem
112
Saída Tinke
Tinke fornece duas janelas com informações úteis de saída.
113
Localização da paletaMuitas informações foram fornecidas, mas nenhum endereço direto da
paleta em questão.
A paleta definida é fornecida em 38 hexadecimais na seção TEX0.
114
Configurando a paleta.
115
Sendo um quadrilátero único é definido no sentido anti-horário sendo o primeiro comando o
ponto 0.
Ponto 0Cmd 24 hex, também conhecido como VTX_10, define a coordenada do vértice com 3 dez
bits (bit assinado, 3 bits, fração de 6 bits) com os 2 bits superiores ignorados.
19028270 hexadecimal
S
X
Ponto 1O comando 25 hex, também conhecido como VTX_XY, tem apenas dois pontos com
o ponto Z considerado igual ao anterior.
Bits completos usados (0 a 15 sendo X, 16 a 32 sendo Y)
assinados, 12 bits atribuídos à parte fracionária 28006400
hexadecimal
Dividindo
0010 1000 0000 0000 0110 0100 0000 0000 binário 0
010 1000 0000 0000 = + 2,5
0 110 0100 0000 0000 = + 6,25 E
Ponto 2O comando 26 hex, também conhecido como VTX_XZ, assume que o ponto Y é
igual ao anterior e define X e Z. Mesma divisão de bits dos outros dois comandos de
ponto.
9C006400 hexadecimal
116
0 110 0100 0000 0000 = + 6,25 Z
117
m7091_mdl.bin era o menor arquivo e tinha strings como pSphere e pCylinder
dentro dele, onde outros eram nomeados como braço e asa, bem como muitos
nomes japoneses romanizados para coisas semelhantes e conceitos 3D (Blinn
(phong) e Lambert entre outros coisas).
Os menores arquivos e nomes apontados diretamente para extras deixados pelo
desenvolvedor (círculo e primitivos) e onde tentar descobrir mapeamentos que podem ser
girados, dimensionados e atribuídos a diversos relacionamentos e coordenadas pai/filho pode ser
complicado saber como um conjunto básico de primitivos funciona poderia ser útil para posterior
engenharia reversa.
O cabeçalho do formato passou por engenharia reversa adicional. [Para
terminar]
118
3 Texto
Os jogos podem e têm armazenado seu texto como gráficos simples, mas os desenvolvedores
aprenderam rapidamente que, para jogos mais longos, isso não é muito útil em vários níveis, de modo
que os jogos há muito apresentam decodificação de texto e mecanismos de exibição. Esses mecanismos
são muitas vezes itens altamente personalizados, com várias habilidades e restrições que as pessoas que
os hackeam precisam descobrir e perdem apenas para os arquivos e montagem do nível do jogo em
termos de como as coisas podem ser personalizadas. Os jogos ainda têm texto nas imagens que podem
exibir, muitas vezes para jogos com pouco texto, como jogos de quebra-cabeça, mas nem sempre, e
qualquer coisa altamente estilizada provavelmente são gráficos e, inversamente, alguns dos primeiros
hackers alteraram a codificação dos caracteres para que eles aparecessem como outros em
determinados lugares (muitas vezes bagunçando o texto no resto do jogo).
Mesmo assim, os mecanismos de texto fazem parte dos jogos agora e, como tal,
os aspirantes a hackers de ROM precisam saber como lidar com eles. Saiba que os
jogos podem, e muitas vezes usam, múltiplas versões dos conceitos a seguir no
mesmo jogo e até mesmo na mesma tela ao mesmo tempo.
3.1 Tabelas
Mais recentemente, tem havido esforços para transformar as tabelas em um conceito de nível
superior (proposta de formato de arquivo de tabela), o que é bom, pois permite hacks mais fáceis
no final, mas classicamente falando, as tabelas são apenas arquivos de texto simples contendo
uma longa lista de números hexadecimais de vários comprimentos e o que eles representam em
texto legível. Uma das outras razões para o padrão proposto acima é que existem vários tipos de
formato de arquivo de tabela com capacidades variadas.
Não há nada que impeça que um caractere seja codificado várias vezes (na verdade, isso geralmente
é feito como uma forma barata de escrever texto em negrito, pequeno, itálico ou de outra forma
estilizado), codificando vários caracteres em uma única entrada (um processo conhecido como duplo ou
múltiplo). codificação de blocos) e ou até mesmo misturar codificações/conjuntos de caracteres de 8 e 16
bits (isso incomoda muitos leitores/decodificadores de texto mais simples, pois eles esperam que tudo
tenha o mesmo comprimento e talvez até alinhamento).
Normalmente eles estariam todos em linhas separadas mas por uma questão de legibilidade
aqui está um exemplo de codificação usada pela fonte kiaro1212 do Golden Sun Dark Dawn
119
sendo Transhlextion e WindHex32, embora faltem alguns dos recursos de um editor
hexadecimal mais geral como o Hex Workshop. Crystaltile2 e algumas das ferramentas
relacionadas também possuem uma medida de suporte de mesa.
2. Codificações conhecidas de jogos e empresas de jogos - A Capcom possui uma tabela usada
em vários de seus jogos e jogos com tabelas japonesas muitas vezes usando fragmentos
de codificações existentes (sejam de outros jogos ou codificações convencionais).
Embora raramente seja visto, mais jogos podem fazer um tipo de compactação onde se o
primeiro caractere/byte hexadecimal for repetido em um valor de 16 bits, o jogo pode assumir
um valor de 16 bits e assumir que todos os seguintes também devem ser decodificados com o
primeiro caracter/byte hexadecimal até que seja informado o contrário (por exemplo, em shiftJIS
todo o alfabeto romano, Hiragana e katakana terão o primeiro byte como 82 ou 83, embora
permita uma codificação de 16 bits). Um segundo conceito interessante que também raramente é
visto hoje em dia é que os jogos podem trocar codificações à vontade, sinalizando como tal, mas
não se preocupe com isso, pois é realmente muito raro (é muito mais provável que seja outra
coisa).
Uma nota sobre Unicode.A postagem unicode de Joel on Software detalha muitas coisas que é bom
saber sobre o padrão de codificação conhecido como Unicode. Agora, ao contrário da codificação
bastante simplista que a maioria dos jogos usa, o Unicode é na verdade bastante abrangente e não
necessariamente difícil de implementar, mas não é uma simples tradução de um comprimento definido
de hexadecimal para um caractere conhecido com o qual a maioria dos hackers de ROM se preocupa
(quaisquer extras sofisticados geralmente são uma opção definida com a qual a equipe de codificação
recebe a chamada). No entanto, existe uma versão simplificada do Unicode que forma a base de
algumas codificações no hacking de ROM, conhecida como UTF16 Unicode (às vezes u16 Unicode), que é
sempre de 16 bits (sem ags ou outras coisas semelhantes), que definitivamente vale a pena conhecer
como os jogos tendem a usá-lo; em suma, ele evita habilidades como texto da direita para a esquerda e
caracteres de comprimento variável em favor de comprimentos definidos de 16 bits e, no que diz
respeito à maioria dos jogos, não há extras. Ainda assim, se você quiser uma boa ferramenta para ajudá-
lo, dê uma olhada no The unisearcher.
Supondo que não seja uma codificação conhecida ou que uma codificação conhecida represente apenas
parte dela, depois disso, você terá que realmente descobrir o que está acontecendo.
Existem várias maneiras de fazer isso, desde simples e não confiáveis, mas não
universais (especialmente no que diz respeito ao japonês), até complexas, mas que
resolverão qualquer coisa. Combinar métodos aqui não é apenas uma boa ideia, é sugerido
120
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
ˆSe você suspeitar de uma variável (valor de algo em uma loja, nome do personagem se
você tem permissão para personalizá-lo, quantidade de HP e assim por diante) ou você vê algum
efeito sendo aplicado ao texto (mesmo que seja apenas texto em negrito ou itálico, pois os jogos
não renderizam fontes como os computadores padrão, mas têm vários caracteres) tente em
outro lugar, pois provavelmente será algo totalmente diferente no texto (consulte marcação e
espaços reservados algumas seções mais adiante para obter mais informações).
ˆSe você vir algo que possa ter codificação dupla (nomes de caracteres
muitas vezes são mesmo que você não possa alterá-los) ou é um símbolo (-por
exemplo, e os jogos muitas vezes codificam sua seleção sim/não como um único
bloco) tente outra coisa.
ˆQuanto mais longo (até certo ponto) é melhor, três caracteres como no exemplo acima são
pressioná-lo e encontrar dois personagens vai, na melhor das hipóteses, deixar você com um
monte de coisas para percorrer até encontrar as coisas boas.
ˆNuma frente mais positiva, você pode viver perigosamente e procurar um ponto comum.
frase (a palavra the com um espaço de cada lado provavelmente aparecerá no
texto em inglês) ou uma frase específica do jogo (moogle em Final Fantasy, por
exemplo).
121
ˆO japonês não apresenta ordenação em Kanji e o kana possui apenas uma ordem fraca
ordem (para não falar das coisas estranhas que os jogos fazem para Handakuten e
Dakuten), mas você pode fazer algumas coisas se suspeitar de uma ordem (a ordem das
fontes e a ordem da codificação geralmente são as mesmas).
Muitas ferramentas de editores hexadecimais de grau de texto para hackear ROM apresentam pesquisa relativa,
mas para os fins deste guia, existem duas ferramentas principais que você desejará examinar
Exemplos de pesquisa relativaO jogo escolhido aqui é Megaman ZX, embora a mesa já
tenha sido vista em vários jogos da Capcom. Por acaso, as letras minúsculas na tabela
se alinham com os equivalentes maiúsculos ASCII, o que significa que a pesquisa
relativa provavelmente não é tão útil, mais ou menos um pequeno atalho na criação
de tabelas. No entanto, é um pouco menos abstrato do que algumas outras tabelas,
por isso é um bom exemplo disso.
122
Em macaco moore
123
Versões posteriores incluíam suporte para kana usando a ordem Gojuon (embora você
provavelmente queira usar curingas entre os caracteres para permitir entradas de 16 bits).
Nem sempre é viável graças ao Handakuten e ao Dakuten (marcas extras adicionadas ao
Kana para indicar a pronúncia), mas é uma das poucas ocasiões em que pesquisas relativas
podem funcionar de maneira razoável/não esotérica com o japonês.
O uso é bastante autoexplicativo e você pode clicar duas vezes nos resultados para definir a localização
na janela hexadecimal. Irá salvar esses resultados em um arquivo de texto semelhante aos resultados
página que permite direcionar um criador de tabelas mais convencional. Você
também pode inserir caracteres japoneses, embora unicode, em vez de
shiftJIS é o método padrão
Ele também possui uma pesquisa de valor um pouco mais funcional do que as versões posteriores
124
do macaco moore. O uso é definir as opções conforme necessário em termos de comprimento e
tipo de entrada e adicionar caracteres um de cada vez antes de pressionar pesquisar.
Observe também o penúltimo resultado visível e considere-o um motivo para querer termos de
pesquisa mais longos.
125
A pesquisa Monkey Moore foi usada para criar uma tabela e depois foi importada para
o Crystaltile2
Ainda não está completo devido à pontuação ausente, mas é aí que entram
os outros métodos. Aqui é bastante óbvio que 07 hex representa o caractere
apóstrofo e 00 representa o espaço que leva a
126
Dando uma olhada na fonte do jogo, há muito mais do que isso, então outros
métodos terão que ser empregados
Em relação aos botões vistos na fonte a fonte Japonesa é uma matriz de 16 x 16 então o
jogo provavelmente leva isso em algum lugar (formatos de fonte complexos com caracteres
individuais sendo atribuídos a um tamanho5são bem possíveis no DS), mas houve casos de
metade de um caractere sendo codificado em dois caracteres separados para serem
montados em tempo de execução. Observe que isso não é o mesmo que codificação de
blocos duplos/múltiplos (abordada posteriormente), onde vários caracteres ou mesmo uma
série deles são codificados no mesmo espaço que um caractere normal.
5Na prática, é mais fácil ter blocos de tamanhos idênticos e depois incluir um tamanho em outro lugar para o
jogo considerar em tempo de execução, pois o jogo provavelmente já estaria fazendo cálculos de largura, mas
houve casos de jogos fazendo blocos de tamanhos exclusivos para cada personagem.
127
Este processo pode ser problemático, pois os motores de texto podem ser bastante exigentes
quanto ao seu conteúdo e se você bagunçar os marcadores de seção e outras formatações, as
coisas podem começar a dar muito errado, mas se você não corromper o suficiente do jogo
Descobrir o que deu errado é mais difícil.
Depois de ter alguns caracteres, você pode começar a mudar as coisas e observar o que
mudou antes de combiná-los e obter a codificação completa. Na verdade, esta é muitas vezes
uma das melhores maneiras de descobrir como os diferentes símbolos e tipos de pontuação são
codificados. Em ataques de criptografia como esse, muitas vezes ficam sob a responsabilidade do
texto simples conhecido e do texto simples escolhido, mas falaremos mais sobre isso
posteriormente.
Megaman ZX novamente
Este jogo foi carregado e o texto que carrega alguns segundos após o carregamento do
jogo foi obtido. Também é um bom estudo de caso sobre por que fontes de largura variável
e manipulação de linhas são boas, mas fontes em algumas seções.
O texto em um editor hexadecimal
128
Digamos que o interesse seja descobrir o que passa por z (5A=z da tabela anterior)
Original e modificado
z foi iniciado para fornecer um ponto de referência, o que significa que {|} são 5B, 5C e 5D.
O 01 foi deixado porque poderia ser algo em que o jogo se baseia, aparentemente era um
ponto de exclamação, então adicione-o à lista.
Depois foi deixado um espaço e começou novamente com til, ponto do meio ou talvez um
símbolo de bala, símbolo do Euro e continua.
De qualquer forma, isso representa mais informações do que jamais poderiam ter sido coletadas
com análise estática básica; poucas ocasiões no texto usam um líder de dois pontos e o que
poderia muito bem ser um triplo primo / aspas triplas (se o jogo usaria o triplo no lugar de aspas
duplas e uma aspa simples para uma cotação dentro de uma cotação como uma solução
alternativa para o xed largura da fonte é deixada para outros debaterem).
129
3.1.3 Visualização e corrupção de memória
No momento em que você vê o texto na tela, ele provavelmente já está na memória
há vários segundos e tenderá a não ser atualizado da memória quando estiver lá
(VRAM sim, memória real nem tanto), então editá-lo geralmente é necessário. pouco
uso, com a possível pequena exceção de um jogo que permite rolar para trás nas
últimas linhas do texto. A grande exceção a isso são as telas de entrada de nomes,
que geralmente são atualizadas em tempo real. Igualmente as defesas
Os arquivos que eles fazem também podem produzir informações, pois tenderão a ser
codificados da mesma maneira que permite coisas semelhantes às técnicas de corrupção e
alteração acima.
Se você conseguir capturar os dados na memória antes que eles sejam transformados
em gráficos, você poderá fazer alguma coisa. Da mesma forma, a visualização/edição de
memória pode ser bastante útil se você tiver que lidar com um tipo de compactação
personalizado que ainda não conseguiu descobrir (ou escreveu uma ferramenta de
compactação para recompactar), aqui você pegaria o texto descompactado/não
criptografado do RAM (lembre-se, ao trabalhar em grupo, que uma vez que o lado da
tradução/editor de texto tenha o texto, eles podem começar e as especificações de hack da
ROM podem ser resolvidas mais tarde).
Exemplo do Sr. Driller 2 no GBA. Métodos de localização de cheats foram usados para
restringir quais locais de memória mudavam conforme um caractere era inserido e
aumentando o caractere em um valor cada vez que era notado que um valor específico
aumentava em 1 a cada vez.
Apontando a janela de memória para ele.Houve muitas mudanças observadas aqui,
mas 02001CDC exibiu mudanças interessantes e talvez o mais interessante é que o
caractere em branco no canto inferior direito tinha um valor muito diferente do rosto
sorridente anterior. Neste caso, a pesquisa relativa realmente funcionou na ROM e
descobriu-se que era bem diferente (maiúsculas e minúsculas disponíveis e decodificadas
como um conjunto diferente de valores - 0A = A e 24 = a), mas o potencial do método é
bastante claro de ver.
130
3.1.4 Análise de frequência
O caractere mais comum em uma seção de texto é geralmente o caractere de espaço e na
maioria dos idiomas as palavras raramente ultrapassam a marca de 12 letras, portanto, se
o caractere mais comum tiver, em média, menos de 12 caracteres de distância e raramente
tiver dois juntos, você provavelmente terá o caractere de espaço; a partir daqui você pode
usar outros métodos ou tentar preencher os espaços em branco se tiver algum texto da
tela à sua frente. O espaço pode não ser tão útil para pesquisar, então considere que e é o
caractere mais comum em inglês.
131
Lembre-se de restringir qualquer análise de frequência apenas à seção de texto ou
você poderá acabar com 00 se for usado para preencher partes do cabeçalho.
Lembre-se também de que não precisa ser exato, pois há coisas que o jogo pode
perder ou incluir que não fazem parte estritamente do script, mas estão contidas na
seção do script, mesmo assim.
Exemplo usando o arquivo MegamanZX anterior (limitado a uma parte do texto)
132
Fazer uma pesquisa por 00 dá uma boa indicação de que é realmente o caractere de espaço.
133
3.1.6 Ponteiro e codificação/análise hexadecimal
Você tem alguns truques de linguagem, alguns truques de codificação, alguns truques
de computação, mas também pode combiná-los e fazer coisas com o hexadecimal
bruto e os ponteiros que ele usa.
A análise do ponteiro é dupla, dependendo do que você está fazendo. No GBA, se você
fizer uma pesquisa por 08 (o início do tipo de endereço mais comumente usado), seus
resultados poderão ser grandes em número e, na maior parte, 8 bytes ou um pouco mais
distantes, mas de preferência ainda com uma distância definida (você não tem que colocar
ponteiros de ponta a ponta e 08080808 é um endereço válido e alinhado também) você
provavelmente encontrou um monte de ponteiros. Agora pode ser para som ou gráficos,
mas geralmente vale a pena seguir muitos deles para ver o que acontece. Da mesma forma
(e esta seria a segunda parte da dupla coisa), se você tiver uma lista do que provavelmente
são ponteiros e suspeitar que a operação está no nível da frase ou do parágrafo, eles
provavelmente não estarão separados por várias centenas de bytes.
Furigana, marcação, links e afins. Como mencionado em outro lugar, coisas como
vírgulas, espaços, pontos finais e muito mais podem fornecer muitas informações, mas isso
não é tudo, já que o japonês tem um conceito chamado Furigana (na prática, criadores de
jogos e outros costumam usá-lo para conter pequenas dicas, notas e outras coisas), a
maioria dos idiomas permitirá que o texto seja alterado para enfatizar algo (tornando-o em
negrito, itálico e tal), você pode ter uma mini enciclopédia com links para outras entradas
no texto e muito mais. Ao contrário da pesquisa relativa, se você suspeitar de uma dessas
ações, isso pode revelar grande parte da codificação e até mesmo parte do próprio
mecanismo de texto.
Muito parecido com rastrear Isso envolve encontrá-lo na memória e trabalhar de trás para frente,
um, isso envolve encontrar o texto na memória e observar como ele o decodifica para encontrar
personagens ou os caracteres e trabalhar de trás para frente a partir daí. Segundo
Para isso, se você tiver um mecanismo de script adequado, poderá observar como ele funciona
no nível do assembly.
134
por vários motivos, pois mesmo em ASCII as letras maiúsculas e minúsculas estão separadas por
20 hexadecimais, apesar de não serem necessárias (permite uma conversão simples, o que é
outro tipo de coisa a ser observada).
Então, depois de empregar técnicas que deixariam os primeiros decifradores orgulhosos, você
descobriu como o jogo codificou o texto, no entanto, você não tem paciência para sentar lá e
fazer a mesa à mão, especialmente para os japoneses, se você tiver que inserir várias centenas de
Kanji, você pode não reconhecer/saber digitar. Isto é aceitável, pois embora as tabelas sejam em
grande parte apenas arquivos de texto, pode ser útil adicionar grandes extensões de dados de
uma só vez. Várias ferramentas estão disponíveis para uso aqui, mas o padrão de fato para
aqueles que precisam é o TaBuLar, embora outros gostem do gerenciador de tabelas e do
tblmaker. Crystaltile2 tem algumas habilidades aqui, embora as tabelas que ele cria às vezes se
desviem do formato de tabela padrão se você não tomar cuidado, ele felizmente usa seu próprio
formato e geralmente as diferenças estão na codificação ou em quantos espaços o arquivo
termina.
Aqui estava a tabela vista no final do exercício de pesquisa relativa. Muito parecido com
uma planilha, ela é lida em colunas de linha com os números sendo o hexadecimal que
representam.
Se você segurar a parte que deseja editar, receberá uma dica com a decodificação
hexadecimal e a decimal.
135
Até agora, um editor de texto apenas um pouco melhor para fazer isso, mas as habilidades reais
estão nas opções
As operações de bloco permitem copiar e colar blocos, o que é bom quando sua
tabela tem versões repetidas do mesmo valor (às vezes é usado para fontes
diferentes e algumas coisas parecem estranhas, mas acontece mesmo assim).
Bloquear e desbloquear (causa coisas acinzentadas) evita a edição, mas o mais
importante é permitir a inserção de seções maiores sem ter que sobrescrever
coisas.
A opção de entradas de 16 bits no menu suspenso de edição
OritonPagina inicial
Download de viagem de arquivo
Com o espírito de fornecer programas alternativos sempre que possível, temos a Oriton. A Oriton
teve muito desenvolvimento feito nele mais recentemente do que a maioria das alternativas. Ele não tem
a capacidade de adicionar longos comprimentos de pedidos conhecidos além daqueles de uma página
de código básica (clique com o botão direito na célula inicial para adicioná-la), mas as opções de adição
de estilo de expressão regular e suporte de 16 bits (e maior, se necessário) mais do que compensam isto.
Ele também funciona razoavelmente bem com o programa de inserção de texto Kruptar 7, que será
abordado posteriormente.
136
137
3.2 Ponteiros
É verdade que estes não são apenas um recurso de mecanismo de texto (se você está
lendo, provavelmente já viu vários até agora) e são essenciais para empacotar formatos de
arquivos, mas a edição de texto é onde as pessoas primeiro tendem a encontrar
dicas a sério, então eles estão aqui.
Três tipos principais
3. Relativo. Comece a contar a partir de onde o ponteiro real está (se o ponteiro indicar 30h e
estiver localizado às 20h, os dados em questão provavelmente serão 50h).
Os jogos podem usar misturas destes e até mesmo no mesmo arquivo e você pode obter um híbrido de
relativo e conjunto, embora seja mais provável que você tenha um wrapper em torno de seu texto se
isso acontecer ou você estiver fazendo engenharia reversa de um formato de compactação na família LZ.
Os ponteiros também podem ser aplicados a várias seções e ter coisas como ponteiros de deslocamento
com um valor de deslocamento lidando com a seção, mas a próxima seção pode usar um conjunto
diferente.
Também digno de nota é que em formatos maiores que normalmente não são vistos
no DS você pode usar endereçamento baseado em setor ou bloco onde em vez de apontar
para o endereço do byte você chama um determinado número de bytes de setor ou bloco
(estritamente falando, um setor é um ponto em um disco e um bloco é o termo adequado,
mas a maioria das pessoas entenderá quando você falar de endereçamento baseado em
setor) e apontará para isso. Isso geralmente é feito para compensar uma limitação no
número de bits disponíveis para o seu endereço. Por exemplo, 32 bits permitem 4
gigabytes ou mais, mas se você disser para atribuir 8 bytes por endereço de 32 bits, de
repente você pode lidar com 32 gigabytes ao custo de ter um sistema de endereçamento
complexo (setor 37, bytes 2 a 66) ou ter que perder tantos bytes se você não usar todos eles
em um setor (se você tiver uma versão moderna do Windows, a opção de propriedades ao
clicar com o botão direito geralmente terá tamanho e tamanho no disco e esta é a razão
por trás disso ). Os endereços, neste caso, normalmente aparecerão como um múltiplo do
valor do ponteiro, mas ocasionalmente foram vistos formatos que usam ponteiros que são
cálculos adequados com base nos dados mantidos na tabela de ponteiros.
Um conceito relacionado que pode ser melhor para a seção abaixo é que, às vezes,
comprimentos podem ser usados em vez de endereços, para que você possa calcular a
localização somando os comprimentos (e talvez contabilizando um pouco de alinhamento/limites)
dos arquivos anteriores.
Falando em alinhamento e limites, normalmente será bastante óbvio, mas nem
sempre, e isso significa simplesmente somar os os comprimentos dos arquivos serão tão bons para os
fazer ao recalcular as localizações dos novos arquivos (lembre-se, a menos que você possa
6As imagens gráficas usadas por sistemas que usam paletas usam um conceito semelhante, onde cada valor
de pixel se refere a uma tabela que contém muitos outros valores (que podem ser alterados) ou, se preferir, cada
valor de pixel de 4 bits aborda um setor de 16 bits.
138
Os próprios ponteiros podem ser encontrados em qualquer lugar de um arquivo, mas
geralmente no início do arquivo, um arquivo com um nome semelhante (é mais fácil abrir/
armazenar um arquivo pequeno na memória e consultá-lo em vez de abrir um arquivo
grande) ou no final do arquivo são os locais onde os ponteiros podem ser encontrados.
Menos comumente, ponteiros podem ser vistos entre cada seção ou mesmo no início de
cada seção (o exemplo de script na seção de script que trata de O Mágico de Oz - Além da
Estrada de Tijolos Amarelos fornece um bom exemplo disso).
A maioria dos ponteiros são mantidos separados do resto dos dados a que se referem (seja
por estarem no início ou no final de uma seção de um arquivo totalmente diferente), mas às vezes
os jogos terão cada seção com um comprimento e houve um caso verdadeiramente especial em
Riz-Zoawd/O Mágico de Oz - Além da Estrada de Tijolos Amarelos onde o texto em alguns pontos
era uma espécie de linguagem de script e cada seção tinha um tipo, um comprimento de toda a
seção e os dados/carga real, se houver, que continha . Além disso, dependendo de como você
deseja vê-lo, muitos formatos DS podem ser vistos como um ninho de ponteiros (no caso do
formato de som SDAT, o arquivo inteiro tem um comprimento, a subseção tem um comprimento,
o arquivo de som pode ter um comprimento e então a seção de geração de som real terá um
comprimento).
Os ponteiros que fazem parte do cabeçalho também podem abrigar dados extras; o formato
DS NARC, por exemplo, usa o bit mais alto em um ponteiro para indicar um subdiretório.
139
comprimento, ags para compactação, tamanhos compactados e descompactados, locais
pretendidos na memória, arquivos vinculados ao arquivo em questão (SDAT SBNK e SSEQ).
Um bom exemplo pode ser encontrado em El Tigre – faça minha mula. Um exemplo básico do
sistema, conforme mostrado na seção de introdução, mas será retornado em breve com o
objetivo de fazer a engenharia reversa do mesmo de maneira adequada.
140
Colando isso em um novo arquivo, obviamente ele precisa ser removido
Ainda não é imediatamente óbvio, pois o texto não começa até o final do intervalo
hexadecimal 0110. Da mesma forma, os dois primeiros valores são ímpares até que você
considere que o comprimento do arquivo é 54C6 e se você ignorar os dois primeiros valores (o
conjunto de ponteiros), o restante dos ponteiros parece terminar com alguns valores ímpares
onde (aumentando constantemente e então algo totalmente diferente)
Leitura de localização (hex) (hex) e decodificação em ASCII da exportação
0100 4E16 N.
0102 4E6A Nj
0104 4EDB N.
0106 4F9D O.
0108 5096P.
010A 5118Q.
010C 5258RX
010E 529F R.
0110 52BE R.
0112 532B S+
0114 01F2..
0116 02F2..
0118 26F3&.
011A1AF8..
Portanto, 0110 seção de ponteiro longo hexadecimal seguida por outra coisa e depois pelo
texto.
Ainda existe o problema dos primeiros ponteiros serem 0000 e 0093, mas olhando
novamente para o texto, parece que FE aparece no final da maioria das seções
(FEF2 na maioria delas, mas a última é FEFF) e há seções repetidas depois aqueles,
mas isso é deixado para a marcação abordada a seguir.
Ainda assim, não significa muito tempo na planilha. É melhor rotular suas colunas,
embora você provavelmente consiga resolver isso em cerca de 3 segundos de leitura
141
nomes versus meia hora apenas para voltar à forma, se você voltar a eles no final de
um período de tradução de três meses é muito melhor.
Ainda só para verificar aqui, cortando o le o no final dos ponteiros apropriados, mas
ainda deixando as coisas estranhas
142
Parece que os ponteiros estão 1 depois do FE, mas isso é bom e realmente esperado. As
principais coisas que faltam determinar agora são o que significa o stu após FE, um bom
palpite seriam os nomes dos personagens.
143
3.3 Marcação, códigos de controle e espaços reservados
Mesmo que você não seja um desenvolvedor ou programador web, provavelmente terá um
conhecimento aproximado de variáveis e marcação (provavelmente você já postou em um
fórum antes, se nada mais). Os mecanismos de texto raramente estão no nível de uma linguagem
de script modesta e quase nunca são concluídos pelo Turing, mas podem e têm opções de
marcação e espaços reservados. Isso foi observado no passado, mas se ao olhar o texto do jogo
você suspeitar de alguma forma de marcação ou espaço reservado, é melhor não usá-lo como
base para uma pesquisa relativa.
Voltando ao tópico, a marcação e os espaços reservados podem assumir muitas
formas, desde texto simples entre colchetes, sinais hexadecimais no texto (vemos seções
numeradas fazerem isso com frequência e hexadecimal simples usado para indicar uma
nova linha ou final de seção o tempo todo) , marcação de estilo XML até os itens contidos
nos ponteiros (pense nos vários formatos de empacotamento de arquivos que podem ter
um ag para indicar compactação para um exemplo de ideia semelhante).
Os códigos de controle são um conceito semelhante, embora geralmente sejam tratados
como parte da codificação e façam coisas como indicar uma nova linha, uma guia ou algo assim.
Em que ponto da engenharia reversa de um mecanismo de texto você deseja tentar descobri-los
depende de você.
7Lembre-se apenas porque isso pode ser feito de uma maneira que um jogo não precisa (calcular coisas em
tempo de execução é menos que ideal) e existe igualmente redundância, portanto, se algo estiver lá, poderá ser
ignorado no produto final.
144
F202 F9EB 03F3 02F8 00 é o próximo e é falado por alguém diferente (????
e sem imagem/som apenas neste momento)
Isso vai e volta por um tempo com o próximo personagem (Vent) tendo
uma imagem aparecendo no lado direito da tela
F203 F9F4 03F3 05F8 01
A próxima tela tem o personagem Giro na parte inferior da tela.
Preocupantemente, parece haver dois bytes extras.
F201 F202 F9F5 03F3 0DF8 03
Ventilação na parte inferior da
tela F201 F203 F9F7 03F3 07F8 01
Antes de lidar com isso, coloque o primeiro grupo em uma linha
F202 F9E9 03F3 0DF8 03
F202 F9EA 03F3 0DF8 03
F202 F9EB 03F3 02F8 00
F202 F9EC 03F3 0DF8 03
F202 F9ED 03F3 02F8 00
O terceiro byte parece estar contando para cima, o que é bastante comum em
sistemas de texto (é efetivamente parágrafos numerados). Você provavelmente
desejará mantê-lo intacto, pois o jogo pode acionar animações de um contador que o
utiliza (no mínimo, é uma boa ideia alterar o mínimo necessário), embora você possa
testar se desejar.
Falar em testar a análise estática pode chegar a algum lugar e está se mostrando
bastante útil até agora, mas por que analisar algo estaticamente quando você tem uma
máquina capaz de executar o exemplo e fornecer resultados.
Existem três escolas de pensamento neste momento
3. Montagem
A montagem é sempre uma opção, independentemente do que você esteja fazendo, pois é
o nível mais baixo que é manipulado e pode ser combinado com os outros dois métodos.
Poderia ser um valor simples que carrega diretamente (ou através de uma instrução
simples como uma multiplicação) para o OAM, poderia ser o valor de entrada para uma
função de pesadelo ou mesmo algo intermediário. No entanto, embora seja um método
altamente respeitável, a maior parte do hacking de ROM e da computação em geral
consiste em fugir da montagem, se possível, para que os outros dois sejam empregados.
Presumivelmente, existem alguns valores funcionais, então uma escola de pensamento seria
substituir um valor funcional por outro funcional e ver o que acontece. O outro é menor de idade,
esperançosamente educado, adivinha e depois vê o que acontece. Qualquer um deles pode
causar um travamento, mas leva apenas alguns segundos para verificar.
Pela primeira vez, dê a volta inteira ???? A seção de pré-texto foi usada para
substituir aquela da seção de texto de abertura que leva ao seguinte (jogo hackeado e Lá eram
jogo original) dois
na verdade
cópias de
o ele em
a ROM então
ambos eram
para
substituído
o bem de
este exemplo
145
Apenas a primeira seção foi feita e logo em seguida ele voltou ao personagem
original, mas talvez o mais interessante seja a pequena animação deslizante que
ele faz entre os personagens foi feita entre os hackeados ???? e o personagem
Giro.
Em seguida foi editar um único valor, o substituto original foi deixado para
isso e continuou exibindo a imagem.
O valor escolhido foi o último (os últimos 8 bits antes do texto real, valores em
hexadecimal)
04 apareceu para colocar Prairie 09
apareceu para colocar Modelo L 10
apareceu para colocar Hivalt
O FF causou corrupção de tela que permaneceu por um bom tempo (o plano de
fundo quebrado acabou sendo substituído após a troca de uma cena, mas as imagens
de texto permaneceram quebradas e houve corrupção de texto adicional em várias
telas depois).
Se não estivesse na marcação, isso provavelmente contaria como codificação de
múltiplos blocos e certamente aparecerá da mesma forma quando acontece em texto
normal (um único byte/caractere ou dois sendo usados e o jogo gerando um nome
inteiro).
No entanto, isso deixa outros 64 bits (exceto a seção de contagem) fazendo
alguma coisa.
F202 F9E9 03F3 0DF8 03 = origem
F202 F9EA 03F3 0DF8 03 = segundo
F202 F9EB 03F3 02F8 00 = ???? e imagem correspondente
Substituir o 0DF8 por 0AF8 deu
146
Substituindo o F8 por F9 corta a primeira letra. Substituir por FA avançou o
texto uma linha antes de voltar e colou as coisas em linhas ímpares e mudou o
nome para ???? onde F7 parecia não fazer nada além de mudar o nome. Relegado
ao número mágico/constante/descoberto mais tarde.
Vent tem uma caixa com o nome do lado direito, embora ainda no
principal
147
Não muito depois do início da conversa, há um curta com o retrato à esquerda,
mas na parte inferior da tela superior. Extraindo o comando dele
F201 F202 F9F5 03F3 0DF8 03 = canto inferior esquerdo
xxxx F202 F9E9 03F3 0DF8 03 = primeiro comando do jogo.
xxxx foi adicionado para alinhar as coisas, mas poderia ser um sistema de comando de comprimento
variável?
Antes de debater isso, porém, 01 foi tentado e colou no fundo com o
retrato à esquerda. 04 e FF pareciam não fazer nada.
Mais algumas experiências poderiam ser feitas, mas o resto é apenas preencher
as lacunas e a maioria das coisas interessantes parece já ter acontecido.
148
3.4 Fontes
Se você não leu a seção de gráficos, talvez seja melhor abordar alguns dos
princípios básicos ou poder consultá-los.
Quando se trata de computadores, o manuseio de fontes é um jogo completo e requer um
conhecimento bastante extenso para implementar um sistema de manuseio de fontes. Apesar de
algumas exceções nos consoles mais novos/mais poderosos, os consoles mais antigos são todos
fontes bitmap e não possuem gráficos vetoriais para permitir caracteres de qualquer tamanho. Se
um jogo tiver vários tamanhos de fonte, provavelmente é outra fonte no jogo, outras codificações
no jogo ou alguma combinação das duas. As fontes, mais do que qualquer outro tipo de formato
gráfico, gostam de se desviar do poder do tamanho de 2 blocos, mesmo que tenham largura
amplamente fixa, e não apresentam extras sofisticados, como caudas ou simples. Ele também
corta no sentido inverso e quaisquer caracteres com ditongos, sinais diacríticos e outros
dispositivos semelhantes tenderão a ser caracteres extras dentro de uma fonte, em oposição aos
extras gerados. Na maioria das vezes, eles são em grande parte de cores únicas ou apresentam
apenas pequenos sombreados e quaisquer animações/efeitos em tempo real que você vê
geralmente sendo feitos em nível gráfico com marcação para acioná-los. Isso não quer dizer que
as fontes sejam formatos simples, já que o DS apresenta um formato de fonte bastante complexo
conhecido como NFTR, que muitos jogos usam. NFTR tem largura variável por natureza, mas em
geral, se parecer arte de palavras ou em algum momento você teria que usar um editor de
imagens (especialmente telas de título e introdução), provavelmente você está olhando para uma
imagem. Embora o NFTR seja popular, talvez muitos usem gráficos 2D simples ou algo
verdadeiramente personalizado.
Além disso, assim como a música, há uma série de termos e conceitos específicos de
campo que entram em jogo e, como tal, o design/construção de fontes tem sido um
campo/habilidade altamente especializado. Da mesma forma, os conceitos caíram em
desuso nos últimos anos, mas códigos de 16 bits semelhantes aos scripts foram vistos em
jogos. Essas coisas foram usadas para permitir que um determinado número de comandos
de 8 bits fossem seguidos (se você observar a codificação shiftJIS, cada entrada do Hiragana
começará com 82 e cada katakana começará com 83, isso significa que 8 bits são bastante
viáveis se você fizer o script em ), o jogo entrará no modo de decodificação de 8 bits, e
alguns jogos terão um comando para alternar a troca de tabela/fonte para usar Dakuten e
Handakuten ou pontuação ou caracteres personalizados (isso não deve ser confundido com
jogos que têm apenas várias fontes e tabelas correspondentes, pois isso é irritante, mas
nada incomum).
149
1. GBA3 XBpp, que conforme discutido nos gráficos é um formato de compactação
de 4 bpp que intercala os blocos entre os valores
3.4.1 NFTR
O formato de fonte NFTR foi mencionado anteriormente e é um formato de fonte bastante
completo com capacidades de largura variável e, em alguns casos, com versões posteriores você
também possui habilidades de manipulação de linha. Ele carrega a codificação da fonte, portanto,
se você encontrar uma fonte NFTR, você tem a codificação/mapeamento ali, observe que ainda
pode ser personalizado ou apresentar caracteres personalizados, então você pode ter que
combinar as coisas manualmente ou usar OCR . Houve uma revisão mais tarde na vida do DS para
o formato, então algumas ferramentas mais antigas podem ficar aquém aqui, mas por outro
lado, há uma variedade de ferramentas que podem fazer coisas com o formato (embora muitas
não estejam em inglês, pois o formato era o inverso projetado em círculos de hackers chineses).
150
Igualmente útil é quando você pode visualizar a fonte, você pode digitar diretamente e a fonte
escolhida substituirá os caracteres digitados (isso vale para qualquer ponto no visualizador/editor
de blocos)
Editando a fonte apenas digitando. Clicar com o botão direito também permite a inserção completa de uma
fonte usando um arquivo de tabela.
151
A caixa de diálogo principal do NFTR que está disponível no menu suspenso de ferramentas em
cada seção do Crystaltile2.
Ele funciona em dobro como janela de informações (depois de clicar no triângulo para expandir
as opções, clique no botão Nftr para abrir uma fonte), embora a maior parte seja bastante
autoexplicativa.
ˆVocê também pode tentar Reconhecer página inteira, que tentará decodificar
cada caractere na janela visível.
ˆNo caso provável de estar errado, insira o caractere correto (tenha muito cuidado, pois
você pode estar olhando para ele adivinhando um caractere grego, japonês ou
cirílico) no espaço próximo ao botão aprender e pressione o botão aprender.
Quando estiver satisfeito com os resultados, pressione salvar e ele os transferirá para a
caixa esquerda de acordo, as seleções permitem apenas a lista de caracteres, para
combiná-los com suas codificações para a página de código atualmente selecionada, para
iniciar a numeração em ordem a partir do caixa fornecida (números em hexadecimal) ou no
caso do índice dois salve-o como 16 bits (little endian) começando no número fornecido.
Copie e cole isso como seu arquivo de tabela.
152
TinkePágina do Github
Embora as ferramentas independentes focadas até agora tenham sido mais ou menos
limitadas ao Crystaltile2 com algumas menções aos outros, o Tinke apresenta uma boa
quantidade de suporte para ele e é uma das poucas ferramentas que tentará adicionar um
personagem ao NFTR o que muitas vezes não é uma tarefa tão fácil devido à natureza mais
complexa do formato.
153
Edição NFTRDownload de viagem de arquivo
Embora o Crystaltile2 tenha algumas habilidades muito interessantes, esta é a ferramenta
ideal para quem precisa fazer algo com o formato de fonte NFTR.
154
Adicionando caracteres ao NFTR
A edição simples pode ser feita na maioria dos programas, mas adicionar coisas, supondo que
você não queira apenas gerar uma nova fonte, é uma perspectiva um pouco mais complicada.
O formato NFTR é bastante complexo, mesmo antes do aparecimento da segunda
versão conhecida, pois existem três classes de método de codificação.
Tinke é o método sugerido para isso.
O botão adicionar caractere é seu primeiro porto de escala. Fazer isso adicionará um
caractere ao final da leitura do bitmap, mas ele não será mapeado para nada inicialmente.
Adicione seu personagem agora e pressione aplicar alterações para vê-lo adicionado.
É aqui que reside o verdadeiro truque, pois a fonte NFTR permite uma variedade de métodos
de codificação, desde a definição bastante simples de um ponto inicial até código por código. Ele
também permite múltiplas seções de código (cada seção sendo conhecida como CMAP
dependendo dos documentos que você lê) que podem ser de nidas ou restritas conforme
desejado. Número da imagem, também conhecido como número Char à esquerda e códigos de
caracteres em decimal aqui à direita.
155
Pressione aceitar (e salve a nova fonte)
156
Hack de fonte de largura variável (VFW)Junto com a conversão de fontes de 16 bits para 8 bits
mencionada posteriormente, esta é considerada uma das coisas mais difíceis de fazer no que diz
respeito às fontes. As fontes japonesas têm largura fixa, enquanto o conjunto de caracteres
romanos usando idiomas não o é quando se trata de caracteres e especialmente de pontuação.
Infelizmente adicionar 16 pixels à localização horizontal é consideravelmente
programar do que mais fácil ler o valor da tabela e posicionar o item de acordo, repita
para cada caractere, talvez também lidando com quebras de linha e como seria desnecessário
ensaio para jogos japoneses, os programadores tenderão a não adicioná-lo ao jogo,
embora esteja melhorando com o passar do tempo, o desenvolvimento é forçado a
considerar as versões internacionais e as pessoas começam a usar bibliotecas/mecanismos
de manipulação de texto padrão.
Como a frase anterior sugeriu, o objetivo aqui é encontrar a rotina de desenho de texto e
fazer com que ela determine um valor para a largura do texto (uma tabela pré-fabricada
geralmente é a melhor escolha de método) antes de usar esse valor para definir locais
adequadamente e lidar com quaisquer problemas com quebra de linha; pode ser configurado
para quebrar e pular quando algo for igual a algum valor definido, o que é bem possível com um
tamanho de caractere fixo (16 + 16 + 16 sempre passará por 160), com variável, embora
esteja longe de ser uma certeza. Quase invariavelmente, precisar fazer tudo isso significa
hackear em nível de montagem, criar novas funções e subverter as antigas, por isso é
considerado um dos hacks mais difíceis de fazer. A principal exceção a isso seria NFTR e
formatos semelhantes que podem muito bem ter um conjunto de caracteres de largura fixa
vindo do Japão, mas o formato em si (e presumivelmente as bibliotecas usadas para
decodificá-lo) suporta VFW, o que reduz o hack para edição de imagens e ajuste de valores .
1. Manuseio de linha
O manuseio de linhas (para caracteres como pqfgjy que não ficam dentro das linhas, ao contrário
do japonês que sempre fica) é bastante semelhante ao hack de fonte de largura variável, embora
com a diversão adicional de ter que lidar com o espaçamento vertical também.
A mudança pequena de fonte/tamanho é talvez o hack mais comum relacionado à fonte que não é
simplesmente mudança de cor, modificação de caracteres/glifos ou adição de caracteres. Os caracteres
japoneses tendem a estar contidos em uma caixa quadrada onde os caracteres romanos podem estar
contidos e, na verdade, mais frequentemente estão contidos, em um retângulo com o lado mais longo
sendo a vertical. Para esse fim, fazer com que o jogo coloque os personagens mais próximos uns dos
outros pode não apenas permitir que você se destaque mais na tela, mas também fazer com que pareça
melhor se for feito corretamente.
Isso é um pouco mais simples do que uma fonte de largura variável verdadeira, pois tudo o
que você precisa fazer é encontrar o valor que adiciona uma determinada quantia para cada
caractere e alterar a carga útil para algo menor (ou talvez algo mais amplo se você estiver
melhorando uma fonte já estreita) .
Além disso, você pode querer usar uma espécie de codificação de bloco duplo e dividir
caracteres largos como w e m em dois caracteres se seguir esse caminho e codificar
metade de cada um em um bloco para si mesmo. Falando em peças contendo algo
diferente de apenas um único caractere
157
Hack de fonte de largura pseudo variávelNa prática, isso adiciona uma espécie de
codificação de bloco duplo a uma fonte e todo tipo de coisa pode ser feita com ela. Um
exemplo básico seria adicionar dois l minúsculos (como no lêmure) a um único bloco.
Voltando ao megaman ZX, o arquivo font_bin.pal foi decodificado (é uma decodificação
direta NDS 1BPP de 8 por 16 pixels) e alterado de acordo para mudar o jogo do original
para o próximo a ele, que deve parecer um pouco melhor.
Aqui, o caractere 5B anterior foi substituído por dois caracteres l e as ocasiões em que o
l duplo aconteceu tiveram os dois caracteres l únicos substituídos por um único valor
hexadecimal 5B (para fins de exemplo, o espaçamento também foi levado em
consideração). Na prática, a maioria dos jogos com uma fonte de largura fixa adicionará
serifas e outros caracteres finos para tentar eliminá-los um pouco, o que funciona para
algumas fontes menores, mas não é bem dimensionado.
Para um exemplo da ideia de serifas, o ll foi deixado, mas a fonte foi substituída por
uma fonte da família Courier (lembre-se que o Crystaltile2 permite adicionar caracteres
diretamente às imagens apenas digitando), observe os caracteres i (como na Índia).
158
Tornar as fontes mais agradáveis é certamente um truque de melhoria comum e alterar
uma fonte ao traduzir um jogo também é, no entanto, uma das coisas mais úteis que você pode
fazer com este conceito de fonte de largura pseudo variável é se você encontrar um menu de
largura fixa/comprimento fixo (mais antigo Os RPGs japoneses gostam especialmente disso e o
problema é ampliado pelo fato de os japoneses terem Kanji, que pode dizer muito em alguns
caracteres) e se deparam com a escolha de massacrar o idioma/nome, possivelmente fazendo
uma conversão de 16 para 8 bits ( embora isso possa não ajudar na tela de problemas
imobiliários) ou hackear o jogo para suportar seções mais longas (tanto no código quanto no
departamento imobiliário da tela). Como os menus são compostos de texto definido e
comumente usado, muitas vezes é benéfico codificar vários caracteres em blocos (não há
necessidade de colocar apenas caracteres inteiros em blocos, a menos que o jogo espace as
coisas), permitindo assim mais alguns caracteres se você fizer isso. está certo.
1. Uma variação dos arquivos de tabela onde a codificação e o bloco são combinados, isso
pode ser um tanto formal ou apenas ponteiros em uma tabela binária que fazem o
159
mesmo trabalho. Geralmente, ele ainda estará em ordem, em vez de uma pesquisa completa no estilo
de banco de dados.
2. Um ponto inicial é definido nos blocos e a codificação conta a partir daí. Pode haver
vários e o mesmo conjunto pode ser repetido várias vezes, sem mencionar que pode
haver algumas contas feitas nele (pense em ponteiros de conjunto).
3. Um ponto inicial é definido em uma codificação (neste ponto, uma lista de números
aleatórios) e os blocos são combinados com eles.
3. Scripts
Os dois primeiros foram abordados, mas vale a pena ver o mecanismo de script e
pode ser visto em event.dat no diretório de dados
As coisas iniciais são a configuração dos mapas e cenas, mas são um bom
exemplo
160
161
A análise inicial do mecanismo de script durante a engenharia reversa imitou as
técnicas de engenharia reversa de marcação, ou seja, uma combinação de análise estática e
testes para ver o que acontece. Também de possível interesse são as poucas linhas iniciais
que parecem estar configurando uma cena de depuração, pois como mencionado em outro
lugar, as coisas que os desenvolvedores deixam para depuração são frequentemente
exemplos simples do mecanismo/conceito em questão e podem demonstrar conceitos que
de outra forma teriam que ser necessários. ser extrapolados dos complexos do próprio
jogo.
Zumbi DaisukiÉ claro que o script visto nem sempre é tão complexo quanto o exemplo
acima e um belo exemplo pode ser visto no jogo Zombie Daisuki que possui script
como visto na imagem a seguir. Se você quiser dar uma olhada no diretório de dados
do próprio jogo existem alguns arquivos com a extensão . ini que são compatíveis
com shiftJIS. Observe os nomes das variáveis, incluindo erros ortográficos que podem
fazer com que o hacker os corrija acidentalmente e cause muitos problemas, bem
como marcação e falta de ponteiros.
162
Lua A linguagem de programação lua foi vista algumas vezes no DS.
No entanto, ele foi convertido para um arranjo semelhante ao bytecode em comparação com o texto
simples que geralmente é deixado como no PC.
El Tigre- faça minha mulaO jogo apresenta um ótimo formato de arquivo que vale a pena
explorar um pouco, pois mostra muitas coisas vistas em formatos de arquivo.
Eliminando a primeira e definindo a largura da janela para um tamanho muito amplo, a primeira
parte que eram os nomes (embora não assuma que como os nomes muitas vezes se seguem
163
o resto das informações que cobrem o arquivo em questão) foram cortadas nesta
cena, mas o nome longo foi destacado para se ter uma ideia do que acontece.
Parece haver vários nomes ASCII simples (sublinhado permitido) em ordem alfabética
por extensão, embora as extensões não estejam em ordem alfabética. Olhando mais
adiante no arquivo parece dizer que letras maiúsculas ou minúsculas para os nomes não
importam (em alguns sistemas isso importa). Lembre-se de que quanto menos alterações
forem feitas em algo assim, melhor, para que a ordem provavelmente queira ser mantida
ao remontar o arquivo
Os números contados nos 8 bits após a seção de nome (na verdade, 16 bits como
você verá em breve) podem muito bem ser números (ordinais também podem ser
um termo aceitável) que são úteis para o sistema como se referindo a coisas por
nome é bastante problemático onde a matemática fornece números.
0100 desejará ser retornado mais tarde.
Três conjuntos de três números, se possível seria bom deixá-los como estão no
original, mas isso torna simplesmente olhar para os mais problemáticos do que
deveria ser, então um ip de 32 bits depois
164
O 0100 tornou-se 0001 no que hoje são os 16 bits superiores dos 32 bits. Três
números então. O primeiro parece maior que o segundo e o segundo mais o
terceiro é o próximo na sequência do terceiro número.
Tamanho e localização então. Por enquanto, nenhum preenchimento entre valores é
165
assumido, mas frequentemente há preenchimento para garantir que ele esteja alinhado com 32 bits ou
até mais, mas vê-los iniciar com valores ímpares torna bastante provável que não haja preenchimento
aqui.
Rolando um pouco mais para baixo
Os arquivos swav foram verificados (eles têm um início de arquivo bastante único, também
conhecido como carimbo mágico) e eles eram de fato o formato de áudio swav e como o áudio
geralmente não é compactado além de ser feito em primeiro lugar, termina o o
descansar.
O 0001 agora nos 16 bits superiores é de fato um valor compactado ág. (um pouco os
foram extraídos e, em seguida, tentaram aplicar a compactação sem nenhum sucesso
real - uma verificação rápida e fácil).
Nos exemplos swav, o primeiro e o segundo dos três números são os mesmos (e o
padrão para 3 é válido).
O primeiro dos três valores é o tamanho não compactado, o segundo o tamanho
compactado e o terceiro a localização.
tabela de dados do arquivo pkg
De nido como segue
32 bytes para o nome, presumivelmente terminando com o primeiro 00 no nome
e preenchido a partir daí (os últimos 4 bytes podem ser necessários)
2 bytes para o número do arquivo (ipped e contando a partir de 0)
2 bytes para um ag compactado ( ipped, 1= compactado, 0 = descompactado) 4 bytes
para tamanho descompactado ( ipped)
4 bytes para tamanho compactado (ipped)
4 bytes para localização do arquivo (ipped, ponteiros padrão (não relativos) e começando do
início do arquivo principal (não definido))
Preenchimento de 4 bytes (00 preenchido)
O formato do cabeçalho não está finalizado, pois ainda há a parte que foi excluída
inicialmente para deixar tudo alinhado (ipped para facilitar as coisas)
166
pkg é claramente o carimbo mágico para este formato.
301... o último número do arquivo é 300 hexadecimal e começa com 0000 para números
significa que essa é provavelmente a contagem de arquivos.
008C 9446 é o comprimento do arquivo (geralmente uma visão comum em cabeçalhos), mas está
ausente
008B F7E2 mais 9C64 (a localização do primeiro arquivo e final do cabeçalho) é 008C
9446 e ter comprimentos ignorando cabeçalhos é bastante comum.
Formato do cabeçalho
4 bytes 706B6700 hexadecimal (pacote[00]) 4
bytes 00 preenchidos.
4 bytes contagem de arquivo (ipped) 4 bytes 0000 0001
quando ipped 4 bytes desconhecidos (019F3323 quando
4 bytes tamanho do arquivo - cabeçalho (ipped) derrubado)
4 bytes
desconhecidos (0009 4584 quando 4 bytes
desconhecidos (0002 DDAA quando 4 bytes derrubado)
preenchidos (preenchimento?).
nível
pequenos. O fato de isso ter acontecido é bom, pois aponta para a compactação, em vez da
compactação de toda a biblioteca do arquivo (formatos como o 7zip fazem isso para atingir taxas
de compactação muito altas para grupos de arquivos semelhantes, ao custo do tempo de
descompactação, recursos e potencial para o arquivo ser corrompido
167
além da recuperação de qualquer coisa por meios simples e não pode ser extraído sem um
conjunto completo de arquivos no caso de arquivos divididos).
tmpCopy.txt foi extraído. Parece um arquivo de texto de depuração, se é que alguma vez
existiu.
C86 é o comprimento do arquivo compactado. De acordo com o cabeçalho, deve ter comprimento
hexadecimal 2DAC.
entidades.xml foi extraído. xml deve ter muitos colchetes interessantes para serem observados.
16D8 é o comprimento do arquivo compactado. De acordo com o cabeçalho, deve ter 00010344
hexadecimal de comprimento
Nenhum dos dois parecia ter nenhuma sinalização para iniciar (a primeira pista de que pode
ser personalizado) e nenhum deles teve qualquer início óbvio OK e degradação à medida que
avançava (LZ geralmente começa bastante legível e se torna menos legível à medida que as coisas
se repetem e são retomadas e RLE é praticamente o mesmo) que aponta para algo como Hu man
(o DS BIOS suporta humanos, mas não era uma versão padrão compatível com BIOS pela
aparência das coisas)
[para terminar]
de dados (alguns arquivos de dados naturalmente descompactados e compactados, análise parcial de texto simples
conhecido).
168
ou DS) ou formato de memória (se o jogo usar apenas ponteiros de 16 bits, você poderá ter
limitações). Estritamente falando, isso também é um truque de montagem, mas você pode fazer
muitas coisas simplesmente visualizando a memória e ajustando seus hábitos de acordo.
Tela automática (pressione para continuar) fazendoNão está realmente na mesma classe
dos outros mencionados, exceto por alguns jogos bastante chatos de manusear, mas
definitivamente vale a pena conhecer, pois é algo que você provavelmente encontrará mais
cedo ou mais tarde. O jogo pode ter mais texto em uma determinada conversa do que
pode ser exibido na caixa de texto fornecida e, como tal, terá que mudar automaticamente
para a próxima ou permitir que o usuário controle o que acontece. Da mesma forma,
alguns jogos são bastante concisos e podem não haver disposições para isso ou exigirão a
edição do próprio mecanismo de texto do jogo.
As possibilidades aqui são extensas. Alguns terão um comando básico de fim de
seção que o jogo irá pausar na entrada pendente do usuário e outros irão rolar
automaticamente. O que eventualmente termina nos menus de escolhas dos jogos é
(o clássico sim/não a opção de um jogo, um conceito que muitas vezes vê dupla
codificação de blocos usada para isso), que pode ser uma espécie de abordagem de design de lista/nível
vinculada ou algo enterrado nas profundezas do jogo.
Envolvimento conduzido por OAM/tileIsso é mais reservado para texto em imagens/mapas de blocos,
como aqueles frequentemente vistos em quebra-cabeças; no entanto, aqueles que fazem um hack de
fonte de largura variável podem usar leituras do gerenciamento de blocos OAM ou BG para direcionar as
coisas. Houve jogos como Kenshuui Tendo Dokuta que usaram uma representação de fonte e um
formato gráfico nitroSDK para repetir blocos conforme necessário para exibir a cena.
Envolvimento de seção Muito parecido com quebra de linha, mas observe que não é
sempre o mesmo que a quebra de linha usada no jogo com o qual você está lidando, pode até
não ser o mesmo conceito (ponteiros para finalizar uma seção e caracteres para quebrar uma
linha são na verdade uma boa maneira para os desenvolvedores fazerem muito disso ).
169
3.6.1 Extração de texto
Mesmo com uma tabela um pouco mais completa, muitas imagens ROM podem não ter seu texto
facilmente extraído para um arquivo de texto simples, graças a coisas como marcação e espaços
reservados; mesmo coisas simples como a seção não tem novas linhas/marcador de fim de seção,
como a maioria dos editores de texto entende, podem atrapalhar as coisas. É por esta razão que
programas personalizados são frequentemente feitos para suportar um determinado jogo/série,
em vez de lidar com um simples despejo de script. No entanto, é muito bom ter um simples
despejo de script de vez em quando e com um pouco de reflexão pode ser feito para permitir que
as coisas sejam trazidas de volta ao texto posteriormente com um pouco de esforço, em vez de
exigir um manual completo retrabalho.
Tecnicamente, os arquivos de tabela suportam parâmetros de quebra de linha, string e seção (o
tabular tem a capacidade de adicioná-los), mas se sua ferramenta de extração os suporta é uma questão
diferente. Lembre-se também de que nem todos os jogos os utilizam e, em vez disso, podem usar
ponteiros ou seções de comprimento fixo.
Para este fim, pode ser bastante útil substituir tais conceitos por coisas que você pode
editar posteriormente. Embora haja exceções, a grande maioria das imagens ROM usará
um formato binário para coisas como quebras de linha.
As duas principais abordagens para isso são marcação de estilo XML e anúncios (massivos).
XML é uma linguagem de programação de certa forma e permite que você defina um
conjunto de dados simples, mas aqui a ideia de usar < e > em torno de strings personalizadas
para indicar conceitos de uma forma como <nova linha>, <fim do parágrafo> e mais tarde na
marcação adequada como <bold> tem um pouco de apelo e na maioria dos casos os jogos não
tendem a usar tais conceitos (embora verifique). Se você os tiver, eles permitirão uma pesquisa
simples e substituição para fazer o trabalho de uma ferramenta mais complexa. Sem mencionar
que você pode ir muito longe e realmente usar o XML adequado com um analisador criado para
ele.
Flag e massivo ag é como o XML acima, mas em vez disso, a representação hexadecimal
real das coisas será usada para que você possa substituir mais facilmente.
Um bom exemplo pode ser que em editores básicos no Windows, a nova linha no texto é
indicada por 0D0A hexadecimal (outros sistemas operacionais como Apple (0D) e sistemas Unix
(0A) são diferentes, mas tenderão a suportar a versão Windows também) , aqui você pode fazer
com que o final da linha original seja indicado com um símbolo como # ou @ (um que
provavelmente não será usado no jogo), tenha uma linha extra adicionada no hexadecimal real
(ou não, se você preferir) e então você pode substituir facilmente em um editor hexadecimal no
final. Massive ag apenas usa uma longa série de símbolos para que você possa ter certeza de que
não faz parte do jogo normal.
170
Depois disso, você pode restringir sua seleção com um ou mais métodos de pesquisa
especiais (coluna elástica significa alinhada aqui) e, uma vez selecionados os arquivos,
você pode pressionar Extract Retrieved Project ou usar comandos semelhantes no
menu de edição.
CartógrafoBaixar Romhacking.net
Uma ferramenta apenas de linha de comando que você alimenta um arquivo e uma
lista de comandos (que inclui uma tabela) antes de exibir um despejo de texto bem
formatado. O leia-me incluído contém o uso completo e alguns exemplos. A maior parte é
bastante simples, mas também suporta ponteiros de vários tipos (embora nenhum
comando explícito para suportar jogos GBA).
Se o seu jogo GBA ostenta alguns novos tokens de linha/fim de seção, pode valer a
pena usá-los, mas se você estiver usando ponteiros, a adição de um 08 ou similar no
início do valor (ele suporta uma troca de endianness) pode tornar as coisas
complicadas. Você pode tentar usar o comando #POINTER SPACE para pular bytes e
pode tentar usar a opção de ponteiros relativos, mas um valor negativo grande pode
não funcionar bem. Falhando nisso, pesquise e substitua ou melhor, 32 bits AND bit a
bit por 00FFFFFF (FFFFFF00 se você considerar o endianness) no ponteiro
campo permitirá que você faça as coisas; soluções alternativas como essa são comuns se você
tiver que usar ferramentas pré-fabricadas e ter a capacidade de fazê-las geralmente é um sinal de
um bom hacker.
171
mesmo grupo/site de hackers). Ele também possui algumas habilidades de edição e inserção,
bem como edição de tabelas.
As habilidades do ponteiro, como vistas na imagem, são algumas das melhores e
podem suportar plug-ins escritos em turbo pascal.
172
específico, se possível, geralmente é melhor fazê-lo dessa maneira, pois há muitos métodos
que os jogos podem usar para texto.
Ainda assim você vai querer saber quatro coisas
1. Quais marcações e espaços reservados estão disponíveis, são usados, se houver, e como o
estágio de extração pode tê-los deixado.
3. Quais restrições você tem, se houver, na largura da linha (observe que você também
pode ter restrições não imediatamente óbvias se o texto for usado em outro lugar
com coisas como sequências de ashback, seções de introdução de capítulos e
métodos de recontagem de conversas).
4. Quais são os limites de tamanho do texto, se houver, do ponto de vista dos limites de formato de
arquivo ou, muitas vezes mais preocupante, dos limites de espaço de memória.
Se você alterou a marcação de binária para outra mais parecida com HTML, XML ou
marcação de fórum (ou usou a técnica ag), será necessário alterá-la novamente. Você
também deve tomar nota das codificações dos seus personagens, pois os jogos e os
computadores podem fazer as coisas de maneira diferente. Isso pode ser coisas simples,
como o inglês britânico ainda usa diferentes tipos de aspas (aspas invertidas), que terão
codificações diferentes, e o inglês americano (também a configuração padrão para a
maioria dos jogos) tenderá a usar o estilo único de aspas (máquina de escrever). aspas) ou
mesmo evitar aspas duplas em favor de aspas simples (que parecem iguais aos apóstrofos
e um jogo pode usar o mesmo caractere para os diferentes tipos de pontuação). Além
disso, se você não tomar cuidado, uma determinada fonte em um computador confundirá
essas coisas no que diz respeito à representação no computador, mas as deixará
codificadas de maneira diferente, sem mencionar o problema relacionado de se um jogo
usa um ponto final como final de seção ( muitas vezes há um comando de final de seção
adequado, mas nem sempre) e aspas fora da pontuação (novamente, diferenças nos tipos
de gramática inglesa aparecem aqui).
No que diz respeito à codificação de caracteres, geralmente é melhor
combinar a codificação original com a saída; vários jogos usaram shiftJIS para
partes e ASCII regular para outras (mesmo mesclando-as dentro da mesma
string) e reclamarão muito se não for assim na hora de rodar, porém isso é uma
coisa que é definitivamente vale a pena conferir/experimentar, pois pode
economizar espaço.
Fora isso, deve ser bastante fácil determinar se você tem coisas de extensão legal
(embora na prática você provavelmente teria alguém atuando como editor de script
para isso em um grande projeto).
Inserção de texto convencionalMuito parecido com a extração de texto, houve tentativas de criar
ferramentas de uso geral. Muitas vezes eles são limitados em capacidade ou tão complexos que
chegam a ser quase uma linguagem de programação, mas vale a pena conhecer o Atlas. Atlas é
uma espécie de padrão na inserção de texto de hacking de ROM de uso geral e a maioria das
ferramentas de extração visa ter uma certa compatibilidade com ele, sem mencionar que a
maioria das outras ferramentas de inserção também copiará parte da funcionalidade. Da mesma
forma, mesmo que a codificação não tenha sido alterada, não é incomum que existam tabelas
para extração de texto e versões modificadas das mesmas para inserção de texto.
173
Atlas (romhacking.net)
É um insersor baseado em script onde o tipo de script é de nido. O download inclui o
código-fonte para permitir modificações (embora o programa em si tenha suporte limitado
a plugins) e um manual com vários exemplos trabalhados de uso. De muitas maneiras, ele é
direcionado/tem provisões para o SNES e consoles similares com mapeamento de
memória, mas pode ser útil para ponteiros de nível de arquivo, como visto em muitos
formatos de DS.
Traduzir jogos é uma atividade muito popular entre hackers de ROM e se você sair
do hacking de ROM e da tradução de fãs / tradução de ROM de círculos de execução
de ROM, será quase sinônimo de hacking de ROM. A maior parte da tradução é
8Há também um modelo DS exclusivo da China, conhecido como iQue DS (ocasionalmente iDS), que
apresenta um modelo DS chinês, bem como um modelo coreano que é menos examinado. Houve
apenas alguns jogos chineses, também conhecidos como jogos iQue, que estão supostamente
bloqueados, mas na prática é uma verificação simples. Os hackers de ROM chineses, entretanto, são
alguns dos mais prolíficos que existem e traduziram bem mais de cem títulos para o chinês, sendo a
maioria de qualidade bastante boa, incluindo vários que não saíram do Japão.
9Alguns disseram que a invenção do sexo virtual realista significará o fim da raça humana, mas
outros argumentariam que a invenção de uma máquina que pode fazer humor seria mais contundente e
o primeiro passo para isso seria ser capaz de traduzir humor e/ou jogo de palavras de uma língua para
outra.
10O exemplo tradicional é fornecer uma tradução de um trecho de um texto e vice-versa, usando o
parágrafo que acabou de ser escrito do inglês para o japonês e vice-versa: A primeira regra para hackear
sua tradução deve ser tocar na localização da tradução automática em qualquer circunstância; eles são,
de fato, uma parte atraente do kit, embora tenham seus usos, por enquanto, eles estão hackeando
traduções para idiomas completamente não relacionados, quase tão bem quanto o idioma do Japão e da
Europa, não particularmente. Não há lugar para trabalho criativo como.
174
do japonês para o inglês, do japonês para o chinês ou do japonês para outra língua de
origem europeia (embora as traduções em árabe, russo, coreano e tailandês estejam
aumentando em número) e, ao contrário de quase todas as outras áreas de hacking de
ROM, isso não é simplesmente uma questão de habilidade técnica, pois também requer
habilidade linguística. Houve alguns tradutores hackers de ROM no passado, mas eles são
raros e geralmente eram mais um do que outro, então geralmente significa criar um grupo
de tradução para fazer as coisas. Isso certamente não significa que você, como hacker de
ROM, não faria bem em saber um pouco sobre o idioma do qual está traduzindo e isso
normalmente significa japonês.
Talvez acima de tudo você deva reconhecer e apreciar que, apesar das línguas
compartilharem muitas coisas em comum (verbos, adjetivos e substantivos por exemplo), elas
também podem carecer de coisas (o inglês não tem realmente gênero para as palavras, algumas
línguas têm dois e línguas como o russo têm três) e fazer coisas diferentes em coisas como
ordenação de adjetivos. No que diz respeito à ordenação de palavras, a maioria dos jogos
modernos que usam marcações/espaços reservados podem contornar isso ou até mesmo alterá-
lo sem quaisquer consequências negativas. Se o item a ser substituído por um valor estiver em
um ponto fixo em um script, você poderá ter que contornar isso, o que pode ser problemático ou
aceitar uma tradução um pouco desajeitada. Alguns jogos codificaram pedaços maiores de texto
como parte da variável/marcação e isso leva a coisas como os estalajadeiros dizendo que custa
600 ouro para passar a noite aqui.
Da mesma forma, as línguas são construídas sobre centenas de anos de história,
história que informa seriamente como funcionam; A cultura japonesa foi e, em muitos
aspectos, ainda é fortemente informada por noções de hierarquia social que
influenciam infinitamente a língua e podem ser bastante difíceis de traduzir/transmitir
de forma eficaz se a cultura da língua para a qual você está traduzindo, ou seja, mais
línguas europeias, não tem essa história. Da mesma forma, eles têm vários níveis de
influência sobre e a partir de outras línguas; O chinês formou uma grande parte da
língua escrita japonesa, por exemplo, mas hoje em dia eles estão longe de ser
totalmente inteligíveis entre si (veja kokuji e kokkun) e hoje em dia é muito mais
provável que você encontre pequenos ajustes nas palavras inglesas em japonês do
que seria há cem anos. anos atrás.
O estudo das diferenças entre idiomas é aparentemente algo bastante comum
para aqueles nos campos científico e tecnológico, no entanto, apesar de ser ótimo ter
uma apreciação disso, não está diretamente relacionado ao hacking de tradução,
então é hora de voltar ao assunto. tema.
O debate sobre se uma tradução deve ser mantida literal ou se pode ser um pouco
adaptada tem durado anos sem fim à vista; na verdade, vários projetos de retradução/
limpeza foram criados para resolver problemas com traduções oficiais e não oficiais
ao longo dos anos. . Cada lado tem argumentos válidos aqui, com o único consenso
real sendo mudar drasticamente uma obra e chamá-la de tradução é forçar um pouco
o limite (embora se o resultado final funcionar, pode ser bastante interessante) e ter
sua tradução legível é um coisa boa; observe que legível e compreensível apenas com
um quadro de referência para a franquia ou uma determinada cultura/história não é
necessariamente a mesma coisa, porém tal coisa pode informar como você procede
com uma tradução.
Coisas que devemos apreciar sobre a língua japonesa ao jogar ROM
hacker (lado hacker da cerca)
175
3.8.1 Os tipos de caracteres japoneses e como funcionam -
Hiragana, Katakana e Kanji formam a base da língua
Kana. Um termo coletivo para Hiragana e Katakana, eles são os princípios básicos
construções da língua com Katakana geralmente sendo usadas para empréstimos/palavras
estrangeiras, também onde os Hiragana são de forma bastante livre, os Katakana têm uma
aparência um tanto angular. Hiragana tende a ser reservado para palavras nativas e ambos são
fonéticos, o que significa que vários são combinados para fazer com que o word.rikai.com shiftJIS
tenha exemplos de ambos.
Existem alguns métodos de ordenação/classificação bastante aceitos, sendo o pedido
Gojuon o mais popular. Ferramentas comuns de criação de tabelas de hack de ROM, como
TaBuLar, devem adicioná-lo e poucos jogos se desviam aqui. No lado ip, esteja ciente de
que a ordem pode mudar, que as ferramentas padrão podem deixar de fora algumas
menos comuns e possivelmente obsoletas, aquelas que o escritor do script pode usar (ou a
fonte que foi emprestada incluiu) ou que o jogo pode adicionar inteiros caracteres para
caracteres com pontuação (veja Dakuten, Youon/Yoon e Handakuten, embora a maioria das
boas ferramentas de criação de tabelas devam ser capazes de adicioná-los), portanto,
esteja ciente disso ao construir tabelas. ShiftJIS e EUC-JP usam a ordem, mas também
incluirão Dakuten para os respectivos caracteres entre eles e muitos jogos usam ou
seguem sugestões das codificações ShiftJIS e EUC-JP.
176
contagem no texto (o mais popular primeiro, por exemplo), ordenação emprestada de uma
codificação conhecida (mesmo que os valores de codificação sejam diferentes) e coisas
semelhantes, então considere isso também. Além disso, como as empresas de desenvolvimento/
publicação de jogos podem não querer se preocupar em definir uma nova codificação para cada
jogo que fazem, elas podem muito bem compartilhá-las entre jogos, no todo ou em parte, ou
usar codificações existentes para criar novas.
Como mencionado acima, existem listas de Kanji que você pode querer consultar para
ajudar a fazer tabelas, mas está longe de ser certo e pode ser mais útil para quem está
fazendo a tradução; afinal, os jogos modernos são geralmente escritos por escritores
modernos para públicos modernos, sendo que ambos tendem a ser produtos da educação
moderna e da reforma da linguagem moderna. Deve-se ter cuidado, pois os jogos gostam
de usar símbolos mais antigos como símbolos mágicos e decorações, sem falar que o jogo
de palavras e a apreciação da linguagem são algo bastante comum na cultura japonesa.
No que diz respeito a pesquisas básicas de tipo de expressão regular, Kanji e kana
podem estar em qualquer lugar do texto e em nenhum lugar, naturalmente, se você
melhorar seu conhecimento de japonês, haverá situações que comumente exigem um ou
outro, ou uma coisa definida (acho que você sempre segue q em inglês) e você pode
conseguir fazer alguma coisa.
Tudo isso dito, se você precisar alterar uma fonte como parte do hack do jogo e manter
caracteres/idioma suficientes para que seus tradutores ainda façam alguns testes de jogo
contínuos, então os Kanji geralmente são a melhor escolha para algo a perder.
177
Ordenação de Kanji Embora tenha sido afirmado que não há ordem, existem agrupamentos
que você pode querer aprender a reconhecer ou pelo menos apreciar. As versões
mais notáveis disso são as
ˆ ?-moji. Embora agora seja considerada, se não obsoleta, então não é a melhor prática
Para muitos, tanto no Japão como fora dele, a ideia de categorizar os kanji em
grupos com o su x moji ainda é conhecida e influencia as coisas. Existem seis grupos,
quatro dos quais atendem pelo traço/estético básico e os dois últimos pelo seu
significado. As listas são difíceis de encontrar e não tão difundidas, mas então você
sabe que se o seu tradutor lhe disser que está agrupado mais ou menos assim, você
pelo menos já ouviu o termo antes.
ˆkyoiku. Uma lista de kanji conforme especificado pelo ministério da educação japonês
e discriminados por ano escolar/faixa etária. Dependendo da pessoa com
quem você está falando, a coleção/conceito completo da divisão nota por
série pode ser chamada de gakushu, embora isso não seja o ideal.
Mais uma vez, vários métodos específicos de jogos foram vistos e muitos métodos personalizados
compartilharão partes ou mesmo seções inteiras com shiftJIS, eucJP ou algo semelhante, pois é
tão estranho para os programadores originais definirem uma nova ordem quanto fazê-lo. você
mesmo. Da mesma forma, há exemplos de jogos que usam uma ordem baseada na ordem em
que os personagens aparecem pela primeira vez no roteiro e ordens baseadas na forma como os
personagens são comuns.
Outros (yakumono)Embora o japonês tenha muitos dos mesmos conceitos das línguas que
usam o conjunto de caracteres romanos em termos de pontuação, a taquigrafia e as
construções decorrentes deles, os caracteres que usam podem ser radicalmente diferentes.
sljfaq tem mais sobre isso. Isso pode permitir o retorno de algumas técnicas do tipo de
análise hexadecimal.
178
sem muita lacuna e, em termos de linhas, caracteres como jypq e f em
algumas fontes/estilos de escrita.
Observe também que o japonês não possui caracteres de espaço em si, sendo que
qualquer um que você vê é amplamente estético ou para fins de quebra de linha; você
provavelmente encontrará isso ao traduzir um jogo do japonês que possui um mecanismo
de texto construído por um programador japonês para uso com o idioma japonês, mas o
mesmo pode ser dito da maioria dos aspectos da tradução.
RomajiUma das principais razões pelas quais o japonês é considerado difícil de aprender é que,
ao contrário de aprender a maioria dos outros idiomas, você também precisa aprender um novo
conjunto de caracteres. Para diminuir isso e, em alguns casos, permitir que o japonês seja escrito
sem um editor de método de entrada (IME)/teclado japonês adequado (que lembre-se, pode ter
milhares de teclas de tamanho se você quiser incluir até mesmo um pequeno subconjunto de
kanji) maneiras de sobrepor o língua japonesa ao alfabeto romano foram inventados. Existem
vários dos quais o mais popular, embora não necessariamente o mais apreciado, é Hepburn.
Muito poucos jogos japoneses irão usá-lo e ocasiões em que ele pode optar por todos os
números ingleses e quase definitivamente árabes, mas é um conceito bastante importante e
duplamente importante quando se lida com vários idiomas ao mesmo tempo.
Jogo de palavrasTodas as línguas e o humor que os utilizam têm muitos exemplos de jogos
de palavras, mas o japonês é especialmente conhecido por isso e, de fato, muitos
tradutores perderam coisas como essa e entregaram uma tradução em tom muito
diferente do original ao longo dos anos por causa disso. Com algumas exceções muito
notáveis (Rudra no Hihou no SNES geralmente sendo o primeiro nessa lista), poucos
jogos usaram o jogo de linguagem como um conceito/mecânica central semelhante a como
o inglês é tratado quando a magia é trazida à tona.
É também mais uma razão pela qual a tradução automática não é confiável.
179
3.8.3 Sobre o idioma
Traduzir um jogo que já tem uma tradução já aconteceu várias vezes ao longo do
tempo e isso geralmente ocorre porque a tradução não combina com várias ideias;
poderia ser uma conversão horrível e cheia de gírias ruins, poderia ser que a equipe
de tradução não tivesse habilidades técnicas (mesmo com o código fonte alguns jogos
podem ser difíceis de traduzir11)ou pode ser que a equipe de tradução tenha sido
prejudicada pelo desenvolvedor/editor e tenha que mudar o tom do idioma ou a
escolha das palavras para atrair um público mais amplo ou atender aos requisitos de
censura. Embora este seja um campo muito interessante no hacking de ROM, e
dependendo do que você está fazendo, pode até ser um projeto solo, não é disso que
trata esta seção.
Várias discussões foram realizadas ao longo dos anos sobre como traduzir certos
conceitos. Também se aplica ao japonês, com um bom exemplo encontrado em
muitos Final Fantasy e outros títulos da Square Enix, onde o folclore e a literatura da
Europa e do Oriente Médio são frequentemente uma fonte de monstros e temas, sem
mencionar que outros jogos usam a história e o folclore chineses. como tema. Assim
como as traduções de jogos do japonês para o inglês, as traduções de itens e
conceitos para o japonês também podem fazer com que as pessoas destruam o
significado de algo.
Por outro lado, japonês, inglês e outras línguas são muitas vezes bastante diferentes;
também existem empréstimos que podem ter perdido o significado em alguns pontos. Por
exemplo, você pode saber que Sushi não é peixe cru, mas muitas pessoas ainda o
consideram como tal, sem mencionar que é um alimento bastante normal no Japão, ainda é
bastante exótico em outros lugares e, como tal, você pode considerar perder
completamente o sushi e substituindo-o por um alimento comum do local pretendido se o
cenário for uma cidade contemporânea ou algo assim.
Já foi mencionado algumas vezes, mas vale a pena ter uma seção rápida aqui também. Nem
todas as línguas favorecem a leitura da esquerda para a direita e isso pode dificultar a
pirataria de tradução, especialmente à medida que cada vez mais países que utilizam tais
sistemas de escrita começam a fazer jogos e procuram aqueles feitos antes. Há tategaki
mencionado em japonês, mas a maioria estará mais preocupada com o árabe e o hebraico,
bem como com os idiomas que tomaram um deles como base e o acompanharam.
Felizmente, linguagens que alternam direções, um conceito conhecido como
boustrophedon, embora estritamente que provavelmente também deveria refletir a linha,
não são de uso comum. Voltando ao tópico, aqueles que moram em locais, desejam
aprender idiomas nesses locais e estão interessados, são muitos e os jogos são apreciados
universalmente pelas pessoas. Normalmente parece haver três escolas de pensamento
2. Trapaça
3. Hacking completo
11Um tradutor de japonês para holandês da Loekalization detalha muitos dos problemas enfrentados
por quem traduz jogos reais. Algumas coisas são muito focadas na tradução profissional, mas muitas
delas também soam verdadeiras para hackear ROM e até mesmo o material profissional dá dicas sobre
os problemas que são vistos quando se trata de hackear ROM.
180
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
Devido à maioria dos computadores e desenvolvimento de padrões que tendem a acontecer fora
dos locais que usam linguagens escritas RTL, a maior parte da computação que o suporta ainda
não foi totalmente filtrada para os consoles, para um conceito relacionado, consulte as
codificações de 8 e 16 bits e a diversão e jogos históricos lá. Mesmo em computadores, embora as
coisas não sejam boas, muitas pessoas se acostumam a ler coisas em uma tela de maneira
diferente de como leriam um pedaço de texto manuscrito ou impresso. Na verdade, a RTL e essa
programação de computadores são um conceito relativamente novo. Para esse fim, desde que os
glifos estejam lá e na ordem correta em que funcionem, você provavelmente fará algo
semelhante ao ler 2 ^ 4 como24em um computador. Não é ideal de forma alguma, mas talvez seja
melhor que nada.
Trapaceando então... se você já viu alguém novo na edição de texto usar um editor
de texto, então você deve tê-lo visto colocar texto no meio da tela usando espaço ou
tabulação e forçar novas páginas pressionando Enter várias vezes. Uma técnica
semelhante é usada aqui e para cada linha de texto serão adicionados espaços/abas
suficientes para que apareça no lado direito da tela. Normalmente aqui ROMs com os
maiores scripts serão escolhidos como ROM base, mesmo que não estejam alterando
esse idioma (aqueles que abordam os jogos N64 Zelda tendem a usar a ROM francesa,
mas o script em inglês por causa disso). Novamente, isso está longe de ser o ideal,
mas está melhorando.
Hacking completo então. Uma quantidade surpreendente do mecanismo de texto, e
possivelmente até mesmo do hardware subjacente no que diz respeito às referências para a
posição da tela, será baseada no texto que aparece da esquerda para a direita, no entanto, tal
coisa potencialmente não é tão ruim quanto hackear uma fonte de largura variável. A ideia é que
um mecanismo de texto possa fazer algo como desenhar um caractere, adicionar 16, desenhar
outro caractere, se for o fim da linha, então iniciar um novo... em vez disso, você diz para ele
começar no final, desenhar um caractere, pegar 16, desenhar um caractere e manipular novas
linhas de acordo. Você terá que ter cuidado com os negativos e como isso pode lidar com a
ultrapassagem (perder um espaço de caractere e dizer se está abaixo da largura do caractere
maior, então a nova linha é bastante segura aqui), mas no geral, provavelmente deveria ser mais
fácil do que um hack VFW completo, que você também pode precisar fazer.
Deve-se notar também que vários caracteres podem ser unidos em árabe
escrito, muitos levarão o é um computador, portanto, não importa,
abordagem, mas se você estiver sendo então talvez considere isso.
NJStarNJStar
181
Este é o editor de texto mais comumente usado para o idioma japonês e foi
apreciado pelas equipes de tradução que trabalham no hacking de ROM. É em grande
parte shareware/avaliação, embora existam opções pagas.
JWPCEJWPCE
Um programa freeware mais antigo que, em muitos aspectos, acompanha o NJStar acima.
Um editor hexadecimal capaz de ler tabelas é bastante útil, mas existem algumas outras
ferramentas que são úteis
Embora este não seja um documento de idioma, há coisas que você pode fazer como
hacker de ROM para ajudar nos projetos e uma delas é a tradução assistida por
computador (CAT). Isto não é o mesmo que tradução automática, mas uma espécie de
programa de pesquisa e base de dados para traduções anteriores e ajuda a garantir
consistência em termos e outras coisas semelhantes; por exemplo, se você estiver
traduzindo um RPG enorme e encontrar um conceito três vezes em um jogo, mas traduzi-lo
de três maneiras diferentes, isso não parecerá bom.
182
Ferramentas comerciaisNa frente paga/comercial existem outras opções. Sendo um
software industrial/profissional/específico da indústria, embora os preços tenham o hábito
de ficar bastante altos e haja um formato bastante reconhecido/suportado conhecido como
XLIFF (um formato baseado em XML voltado especificamente para tradução), muitas das
ferramentas de código aberto suportam bem como alguns dos comerciais.
Ainda
TradosPagina inicial
Indiscutivelmente o líder de mercado em ferramentas CAT profissionais.
memoQPagina inicial
Não é tão popular quanto os outros dois e tem preços semelhantes, mas está ganhando seguidores
rapidamente.
183
4 Multimídia
Os humanos têm muitos sentidos que moldam a experiência do mundo que nos
rodeia e os contadores de histórias há muito reconhecem o poder e, talvez mais
importante, as limitações destes sentidos. Os jogos, sendo um ramo do
dispositivo de história narrativa, usam som e, devido às limitações de um
dispositivo ou para fins narrativos, um jogo pode optar por usar também um
vídeo, ambos os quais merecem a atenção dos hackers. De modo geral, as três
principais coisas a fazer aqui são
1. Ripar coisas - os jogos geralmente contêm faixas de áudio/vídeo que as pessoas
desejam ouvir fora do jogo
Falando em copiar coisas, mudanças simples no sistema de arquivos costumam ser muito poderosas
aqui.
4.1 Som
O som existe como uma onda e foi descoberto há muito tempo se você amostrasse a onda
sonora com o dobro da frequência mais alta que desejava capturar (o conceito ficou
conhecido como teorema de amostragem de Nyquist Shannon, embora existam outros,
embora seja bastante lógico quando você pensa em é como querer capturar a subida e a
descida do pulso) e dependendo do que você lê, o ouvido humano jovem e saudável
trabalha até 20KHz, portanto a faixa de 40KHz e acima é usada para captura de som de
maior qualidade12embora a voz humana seja geralmente muito inferior a esse limite, sem
mencionar que todos os sons não são iguais (frequências mais altas são mais difíceis de
ouvir), então muitas vezes você pode conseguir uma amostragem em uma taxa mais baixa.
Existem dois tipos de áudio comumente usados em jogos (e na maioria dos outros
lugares)
ˆReplicação de onda
Aqui você amostra a onda em uma determinada frequência (já coberta) e determinada
profundidade de amostragem (geralmente 16 bits para permitir 65.536 opções diferentes
para o volume da onda naquele ponto, embora 8 bits sejam usados em muitas ocasiões) e
através de uma série de várias técnicas matemáticas, dependendo do formato que você
está usando, você pode armazenar e reconstruir a onda para reproduzi-la mais tarde.
Podem durar horas ou algo menos de um segundo.
ˆGeração/rastreadores de som
Aqui você tem uma coleção de sons (notas/tons simples ou amostras mais longas, não
importa muito) de várias formas que geralmente são chamadas de instrumentos e
organizam sua reprodução (e velocidade de reprodução) em tempo de execução, criando
música.
Cada um tem suas vantagens tanto para criadores de áudio quanto para hackers.
12Alguns vão além por vários motivos, embora isso entre em um território interessante e menos útil
para os usuários finais do que para aqueles que trabalham com áudio em primeiro lugar.
184
ˆAs ondas são muito fáceis de rasgar e certifique-se de reproduzir exatamente como você deseja
e são capazes de recriar sons bem o suficiente para capturar voz e muito mais,
mas não são tão facilmente controlados no jogo e são muito grandes devido à
quantidade de dados que devem ser armazenados.
ˆA geração de som é fácil de controlar, pois você pode adicionar e remover coisas
facilmente, alterar a velocidade, alterar o volume da reprodução, repetir as coisas de
acordo com as ações do jogo (uma técnica muito potente) e geralmente são bem
pequenos, pois são apenas uma sequência de comandos com alguns bytes de
comprimento, na pior das hipóteses, porém texto deixando de lado a geração de áudio,
eles geralmente não são capazes de replicar uma voz humana sem que uma capacidade
de processamento séria seja dedicada a eles, o que raramente é feito.
ˆTaxa de bits - em áudio compactado com perdas, a quantidade de bits que você pretende usar
durante um determinado período de tempo para armazenar o áudio contido nele.
ˆRuído - sons que são captados em vários pontos do sistema que ficam
sobre o áudio e reduz a capacidade de ouvi-lo.
ˆRuído no chão - quão silencioso você consegue ficar antes do barulho captado pelo
o equipamento sobrecarrega o sinal real (geralmente acima do silêncio completo).
ˆDecibéis (Db) - uma escala logarítmica usada para medir a potência do som e
outras coisas, mas principalmente sólidas no que diz respeito a isto. Observe que há
uma diferença entre Db em áudio e Db em alguns aspectos da eletrônica.
O hardware de áudio GBA e DSNo que diz respeito à reprodução de alguns dos formatos de
áudio compactado comuns, o GBA e o DS apresentam hardware de áudio um tanto limitado
em comparação com consoles como o 360, que possuem suporte de nível de hardware
para isso. Dito isto, eles têm vários recursos interessantes que permitem que algumas
coisas interessantes sejam feitas tanto na geração de som quanto na replicação de ondas.
O BIOS GBA também possui algumas habilidades bastante extensas e o formato de áudio
DS padrão SDAT, que tem sua própria seção, também oferece muitas coisas interessantes.
Além disso, o GBA possui um formato Nintendo
185
fornecido, que geralmente é conhecido como Sappy e, embora não tenha sido
tão usado quanto o formato DS SDAT, também tem grandes possibilidades de
mudar as coisas e vale a pena conhecê-lo.
Na prática, a maioria dos formatos de áudio abstraem o manuseio do hardware de
áudio a tal nível que é melhor editar o formato de áudio diretamente (a maioria é
extensível o suficiente para que você possa fazer o que precisar, muitas vezes
incluindo a mudança da geração de onda para som) ou editar a ROM para alterar o
áudio reproduzido, se esse for seu objetivo.
Realisticamente, você provavelmente não gastará tanto tempo brincando com o hardware de
áudio em comparação com aqueles momentos em que você hackeia textos, níveis, estatísticas e
gráficos, o que faz com que você se saia muito melhor se você apreciar os conceitos de nível
inferior. No longo prazo, isso é uma coisa boa.
4. Ruído
186
e 15 (os números começam em 0) podem ser usados para ruído branco. O ruído é
importante para vários efeitos no áudio (pois o silêncio absoluto não é algo que a maioria
dos humanos consegue suportar) e pode fazer as coisas parecerem mais complexas do que
realmente são, sem mencionar que o ruído é difícil de comprimir e, sendo ruído, não há
necessidade real para que seja repetido exatamente, gerá-lo é útil e bastante factível por
hardware burro.
Teoria musical básicaUma das muitas seções que contém guias mais longos do que este,
mas saber algumas coisas sobre como a música tem sido tradicionalmente formulada pode
ajudar e, assim como aprender um pouco sobre como vários trabalhos criativos são
frequentemente construídos, pode ajudá-lo a trabalhar com outras pessoas em uma
equipe, coloque em palavras por que você encontrou algo que não é do seu agrado ou
mesmo por que funciona e, mais importante, dê uma estimativa fundamentada sobre os
limites, design e capacidades de uma determinada configuração. Muito parecido com o
hacking de ROM, embora muitas dessas idéias e técnicas não sejam difíceis e rápidas e
aqueles que sabem o que estão fazendo podem abandoná-las com grande efeito, embora
também seja muito parecido com o hacking de ROM e outras atividades científicas, aqueles
que tentam pegar atalhos e distorcer técnicas sem uma compreensão um tanto profunda
de por que estão fazendo isso muitas vezes não terão chances de retroceder e fazer algo de
bom com seus esforços.
Na maioria das vezes, isso será mais útil quando você estiver lidando com formatos do tipo
rastreador, pois outras vezes você normalmente estará apenas injetando som do tipo wave de
alguma forma que, se você souber o cabeçalho e o formato de codificação, provavelmente será
apenas um longo e prolixo e tarefa tediosa na pior das hipóteses.
Embora a audição humana seja relativamente contínua, tornou-se útil
classificar certas frequências (e seus múltiplos) como notas. Normalmente, há
sete que na maior parte do mundo de língua inglesa e muitos fora dele recebem
as letras de A a G antes de se enrolarem e começarem a contar para cima
novamente na próxima oitava, que neste ponto é o dobro da frequência inicial.
Existem todos os tipos de relações e rupturas depois disso, sendo duas das mais
úteis os círculos de quintas e a ideia de escalas musicais.
Duas ou mais notas (geralmente três) que parecem ter sido tocadas juntas podem
formar um acorde. Na linguagem geral, um acorde deve ser um som que soe
agradável ao ouvido.
Dissonância é quando notas/acordes tocados juntos ou o intervalo em que as notas são
tocadas não soam tão agradáveis ou podem ser considerados ásperos. Muitas vezes, a
dissonância pode ser usada, mas precisará ser resolvida antes de passar para outra coisa.
Como mencionado, as regras musicais podem ser quebradas com grande efeito com um
caso especial de dissonância conhecido como trítono, também conhecido como acorde do
Diabo, formando a base para muito hard rock e heavy metal.
Tempo refere-se à velocidade com que as notas são tocadas e tem grandes implicações na
forma como uma peça musical é percebida, chegando ao ponto de ser a marca registrada de um
gênero; em jogos, um aumento na velocidade geralmente será usado em um cenário de pânico,
sendo o aviso de afogamento/ar baixo nos primeiros jogos de plataforma do Sonic ou o aumento
no ritmo quando você está perto do topo de um campo de jogo de Tetris, sendo ótimos
exemplos. A capacidade de alterar o andamento do y de maneira fácil e controlada é uma das
principais razões pelas quais a geração de som persistiu, em vez de simplesmente optar por
ondas o tempo todo.
A maior parte da música é baseada na repetição, antecipação e construção e, na verdade, a maior parte
187
Acho esses arranjos agradáveis de ouvir. Um exemplo popular de que isso é
parcialmente ignorado é o drop onde algo será tocado repetidamente, muitas vezes em um
ritmo mais rápido para cada repetição, na tentativa de construir um padrão antes de ser
interrompido intencionalmente (tecnicamente é apenas uma mudança no ritmo ou
ocasionalmente o instrumento tocando o baixo, pois eles tendem a fornecer ritmo para
uma música ou são percebidos) e movidos para outra coisa; às vezes a faixa de apoio de
Tetris e a canção folclórica russa Kalinka são bastante conhecidas por usar um drop.
Nem um conceito como uma técnica comumente usada é a estratificação, onde
vários instrumentos (ou mesmo ruído) são tocados uns sobre os outros, com o ajuste
dos níveis de volume para cada um e o tempo deles sendo conhecido como mixagem.
Embora esteja mais associado a vídeo e dublagem de áudio, caso haja um estalo
perceptível quando a gravação de som é iniciada ou o silêncio seja substituído por
algum ruído (geralmente chamado de ruído ambiente) e isso chegue ao corte final, as
pessoas têm uma tendência perceber. Isso não é tão comumente visto em
dispositivos portáteis e consoles mais antigos, mas como os jogos ganharam cada vez
mais dublagens, essa ideia não foi observada tão bem quanto poderia.
Hoje, os consoles de jogos são razoavelmente capazes de reproduzir sons que mesmo um ouvido
treinado não consegue distinguir uns dos outros e, portanto, muitas vezes são ordenadas composições
completas, não diferentes da música independente, mas cantos podem ser cortados.13e hackers de ROM
podem ser chamados para arrastá-lo de volta à forma.
Visão geral do formatoO formato SDAT é um formato de áudio completo, embora não
muito extensível ou compressível, para o mecanismo de áudio fornecido com o DS SDK.
Ele apresenta a capacidade de fazer áudio estilo tracker/midi no formato conhecido
como SSEQ, amostras curtas como SWAV e faixas de áudio completas na forma de STRM e
qualquer outra coisa é um formato auxiliar para permitir que os formatos acima façam seus
trabalho.
ˆSSEQ - o formato tipo tracker (midi) que toca instrumentos de acordo com
uma linguagem de script.
13Há também o caso de jogos que se saem melhor, com um caso notável sendo o guitar hero, onde
Death Magnetic do Metallica foi frequentemente considerado melhor dominado no jogo do que na
versão em CD. Isso é uma espécie de aparte e se move para um território conhecido como guerra de
volume, onde as faixas são amplificadas até o ponto de corte (o ponto em que a amplificação não pode
mais acontecer sem uma perda de informação, também conhecida como normalização) e então, muitas
vezes mais, se apenas alguns instrumentos forem cortados (normalmente bateria) e, muitas vezes, um
pouco mais para garantir que todas as partes da faixa estejam tão altas quanto possível. Bob Katz -
Loudness: War & Peace é um bom vídeo sobre o assunto e Metallica Death Magnetic - How to Lodness
War é um link para a música do Metallica em questão e uma comparação lado a lado das versões.
188
ˆSSAR - arquivos de pequenos sons SSEQ. Geralmente usado para efeitos sonoros
em vez de música.
ˆSBNK – a biblioteca de instrumentos para SSEQ. Os dados de articulação também podem ser
fornecido para determinar como uma amostra é lida (opções de ataque, decaimento, sustentação e
liberação disponíveis).
ˆSTRM - arquivos de ondas mais longas (PCM ou ADPCM) que podem se estender por vários
minutos e inclui faixas completas de áudio vocal. Pode ser encontrado fora do
SDAT
Existem alguns outros formatos que às vezes são vistos junto com eles, incluindo SMAP e SADL,
mas geralmente são considerados sobras do processo de construção. Útil de se observar e, de
fato, a descoberta de um arquivo SMAP desempenhou um papel fundamental na engenharia
reversa inicial do formato, mas geralmente não é necessário fazer nada para fins de hacking. Os
arquivos SMAP podem ser gerados com ferramentas como vgmtoolbox e, embora outras
ferramentas de análise estejam disponíveis, elas geralmente estão em um formato muito legível.
Noções básicas de SSEQSSEQ é uma espécie de linguagem de script voltada para áudio no estilo
rastreador e coisas que as pessoas gostam de fazer lá. Provavelmente está mais próximo do midi
do que alguns dos formatos de tracker mais avançados como o XM, mas ao contrário do midi, em
vez de um instrumento ser ligado e então os instrumentos são chamados com um valor de
duração embutido na chamada.
Os comandos de script nem sempre têm o mesmo comprimento, às vezes contêm uma carga
útil e, portanto, decodificá-los a partir de um ponto arbitrário pode ser um pouco mais
complicado do que simplesmente ler coisas. No entanto, você pode obter uma decodificação de
texto completo do formato usando sseq2mid e a opção - l (você pode querer canalizá-lo para um
arquivo de texto com >>sometext le.txt) e o VGMtoolbox também fornecerá a mesma saída (tem
sseq2mid como parte do conjunto de ferramentas).
Isso produzirá algo como
SEQ_BGM_C_01.sseq:
00000000: 53 53 45 51 | Assinatura | SSEQ
00000004: FF FE | | Desconhecido
00000006:0001 | | Desconhecido
00000008: CE 0F 00 00 | Tamanho do arquivo SSEQ | | 4076
0000000C: 10 00 | Desconhecido
0000000E: 01 00 | | Desconhecido
189
00000024: 93 02 D7 05 00 | Faixa aberta | Faixa 03 às 000005F3h |
00000029: 93 04 EF 06 00 | Trilha aberta Faixa 05 em 0000070Bh |
0000002E: 93 05 23 0B 00 | Pista aberta Faixa 06 em 00000B3Fh |
00000033: 93 06 A8 0C 00 | Abrir trilha Faixa 07 às 00000CC4h |
00000038: 93 09 F9 0D 00 | Faixa aberta Faixa 10 às 00000E15h |
0000003D: C7 00 | Monopólio Poli (0)
0000003F: E1 69 00 | Tempo | 105
00000042: 81 2D | Mudança de programa | 45
00000044: C0 40 | Frigideira |0
00000046: C5 0C | Faixa de curvatura de | 12
00000048: C6 40 afinação | Prioridade | 64
0000004A: CA 00 | Profundidade de modulação |0
0000004C: CB 10 | Velocidade de modulação | 16
0000004E: CC 00 | Tipo de modulação | Tom
00000050: CD 01 | Faixa de modulação |1
00000052: E0 00 00 | Atraso de modulação |0
00000055: C1 7F | Volume | 127
00000057: D5 7F | Expressão | 127
00000059: C0 4D | Frigideira | 13
0000005B: 48 6E 0B | Nota com Duração | |C 5 [72] vel:110 durante:11
0000005E: 80 0C Descansar | 12
00000060: 47 6E 0B | Nota com Duração | |B 4 [71] vel:110 durante:11
00000063: 80 0C Descansar | 12
00000065: 48 6E 0B | Nota com Duração | |C 5 [72] vel:110 durante:11
00000068: 80 0C Descansar | 12
0000006A: 43 57 0B | Nota com Duração | |G 4 [67] nível:87 Duração: 11
0000006D: 80 0C Descansar | 12
0000006F: 45 62 0B | Nota com Duração | |A 4 [69] nível:98 Duração: 11
00000072: 80 0C Descansar | 12
00000074: 47 6E 0B | Nota com Duração | |B 4 [71] vel:110 durante:11
00000077: 80 0C Descansar | 12
00000079: 48 6E 0B | Nota com Duração |C 5 [72] vel:110 durante:11
Também está disponível uma decodificação gráfica no VGMtrans, mas a edição não é
realmente possível no VGMtrans.
Sendo uma linguagem de script bastante simples, você pode alterar o que
quiser da maneira que o mecanismo for capaz, com um dos hacks mais comuns:
o loop, que será abordado mais tarde. Opções de alto nível estão disponíveis
onde você converte coisas de midi para SSEQ e usa loopings ordenados por
vários programas, no entanto, é razoavelmente fácil de fazer manualmente e
permite uma maior variedade de métodos.
ˆTons/instrumento
190
ˆManipulação de volume e andamento.
Emuladores e loopbackO método mais fácil e muitas vezes o mais grosseiro; tem três
vantagens principais: você pode silenciar trilhas de áudio em emuladores (e se você for
criativo com hardware de cheats também), você pode editar a ROM para reproduzir o áudio
na ordem que desejar com hacks de nível de sistema de arquivos e também funciona no
Ocasionalmente, apareceu um formato personalizado que você não deseja fazer
engenharia reversa. Desmume já apresenta recursos de captura de áudio há muito tempo.
191
SSEQ2midiamo emu
O método mais antigo que tentou decodificar o formato SSEQ em outro
formato. Ele tentou aproximar os bancos/lógica padrão dos controladores
midi e funcionou bastante bem na maior parte, mas as coisas não soaram
exatamente como nos originais.
O uso é apenas linha de comando e aqui está a saída do uso:
sseq2mid (opções) [input-les]
opções:
ajude a mostrar esse uso
- 0 noreverb definir 0 para reverberação enviar
- 1 1loop converter para 1 loop (sem loop)
- 2 2loop converter para 2 loop
-d loopstyle1 Pontos de loop estilo Duke nukem (Evento 0x74/0x75) loopstyle2
- 7 FF7 Pontos de loop estilo PC (Meta texto "loop (início/fim)" log colocar log de
- euconversão
- m modificar-ch modifica o canal midi para evitar o canal de ritmo
____ sseq2mid [20070314] por loveemu
Existem também ferramentas de conversão STRM e SWAR disponíveis no mesmo
autor.
NDSSNDEXTBaixar espelho
Tecnicamente chamado de NDS Sound Extractor, ele geralmente é chamado pelo nome
do exe le (NDSSNDEXT) e é uma ferramenta independente para extrair arquivos de áudio
DS. Muito parecido com o SSEQ2midi e alguns aspectos do VGMtrans, ele tenta aproximar
os sons originais, mas de uma maneira diferente do SSEQ padrão, que frequentemente
teve melhores resultados do que o SSEQ2midi original e também converte arquivos SWAR
por padrão. É apenas linha de comando e o uso é bastante simples
192
caixa de ferramentas vgmPagina inicial
Você também precisará encontrar o kit decodificador relevante (testpack.nds do
Caitsith2) que não está incluído no download padrão.
CRC32
FB16DF0E
MD5
3D902DED2E237D9D0A329E3BC8C0A577
SHA1
7B23ABA82BA2957B3D5FC12B4FA99F02DA6FF766
Os arquivos DLS da VGMtrans são muito úteis, por isso permanecem até hoje, mas em muitos
aspectos o VGMtoolbox é o melhor método disponível para extração. Assim como os formatos de
áudio anteriores, os métodos de reprodução na verdade usam uma emulação do hardware de
som do DS (plugins compatíveis com foobar estão disponíveis no vio2sf), embora o lado da
reprodução tenha sido abandonado, portanto não está à altura da emulação do DS mais recente.
193
NCSFEsta foi uma substituição feita em 2013 para atender a algumas das falhas do
antigo formato 2sf. Ainda voltado para o formato SDAT, adota uma abordagem de alto
nível que funciona melhor em alguns casos.
Jogador_de KazowarTópico GBAtemp. Embora seja mais uma ferramenta de reprodução do que
qualquer outra coisa, Kazowar e alguns outros desenvolveram uma ferramenta que
poderia reproduzir o formato de áudio SDAT em hardware DS.
swavtoswarThread GBAtemp. Uma ferramenta simples que pode converter de swav para
swar e de onda em swav.
midi2sseqncs médio para SSEQ. Geralmente o assunto de um tutorial muito mais longo, o
A ideia era que se o SSEQ pudesse se transformar em midi, então o midi poderia se
transformar em SSEQ. Entre uma conversão um pouco problemática e diferentes
bancos de som, a reprodução nem sempre é 100% precisa, mas combinada com
outras técnicas e métodos de injeção, muito pode ser feito e pode ser usado como
um formato intermediário para aqueles que desejam opções de edição de nível
superior. Existem duas versões principais e, adicionalmente, hacks de looping são
comumente feitos em cima disso, embora a versão mais recente do midi2sseq
vinculada ali suporte muito mais nesse campo.
mexerPágina do Github. Mencionado em outra parte do guia, pois apresenta alguns problemas sérios
Definitivamente vale a pena ter habilidades em vários campos se você estiver realizando algum
trabalho de som no DS (SDAT ou outro). É também uma das poucas ferramentas capazes de
inserir arquivos em arquivos SDAT e reposicioná-los adequadamente.
194
ReconstruindoÉ possível reconstruir um arquivo SDAT após uma pequena edição (que alterou o comprimento do
arquivo) e o editor NDS do Kiwi.DS tem uma opção de reconstrução disponível, mas a confiabilidade é, na melhor
das hipóteses, suspeita, então a maioria opta por renomear o arquivo relevante
arquivo para o final do arquivo SDAT e altere vários comprimentos no le (o SDAT
comprimento, o tamanho do bloco de arquivo e a localização na seção FAT).
Mais recentemente, Tinke ganhou certa capacidade de injeção (com a capacidade de
reposicionar), então vale a pena dar uma olhada aqui. O uso é bastante semelhante ao resto do
programa, mas a ordem geral das operações é abrir o arquivo SDAT e visualizá-lo, pressionar
Alterar arquivo, encontrar o arquivo de substituição, repetir conforme necessário e finalmente
pressionar Salvar SDAT.
4.1.2 Outros
Embora SDAT seja muito comum, existem outros formatos usados por vários jogos e que
vale a pena conhecer. Houve algumas ocasiões em que alguns dos materiais SDAT foram
encontrados fora de um arquivo SDAT e se houver um formato de arquivo/empacotamento
no topo do sistema de arquivo nitro padrão, o componente SDAT geralmente será
encontrado separado dele, mas nem sempre (lembre-se do exemplo de embalagem de El
Tigre), mas não é disso que trata esta seção. Com exceção dos jogos musicais, a maioria
dos jogos que usam um formato personalizado será um formato conhecido ou, na melhor
das hipóteses, um simples wrapper para áudio PCM. Midi foi visto no Rhythm N Notes, mas
pode muito bem ter sido uma sobra do desenvolvedor.
http://gbatemp.net/threads/the-various-audio-formats-of-the-ds.305167/
195
Áudio Procyon (formato de áudio DSE)Página de informações do desenvolvedor (japonês)
Algumas notas sobre o formato do projeto Pokémon
Geralmente mais conhecido pela extensão, comumente é conhecido como
SAD (SD e SADL também). Visto em vários jogos notáveis na biblioteca do DS,
incluindo Luminous Arc e Professor Layton. Na prática, é um formato wrapper
para alguns IMA-adpcm. Difere de sistema para sistema, dependendo da
implementação do ADPCM, mas na maior parte é válido. Algumas versões
(principalmente as semelhantes ao Professor Layton) são suportadas pela
biblioteca VGMstream que teve frontends feitos em diversos programas e
adicionalmente é utilizada pelo tinke.
Áudio PCMN+ usou áudio PCM bruto (embora seja mínimo, o formato wave na
verdade fornece mais algumas informações). A importação e exportação com o
Audacity devem ser possíveis.
Arquivos OGGAlguns dos jogos de luta livre oficiais usavam o formato de áudio OGG e
ele é popular em outros sistemas; WWE SmackDown vs Raw 2010 foi a fonte original e,
olhando para algumas das outras informações, é provável que também seja válida
para outras entradas da série. OGG é um formato bastante complexo que surgiu na
tentativa de fornecer um formato de compressão de áudio (e posteriormente de
vídeo) livre de patentes e problemas associados (para uso comercial, você pode ter
que pagar aos criadores de codecs para usar seu formato). VGMtrans pode procurar e
extrair arquivos OGG de formatos de contêiner.
ADH/AHX/ADXO middleware Cri criou uma série de formatos de áudio e vídeo que
ganharam destaque pela primeira vez no Dreamcast, embora tenham sido vistos no DS e
realmente tenham ganhado destaque quando foram usados em The World Ends With
You (TWEWY), que permitiu remixes a serem feitos com algumas ferramentas simples.
DCDEV possui ferramentas ADX2WAV e WAV2ADX que fazem muito do que é desejado, mas
versões mais recentes do Tinke também o suportam, assim como VGMToolbox (Ferramentas
diversas -> Ferramentas de extração -> Streams) e como bibliotecas populares de formatos de
música de jogos já existem há muito tempo com suporte para isso, existem plug-ins e suporte
para ele em vários lugares.
O middleware Cri mantém uma lista de jogos que usam sua tecnologia (observe que nem
todos são de áudio, assim como de vídeo e também de formatos de gerenciamento de arquivos).
Se você quiser saber mais sobre como o formato é implementado e algumas das habilidades
196
dele há discussão sobre o formato multimídia.cx CRI ADX e discussão sobre
multimídia.cx CRI ADX ADPCM.
Deve-se notar que o middleware Cri criou um novo formato ADX visto em
alguns jogos PSP conhecido como ADX2.
Material personalizado adequado Isso geralmente é reservado para jogos musicais que precisam
formatos extras como parte de seu método de operação, embora isso se aproxime dos formatos
de nível. Taiko no Tatsujin utilizou SDAT e um formato customizado conhecido como DSB, os
irmãos Daigasso Band que utiliza um formato conhecido como BDX e outro chamado gak e
possui uma seleção de ferramentas no Yasu soft e informações em Auby.no.
Mais populares no final dos anos 1980 e início dos anos 1990 do que agora, eles estão
intimamente ligados aos jogos e à cultura de jogos/hacking (algumas pessoas chamam
erroneamente o tipo de som que produzem de música keygen, sendo um termo melhor
chiptunes). Existem muitos formatos, mas os grandes são XM, MOD (não confundir com o
formato de vídeo DS ou o formato de vídeo da câmera), IT e midi, embora midi não seja
exatamente a mesma coisa. Como você já viu, a Nintendo criou seu próprio formato de
rastreador chamado SSEQ, que é amplamente utilizado, embora se você abrir jogos GBA e
DS e encontrar outra coisa, é mais provável que você encontre XM ou MOD do que
qualquer outro (não que eles possam ser descartados levianamente). como s3m também
aparece no GBA).
Eles geralmente são editáveis diretamente e as opções variam tanto quanto a criação de
música, mas o Open MPT deve ajudar você a começar.
Se não for um formato de áudio simples (lembre-se de combinar as coisas se você alterá-lo,
a menos que possa demonstrar que funciona melhor ou pior), então é provável que já
tenha sido visto em jogos antes. Da mesma forma, se não for um desses, provavelmente
corresponderá bastante ao hardware.
Além disso, e muito menos como uma regra rígida e rápida, geralmente é o formato SDAT ou
algo totalmente diferente, mas alguns ainda misturam SDAT e seus outros formatos.
197
Desdublagem básica
O undub básico é um hack muito simples; você encontra o arquivo sdat ou equivalente no jogo
fonte (geralmente a versão japonesa) e substitui o arquivo SDAT europeu ou norte-americano
(renomeando se necessário) e reconstrui a ROM se você a descompactou para fazer isso. Se o
formato do som for alterado no caminho (improvável, mas abordado mais tarde), então, na
melhor das hipóteses, será necessário fazer uma nova vinculação e, na pior das hipóteses, uma
reconstrução ou injeção adequada do cabeçalho (ou o script será convertido para o jogo que
abriga a fonte de som).
Vinculando novamente
Ocasionalmente, as ROMs vêm com faixas legais para parte do jogo e algumas que alguém
pode não gostar de ouvir em outros momentos. Um dos primeiros exemplos disso com
uma ROM que foi hackeada para alterar as coisas aqui é o Tetris DS, que tinha uma versão
do Korobeiniki (mesmo que fosse internamente chamado de Karinka (Kalinka), que é outra
canção folclórica russa com som semelhante, às vezes vista em jogos de Tetris ) que só foi
reproduzido em fases posteriores do jogo e, por outro lado, reproduziu uma seleção de
faixas do título original dos irmãos Mario para NES. Saber como fazer isso também constitui
a base para vários outros tipos de hack do formato de áudio SDAT.
Embora você possa entrar no jogo e alterar as chamadas relevantes para as
faixas do jogo, existem duas idéias principais sobre como mudar isso
O método bruto se baseia na ideia de que a maioria das trilhas não se desviará do banco
padrão do jogo, então tudo o que você precisa fazer é encontrar os marcadores de
localização e tamanho do arquivo que deseja alterar e daquele para o qual deseja alterá-los
e substituí-los. como apropriado. Depois de ter os dados relevantes, isso geralmente pode
ser feito com 20 segundos de copiar e colar.
Existem todos os tipos de métodos, mas o passo zero é descobrir quais faixas você
deseja editar e substituir, o que geralmente é feito copiando o áudio relevante,
embora, assim como os nomes de empréstimo normais, muitas vezes possam ajudá-
lo.
Você poderia gerar um arquivo SMAP se quisesse, mas uma saída de algo como
Crystaltile2 é frequentemente igualmente útil
198
O método bruto vê que os endereços relativos e os valores de tamanho contêm as
informações relevantes
Agora, ou porque você leu o valor do SMAP, leu-o do próprio arquivo (na
localização 20 hex para 4 bytes há um ponteiro para a seção FAT) ou
simplesmente procurou por FAT em ASCII (todo arquivo SDAT o terá).
199
Indo para um editor hexadecimal
007C
20A1
80 francos suíços
.....
200
O método mais complexo leva em conta a ideia de vários bancos e irá alterá-los
também, caso contrário o jogo pode tentar jogar com um banco diferente, o que poderia
muito bem ser uma cobertura muito interessante, por assim dizer, mas talvez não seja o
que você está procurando. aqui.
Na leitura do Crystaltile2, a coluna final possui alguns dados que correspondem à
informação relevante para o arquivo, aproximadamente da mesma maneira que um
arquivo SMAP.
Os significados reais para usar a mesma terminologia das especificações SDAT do
kiwi.DS estão em ordem: banco de números, volume, canal, pressão, pressão polifônica,
pressão polifônica. FileID que não é necessariamente o mesmo que o número do arquivo
(leID e número do arquivo podem diferir entre seções como você pode ver em um arquivo
SMAP). O que é um ag e o que é apenas informação é discutível, mas assim como os
tamanhos e localizações no método de religação bruto, isso realmente não importa, desde
que seja a versão correta.
No exemplo SEQ_SEN_P.SSEQ era o arquivo em questão. Ele contém
informações sobre isso na seção INFO, que você pode pesquisar ou ler em 18
hexadecimais.
Agora, INFO não é tão bom quanto FAT, mas ainda está dentro dos domínios de
copiar e colar leves e, assim como todo o resto, INFO tem uma seção de cabeçalho e
uma seção de ponteiro antes da seção de dados real.
A seção do ponteiro está em 40h (tecnicamente existe um ponteiro, mas deve
estar sempre em 40h, pois não há nada variável antes dele), a primeira entrada é o
número de arquivos e você pode multiplicar e calculá-lo (se você estiver fazendo um
programa que você provavelmente faria), mas o valor depois é o ponteiro para o
201
primeira entrada, então use-a.
Você terminará com algo parecido com a imagem a seguir (observe que, para
facilitar a leitura, o endereço foi alterado para o início do bloco INFO)
202
Neste caso, não importa, mas os arquivos SWAR contêm as representações em forma
de onda de instruções e efeitos sonoros; no entanto, eles estão um pouco separados do
resto do SDAT e precisarão ser tratados separadamente. Felizmente, além dos ponteiros
relativos, eles são arquivos bastante simples e todos os dados nos arquivos estão contidos
nos próprios arquivos, portanto não há necessidade de editar coisas além dos ponteiros.
Injeção
Com a remoção de dublagem, a substituição completa do SDAT, um pouco de fatiamento dos
arquivos (ao contrário da substituição completa, permitiu que pelo menos parte do áudio original
permanecesse) e a religação indicando que o SDAT era um formato bastante resiliente, o próximo
passo foi tentar a injeção de outros arquivos no o jogo. Muito disso é bastante óbvio se você tiver
uma apreciação básica do formato SDAT, mas mesmo assim é um exemplo.
Phoenix Wright 2 substituído por uma faixa Phoenix Wright 1 está na ordem do dia
aqui. O áudio do primeiro jogo é frequentemente considerado de primeira qualidade e o
segundo jogo deixou grande parte do áudio clássico para o desgosto de muitos, então aqui
a injeção será usada para transformar a faixa do segundo jogo em uma, como ouvida no
primeiro jogo.
Muito bem, o VGMtrans permite a reprodução no local, então
BGM070 no segundo jogo é usado como faixa de objeção (Phoenix Wright Justice
para todas as faixas 7/objeção se você for procurar)
BGM002 do jogo original usado (uma faixa também conhecida como Phoenix
Wright ~ Objection! 2001)
É claro que existem várias maneiras de abordar isso, mas como um arquivo está sendo
substituído por outro, a coisa óbvia a fazer é substituir um arquivo pelo outro.
203
A substituição básica do arquivo por tinke já foi abordada, mas aqui está
como será o Phoenix Wright Justice for All SDAT
Nome e localização da pista que deseja desaparecer e da pista que está sendo usada para
substituí-la. Com as coisas conhecidas, bastam alguns cliques básicos... provavelmente será
reproduzido, mas não soará nada parecido com o original. Isso ocorre porque o formato SSEQ
não é independente e, neste caso, possui três arquivos auxiliares (veja a caixa inferior esquerda).
204
arquivo é bastante tedioso e prolixo, então outra música será sacrificada e a biblioteca de
samples que ela usa será usada para armazenar o arquivo necessário; o bônus aqui é que
existem alguns exemplos de voz para idiomas diferentes do inglês que podem ser
observados.
Voltando ao assunto em questão, a faixa SE0B8 é o sacrifício hoje e a substituição é bastante
simples, mas agora vem o truque de reatribuir as bibliotecas de samples. Tal como acontece com
a maioria das coisas no hacking de ROM, existem algumas opções, mas a maneira mais fácil que
não danificará o resto do arquivo além do sacrifício que de outra forma não seria utilizado é a
escolhida. O próprio arquivo do banco controla quais notas se parecem com o SWAR, mas ele faz
referência à seção INFO do cabeçalho SDAT, então essa é provavelmente a melhor coisa a ser
editada.
Após a seção de informações do SSEQ vista anteriormente e uma para o SEQARC, vem a lista de
arquivos associados aos bancos
205
Amostra do arquivo SMAP (infelizmente, leID está em decimal aqui, mas 181 dez = B5 hexadecimal)
206
Substituindo o segundo 0000 por A300 (ipa como de costume)
Criação e injeção musical fazendo Injeção de outra fonte significa apenas ferramentas
um SSEQ ou algum outro como midi2SSEQ que reconhecidamente
embora existam algumas das mesmas armadilhas das ferramentas SSEQ2midi originais
(instrumentos diferentes levando a um som diferente), no GBA algumas pessoas criaram
uma biblioteca de instrumentos a partir do controlador midi padrão e permitiram que onde
alguns no DS usam o O formato DLS que o VGMtrans (e o editor de curso MK DS) pode criar
para orientar o Anvil Studio a fazer as coisas (os arquivos DLS do VGMtrans e do MPT aberto
apresentam alguns problemas). Além disso, esse looping é algo comum para áudio
rastreador/sequenciado e até mesmo para alguns arquivos de onda que precisam ser
resolvidos. Existem várias maneiras de fazer o loop e algumas das versões posteriores do
midi2sseq suportavam looping ags de certa forma.
A substituição do áudio rastreado/sequenciado por áudio baseado em ondas não foi realmente
tentada, pode funcionar, pois o SDAT parece chamar com base nas listagens de arquivos mais do que
qualquer outra coisa, mas as informações que ele também carrega podem atrapalhar.
Desdublagem adequada/complexa
Observe que muitas vezes, se um undub falhar, é mais provável que seja culpa da ferramenta/
processo reconstruir a ROM depois de descompactada, mas ocasionalmente a ROM
207
as imagens mudam de layout entre regiões e geralmente não para melhor. Para
esses poucos, você pode ter que vincular novamente o arquivo de forma que ele
seja reproduzido de maneira aceitável no jogo localizado, mas há outras
ocasiões, como Spectral Force Genesis, que teve dublagem (nada menos no
formato AHX) no jogo japonês. mas perdeu-o ao sair do Japão; aqui seria ASM
adicioná-lo de volta ou, mais provavelmente, tentar traduzir o jogo obtendo a
tradução oficial e colocando-a no jogo japonês (Suikoden Tierkreis tinha um hack
que fazia exatamente isso como parte de uma dublagem). Megaman ZX é um dos
primeiros exemplos de jogo que ficou um tanto destruído ao ser localizado, então
pode ser interessante de se ver também.
14Apesar da combinação/opção dos botões L e A, o jogo dos EUA acabou retornando algum
tempo depois que esta seção foi escrita. Nesse ponto foi observado que 020e0200 na memória da
versão americana da ROM continha um valor/ag. Mantendo-o em 00 hex (o cheat básico do
formato Action Replay é 220e0200 00000000 ), ele sempre tocava japonês, 01 hex era o valor
usado para inglês e todo o resto ainda era inglês. O mais interessante é que se mudasse durante
o tempo de execução, as vozes também mudariam.
208
Um bom desenvolvedor deixou extras em 3710 (é a voz presumivelmente do vídeo da E3 que
dizia disponível no outono). De qualquer maneira, como arquivos STRM, eles são efetivamente
arquivos de onda completa e podem ser ajustados como um hack de religação convencional ou
injeção, se você realmente quiser. Para tornar a vida mais interessante, embora nem todo o áudio
dublado esteja lá e enterrados entre os quase 1600 efeitos sonoros estão algumas seções
sonoras (divididas muito bem em BGM e efeitos sonoros aqui). Eles se alinham principalmente
com o intervalo de 380 hexadecimais a 560 hexadecimais (conversão ndssndext) de
WAVE_SE_ALL.SWAR (3665 no arquivo SDAT principal), que também desejará ser remapeado de
acordo, o tipo de arquivo SWAR é bastante básico e todos os dados estão contidos dentro os
arquivos que ele abriga, em vez de qualquer cabeçalho, então o maior problema é descobrir o
que é o quê (infelizmente faltam nomes no SWAR).
Edição SSEQ
Comandos de edição são ocasionalmente úteis, então aqui algumas notas serão alteradas em um
arquivo, o cabeçalho será alterado para efetuar uma mudança de velocidade e então um loop será
adicionado em outro com representações de imagem das formas de onda resultantes para cada uma
sendo mostrada.
209
o fundo e fornecendo algum áudio de apoio. Um desses minijogos apresentava
personagens Zelda em um modo de missão rápida com o clássico som de vitória de Zelda
quando você conseguia, no entanto, havia algumas notas que saíam como batidas de
bateria depois dele, como uma introdução para o jogo que tocava quando rasgado.
Foto VGMtrans (ignore o destaque posterior, pois ele quebra mais tarde, embora o
detalhamento real trabalhado à direita esteja OK).
Existem algumas escolas de pensamento aqui, sendo as duas principais: para que
servem essas outras faixas? e apenas edite as notas. Se fosse apenas para ripar, eles são
de fato mixados para pelo menos um hit, então um simples corte em um editor mais
convencional não funcionaria, remover faixas provavelmente ajudaria (na verdade,
convertê-lo para midi e remover alguns dos canais posteriores faz exatamente isso ), mas
isso é mais um exemplo de técnica do que os resultados finais neste ponto.
Há algumas coisas a serem observadas aqui, embora a principal seja que o som clássico de
sucesso de Zelda é bem conhecido e tem quatro notas, o que significa que tudo após as primeiras
quatro notas pode querer ser eliminado.
O comando C700 significa que é polifônico (as notas podem acontecer ao mesmo tempo,
C701 significa monofônico) e como os acordes podem ser construídos a partir de várias notas
tocadas ao mesmo tempo, simplesmente apagar tudo após quatro notas pode não funcionar.
Mesmo assim foi feito e tudo depois de quatro notas teve seus valores de duração substituídos
por 00 ou alterados para esperas com duração 0.
Na imagem acima, isso significa que tudo após 204B80 foi substituído de
acordo para dar
210
A boa notícia é que isso realmente removeu as batidas de bateria do final
do sample, mas mudou as coisas para pior e parte das cordas foi o que ficou
(versão editada na parte inferior)
211
Editando mais uma vez, mas sabendo que as batidas da bateria têm 5 batidas
e o som do zelda tem quatro batidas; isso levou à edição da faixa 5, que ficou
perfeita. O teste clássico para tais coisas é inverter o segundo sinal e reproduzi-
lo, o que destaca quaisquer diferenças ou, no caso de duas faixas idênticas,
cancela a faixa principal e deixa apenas as diferenças, deixando apenas as
batidas da bateria.
212
Mudança de velocidade do Tetris DS KorobeinikiUm bom ponto de partida para hackear
áudio são as informações do Crystaltile2 SDAT.
Mesmo no visualizador SDAT, clicar duas vezes em um arquivo no Crystaltile2 define a janela
do editor hexadecimal para o local em questão, mas se não, existem várias outras ferramentas
que podem ajudar e se você decidir alterar o comprimento do arquivo (lembre-se que existem
saltos/ramos que podem ser quebrado) outras ferramentas já foram abordadas para ajudar aqui.
Alguns, no entanto, consideram-no um pouco rápido demais (e é um pouco mais rápido do que
muitas versões clássicas de tetris), portanto, alterar o andamento é adequado. E1BE é isso. E1 hex
é o comando para tempo e BE (190 decimal) é a carga útil, então foi alterado para algo um pouco
mais lento em 78 (120 decimal), o que pode ser um
213
um pouco lento, mas proporciona um resultado muito claro. Aqui nenhum dos outros tinha um
comando de andamento, mas a repetição é bastante fácil.
Os arquivos wave resultantes (versão modificada mais lenta claramente na parte inferior)
Embora seja perfeitamente possível fazer isso com um arquivo wave, fazê-lo em tempo real
no hardware do DS levaria isso ao limite, onde apenas modificar uma peça sequenciada de áudio
não é apenas fácil, mas também é atendido.
Tetris DS Korobeiniki em loopA certa altura, o loop era feito principalmente para aqueles que
injetavam arquivos personalizados que foram inicialmente convertidos para midi ou que nunca
começaram a vida como um SSEQ, no entanto, as versões mais recentes do midi2SSEQ suportam
múltiplos looping ags e adicionarão coisas ao SSEQ resultante de acordo. Isso significa que hoje
isso é feito em grande parte para hacks de estilo de melhoria ou para aqueles que portam
214
Arquivos SSEQ entre jogos. Os métodos aqui normalmente envolviam a adição de comandos
fictícios que poderiam ser substituídos por um loop ag.
Embora a música em si seja um clássico para este exemplo, os primeiros compassos
são tudo o que se deseja.
215
4.1.6 Áudio GBA
A Nintendo forneceu um formato para os desenvolvedores de GBA usarem, na verdade
muitos o fizeram (nos círculos de hacking de ROM é geralmente conhecido como Sappy) e
havia algum suporte para outros formatos de rastreador de uma seleção de empresas
(Krawall e Apex Audio System sendo dois notáveis exemplos de alternativas). Por causa de
alternativas e alguns outros motivos, ele não chegou tão perto de dominar a plataforma
GBA quando comparado ao formato SDAT para o DS. Dito isto, definitivamente vale a pena
dar uma olhada se você estiver tentando extrair sons de um jogo GBA. Sappy é um formato
de estilo sequenciado/rastreador e é o principal método de áudio para a maioria dos jogos
GBA, mas com um pouco de pensamento do tipo onda
216
arranjos de áudio podem aparecer (na verdade, Golden Sun acabou adicionando dublagem
como um hack).
Muitas das informações de hacking de áudio do GBA para jogos com formatos
sentimentais são específicas da ROM, mas essa lista inclui a maioria dos títulos populares
para hacking (pokemon, re emblem e golden sun sendo especialmente bem representados)
e muitas ferramentas tentarão escanear um jogo para o.
Viçoso
Download do Filetrip (ambos os garfos principais)
O nome da ferramenta básica de extração de áudio GBA. Existem três linhas
principais para ele, com 1.6 sendo o padrão e Sappy 2005/2006 sendo uma versão/
fork posterior que não é usada tanto quanto poderia ser, mas há um fork adicional na
linha de mod Sappy.
Os 200? line tecnicamente tem a capacidade de inserir áudio, mas muitos preferem a
edição e inserção manual. Ele possui algumas habilidades de mapeamento para que jogos
com mapeamentos de áudio personalizados soem melhor quando são reproduzidos (as
saídas de linha 1.6 para o formato midi). Embora o formato de áudio DS SSEQ tire uma boa
dose de inspiração do formato, ele não é semelhante o suficiente para fazer muitas
comparações amplas além de ambos terem comandos e conceitos comuns ao áudio
sequenciado/rastreado.
Capturas de tela dos mods 1.6, 2006 e 2006
217
Visão geral rápida do formatoCópia de Romhacking.net das notas de áudio sentimentais de
Bregalad
Bregalad (que fez os hacks de restauração de áudio do Final Fantasy, entre outras
coisas) escreveu uma boa visão geral do formato.
midi2GBA Ocasionalmente conhecido como mid2AGB ou midi2AGB, ele começou como SDK oficial do
parte do ó GBA e, portanto, não está vinculado aqui. Provavelmente as principais ferramentas
além do sappy, que é usado para hackear áudio GBA, pois é muito capaz de
transformar arquivos midi em áudio sappy. Deve-se notar que o kit de ferramentas
não parece lidar bem com metadados e observou-se que várias faixas midi usam
faixas fictícias como um tipo de metadados.
218
Ripper de áudio GBADownload de viagem de arquivo
A Atrius criou uma ferramenta simples, um tanto parecida com o saptapper acima, que
visa extrair áudio para reprodução 1:1 (neste caso, no programa GBAjukebox do autor.
OutrosExistem várias outras ferramentas que podem ser usadas, como o LoopMaker do
blackonix, bem como diversos plug-ins/wrappers para sappy e midi2agb, geralmente
voltados para jogos específicos.
2. injeção sentimental
3. injeção manual
Existe um programa geralmente chamado de tr.exe que vem como parte do kit de
ferramentas Mid2Agb/midi2GBA que pode injetar áudio estilo sappy de arquivos midi e
retornar um arquivo ROM de reprodução básico (reproduzir áudio em hardware real é uma
coisa bastante popular para faça como geralmente é muito preciso). É provavelmente
também a melhor ferramenta de conversão de midi que o GBA possui (principalmente
porque faz parte do SDK). O método típico que você verá é resumido em converter com
tr.exe (geralmente depois de tornar o arquivo midi o mais básico possível), retirar o
cabeçalho do GBA e injetar em alinhamento equivalente na ROM do GBA antes de alterar
algumas dicas para prosseguir. onde as coisas precisam estar. Isso é prolixo, mas funciona
muito bem e é um dos métodos mais preferidos para jogos que são hackeados mais
extensivamente (se isso é bom ou não, depende da sua perspectiva).
O Sappy inject (geralmente com as versões posteriores do programa) funciona como parte do
mesmo kit de ferramentas que existe mid2agb.exe que cria arquivos .s que o sappy suporta para
fins de injeção. As versões anteriores do sappy 200X não eram tão estáveis, então o método tr.exe
foi desativado.
A injeção manual funciona da mesma forma que a injeção sappy, mas com elementos do
primeiro método (normalmente através do editor de músicas de Zahlman). Ele também pode ser
usado em jogos que o Sappy não suporta (supondo que você não queira adicionar suporte para
ele).
De qualquer forma, 10 faixas por midi é o limite sugerido e no caso do tr.exe ele não
aprecia a inclusão de faixas extras de tipo de metadados que alguns editores/ferramentas
de criação de midi gostam de adicionar.
XXXXXXXXXXXXXXXXX
219
Hacks de áudio GBA notáveis
Embora alguns hacks tenham sido observados em outros lugares, em sua maior parte, este
documento não é uma coleção de hacks, mas aqui há alguns hacks que valem a pena fazer
engenharia reversa se algum dos outros e os dois últimos títulos tiverem alguma
documentação específica do jogo bastante extensa incluída.
sol DouradoAtrius trabalhou muito com o formato de áudio sentimental e Golden Sun
foi a ROM base para grande parte dele, incluindo a adição de dublagem ao jogo. Dublagens
de voz lideradas por hackers aconteceram no passado, mas são muito raras e
excepcionalmente em sistemas de baixo consumo de energia que não possuem
sistema de arquivos para seu código.
Emblema de fogoO emblema de fogo no GBA viu vários hacks de áudio. Uma visão
geral de alguns dos trabalhos de hacking de áudio e um pouco de hacking geral de áudio
pode ser vista em feshrine.
4.2 Vídeo
O GBA e o DS são capazes de reproduzir vídeo e, como tal, vários jogos usam vídeo full
motion de várias formas em seus jogos. No DS, pelo menos uma empresa (agora
propriedade da Nintendo) chamada Mobiclip criou um formato usado em muitos
jogos.
Formatos de vídeo de engenharia reversa são, em muitos aspectos, uma das coisas mais
difíceis que você pode fazer no hacking de jogos. Felizmente, nos dispositivos portáteis você tem
muita sorte, pois eles geralmente não são poderosos o suficiente para permitir alguns dos
métodos complexos que compõem um formato de vídeo moderno como o H264, ou mesmo um
formato legado verdadeiro como o MPEG1. Lembre-se de que o reprodutor de mídia homebrew
do DS, conhecido como moonshell, usa MPEG1 para o vídeo como parte do formato DPG e havia
portas de MPEG4 ASP, também conhecido como xvid/divx, para o DS também. O GBA também viu
um codec das mesmas pessoas que criaram Caimans. Se você quiser um pouco de história então
este post tem um pouco mais.
O tradicional neste momento é apontar os métodos de codificação do MPEG1 e dizer que o MPEG1
teve um rascunho final há mais de 20 anos no momento em que este artigo foi escrito (final de 1992).
Agora, se você se lembra dos gráficos 2D simples e de como apenas alterar a largura de um único bloco
pode alterar drasticamente as coisas, considere tentar trabalhar de trás para frente por meio de
métodos de análise a partir daí para obter imagens e, em seguida, construir um codificador compatível;
algumas coisas do DS são um pouco mais simples que isso, mas não muito.
220
Como a maioria dos trabalhos de hacking em dispositivos portáteis não permite
codificação ou edição de vídeo, é necessário haver soluções alternativas para fazer as
coisas. Se apenas copiar o vídeo é o seu desejo, a maioria dos emuladores tem opções de
gravação e você pode aumentar as coisas aqui alterando os arquivos de vídeo, então se um
jogo tiver uma cena final ou algo assim, você pode reposicionar a sequência de introdução
para reproduzi-la e copiá-la de lá ou injete-o em um jogo mais adequado para ripar e, pela
mesma lógica, se você estiver removendo a dublagem / deslocalizando um jogo, muitas
vezes você pode simplesmente inserir o vídeo equivalente e encerrar o dia. Se você precisar
adicionar algo ao vídeo, o método tradicional usado em alguns hacks de DS funciona com o
fato de que o vídeo é apenas imagens 2D no final, então você pode adicionar imagens,
legendas e sprites ou sobrepor algo; este é um hack bastante complicado e provavelmente
exigirá algum conhecimento de montagem (é parte da razão pela qual o hardware foi
discutido na edição gráfica), a menos que o jogo em si já tenha imagens colocadas sobre o
vídeo que você possa subverter.
Assim como a engenharia reversa de um formato de vídeo é uma tarefa difícil, o ato de criar
um novo é igualmente ou até problemático (e isso antes de você entrar em patentes de software
que incomodam praticamente qualquer pessoa que queira entrar no mundo da codificação de
vídeo ) os desenvolvedores/empresas de jogos tenderão a comprar um disponível nas prateleiras
para usar em um jogo.
Observe que o vídeo visto no DS e nos jogos em geral frequentemente não tem
áudio embutido, então você pode ter que encontrar outro método para extrair o
áudio ou considerar isso se você fizer um hack básico de relink/repoint ou
undublagem o jogo (especialmente se a duração do vídeo mudar).
Os codecs sem perdas tiram vantagem disso e os codecs com perdas vão um passo além e
optam por perder algumas informações com base nesses princípios. Há uma grande
variedade de métodos e níveis de uso desses métodos que só ficam mais complexos com o
passar do tempo, mas os vídeos são normalmente divididos em quadrados (quantização -
se você viu o que normalmente é uma cena de alta ação dividida em quadrados onde a
ação deveria estar, este é o motivo) ou tratada como uma forma de onda (codificação
wavelet usada em codificadores como Dirac e Snow, mas há
221
era um programa homebrew do DS chamado DSVideo que o usava). Além disso, embora
um quadro não mude muito de um para o próximo (em média), a codificação entre quadros
não é obrigatória e apresentações de slides gloriosas são bastante comuns em sistemas de
baixa potência (o Motion JPEG é normalmente dado como exemplo), mas alguns têm foi
visto no DS também.
Embora agora uma subsidiária da Nintendo antes disso tenha vendido seu
software de codificação de vídeo para uso no gameboy advance e ele se tornou parte
do Nitro SDK, tornando-se o codificador de vídeo padrão para jogos de DS, seu uso
não é tão difundido quanto os gostos do formato de áudio SDAT, pois nem todo jogo
tem vídeo e nem todo jogo que usa vídeo o usa.
Alguns trabalhos provisórios de engenharia reversa foram conduzidos (thread
GBAtemp) e parece ser um formato bastante simples, sem muitas das armadilhas dos
formatos mais sofisticados. multimídia.cx tem mais alguns e notas que usouBtrancar T
runcaçãoCodiando.
Existem também algumas versões do padrão circulando em diferentes jogos (VX se
tornou mods), então isso precisará ser levado em consideração quando chegar a hora.
4.2.3 RAD/Bink
Geralmente visto com a extensão .bik, é provavelmente o formato de vídeo de jogo de
computador mais conhecido e é usado em todos os lugares no PC e em consoles
domésticos, bem como em consoles como PSP; você pode até baixar um codec de
reprodução simples do site do desenvolvedor. O DS tem suporte para isso, mas não
foi visto em muitos jogos, provavelmente porque o Mobiclip estava intimamente
ligado ao SDK e os jogos que o usaram eram em grande parte títulos multiplataforma.
Para este documento, alguns jogos da lista foram testados em decodificadores padrão
e funcionaram.
Olhando para os vários métodos de saída e informações de vendas, parece que eles
suportam uma decodificação bastante bruta de espaços de cores codificados em YV12;
YV12 é um subconjunto do método de codificação de cores YUV que, em vez de representar
todas as três cores componentes, como era comum até agora, optou por dividir as cores
resultantes em luminância e cromiância, o que permite alguma compactação em escala de
cinza.
Saída de atrai.bik (um vídeo completo tirado de uma câmera em oposição a uma
animação renderizada e armazenada como um arquivo de vídeo) do jogo Greg
Hastings Tournament Paintball Maxd tem informações de
Vídeo: YV12 512x192 12,00fps [Vídeo] Áudio:
PCM 22050Hz estéreo 705kbps [Áudio]
Ele também tem cerca de 8,36 megabytes e outros vídeos usam áudio com taxa de
bits mais baixa.
Após o upscaling, um bloqueio significativo pode ser visto, sugerindo uma medida
de quantização e, como a saída de áudio diz, há áudio no arquivo, embora
222
não se sabe se é intercalado ou deixado como blocos (em alguns casos, é mais fácil para
um sistema, mas leitura/busca não contígua não é algo em que o DS seja bom). O
cabeçalho parece começar com BIKi em ASCII e ser seguido imediatamente por um valor de
32 bits informando o comprimento menos 32 bits, que presumivelmente é o comprimento
do carimbo e o tamanho combinados (lembre-se de que muitos valores ignorarão o
cabeçalho ou partes dele).
?20 parece indicar presença de som (credits.bik não o possui no arquivo onde
outros o possuem) e pode haver um sinal mono/estéreo.
100 e C0 aparecem no formato e parecem indicar as dimensões 256 e 192 (o
decodificador informa altura dupla para todos os vídeos, incluindo aqueles de outros
consoles).
Bik também foi visto na missão Impossível com algumas taxas de quadros diferentes
(20fps para logo.bik, 10 para win.bik e 12 para loss.bik).
É provável que seja de especial interesse o beep.bik, que tem a seguinte saída como informações
sobre ele e estava em grande parte em branco.
Vídeo: YV12 512x32 1,00fps [Vídeo] Áudio: PCM 16384Hz mono 262kbps
[Áudio]
4.2.4 Criware
Mais comumente conhecidos como fornecedores do formato de áudio ADX e AHX,
discutidos há pouco, eles também têm formatos de vídeo que são em grande parte
wrappers para vídeo MPEG de vários formatos, com o áudio sendo obtido pelo
formato AD *.
223
5 Lógica do jogo
Texto, gráficos e som contam muito e muito pode ser feito apenas editando-os (na
verdade, jogos inteiramente novos/diferentes foram feitos usando apenas esses
recursos), mas eventualmente você vai querer mudar a forma como o jogo se
desenrola ou o opções do jogador dentro dele e para isso recorremos à edição da
lógica do jogo.
1. Tudo em um
Primeiro, o All in one não precisa ser estático ou grande, pois você pode apenas precisar
fazer algo como definir o ponto de partida/entrada de seus inimigos e então o jogo
assumirá o controle a partir daí. Para todos os jogos, exceto os mais simples, ele
rapidamente se torna incontrolável, a menos que você crie um formato complexo, para
esse fim ele está caindo em desgraça com os outros assumindo o controle. Se você estiver
editando jogos antigos de estilo arcade ou retrocedendo a eles, ainda poderá encontrá-los
e o GBA/DS não tem falta de retrocessos e versões de jogos antigos.
Camadas de itens de interesse tenderão a ser divididas em categorias (o plano de
fundo, o nível em si, os inimigos, os extras...) e empilhadas pelo motor de jogo (na
verdade, este é um recurso que muitos truques de caminhada através de paredes
usaram e no verso quantas áreas ocultas são feitas). Um jogo pode dividi-lo ainda
mais e definir o nível usando um sistema de grade (cada peça recebendo coordenadas
ou mesmo definindo-o inteiramente bloco por bloco em um determinado padrão).
Deve-se notar também que os jogos 3D às vezes tentam detectar colisões pelos
próprios modelos 3D e suas localizações; você certamente teria visto ou
experimentado uma ocasião em que um personagem de um jogo caiu do chão ou de
uma parede. Porém outras vezes eles definem o que passa por outro arquivo,
geralmente gerado ao mesmo tempo que o modelo de nível é exportado, sendo os
arquivos .KCL vistos nas versões recentes do Mario Kart um ótimo exemplo disso, tais
coisas também podem ser usadas para permitir um nível de controle mais alto (na estrada Mario e
Exemplo de kart há estrada, completamente fora fora da estrada o suficiente para desacelerar
você está abatido), pois tentar calcular isso de acordo com onde as texturas são mapeadas seria
um pesadelo; determinados jogos ainda tendem a não quebrar automaticamente para uma nova
linha de texto, então imagine quanto mais seria necessário para calcular jogador/inimigo
224
locais relacionados às texturas. Deve-se notar que os jogos 2D costumam usar coisas
como o OAM para ajudar a controlar onde as coisas estão no nível.
A geração processual era originalmente um conceito bastante comum, com muitos
jogos notáveis como Elite usando-o com grande efeito. Ele caiu em desuso por um tempo,
com apenas alguns usos notáveis, como masmorras em jogos de rastreamento de
masmorras, como Diablo e Dungeon Siege. Agora está recebendo mais atenção à medida
que as pessoas estão aprendendo a restringi-lo (você tem alguns pontos separados por
uma determinada distância, alguns extras e então você gera tudo entre esses pontos,
certificando-se de ter uma rota entre eles no jogo) e usa isso para melhorar outros jogos (as
muitas armas da série Borderlands são um bom exemplo). No que diz respeito à
manifestação como os outros tipos de níveis mencionados nesta seção, então a geração
processual pode significar apenas que quando o jogo carrega, ele cria o arquivo e o
armazena na memória como um dos outros métodos para uso durante o jogo. Dinâmico é
reservado para coisas como GTA, que não modelam uma cidade inteira, mas apenas a área
a uma determinada distância do jogador, no entanto, isso se estende a coisas como
inimigos que só começam a se mover quando você está fora da tela, um truque que
remonta a os primeiros dispositivos.
As listas vinculadas são geralmente reservadas para jogos de aventura como myst, romances
visuais, jogos de quebra-cabeça/quiz e trabalhos semelhantes, mas aspectos delas podem
aparecer em qualquer coisa em pontos como jogos onde eventos posteriores dependem de suas
escolhas anteriores no jogo (uma história ramificada) ou você conversa com as escolhas em um
jogo, o sistema subjacente pode ser um pouco assim.
Deve ser mencionado neste ponto que listas vinculadas são na verdade um termo de
programação; cada evento é chamado de nó e contém os dados usados no evento e a
localização do próximo nó, que pode estar em qualquer lugar e pode ser alterado em tempo de
execução com bastante facilidade. Listas vinculadas e suas variantes (listas e árvores duplamente
vinculadas, para citar duas das mais comuns) certamente existem como níveis de jogo e
armazenamento que um jogo pode usar para lembrar escolhas, no entanto, muitos níveis que
usam esses tipos de técnicas estão, na prática, mais próximos para matrizes (itens decodificados
um após o outro) ou scripts semelhantes ao Mágico de Oz e áudio SSEQ.
Além de tudo isso, há eventos com script que são muito comuns e estão cada vez mais
comuns. Aqui os eventos acontecerão quando certas condições forem atendidas (certas
condições e locais/áreas em um nível).
Em comparação com muitas outras áreas de hacking, a prática de hackear níveis não recebe
tanta atenção até que um jogo tenha ferramentas feitas para analisar/visualizar níveis, neste
ponto a quantidade de edições disponíveis para um jogo muitas vezes explode. Naturalmente,
jogos de plataforma, RPGs com elementos de plataforma, jogos de estratégia e jogos de corrida
são os alvos principais para esse tipo de coisa (Pokémon, Zelda, Metroid, várias versões de jogos
de plataforma Mario, títulos de corrida Mario, Advance Wars, Fire Emblem e jogos de plataforma
Sonic são os alvos principais ao longo dos anos) com todos os tipos de hacks sendo feitos
(refazendo jogos antigos, criando modos de corrida contra chefes, ajustando níveis, modos
difíceis até conversões totais onde o jogo original está praticamente destruído, exceto pelo motor
e um novo jogo feito em cima de que). A maioria deles tem exemplos de coisas que você pode
estudar em profundidade e deve-se notar que a simples troca de arquivos pode ter efeitos
interessantes; na verdade, a troca de níveis pode facilitar a engenharia reversa, como será visto
no exemplo da engenharia reversa de um nível.
Uma técnica interessante que decolou no PC, mas já existe há algum tempo, é observar
a memória do jogo, pois os níveis podem ser transmitidos ou podem precisar ser
manipulados durante o jogo e o nevoeiro da guerra é especialmente bom para isso. Isto
225
funciona bem nele também, mas assim como alterar a largura do seu editor hexadecimal
para ver padrões em ponteiros, texto e muito mais, você pode alinhar despejos de memória
(novamente, eles podem mudar, o que traz arranjos de tipos para fazer truques) e se você
colori-los pode tornar as coisas ainda mais aparentes.
A seguir está uma lista de algumas ferramentas mais bem desenvolvidas para o DS e
algumas explicações de código-fonte/formato com um exemplo prático na próxima seção.
Existem muitos outros editores que você pode encontrar para vários jogos se
pesquisar.
Mário 64O DS recebeu uma versão aprimorada da versão N64 de Mario 64 e editores de
níveis eventualmente apareceram para ela.
226
5.1.2 Técnicas de edição de níveis
Com alguma teoria básica coberta, é hora de alguns estudos práticos. Existe uma seleção de
métodos para fazer engenharia reversa de níveis e a engenharia reversa compartilha muitos
conceitos entre ideias, mas os níveis têm alguns com probabilidade um pouco maior de serem
úteis. As técnicas incluem, mas não estão limitadas a
ˆVisualização de memória (de preferência em tempo real, mas savestates podem ajudar com isso)
ˆAnálise de bytes
ˆCorrupção e alteração
ˆNo jogo ou em outros editores de níveis (no PC, as ofertas para editores de níveis são
geralmente voltados para a usabilidade e longe da capacidade real por um bom
motivo, mas eles ainda podem editar coisas)
ˆAnálise de tamanho
ˆSubstituição/troca de arquivos
Exemplo trabalhado
227
Muito bem, o jogo fornece arquivos chamados nds000.lvl e nds001.lvl no
diretório de níveis.
Ambos começam com algo semelhante, têm muitos petiscos de 0,4 e 1 (não faço
ideia se é um sistema de 4 bits) e depois terminam em algo totalmente diferente que
é realmente mais curto no caso de nds001.lvl, embora o nível seja um pouco mais
simples. A grande diferença entre os níveis é a adição do perigo em movimento (o
editor de níveis chama-o de drone de chão). Este pode ser o E que não está presente
no nível original.
Ainda um pouco de corrupção para ver se os níveis são realmente o que afirmam ser. Corrupção
guiada para este, em vez de simplesmente substituir coisas por dados aleatórios, então um monte do
que era principalmente 0 em 10 hexadecimais, embora 1F hexadecimal tenha sido substituído por 4
hexadecimal. Dando
Essa seria toda a linha inferior e outra na parte inferior esquerda do nível.
Voltar ao menu principal fornece
228
O fato de ser uma cópia do próximo nível e não haver ouro, informações sobre armadilhas,
informações sobre perigos, locais de portas ou interruptores nas imagens, parece indicar um design de
nível em camadas (analisar e remover dados é possível, mas não é ideal para níveis baixos). sistemas
alimentados), mas falaremos mais sobre isso mais tarde.
Substituir o hexadecimal 20 por hexadecimal 2F desta vez por uma sequência de 2
hexadecimais alterou a próxima linha e parece indicar um design de nível de baixo para
cima (primeiras linhas primeiro) e algo como uma abordagem de bitmap em vez de
coordenadas. A edição um tanto estática é boa e revelaria muito se fosse realizada, no
entanto, a visualização da memória provou ser demais para ficar longe.
Um despejo completo e uma busca pelo novo hexadecimal 44444422222222 (não garantido
que funcione de forma alguma, mas não compactado no jogo significa provavelmente também
não compactado na memória RAM) resultou em um único local em 37CFD0 ou na memória DS
0237CFD0.
15Ter algo avaliado repetidamente sem a necessidade de uma reinicialização completa é muitas vezes
desejável para quebrar a criptografia e leva a algo chamado ataque de repetição. Deve-se notar que os
savestates não são muito úteis aqui, pois têm o hábito de sobrescrever a memória e, ao fazer isso, você perde
suas edições. Da mesma forma, desmume parece armazenar ROM suficiente na memória para que uma simples
reinicialização do sistema não seja suficiente e você terá que fechar e recarregar a imagem agora editada.
229
Algumas experiências disseram que cada linha no nível tinha cerca de 18
hexadecimais, embora pudesse variar entre os níveis. 00 parecia ser o estado em
branco/padrão e zerar tudo para o que seria 188 hexadecimal no nível original (onde o
E0 está localizado) deixou uma tela em branco. Outras experiências disseram que 4
bits não era o caminho a seguir (jogar com o editor de níveis fornece uma grade de 8
por 8, portanto 64 opções potenciais, embora algumas delas parecessem duplicadas e
talvez rotações) e talvez até 8 bits não fosse, ou pelo menos o nível pode mudar
dependendo do que está próximo a ele ou do alinhamento.
Antes de prosseguir com os itens, agora que estamos munidos do conhecimento de que as coisas
podem ter 18 hexágonos de comprimento. Observando nds001.lvl em um editor hexadecimal, excluindo
a lista de objetos presumidos, a seção de cabeçalho e colorindo alguns dos pixels diferentes de 0 antes
de exibir a imagem resultante.
UnidO editor de níveis também fez menção ao potencial dos itens e o trabalho
acima parece confirmar que eles estavam em outro lugar, mas verificando de
qualquer maneira a seção de nível totalmente zerada (aqui presume-se que seja onde
os itens 0,4 e 1 deixaram de ser a norma ) ainda tinha itens e continuou a zerar as
coisas após o final do nível, quebrou-o e removeu alguns dos itens.
230
Como tudo o que sobreviveu ainda estava no lugar, mas a localização mudou, isso diz
coisas
A mudança na cor é estranha, mas não totalmente inesperada, pois o editor de níveis
permite uma mudança na cor de fundo, no entanto, como há lixo na parte superior da tela
e não há barra de cronômetro, é mais provável que o jogo tenha detectado um tempo
limite que pode ser outra razão para a mudança de cor.
A falta do ninja pode ser explicada pela posição inicial provavelmente sendo
eliminada junto com os níveis mais baixos de peças de ouro.
A mudança de tudo provavelmente poderia ser explicada se a origem de um sistema de
coordenadas fosse alterada e, o mais interessante de tudo, a diagonal dourada do canto
inferior esquerdo, agora deslocada para o lado direito do nível, tornou-se uma plataforma
dourada e horizontal (chamada de Bata no editor).
Outra edição mais precisa causou um travamento (estranho, já que o estado
corrompido na imagem à direita acima pode ser encerrado por meio de comandos
normais do jogo e retornar ao menu) e outra edição deixando intactos os bytes iniciais
da seção de itens feita para um trabalho nível, mas com algumas alterações (3 bytes
em 1D4 alterados de 4947 1C para 0000 00 ou cerca de 4C na seção de localização de
itens) bagunçou tudo depois que a porta mudou de lugar e criou novos itens.
Suspeitando de um problema de alinhamento, o único 00 dos três bytes foi alterado
de volta, criando a imagem à direita.
231
Mesmo que a corrupção não tenha revelado a localização do layout do item, o material
de pré-nível não está nem perto o suficiente para armazenar a quantidade relevante, como
a localização do ouro que sai do final do arquivo de nível e os dados um tanto diferentes lá.
Da mesma forma, o próximo nível (nds001) possui poucos itens e é menor.
84 peças (em 24 grupos) foram contadas como uma porta e um interruptor, embora seja
notado que a porta no editor de níveis parece ter um interruptor como parte do acordo, portanto
podem não ser dois itens. Em algum lugar ao longo das linhas que definem o tempo para cada
nível, se de fato houver algum, também pode ser necessário encontrar.
A informação mínima necessária é provavelmente o próprio item, a coordenada x
e a coordenada y. Além disso, no editor de níveis, os comportamentos dos drones
podem ser especificados (4 drones e 4 comportamentos cada), mas um adicional
campo em uma matriz/matriz inteira que provavelmente contém centenas de itens em vez de
apenas definir outro item tende a significar que apenas definir outro item vence, a menos que ao
adicionar uma entrada à matriz/matriz o código seja alinhado a um determinado valor em caso
que geralmente vence. É claro que só porque é uma boa ideia não significa que o programador
realmente fez isso (novamente, mais do que um pouco de hacking de ROM é sobre corrigir bugs e
erros que os desenvolvedores originais cometeram).
O ouro é o item mais comum, então o passo lógico seria fazer uma distribuição do
arquivo, no entanto, nada apareceu aqui à primeira vista e considerando que os
grupos de ouro podem ser itens diferentes, você pode ter que considerar isso.
Com dois bytes só há espaço para 66 itens do primeiro nível e isso provavelmente
significa que clusters foram escolhidos se esse fosse o caso (estranho porque o editor de
níveis permite definir peças únicas como faz em outros lugares).
Corrupção, pequenas alterações e reflexão sobre como alguém deveria fazer isso estão se
tornando rapidamente problemáticos, mas o episódio 0, nível 4 (nds004.lvl) tem um padrão de
repetição simples
232
O nível em questão (seção destacada sendo os dados do item)
Um ponto de partida
Alterar alguns dos valores hexadecimais de 53 para 54 hexadecimais resultou em uma pequena alteração
(as minas cronometradas azuis no nível inferior; os conceitos vistos pela primeira vez na pesquisa relativa
também podem ser aplicados aqui), mas outras alterações nos mesmos valores fizeram tudo
233
desde quebrar o nível até travar completamente o jogo (instantaneamente ou rodar
por um segundo e depois parar). Isso provavelmente aponta para o formato feito com
bits por vez, em vez de bytes, ou talvez, em vez de coordenadas, era um parente
distante da lista vinculada, onde a entrada anterior define a próxima.
53 hexadecimal = 0101 0011 binário 54
hexadecimal = 0101 0100 binário
234
Alterando o início de C0 para E0 (1100 0000 a 1110 0000), ignore o temporizador.
235
O fato de alterar uma única peça não é bom para a teoria do agrupamento, embora seja
tecnicamente a peça superior mais à direita que foi alterada (não há nenhum item que esteja ao
mesmo tempo mais alto e mais à direita). Uma única alteração de valor (nota não binária) altera a
localização em 25 pixels, com a direita no nível sendo positiva. Isso se refere mais aos itens
definidos de baixo para cima, linha por linha (mas com a capacidade de pular linhas, ao contrário
dos obstáculos) e da esquerda para a direita. FE, no entanto, colocou-o acima das peças de ouro
mais à direita (uma mudança de 57 pixels), mas mudar para F simplesmente moveu mais 25
pixels de lá para a direita, então talvez um tipo diferente de agrupamento. Este padrão manteve-
se até que o 7 foi escolhido, altura em que aconteceu o seguinte
Deve-se notar que 7 não tem a parte superior como 1 onde os outros tinham
e olhando o que aconteceu com a imagem, a parte superior de ouro parece estar
na parte mais à direita do nível novamente (7 hex = 0111 binário, F= 1111
binário).
Mudar a parte F fez todo tipo de coisas malucas semelhantes às acima, incluindo
adicionar itens invisíveis, coisas ao mapa que não estavam no nível, mas é desejável
encontrar a peça de ouro anterior, pois isso daria uma pista sobre o comprimento de
valores. Também não é totalmente certo que os itens sejam agrupados por si próprios
(pode ser ouro em uma seção, minas em outra, outros itens em outra).
As coisas não ficaram imediatamente aparentes aqui, então voltando ao editor de níveis. A
pesquisa de cheats foi usada para ver o que mudou quando coisas foram adicionadas ou
removidas de um local (uma pesquisa básica de diferença neste caso).
020DFB00 parecia ser um limite de contador/ponteiro (alterá-lo para um valor mais baixo removeria
itens adicionados posteriormente)
020E0840 parecia ser o local da caixa de seleção [para
finalizar]
236
O início dos níveis3 hexadecimal a 9 hexadecimal sempre pareceu ser ??
306945EA1004 onde ?? poderia ser 00,01,02,03,05,07,08 e 09, sendo 03 o mais
comum de longe e 09 visto apenas em nds194, nds175 e nds165 e 08 uma vez em
nds182
00 a 02 hexadecimal parecia ser **$$ onde ** geralmente era 84 ou 04 e
foi alterado para 7C em nds052, nds026 e nds160
$$ costumava ser 7F ou 80.
Além disso, como os itens permaneceram no lugar, parecia que havia algo que
possivelmente indicava a seção do item, que geralmente é onde o cabeçalho entra.
Nenhuma indicação aparente, mas poderia muito bem ser um valor calculado.
[para terminar]
TemporizadoresOs cronômetros nos níveis eram de interesse, então uma seção de item
foi transplantada de outro nível e a diferença foi preenchida com zeros. Ele não criou uma
réplica perfeita dos itens, mas sim uma réplica aproximada, pois havia itens adicionais; o
cronômetro, entretanto, era o mesmo do nível original, implicando, portanto, que não foi
armazenado no arquivo de nível. Como um teste adicional, um nível foi totalmente
substituído por outro, mas o cronômetro do nível permaneceu o mesmo do nível original;
era diferente quando o nível de doador aumentava, mas certifique-se disso quando mudar
as coisas, pois há poucos sentimentos piores do que perceber que você perdeu muito
tempo por causa de uma coincidência.
5.1.3 Estatísticas
Embora os jogos possam ser construídos sem usar este conceito, é certamente bastante fácil ver como
as estatísticas/características de itens, inimigos e jogadores podem ser usadas para proporcionar uma
melhor experiência de jogo, se puderem ser usadas em um jogo ou adicionadas a um, então eles podem
querer ser editados. Os hackers de ROM ficam então preocupados com os métodos de armazenamento
e as limitações dessas estatísticas.
As limitações geralmente são coisas bastante óbvias, como se você achar que sua estatística
está definida como um valor de 8 bits, você terá 256 combinações possíveis no máximo, a menos
que você mude a forma como tudo funciona, o que pode ser bastante difícil. Na verdade, as
únicas vezes que isso é realmente tentado é para converter jogos de codificações de 16 bits para
codificações de 8 bits, ou se o jogo usar um formato de banco de dados mais convencional e uma
técnica de acesso para a informação em questão que permita tal nível de manipulação.
A forma como as estatísticas são armazenadas é tão grande e variada quanto qualquer
outra coisa que você viu neste documento; essas coisas podem ser tabelas binárias básicas
(extremamente comuns em jogos mais antigos, versões deles e não incomuns em títulos
mais recentes), algo parecido com um arquivo CSV (linhas de informações separadas por
vírgulas), páginas de linguagens do tipo XML ou mesmo o próprio XML, propriamente dito.
bancos de dados (não tanto em dispositivos portáteis, mas em consoles domésticos e jogos
de PC podem e usam arranjos do tipo SQLite o dia todo) ou em cenários menos divertidos
enterrados no próprio código do jogo (pode não ter sido assim na fonte código, mas
compiladores são coisas maravilhosas e às vezes otimizam o código para você).
Os bancos de dados podem ser independentes, podem ser tabelas de valores vinculadas,
podem usar ponteiros, podem assumir valores alinhados (semelhante a como você
provavelmente alinhou os nomes e ponteiros ao separar um formato de contêiner/arquivo),
podem ser dispersos através de um arquivo, pode ser calculado (8 bits significa 256 combinações
mas nada impede que você tenha um intervalo de 1000 a 1255 ou mais comumente
237
para coisas como saúde, onde você multiplicará um valor de constituição por uma determinada quantia
e adicionará um pouco para obter um valor de saúde) e muito mais.
Resumindo, eles são geralmente uma espécie de banco de dados, então a programação de
banco de dados entra em vigor, isso não será abordado aqui, pois é muito longo e provavelmente
não é tão útil, pois os jogos tendem a ser bastante simples (eles tendem a ser pequenos e
estáticos o que significa nenhum benefício e potencialmente até desvantagens no uso de
conceitos de banco de dados de alto nível), bastante lógico (embora não conte com a presença de
valores simples) e improvável de ser realmente ofuscado ou criptografado.
Antes de passar para o assembly hacking, experimente o método do tipo de
exercício de pensamento; você pode ir muito longe apenas trabalhando no que faria
(240 inimigos com um nome, 5 estatísticas por peça que não vão além de 255, cada
um desses inimigos está ligado a outro, dos cinco elementos do jogo é fraco para
quantos deles?). O que você faria e o que um programador acabaria fazendo pode não
ser tão diferente, ou pelo menos eles teriam o suficiente em comum para que você
pudesse começar a descobrir o resto de maneira semelhante a como preencheria as
partes que faltam. de uma codificação de texto.
Deve-se notar que muitas enciclopédias/bestiários do jogo terão sido feitos a
partir do banco de dados antes do jogo ser montado, então não espere que as
coisas mudem lá se você mudar o jogo, ou mesmo o contrário e esperar que as
coisas mudem lá para mudar o jogo .
Por outro lado, a IA do jogo pode muito bem estar sintonizada com as estatísticas
originais do jogo e alterá-las pode tornar a IA padrão muito pior do que no jogo
padrão, no entanto, abordaremos isso mais na seção IA e se você apenas quiser para
multijogador com humanos, então continue.
pipian.com ierukana tem um bom exemplo de estatísticas de Pokémon.
O conceito já existe há algum tempo, mas nos últimos anos parece realmente ter decolado.
Jogos como Pokémon, Medabots RPG, bem como RPGs mais convencionais, muitas vezes
têm zonas definidas para inimigos ou batalhas predefinidas, ou no caso de medabots você
estará lutando apenas contra medabots feitos das mesmas partes. Você então descobrirá
uma maneira de alterar isso. Observe que muitos jogos podem fornecer algo para você
observar para influenciar isso. Exemplos clássicos seriam uma área de conservação onde
você visita inimigos antigos, um bug como os blocos marinhos de Pokémon, uma arena de
alguma forma ou até mesmo certos tipos de multiplayer. Da mesma forma, um jogo pode
mudar os monstros em uma área para uma sequência ou algo assim e isso pode ser muito
valioso. Alternativamente, pode ser muito simples e você só precisa influenciar o resultado
do gerador de números aleatórios; se um jogo tiver um bestiário, então se os inimigos de
uma área semelhante tiverem números semelhantes, poderia muito bem ser um gerador
de números aleatórios contido (gere-me um número aleatório entre 4 e 6, ou mais
provavelmente gere-me um número aleatório normal e adicione ou multiplique para
chegar ao número deste mapa). Cabe a você decidir se deseja tentar impedir que chefes
finais de jogo possam aparecer em uma área inicial, embora essas coisas possam ser
divertidas.
5.2 Compressão
A compactação é vista em todas as áreas de hacking de ROM e continuará a ser vista à medida que os
desenvolvedores enfrentam limites de largura de banda e espaço de armazenamento ao mesmo tempo.
238
tendo mais ciclos de CPU à sua disposição. Existem inúmeras permutações e
implementações, mas em termos gerais, os dois tipos básicos serão sem perdas e com
perdas. Ambos os tipos são nomeados por suas características dominantes; sem perdas
capaz de compactar e reconstruir uma cópia exata do arquivo original e com perdas pegar
um original e perder algumas informações esperançosamente irrelevantes ou menos
perceptíveis na tentativa de tornar os dados menores (no som, por exemplo, o ouvido
humano certamente não será capaz de ouvir acima de 30KHz, então se você capturou tudo
até 50KHz e depois perdeu todo o som acima de 30KHz16você economizará algum espaço
ao custo da perda de dados). Existem coisas que visam a compressão em tempo real
(comunicações em tempo real de dados gerados no local, como uma chamada de voz) e
coisas que visam a compressão para armazenamento e posterior transferência e esta
última é o que o hacking de ROM tende a lidar mais.
A compressão não é perfeita, por isso, se você se deparar com uma compressão de
engenharia reversa, não se surpreenda ao ver uma seção comprimida com o mesmo
comprimento da peça que ela comprime (embora esta também possa ser uma técnica para
permitir um alcance maior por meio de uma referência dupla ) e também não se
surpreenda se você vir uma maneira de melhorar ainda mais a compactação dentro e fora
dos limites do formato.
Vários jogos de DS usam métodos com perdas para codificar áudio, gráficos e, às vezes,
vídeo. Na maior parte, esses serão métodos conhecidos como JPEG para imagens, vários
formatos de áudio e formatos de vídeo relacionados a jogos (embora uma descrição
completa dos formatos de vídeo VX e mods, também conhecidos como act imagine/
mobiclip, ainda esteja pendente) com a parte mais complexa disso sendo que o formato
existente está envolvido em alguma coisa. Provavelmente, isso é melhor, já que a
compactação com perdas se baseia em uma série de áreas, incluindo áreas tão distantes
quanto a psicologia e a biologia, e tende a gerar formatos complexos.
16Lembre-se de que a teoria da amostragem significa que você amostra com o dobro da taxa que deseja representar,
portanto a taxa de amostragem para representar sons de 30KHz precisa ser 60KHz.
239
Filtragemdependendo de como você olha, isso não é realmente uma compressão
e mais uma codificação, mas o hardware GBA e DS tratam uma versão dela como
uma compactação (funções do BIOS para lidar com isso), então está aqui. O formato
gráfico conhecido como NDS 1bpp (1 bit por pixel) usa a ideia de que mesmo que
eventualmente mude para 4bpp se você tiver uma imagem de duas cores
(geralmente uma fonte), você pode ter certeza de que cada pixel terá um de dois
valores e como tal, pode ser transformado em um simples 1 ou 0.
Chamadas SWI (compressão suportada pelo BIOS)O GBA (e o DS) apresentam alguns
algoritmos básicos de descompressão como parte do BIOS prontamente acessível, isso significa
que qualquer coisa pode chamar as funções do BIOS para descompactar os arquivos na memória.
Naturalmente, os emuladores de grau de depuração (e, nesse caso, de uso mais geral) podem
observar e listar quaisquer chamadas de BIOS e permitir que você tenha uma ideia aproximada
de onde os arquivos estão, como eles são compactados e até mesmo quando estão em
240
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
dependendo do jogo para o qual foram acessadas, muitas ferramentas de compactação podem usar essas listas
para extrair arquivos.
VRAM e WRAM segurosA VRAM é a memória RAM de vídeo e a WRAM também é conhecida
como memória principal ou memória RAM de trabalho. Com o carrinho GBA sendo mapeado na
memória no GBA, as coisas poderiam ser copiadas diretamente para a VRAM por vários métodos,
mas a VRAM carregava uma restrição de que todos os endereços de destino tinham que ser
alinhados para 16 bits (WRAM poderia fazer 8 bits). Isso também significava que qualquer escrita,
digamos de descompressão, deveria ocorrer 16 bits por vez e exigia que métodos de
compactação seguros de VRAM fossem concebidos e implementados.
1. Registros SWI
2. Montagem/locais conhecidos
3. Pesquisa de compressão
241
Avanço NLZ-GBA (que funciona como um editor gráfico)
unLZ-GBA
242
Cristaltile2
Crystaltile2 também oferece suporte para pesquisa de compactação e também pode fazer isso
para anúncios personalizados de vários formatos. Ele está disponível no menu suspenso de
ferramentas da janela do editor hexadecimal, mas esteja avisado que a descompressão em massa
tende a fazer o programa travar se encontrar muitos resultados falsos para compactação.
243
Lz77Restrutor 2
Uma ferramenta relativamente nova, mas agradável; você pode querer brincar com a opção lters,
pois ela pode restringir por ponteiros, larguras, tamanhos e também lidar com texto (usando
tabelas personalizadas, se necessário).
Compressão DSA compactação decolou no DS, mas devido ao fato de ter sido
razoavelmente bem implementada, poucas empresas criaram seus próprios formatos de
compactação personalizados no sentido tradicional e apenas usaram os do SDK ou outros
formatos conhecidos, então deixou de ser a ruína dos hackers de ROM para apenas uma
pequena irritação.
SWI, também conhecido como chamadas de BIOSO BIOS do DS tem suporte para várias
formas de compactação e uma novidade no DS em comparação com o GBA foi a ideia de retorno
de chamada que ajudou a contornar o fato de a ROM do DS não ser mapeada para a memória (o
gbatek o chama de lento, mas permite que arquivos maiores sejam descompactados sem o
desenvolvedor deve fornecer uma função de verificação para ver quando as peças foram
descompactadas e a próxima pode ser inserida nela).
244
ˆLZSS - mais ou menos o que o BIOS GBA/DS usa e outros
métodos de compactação vistos no uso do GBA e do DS.
ˆTipo 10 - este é o clássico sistema de BIOS baseado em LZSS seguro para GBA WRAM.
pressão e apenas um suportado por chamadas SWI.
ˆHumano - (tende a ter 20 anos para começar) onde LZ e a maioria dos outros estão
preocupado com o valor imediato à sua frente e se estiver relacionado a uma
seção anterior, considera o arquivo como um todo e atribui às seções mais
comuns um valor de referência mais curto e às menos comuns um valor de
referência mais longo.
ˆYaz0. Nomeado devido ao carimbo mágico ASCII com o qual começa e outro não
tendendo a ser visto no DS. Em muitos aspectos, é uma versão ligeiramente
aprimorada do RLE (não o suficiente para ser chamado de LZ adequado), mas é visto
bastante no Gamecube, no Wii e nos portáteis da Nintendo posteriores.
Frequentemente usado com o formato de arquivo u8 que o u8tool pode analisar.
Existe um formato relacionado para o BIOS chamado Yay0.
245
Várias ferramentas foram feitas para lidar com a compactação, sendo duas das
maiores no que diz respeito ao DS, os compressores DSDecmp e Cues GBA/DS,
embora existam vários métodos para efetuar a descompressão em arquivos.
ˆBandeiras. Vistos principalmente no LZSS, estes são pequenos sinais inseridos na compressão
hora de informar à ferramenta de descompressão se uma seção está compactada ou não.
Algumas implementações colocam marcas aqui e ali no arquivo por vários motivos, embora
geralmente como uma mensagem para o decodificador pular esta seção ou anotá-la para mais
tarde.
O componente de instrução é geralmente uma operação de duas partes mescladas em
uma. Uma parte será o comprimento da string vista anteriormente e a próxima será a
localização dela (seja como endereço ou referência). Desvios comuns do método discutido
acima incluem a ordem de comprimento e localização que pode ser trocada, quantos bits
serão usados para cada um que pode ser alterado, que tipo de alinhamento é usado e
como as coisas são tratadas. Lembre-se de que LZ é muitas vezes apelidado de
compactação de janela deslizante, portanto, ao operar em um arquivo grande (ou quando
limitado a uma instrução de compactação com poucos bits para o componente de
localização), o endereço inicial pode variar durante a descompactação e nem sempre estará
no início do arquivo. .
246
A primeira parte não é estritamente necessária para a descompressão manual, mas é
agradável de ter e bastante útil ao programar uma função de descompressão.
A parte 10 hexadecimal é um ag que indica compressão e a parte 4702 é uma
a versão ipped do comprimento do arquivo original (247 como você pode ver no
janela de cima).
Foi feita uma busca para cada valor 00, pois no LZSS eles (geralmente) correspondem aos ags
para informar à ferramenta de descompressão se ela precisa fazer algo ou não (não para 00). Eles
têm cada 8 bytes neste caso, embora algumas implementações possam usar 16 bytes ou algo
totalmente diferente. Fazer isso poderia muito bem tornar o processo mais longo, mas uma vezele
mais a compactação está longe de ser impecável e o tradeo é útil
para velocidade e facilidade de uso.
Voltando ao tópico as primeiras quatro seções não têm repetições (isso é bastante comum, pois os
o e dá origem ao arquivos ficam menos legíveis com o passar do tempo). Ao decodificar
exclua cada 00 ag ao copiá-lo.
O quinto (destacado), porém, tem ersão da versão repetida. LZSS
difere de algumas outras implementações de LZ por ter o valor pressionado primeiro não com-
(neste caso, um byte) codificado normalmente. O 40 é apenas um ág.
3009 - os primeiros 4 bits disso são quanto deve ser descompactado menos 3 Tornar o
número 3 menor significa que ele poderia teoricamente ter mais 3 bytes um dia e como
o número não será menor que 3 (2 bytes para a compactação ag significa um mínimo de 3
bytes valer a pena), faz sentido começar a contar a partir de 3.
Os segundos 4 bits são 0, tecnicamente estes são os bits mais significativos, mas como o
arquivo é pequeno eles ainda não estão presentes.
Os próximos 8 bits são um a menos que a distância para contagem regressiva (neste
caso, 9 significando A hex), que começa a partir do valor da instrução de compressão (ou,
se você preferir, o valor exato do próximo símbolo não decodificado.
A020
A bytes + 3 = D hexadecimal longo
20 = 21h de volta.
Repita conforme apropriado até le é decodificado.
247
Um aparte sobre edição e visualização de arquivos compactadosEditando um arquivo compactado
arquivo em nível hexadecimal é possível e algumas vezes é tentador fazê-lo, porém você nunca
sabe se um fragmento será usado posteriormente no arquivo, a menos que você verifique (o que
geralmente significa que você descompacta o arquivo inteiro de qualquer maneira) e embora seja
bastante óbvio com texto se você está lidando com gráficos ou uma função que opera em um
nível de bits desalinhado, é pior, então geralmente é melhor descompactar, editar e recompactar.
Da mesma forma, a compactação quando feita em texto geralmente significa que a maior parte dele
ainda é bastante legível (especialmente porque tende a ser alinhada a bytes ou superior) e, em uma
extensão um pouco menor, o mesmo ocorre com alguns níveis e partes iniciais de cabeçalhos (mais ou
menos ags) significado embora torne muitos gráficos quase ilegíveis, muita coisa pode ser vista e
adivinhada sem ter que lidar com a compactação.
5.3 Trapaça
Isso não significa usar nenhuma combinação de botões ocultos/condições de ativação para
permitir um modo de operação diferente do jogo normal, mas sim editar como o jogo funciona.
De todas as áreas com maior probabilidade de ficar um pouco à parte do hacking de ROM, é
trapaça, mas uma apreciação de como os cheats funcionam é muito desejável quando se aprende
pela primeira vez sobre parte da lógica do jogo de hacking e certamente como uma pista para a
montagem.
Classicamente, havia dois tipos de códigos RAM (geralmente chamados de action replay ou
gameshark, dependendo de onde você está no mundo) e códigos ROM (geralmente chamados de
game genie).
Os códigos RAM atuavam na memória do jogo, onde os códigos ROM adaptavam as
solicitações de leitura da imagem ROM para o que o código desejasse.
Os códigos RAM eram frequentemente considerados de natureza mais simples, esta não é
realmente uma avaliação justa, mas devido à enorme quantidade de códigos simples que ele forma
248
de preso. Da mesma forma, os códigos ROM muitas vezes eram capazes de fazer algumas alterações de
grande alcance, alterações que seriam extremamente difíceis de fazer por meio da edição de RAM, e
eram um pouco mais difíceis de fazer, e também não são tão comuns.
Como os códigos ROM/game genie operam na ROM, eles podem ser corrigidos de maneira
muito simples na própria ROM, os códigos RAM precisam de um dispositivo/emulador com
suporte para eles ou um programa para editar o cheat ou conectar o código do jogo para
adicionar um pequeno mecanismo de trapaça. Ter o código executado sobre o código existente é
algo que não é realmente viável para sistemas mais antigos, especialmente de uma maneira
genérica/automatizada. O GBA e o DS apresentam essas coisas, embora o GBAATM e o DSATM
sejam os dois programas principais para o GBA e o DS, respectivamente, o GBA apresenta outras
ferramentas como o GABsharky, mas a maioria dos esforços anteriores foram ofuscados/
suplantados pelo GBAATM. As linhas clássicas foram confusas nos últimos anos, à medida que os
gênios dos jogos se voltaram para códigos de estilo de replay de ação e os dispositivos de replay
de ação também adotaram a edição e injeção de salvamento para vários consoles, além de que as
imagens DS ROM armazenam seu binário de jogo na RAM (eles como os cartões de jogo do DS
não são acessíveis na memória RAM), então alguns dos melhores criadores de cheats usaram
códigos de replay de ação para editar o binário na memória RAM com grande efeito.
Links ÚteisEnciclopédia
ˆMaior que/menor que a pesquisa. Aqui você pode procurar algo maior
ou menor que um valor ou encontrar todos os resultados diferentes de um determinado valor.
249
ˆPesquisa difusa. Aqui você pode anotar tudo pensando em voltar
mais tarde para ver o que mudou. Também pode ser combinado com maior ou
menor que na maioria das vezes. Isto é bastante útil quando você tem uma barra de
saúde ou de cronômetro sem uma exibição direta do valor a ser pesquisado.
ˆPesquisa de intervalo. Nem sempre disponível e factível se você pensar nisso com
maior que e menor que isso procura literalmente valores dentro de um determinado
intervalo.
Códigos e termos exóticosVários dispositivos de trapaça permitem que alguns códigos bastante
personalizados e de longo alcance sejam criados em dispositivos concorrentes. Algumas delas
visam alterar o tratamento interno dos cheats, mas muitas outras podem ter efeitos de longo
alcance. Primeiro, alguns termos que frequentemente surgem
ˆCódigos de slides. Uma técnica usada para gerar códigos para fazer a mesma alteração
para vários locais ao mesmo tempo, geralmente usado se você tiver algo como 30
soldados, cada um com seu próprio valor de saúde e valor de munição e você não
quiser usar 30 códigos.
ˆCódigo mestre. Mais associado a gênios de jogos, onde eles geralmente ignoram
proteção e para dispositivos fraudulentos que precisavam ser configurados para funcionar em determinadas
imagens ROM.
ˆDesacelerar. Coberto mais tarde, mas alguns dispositivos de trapaça permitem que você desacelere o jogo
inundando a CPU.
250
5.3.2 Criação de cheats GBA
O VBA tem uma opção básica de truques que deve estar disponível em quase todas as
versões (notavelmente a versão VBA-SDL-H não, embora se você realmente quisesse,
poderia usar suas habilidades de depuração para fazer algo) e a nova janela do VBA
básico opções de trapaça se parecem.
251
O VBA-H tem algumas opções ligeiramente expandidas em cheats e em outros lugares.
ˆTipo de pesquisa - O valor específico permite que você insira um número no valor antigo
seção. O valor antigo pesquisará os resultados anteriores.
ˆTamanho dos dados - serão analisados valores de 8 bits, 16 bits e 32 bits. Observe que
muitas vezes coisas que aparecem como 8 ou 16 bits no início do jogo (se você estiver
perdendo apenas um pouco de saúde por vez, isso pode aparecer como um valor de 8
bits), o valor pode muito bem usar os 32 bits completos no momento em que tudo é dito e
feito.
ˆInsira o valor - disponível somente quando você tiver selecionado Pesquisa de valor específico.
ˆAtualizar valores - isso atualiza as pesquisas originais para seus novos valores a cada
procurar.
ˆDi er By - (somente VBA H) faz exatamente o que diz e permite que você faça
selecione um intervalo de valores para limitar seus resultados (se você perdeu apenas 7 pontos
de vida, a alteração provavelmente não será um valor completo, apenas capaz de ser
representado por 32 bits)
252
ˆRange - (somente VBA H) novamente faz mais ou menos o que implica e permite
você pode restringir uma pesquisa para incluir ou não apenas um intervalo de valores.
Praticamente a única coisa que falta é uma pesquisa de ponto flutuante, mas esses são
complicados e os valores de aveia raramente são usados no GBA (sem mencionar que
provavelmente surgiriam em uma pesquisa diferente). Também faltam coisas como
funções bit a bit, booleanas e matemáticas, mas se você precisar delas, VBA-SDL-H é onde
você deve procurar.
Isso varia um pouco dependendo da pessoa que está fazendo o cheat. Desmume tem algumas
habilidades de manipulação de trapaça/memória, mas muitos usarão ferramentas como HasteDS e
renegade64 ou ferramentas de uso mais geral para se conectar a emuladores e fornecer habilidades
semelhantes. Muitos outros usarão ferramentas como o kit de ferramentas de treinamento da Datel,
que possui habilidades de depuração bastante extensas e até mesmo carrinhos de cinzas como o
Supercard DSTWO e o iSmart MM terão pequenas opções de criação de truques, embora sua pesquisa e
funcionalidade sejam um pouco inferiores a uma ferramenta adequada para a qual ainda podem ser
usados. truques básicos.
Ele está dividido em algumas telas, embora na maior parte seja bastante óbvio mais
uma vez.
Selecionar tamanho - seleciona valores espalhados por um determinado número de bytes. Observe mais
uma vez que valores baixos podem estar usando tamanhos maiores.
Assinar - não assinado ou assinado.
Selecione o tipo de pesquisa - pesquisas de valor exato para um determinado valor e a
pesquisa comparativa permite pesquisar qualquer coisa (barras de vida e outras coisas sem
valores exatos).
Na pesquisa comparativa > ,<, = e != têm suas médias usuais de maior
que, menor que, igual e diferente.
Talvez de forma contra-intuitiva você tenha que fechar a janela de truques para
que o jogo rode novamente antes de voltar para a pesquisa e refiná-la.
253
EmuhastePágina inicial do projeto Emuhaste
Download de viagem de arquivo
O uso básico é depois de configurar o arquivo inicial para executar o emulador, pressione
snap process. Você não precisa procurar um valor para começar.
Inc(rease) procura um valor que aumentou de tamanho
Dec(rease) procurou um valor que diminuiu de tamanho
Di (erence) procura um valor que mudou de tamanho (para cima ou para
baixo). Equ(als) procura um valor que permaneceu o mesmo.
O comprimento dos dados permite pesquisar por valores de um determinado comprimento.
A pesquisa flutuante não é muito útil no DS, mas está lá e funciona.
Definir intervalo de pesquisa diferente dos outros não é uma pesquisa que limita o valor, mas um intervalo
de endereços.
O menu suspenso de dump de arquivo permite que você despeje a memória RAM principal do DS, que pode ser
usada para ajudar a encontrar códigos de ponteiro.
Na caixa de pesquisa de parâmetros e strings, você pode digitar o valor para nd (até 255 de
comprimento, o que é mais que suficiente para a maioria dos usos). No entanto, isso tem uma série de
opções que você pode usar
S na frente dos números significa que eles são tratados como
decimais R no início da entrada troca o endianismo
$ permitirá que você pesquise uma string.
< permitirá que você restrinja uma pesquisa a um valor menor que o valor colocado no outro
lado (<S40 significará que apenas valores abaixo de 40 decimais serão considerados).
254
> permitirá restringir uma pesquisa a valores maiores que o valor (>S40
significará 39 casas decimais e não aparecerá)
Innnnnnnn-nnnnnnnn restringirá a um intervalo de endereços.
A pesquisa básica de diferenças está disponível usando sinais de mais e menos para especificar a
alteração.
A partir das 4h00, uma pesquisa de disparo automático está disponível. Aqui irá acionar a busca se
um determinado valor de memória for alterado de acordo com o comando
O formato é address:hex que você está procurando:command com vários
comandos disponíveis se você separar por vírgula. Comandos como segue
EQ - igual a
NE - diferente de
GT - maior que LE -
menor que
MS - pesquisa múltipla
Havia uma versão anterior da ferramenta conhecida como pressaDS que permaneceu
por um tempo, pois faltavam alguns recursos na reescrita para emuhaste, mas isso agora
deveria ser coisa do passado.
OutrosA maioria das ferramentas de trapaça são mais ou menos uma classe especializada de
visualizadores de memória, dos quais existem muitos (vários dos editores hexadecimais sugeridos têm a
capacidade de ler a memória do processo)
255
EmuchheatPágina inicial do Emuchheat
Outro programa orientado para no$gba e por um tempo um pouco mais avançado que
as outras opções, por isso se tornou bastante popular entre aqueles que buscam fazer
cheats mais avançados ou reduzir o desnecessário
Cristaltile2Não tanto para cheats, mas pode interagir com no$gba para
recuperar dados VRAM e WRAM. Disponível na opção emulador DS no menu
suspenso do arquivo.
256
Um pouco de saúde foi perdida e o botão de pesquisa foi pressionado
257
Mais alguns pontos de saúde foram perdidos, o que melhorou as coisas, mas ainda não chegou lá
258
O processo foi repetido mais algumas vezes
30608 decimal = 7790 hexadecimal, então 8 bits provavelmente foi uma má escolha, mas como a saúde
estava diminuindo apenas 1, funcionou hoje.
259
Isso levou a 0300060C, selecionando esse endereço e pressionando add cheat
Adicionar um valor FFFF e uma descrição para não esquecer quando outros cheats foram
feitos dá o resultado final como
260
ao lidar com temporizadores que o jogo pode usar em outro lugar) ou ter um
mecanismo de cheats que pode ativar cheats em um determinado momento. O
restante desta seção apresenta alguns exemplos de técnicas vistas ao longo dos anos
e nada impede os jogos de hibridizar métodos.
ˆValores espelhados tendem a significar que o valor está escrito em vários locais (consulte
também dicas abaixo) e se um não corresponder você pode usar os outros ou
travar ou algo assim.
ˆValores verificados. Se você tiver quatro personagens, a saúde total deles pode ser 614
e você pode armazenar isso, o que significa que se a soma total da saúde do
personagem for diferente, algo deu errado.
ˆOs valores calculados são indiscutivelmente um subconjunto de valores criptografados, mas sim
em vez de armazenar uma saúde de 145, você a retira da saúde máxima de
255 e armazena 110. Isso também pode servir para ajudar nos cálculos.
A maioria deles é fácil de contornar, como se você estivesse procurando por saúde infinita,
não importa se você tem uma saúde infinita de 7 ou o valor máximo na maior parte17então,
se você tiver um conjunto funcional de valores, apenas force o jogo a usá-los sempre. Se
você quiser descobrir algo, você terá que observar os valores que mudam, em vez de
aumentar ou diminuir, e descobrir o método usado, que geralmente é facilmente
gerenciado, ou mergulhar na montagem, provavelmente guiado ou inicialmente
direcionado por uma pesquisa básica de truques .
PonteirosEm um jogo de DS, os ponteiros no cabeçalho que todo DS pode ler apontam para
o sistema de arquivos que aponta para um arquivo que aponta para partes do arquivo
o que pode apontar para outras partes do e possivelmente mais (raro, mas
bem possível). Não há nada que impeça as ROMs de usarem métodos semelhantes e, de
fato, vários jogos foram vistos usando-os ao longo dos anos, o que tem vários efeitos,
incluindo cheats que funcionam apenas algumas vezes, cheats que não funcionam
(geralmente graças a uma combinação dos métodos mencionados anteriormente), cheats
que são impossíveis de encontrar por métodos básicos (a maioria dos métodos de cheat
assumem que o valor permanece no mesmo local).
17Se você tiver uma saúde forçada de 7, pode haver um ataque que sempre causa dez danos e,
portanto, mataria seu personagem e talvez mais rápido do que o mecanismo de trapaça pode
acompanhar, esse valor de 7 pode ser menor ou maior que o valor máximo. o jogo normalmente
permite, o que pode significar que você sempre pode recarregar se for uma arma ou sempre usar magia
de cura ou, inversamente, se você tiver dinheiro infinito, mas parecer ter apenas 7 em sua carteira,
talvez não consiga comprar algo. Isso geralmente não é tão ruim quanto, ao fazer o cheat, você conhece
os locais em questão e pode simplesmente jogar/desligá-los e permitir que o jogo gere um conjunto
maior e melhor.
Um bom exemplo disso pode ser visto na versão N64 do Goldeneye, onde mesmo com saúde infinita você
pode morrer em uma explosão grande o suficiente e mesmo com munição infinita você provavelmente sempre
poderá recarregar sua arma.
261
As soluções alternativas incluem encontrar todos os locais que podem ser apontados
(mesmo com ponteiros, muitos jogos farão isso em um estilo round robin) e controlar o lote
(um pouco de força bruta, mas bastante aceitável), você pode tentar ler o ponteiro em um
determinado ponto e reagindo de acordo se o seu mecanismo de cheat for poderoso o
suficiente e você puder forçar o ponteiro a ficar em um local e certificar-se de que o local
fixo agora seja editado.
Ponteiros dentro de ponteiros não são apenas possíveis, mas vistos em diversas ocasiões e
ocasionalmente há jogos com gerenciamento/alocação de memória adequada, portanto, manter
valores antigos nem sempre é a melhor ideia.
Existem algumas ferramentas para lidar com ponteiros para cheats, sendo a mais notável no
DS a ferramenta de ponteiro de Kenobi, na qual você alimenta despejos de memória e os códigos
básicos para obter os códigos completos (ponteiros e os cheats iniciais usados para corrigir o
seu) .
262
Outra boa ferramenta está disponível no kit de ferramentas de hacking do Demonic722.
A ideia por trás disso, caso você precise usar o manual, é que em cada jogo haverá uma
instrução ou valor de memória abordando o local que você está procurando para seus
cheats, e este local referenciando o local variável e é bastante fácil partir daí. É mais fácil e
de fato a maioria das ferramentas deseja usar alguns dumps de jogadas do jogo que usam
locais diferentes (eles são em sua maior parte gerados em tempo de execução/inicialização/
inicialização, então deve ser apenas uma questão de recarregar o jogo salvo, mas é fácil de
testar) por razões semelhantes às de fazer várias rodadas de testes para restringir as
possibilidades ao fazer truques básicos. Na maioria das vezes, a localização do ponteiro é
fixa, portanto, encontrar o que aponta para o local que seria o cheat geralmente resolverá o
problema, embora, novamente, ponteiros apontando para outros ponteiros tenham sido
vistos várias vezes. Da mesma forma, não há nada que impeça um jogo de calcular um
ponteiro adicionando um número simples a um endereço de acordo com a aritmética de
ponteiro no estilo C; tecnicamente, isso é um ponteiro em um ponteiro, mas se o valor base
for usado em vários outros lugares, talvez você não consiga alterá-lo tão facilmente.
Valores duplosEmbora isso provavelmente seja coberto pelos métodos básicos de criação
de cheats e por outras coisas que tornam a vida mais difícil, deve-se notar que alguns jogos
podem manter alguns valores para o que aparentemente deveria ser um único dado. RPGs
são bons exemplos e algo semelhante pode ser visto em algumas versões do GBA Final
Fantasy onde os valores podem ser mantidos, digamos um para a barra de vida, um para o
valor na tela e outro para o valor real usado como base para formar todos os outros. Isso
fica especialmente divertido quando os valores não são apenas exibidos e podem afetar o
que acontece no jogo, pois se você tiver a saúde máxima de acordo com os números, talvez
não consiga usar uma poção, mas o valor interno da saúde significa que você acabará
morrendo. enquanto você está perdendo saúde. Aqueles que tentam segurar os
cronômetros muitas vezes são prejudicados por isso.
Valores de pilha/registroAs ideias por trás dos termos são abordadas em seções posteriores, mas
junto com a memória convencional existem duas outras áreas conhecidas como
263
a pilha (que pode muito bem fazer parte da memória, mas não deve ser considerada como
tal) e os registros que ficam dentro da CPU e, no caso do GBA/DS, é a única coisa que a CPU
pode ler diretamente dentro de uma instrução (naturalmente você pode use a CPU para
manipular a memória, mas é necessária uma instrução separada).
Aqui, os valores podem ser colocados em um registro e/ou na pilha conforme
apropriado e referidos/operados repetidamente antes de serem gravados de volta na
memória quando tudo estiver dito e feito. Existe a ideia relacionada de um ponteiro
específico de função onde toda a saúde, estatísticas e outros serão passados para uma
função por um determinado período (digamos, uma batalha) e operados lá, mas isso não
tende a acontecer no GBA/DS. mas em sistemas mais convencionais (e especialmentemais emsegura
Da mesma forma, foi por um motivo um pouco diferente (certas ações só aconteceriam
quando a saúde do paciente estivesse baixa), os treinadores e cheats do jogo Trauma Center para
DS mudaram isso, então se você errasse com seu bisturi ou similar, a saúde seria redefinida para
total e você pode faça coisas semelhantes para contornar os valores mantidos nos registros. Isso
também funciona para partes da memória que podem mudar de localização e para coisas como
sobreposições (pequenas seções de código que você pode inserir em um jogo para serem
substituídas por outras, mas mantendo a maior parte do código do jogo) que podem nem sempre
estar presentes em tempo de execução.
18As citações estão aí, pois dependendo da pessoa com quem você está falando, um treinador é
obrigado a ter um menu selecionável de algum formato disponível (geralmente no início do jogo), ao
contrário do método descrito a seguir. Em alguns casos, os combos de botões para ativar em um jogo
também permitem que ele conte como um treinador e não como um hack. A distinção tende a ser
menos observada em dispositivos onde é mais difícil criar um menu inicial.
264
requer uma instrução maior. Deve-se notar que para cheats do tipo vidas infinitas há muitas
maneiras de morrer (pense que mesmo em um jogo de plataforma básico como o NES Mario você
pode ficar sem tempo, cair em um buraco, ser atingido por um inimigo e quem sabe se os perigos
e inimigos são duas coisas diferentes) e há muito tempo se vê que os jogos têm muitas funções
que mudam o mesmo valor. É claro que isso pode cortar o outro lado e permitir que você tenha
um tempo infinito em um nível, mas o tempo restante do final do nível para a função de
pontuação ainda pode remover o valor de tempo que uma retenção básica neste local de
memória atrapalharia.
Ainda voltando para Summon Night 2 0300060C
manteve a localização do contador de vida. Existem
duas opções aqui
Desmonte a ROM e procure por quaisquer instruções que procurem lidar com o
valor.
Execute o jogo em um emulador de depuração e aguarde uma instrução para lidar
com o valor.
O primeiro é muito mais fácil de lidar (equivale a executar um programa e pressionar a
busca no texto simples resultante), mas nem sempre funciona por vários motivos, como
ponteiros (aqui sabemos que não é um ponteiro que o governa, mas os ponteiros se
estivessem lá, isso poderia quebrá-lo), valores/locais calculados e muito mais. O último não
é tão difícil para um hack básico, mas requer o uso de um emulador de depuração que
pode exigir alguma reflexão em comparação com algumas das técnicas em outras partes
do documento.
A última opção foi escolhida para isso. Pouco antes da primeira batalha, F11 (o
comando de salto para depuração do VBA-SDL-h) foi pressionado
Uma janela assustadora se você não souber o que é abordado nas seções a seguir, mas a
maior parte significa muito pouco para esse processo e, mesmo que isso acontecesse, não será
tão ruim se você tentar entender o que cada seção significa. 0300060C é o local do cheat e tem 32
bits ou 4 bytes, portanto, para esse fim, quando 0300060C ou qualquer um dos 4 bytes
subsequentes são gravados, ele precisa ser conhecido ou, de fato, um ponto de interrupção em
uma gravação precisa ser definido.
bpw {endereço} {contagem}
bpw 0300060C 4
Digitar c continua o programa depois que ele é interrompido e foram necessárias algumas
tentativas para chegar à batalha. Uma vez na batalha, deixando alguns golpes serem acertados e
continuando a cada vez
265
Aqui é possível observar a lógica do jogo
Os primeiros dois números são de onde a instrução está sendo executada e os
próximos 4 caracteres hexadecimais são como a instrução é codificada; se você notou
que o segundo tinha apenas 16 bits, apesar do GBA ser um console de 32 bits, é
porque o GBA (e o DS) têm um modo de 16 bits que costuma usar, chamado THUMB.
str r0, r4, #0x54
Isso significa carregar o conteúdo de no local em r4 mais 54 hexadecimais
(300060C é o que aparece) em r0
cmp r1, #0x0
Isso significa comparar R1 com 0 e um conjunto de ags de acordo (será abordado mais
tarde, mas nas comparações GBA e DS não estão todas em uma instrução por si só)
disponível $08036c5a
Isso significa que se a comparação fosseeumenos do que ouequalificado para entãobrancho (salto)
para $08036c5a e continue correndo.
Claramente, o valor de leitura da memória é o que deseja ser editado, embora cheats
mais avançados possam fazer todo tipo de coisas, como impedir que a verificação de morte
funcione (como acontece com tudo em hacking, há muitas opções ao mesmo tempo).
266
Uma edição depois
Pode ir muito além disso. Também como mencionado em outro lugar, se você quiser
especialmente, no caso do DS, o próprio binário geralmente é encontrado descompactado
na RAM, então você pode realmente fazer um hack binário por meio de um cheat
convencional, como de fato vários dos cheats mais detalhados fizeram no caso do DS, e
efetivamente transformar um replay de ação no DS em um gênio do jogo.
Agora existem centenas de paradigmas e mais sendo feitos a cada ano, sendo
tantos que o conceito se tornou uma espécie de piada em vários círculos de
programação.
Existem dois outros dignos de nota no que diz respeito ao hacking. O outro o primeiro é
grande paradigma de programação normal que é chamado de Orientado a
programação Objetos (era provavelmente a principal diferença entre C e C++, ambos
que foram e ainda são muito usados em programação de jogos, programação de dispositivos
267
e os lados de baixo nível dos sistemas operacionais) que muda as coisas fazendo com que,
em vez de deixar as coisas para as funções, e mesmo ao criar funções, você possa mesclar
os dados que estão sendo manipulados e a função que deseja executar em uma linha, isso
geralmente torna o código um pouco menor e mais fácil de gerenciar. Tudo isso é
mencionado porque influencia a linguagem assembly resultante à medida que C e C++ são
convertidos em assembly do compilador.
A segunda é aquela que ganhou destaque nos últimos anos e é chamada de
programação orientada a retorno (muitas vezes abreviada para ROP). É muito popular entre
pessoas que invadem PCs e outros sistemas altamente seguros; na verdade, o 3ds viu
vários exploits baseados em ROP. A melhor explicação que ouvi era algo como uma nota de
resgate é composta de cartas que o autor original provavelmente não tinha intenção de
serem usadas como tal, aqui vários fragmentos de código parecem ser certas instruções
bastante válidas se você pular (ou mesmo retornar) para eles. A programação orientada a
retorno (ab) usa esse fato alterando para onde as coisas retornam e, no processo,
construindo um programa válido a partir dos bons dados que o dispositivo espera que
estejam na memória. Ele fica muito mais aprofundado, felizmente por ser uma técnica nova
(ish) e empolgante que não precisa de hardware sofisticado, ela vê muitas apresentações
em conferências de hackers e outros artigos que você pode procurar.
5.4.2 SE OUTRO
Em muitas linguagens de programação, embora normalmente vistas em C e naquelas
influenciadas por C, a construção IF ELSE é muito importante. A idéia geral é que você pode
dizer ao computador para fazer algo SE um determinado conjunto de condições for
atendido, mas caso não sejam, então faça algo ELSE com as duas formas principais
necessárias, sendo uma execução de instruções IF e um ELSE final (potencialmente mais
lento, mas tem usos) ou mais comumente uma sequência de IF seguido por ELSE e outro IF
seguido novamente por outro ELSE até o final ELSE. Qualquer uma das construções permite
verificar se uma de uma série de condições aconteceu e agir de acordo antes de terminar
ou retornar ao ponto de partida. Na montagem, isso é um pouco mais complexo e usa
instruções de ramificação (geralmente condicionais), mas como a família C é bastante
próxima da montagem, isso é apenas uma abstração bastante pequena.
5.4.3 Recursão
Um excelente exemplo do uso da recursão é encontrar o fatorial, tanto que
geralmente é o exemplo usado ao ensinar o conceito e provavelmente será feito
aqui também. Se você estiver com dificuldade para lembrá-lo, o fatorial de um
número é o número multiplicado por cada número anterior até atingir 1 e
normalmente é representado por um ponto de exclamação após o número.
Aqui você tem um valor inicial, faça uma operação e verifique se precisa fazer
outra antes de fazer a operação novamente e verificar mais uma vez e novamente e
novamente19até chegar ao valor que você precisa.
Se você se lembrar dos métodos OAM para mover um sprite (embora funcione quase
tão bem para dados de nível e posicionamento), você pode querer mover um sprite
19o ato de verificar e verificar é realmente considerado uma má prática, é melhor fazer um loop
que feche naturalmente, se puder. Se você não puder (uma ocorrência mais comum), você define
uma interrupção que efetivamente faz a verificação para você, sem muita penalidade de
velocidade e irá soar quando as condições forem atendidas.
268
4 pixels por vez até que a quantidade de pixels movidos totalize 20, de modo a criar uma ilusão de
movimento (em oposição a um teletransporte), então aqui você provavelmente veria o (s) valor
(es) OAM do sprite incrementado em 4 ou aquele usado para uma interrupção ou uma segunda
função atuando como contador.
5.4.4 Iteração
Relacionado à recursão está a iteração. Aqui você pode querer resolver um problema e escolher
um número aleatório antes de ajustar seu valor inicial e tentar novamente até chegar à resposta
(ou perto o suficiente). Isso geralmente é usado quando você tem um problema desconhecido ou
não possui um método simples para fazer o trabalho.
5.4.5 Laços
Escolher que tipo de método de loop você deseja usar às vezes é óbvio e às vezes complicado.
Agora, como mencionado várias vezes, C está muito próximo do assembly, então os
programadores de jogos são bastante livres para não terem escolhido o método mais ideal e, na
verdade, podem muito bem ter escolhido um abaixo da média. Não há tantos hackers
x isso, mas você pode, se quiser, pois o uso excessivo do tipo errado de loop pode fazer
com que o jogo trave sob certas condições ou pode ver coisas como a bateria descarregar
mais rápido do que deveria.
Talvez você precise escolher o seu próprio se precisar fazer algo como
implementar uma fonte de largura variável. Em um hack VFW, como você não tem
mais uma distância fixa para manter os glifos separados, você precisa descobrir a
largura e agir de acordo até chegar ao fim da linha. Esperançosamente, o mecanismo
de texto pelo menos forneceu a capacidade de quebrar as linhas, mas talvez não, ou
talvez tenha, mas ter caracteres com largura fixa pode ter ignorado o valor exato
esperado (um múltiplo de 8, por exemplo) e, em vez disso, faz não sabe o que fazer
(digamos que você tenha múltiplos de 7 que não se alinharão com múltiplos de 8 por
algum tempo).
269
5.4.7 Fundamentos de Montagem
Assembly recebe um artigo completo onde o GBA e o DS são abordados em grande
profundidade, mas para evitar que essa seção fique atolada em minúcias, alguns dos
conceitos fundamentais estão sendo abordados aqui. A linguagem assembly é geralmente
caracterizada pelo uso de mnemônicos pequenos, geralmente de três ou quatro letras,
para representar instruções, em oposição às instruções e funções mais elaboradas que as
linguagens de nível superior oferecem. Torna-se bem diferente à medida que você muda
arquiteturas e sistemas, mas saber o seguinte significa que você sabe muito do que
sustenta tudo isso, com muitas das grandes diferenças decorrentes do fato de que várias
instruções têm várias implementações nos processadores abordados aqui.
TempoMesmo no ARM, que evita instruções longas (é um dos conceitos centrais de uma
computação com conjunto de instruções reduzido que AavançadoRiscMmáquinas são
especializadas), algumas instruções levam vários ciclos de clock para serem executadas,
então você deve levar isso em consideração. Ao contrário do X86 dos PCs, não há muita
necessidade de considerar multithreading, previsão de instruções e outras coisas que
tornam os cálculos de tempo e a codificação para obter a melhor velocidade muito mais
complexa ao lidar com processadores X86/X64 (esses recursos são o motivo pelo qual você
está desencorajado de simplesmente comparar as velocidades da CPU para determinar o
melhor processador).
GBAtek tem mais informações sobre os tempos para instruções e se você se lembra da
seção de gráficos, muitas coisas no DS operam no tempo Vblank, no qual há apenas 80.000
ciclos para fazer as coisas antes do início do próximo desenho da tela. Para cronometrar as
coisas para tal ocasião são usadas interrupções e a interrupção vblank é uma das principais
usadas.
InterrupçõesIsso foi mencionado há pouco, mas a idéia geral é que você nem sempre
quer verificar se algo aconteceu, então, em vez disso, você usa interrupções. Existem
vários tipos com várias prioridades (as principais são Vblank (para atualização de tela),
baseado em temporizador, DMA (transferência de memória), pressionamento de
teclado e mais abaixo na lista e vindo de uma instrução é SWI (funções de BIOS para
coisas como descompressão e divisão no caso do GBA) e você pode habilitá-los e
configurá-los à vontade.
DMA DdiretoMEmoryAccess é uma técnica disponível para todos os sistemas modernos que
permite que uma transferência de uma parte da memória para outra seja realizada
independentemente da CPU. É essencial porque a CPU tem largura de banda muito
limitada, mesmo que você possa amarrar a CPU com uma simples transferência de dados (a
CPU é interrompida para o GBA e DS durante isso, mas evita ter que perder ou salvar e
restaurar informações de estado armazenadas na CPU). Dito isto, DS DMA e outros
benchmarks de transferência de memória para os curiosos.
RegistrosAs peças de memória mais rápidas em qualquer computador são quase sempre os
registradores. O problema é que eles são limitados em número, limitados em tamanho e
muitas vezes vêm com uma lista de ressalvas que não serão abordadas no momento (o
ARM é bastante racional, mas o X86 é menos à primeira vista e provavelmente também à
segunda vista). No caso do GBA e DS o modo ARM7 ARM possui 13
270
aqueles de finalidade que você pode usar para qualquer coisa chamada R0 a R12,
onde o modo THUMB é ainda mais restrito e cada modo também tem uma seleção de
finalidades específicas que são muito úteis e como o ARM7 é um processador de 32
bits, cada registro tem 32 bits, embora nem sempre acontece assim na computação.
No entanto, como nenhum processador convencional no momento em que este artigo foi escrito é
de 128 bits na maioria dos sentidos da definição e poucos têm uma ordem de magnitude a mais de
registros do que o humilde ARM7.20é bastante óbvio que você pode fazer muito com esses pequenos
registros e com o punhado relativo deles com os quais você precisa trabalhar.
O termo registradores também é usado para designar partes específicas da
memória GBA e DS que controlam diversas funções no hardware e não fazem parte da
CPU.
Tipos de instrução e como funcionamO texto a seguir detalha várias coisas boas que você
deve saber sobre as instruções em geral. Uma observação neste estágio é que a ideia de
uma instrução é apenas isso e as coisas podem ser organizadas em qualquer ordem;
geralmente será algo como instrução, registro de destino, registro de origem, valor
imediato, dar ou receber o registro de origem conforme apropriado, mas isso pode mudar
dependendo do seu montador (certos montadores voltados para uma determinada família
de processadores como um todo têm ordens favorecidas para coisas, mas novamente não
é definido em silício, por assim dizer).
DedãoO modo de 16 bits (embora ainda possa acessar e processar registros e dados de 32
bits), tem acesso a menos registros e possui diversas restrições. Permite códigos menores e
menores penalidades de tempo de acesso em coisas como o barramento de leitura de carrinho
GBA de 16 bits e os jogos frequentemente passam grandes porções de seu tempo de execução
no modo THUMB.
271
SPSR e CPSROs registradores de status do programa são usados para armazenar itens
relacionados à assinatura de um valor, quaisquer valores de transporte e outras coisas,
além de serem capazes de desabilitar interrupções. CPSR é aquele atual onde o SPSR
mantém valores no caso de uma exceção.
GBAtek tem mais como de costume.
LR (registro de link) é usado para definir para onde voltar se você se ramificar;
certifique-se de observar isso se você ramificar e ramificar novamente, o que é uma técnica
conhecida como funções de aninhamento.
SP é um registro opcional (mas bastante recomendado) para armazenar onde a pilha
(uma seção de memória usada pela CPU para armazenar stu quando os registros acabam) é
mantida e há uma para cada modo de CPU.
Empurre e popEmbora você possa fazer as coisas com os 13 registros gerais, você
ficará sem e o PUSH simplesmente colocará o conteúdo em uma parte da memória
geral (ou às vezes cache, dependendo do processador) chamada pilha e anotará onde
está, enquanto o POP o restaura. Muitas vezes, se você tiver que escrever sua própria
nova função, você empurrará tudo para fora dos registros atuais, fará o que precisa
ser feito e colocará tudo de volta antes de voltar para onde estava antes.
SubtrairMuito parecido com adicionar, exceto que subtrai. Ele usa o Current Program
Status Register (CPSR) para ajudar com valores assinados e outros.
272
MultiplicarOutra instrução com um uso óbvio, embora existam diversas variações que
permitem fazer coisas como agregar valor e depois multiplicar e também funções um
pouco mais complexas. A multiplicação de ponto flutuante, se feita na CPU, exigirá
alguma reflexão e o ponto fixo não é muito melhor. Deve-se notar que os
processadores ARM usados não possuem uma instrução de divisão, embora o DS e o
GBA forneçam habilidades para fazer isso em outras partes do hardware e existam
outras maneiras, como tabelas de log.
5.5 Montagem
Assembler, assembly, ASM e hacking binário são alguns dos sinônimos para isso e,
embora tecnicamente eles tenham significados ligeiramente diferentes na maior
parte, se você disser um e tiver contexto suficiente, ninguém dirá realmente nada,
embora o hacking binário talvez seja preciso, mas não realmente aconselhável.
Embora todas as outras técnicas mencionadas neste guia tenham exemplos de
conhecimento altamente especializado em seu cerne, em muitos aspectos, o hacking ASM
tem a maior barreira de entrada e, da mesma forma, é o de maior alcance, como usar um
editor hexadecimal para editar tudo o que pode não é aconselhável, mas qualquer coisa
pode ser editada usando técnicas ASM. Para não fazer rodeios, aprender ASM significará
que você está aprendendo um dos mais difíceis e específicos (escrever algo em Java em um
sistema e será necessário um mínimo ou nenhum trabalho real para executá-lo em outra
coisa que tenha Java mas escreva algo em ASM para o GBA e você provavelmente terá
muita dificuldade em fazê-lo rodar mesmo no DS) e nos tipos de codificação mais
envolvidos e se você ignorar algumas das linguagens de programação esotéricas,
provavelmente as mais difíceis. No entanto, isso não quer dizer que não valha a pena
aprender pelo menos alguns dos princípios básicos, pois isso ajudará em outras áreas
(como é um tema comum neste documento, saber como o hardware funciona permitirá
que você leve as coisas ao limite sem ultrapassar ou ser capaz de rastejar de volta se o fizer)
e, mais importante, algumas das técnicas podem ser executadas sem muita apreciação pelo
que estão realmente fazendo nos bastidores; você pode não ter um profundo apreço pelas
nuances da memória
21Existe uma medida de segurança presente nos sistemas Windows chamada ASLR (address space layout
randomisation), o que significa que muitos programas que usam assembly que naturalmente precisam lidar com
sua própria memória são, de certa forma, considerados inseguros, pois o recurso deve ser desativado para que
esses programas sejam executados. Na verdade, isso foi citado como uma das razões pelas quais a capacidade
de fazer montagem inline (ter pequenas seções de seu código em montagem ao usar uma linguagem como C)
foi eliminada de alguns ambientes de desenvolvimento mais recentes.
273
e sistemas de leitura de memória para um console, mas qualquer um pode definir um ponto de
interrupção e esperar que a instrução dada escreva em uma determinada área e ver de onde ela
lê.
Também deve ser dito que, embora a programação assembly seja extremamente poderosa, ela
ainda é uma linguagem de programação, portanto, apenas conhecê-la não o transformará em um
cientista da computação, mesmo que muitas vezes os torne mais fáceis de aprender no início, então
continue a aprender outros conceitos; se parece que aqueles que conhecem assembly sabem o resto,
provavelmente sabem, mas é quase certo que aprenderam ao longo do caminho.
A questão óbvia da razão pela qual nos importamos em fazer tudo isso é que tudo
é eventualmente renderizado em assembly (mesmo que seja em tempo de execução,
como é o caso de algumas linguagens de nível superior) e se tudo for renderizado
nele, tudo será compreensível através do filtro dele e tudo é editável com ele.
Embora esta seção pretenda ser uma introdução razoavelmente completa ao assembly,
você também é encorajado a ter uma especificação completa de hardware como gbatek
disponível, pois ela conterá coisas que serão omitidas e será mais útil como referência.
5.5.1 BRAÇO
O GBA usa um processador ARM7TDMI enquanto o DS possui um processador ARM9
(especificamente um ARM946E-S) e um ARM7 que na prática é uma versão com maior
freqüência do processador GBA22. O conjunto de instruções que eles executam é conhecido
de forma bastante confusa como ARMv5, mas poucas pessoas se referem a isso, sendo
ARM9 e ARM7 as coisas usuais às quais as pessoas se referem.
Ambos possuem dois modos de operação, sendo o principal ARM e o secundário
THUMB; embora o termo secundário seja usado e seja, em muitos aspectos, o mais
fraco dos dois modos, os jogos podem e frequentemente passam grandes períodos
ou mesmo a maior parte de seu tempo de execução no modo THUMB.
Não é ruim se você está acostumado com o X86 com registros aninhados e muitas
peculiaridades e muito menos ter que otimizar as coisas para ele, mas os
processadores em si são bastante básicos, como seria de esperar de uma arquitetura
RISC com o único real a omissão é a falta de uma instrução de divisão. O assunto da
divisão do BIOS será abordado posteriormente com mais profundidade, mas fornece
uma instrução de divisão, embora possa ser mais rápido e alguns jogos ainda
implementarão tabelas de log e métodos semelhantes (o BIOS do GBA vai um passo
além e fornece raiz quadrada e arco tangente) e o DS ARM9 também possui uma
espécie de coprocessador para matemática que usa IO para funcionar e suporta
divisão e raiz quadrada.
Uma seleção de links que tratam dos vários processadores
ARM7 o especificações especiais
ARM9 o especificações calicas
Arquitetura do braço (conceitos gerais)
Coisas peculiares que você nunca quis saber sobre assembly
imrannazar.com Mapa de opcode ARM7 e 9
Menor arquivo ds (não tanto assembly, mas vale a pena ler)
Referência de CPU GBAtek
crackerscrap.com (clique na documentação) (abrange vários exemplos de técnicas de
montagem).
22Algumas pessoas tentaram sincronizar os vários ARM7 no modo GBA em vários consoles
(GBA, SP, GBM, DS e DS lite) e eles geralmente estão a apenas alguns décimos de MHz entre si.
274
microcross.com Referência rápida do assembly GNU ARM Um pequeno documento de
referência para algumas das diretivas suportadas.
Errata de silícioOs programas podem ter bugs, os chips podem ter bugs e, como os
processadores são cada vez mais uma combinação dos dois, eles podem definitivamente ter
bugs, para não falar da arquitetura como um todo; já que vários pontos deste documento
dedicaram tempo cobrindo o GBA e o DS, aumentando seus processadores com
hardware integrado fixo também capaz de processar em algum nível. Agora, onde
certamente existem recursos não documentados no momento da escrita, não se sabe
muito sobre qualquer errata de silício para o GBA ou DS em comparação com
processadores como x86, embora o GBAtek cubra vários erros e escolhas de design
estranhas (lembre-se que o ARM tende a ser personalizado/ aplicação específica onde
processadores como x86/x64 são amplamente padrão e quase certamente o são até que
você chegue a níveis muito elevados de ciência, indústria ou empresa). Isso é ainda mais
abstraído dos programadores pela maioria dos compiladores, em alguns casos montadores
e conjuntos de ferramentas sendo atualizados para contorná-los, o que pode incomodar os
hackers de ROM, pois não tenderá a ser transmitido a eles. Na prática, é mais provável que
a culpa seja do hacker ou do emulador que não lida com uma condição específica (lembre-
se, na prática, a emulação geralmente é uma tentativa de fazer uma aproximação de um
sistema em código que roda a uma velocidade razoável). e talvez um problema do
montador; Costuma-se dizer que os consoles de jogos usam CPUs de prateleira, mas
ocasionalmente apresentam alguns ajustes, como de fato foi visto no Z80 que o GB/GBC
usou.
Em um nível um pouco mais alto, se você ler documentos de hardware para GBA e
DS, provavelmente encontrará modos proibidos e algumas menções a bugs de
hardware que geralmente estão relacionados entre si e são o mais próximo que você
conseguirá de ver algo como silício errata.
A seção a seguir contém detalhes sobre o hardware do GBA em si, coisas importantes que você deve
saber e algumas técnicas básicas a serem empregadas que facilitam o hacking de montagem.
23É claro que sem nenhuma troca de banco, isso geralmente significa que há 16 megabytes ou espaço
livre que pode ser usado apenas apontando para lá, o que muitos hacks fizeram. Deve-se notar que
vários dos cartões Ash compatíveis com GBA dominantes e alguns dos emuladores incorporados não
gostam tanto de arquivos maiores que 16 megabytes, embora os primeiros ainda possam lidar com eles.
Para este fim, se você puder apontar novamente e mantê-lo abaixo de 16 megabytes, faça-o e se você
tiver uma ROM de 8 megabytes, use primeiro os 8 megabytes restantes.
275
Localização Tamanho Descrição
DMAGBAtek os cobre com grande detalhe, mas existem quatro canais numerados de 0 a 3
e têm prioridade crescente (os outros ficam pausados até que os canais de maior
prioridade sejam concluídos). Cada um tem um registro de controle independente (que
pode desabilitar o canal pelo qual é responsável) e três registros somente de gravação para
controlar a fonte (DMA0 pode fazer apenas memória interna e não lerá mais que 7FFFFFF,
mas os outros também podem fazer para carrinhos), comprimento da leitura (contagem de
palavras) e destino. O registrador de controle faz mais do que apenas controlá-lo e pode ser
configurado para iniciar imediatamente, em um vblank, em um hblank (destinado ao
DMA0) e em casos especiais que dependem do canal.
Binário GBAO protocolo GBA conhecido como inicialização múltipla não será abordado aqui, pois
a maioria dos hackers não tende a lidar com ele, principalmente porque a maioria das imagens
ROM comerciais não estão nele, sem mencionar que é abordado em documentos de hardware.
O binário GBA (como no código executável real) está misturado com a própria imagem ROM,
mas é facilmente encontrado na grande maioria dos jogos. Os treinadores para imagens ROM
(sejam aqueles que os grupos de cenas colocam nos jogos ou aqueles usados para os
treinadores) tenderão a subverter isso para serem executados antes do jogo.
Depois que o BIOS é carregado e o logotipo da Nintendo é verificado, a primeira
coisa que o jogo olha é o primeiro endereço na ROM (08000000), que é o início do
cabeçalho e normalmente contém uma instrução de salto.
24Vários programadores, tanto no lado comercial quanto no homebrew, tentaram fazer coisas
na memória usando funções padrão de gravação/leitura de memória da CPU e, embora não
sejam insuportavelmente lentos, estão longe da prática sugerida.
276
Esse salto geralmente vai para o final do cabeçalho, onde as coisas começam a ser
configuradas, o que é muito útil para o programa que está por vir, mas não é exatamente o
que você está procurando. Esta parte é encontrada algumas linhas abaixo quando a leitura
resultante é apontada em seguida para um valor no intervalo 08XXXXXX e esse é o início do
binário GBA que realmente faz o jogo fazer o que deseja.
Alguns jogos como Phantasy Star Collection terão vários executáveis no jogo (após um
menu de carregamento inicial), mas isso é raro e para estes você terá que usar um
emulador como VBA-SDL-h ou no$gba debug ou executar manualmente através do
assembly em formato longo para encontrá-lo. Embora tecnicamente não seja possível
nenhum jogo comercial completo, o homebrew é uma questão diferente, no momento em
que este artigo foi escrito, foi observado copiar código executável para WRAM e operar lá
como o DS faz com seus binários. Presumivelmente, isso se deve ao fato de o carrinho GBA
ser razoavelmente rápido, ter baixa latência, ter um comando de pré-busca, o WRAM não
ser tão grande (288 kilobytes ou 256 se você usar apenas o WRAM do sistema) e o carrinho
GBA ser mapeado para a memória. Na verdade, isso é esperado por muitas ROMs que
travarão se você usar memória mais lenta, e é por isso que os carrinhos GBA mais simples
(e geralmente melhores) usam PSRAM ou NOR, em oposição aos mais baratos e fáceis de
trabalhar com memória Ash NAND. Existem alguns jogos que podem executar a estranha
função descompactada do WRAM, a inicialização múltipla pode fazer uso dela e o GBAtek
observa que muitas funções de salvamento precisam ser executadas a partir de instruções
no WRAM.
277
RastreamentoRastreamento é o processo de descobrir onde algo começou na ROM e
como chegou onde está, o que geralmente é apenas uma leitura de alguma forma,
mas ocasionalmente há compactação no caminho, o que significa que você terá que
encontrar onde os dados compactados entrou na memória e repita o processo com
isso.
Localizar gráficos com VBA-SDL-Hby Labmaster fornece uma ótima
introdução ao assunto e há alguns exemplos trabalhados na parte III.
ˆPontos de interrupção
ˆCorra até
ˆMemória de pesquisa
ˆVariáveis
278
ˆExploração madeireira
Assim como a seção GBA acima, esta seção contém informações sobre o hardware do DS,
modos gerais de operação e algumas técnicas que você pode usar para ajudar a tirar o
máximo proveito da montagem.
279
2. Binários e sobreposições contidos em arquivos de download (utility.bin,
especialmente se encontrados em diretórios dwc)
Os binários padrão são os arquivos arm9.bin e arm7.bin que você encontrará em cada
DS ROM. As sobreposições não estão restritas ao ARM9, mas na prática, como o ARM7
é uma espécie de binário estático para jogos comerciais usados para tarefas básicas,
o ARM9 tende a ser o único processador a tê-las; na prática, geralmente há menos de
dez, mas algumas imagens ROM chegam a cerca de cem, embora algumas vão além e
ultrapassem a marca de mil.
Quanto ao que realmente são as sobreposições, há ocasiões em que você pode querer
estender a funcionalidade do seu código, mas não quer ter que ocupar um pedaço de
memória valiosa o tempo todo, apesar do jogo só precisar dela a cada 3 horas ou mais. Esta
é uma ocorrência comum em toda a computação e a maneira como o DS escolheu lidar
com isso foi olhar para trás no tempo, para sobreposições que equivalem a ter pequenos
fragmentos de código que você pode carregar em um determinado local de memória e
depois executar antes de liberá-los e trocá-los por outro. fragmento. É bem possível ter
sobreposições com diferentes locais de execução pretendidos e ter múltiplas sobreposições
executadas ao mesmo tempo. A maioria dos visualizadores de cabeçalho, como o NDSTS,
dirão onde o ARM9 é encontrado na ROM, localizado na RAM (pode variar entre os jogos) e
tem o ponto inicial de execução e, embora você mesmo possa ler os dados, talvez seja
necessário ir para um programa como o Crystaltile2 para obter informações sobre as
sobreposições.
Memória DSO DS evita mapear algumas coisas para o barramento de memória principal com
acesso total de leitura/gravação (algumas partes do firmware, o próprio cartucho, a RAM 3D e
alguns aspectos da tela de toque, para citar alguns grandes), o que incomoda algumas coisas,
mas muito disso ainda está mapeado para o barramento de memória principal e definitivamente
ainda é um conceito útil. Da mesma forma, os dois processadores têm mapas ligeiramente
diferentes, embora haja muita sobreposição.
280
ARM9 (início-fim) tamanho Descrição
GBAtek no TCM.
04000000 ARM9 IO
05000000 Paletas
07000000 OAM
GBAtek tem mais informações sobre algumas peculiaridades do VRAM (consulte LCDC)
06000000h 256 mil no máximo VRAM alocada como RAM de trabalho para ARM7()
281
WRAM logo depois. WRAMCNT controla a alocação, embora apenas o ARM9
possa fazer algo a respeito.
MTCÀ primeira vista, a maioria das pessoas presumiria que o TCM é um tipo de cache
de memória da CPU e, embora possa ser usado como tal na prática, é um pequeno bloco de
memória que pode continuar a operar durante a transferência DMA (assumindo que tudo o
que precisa é dentro dele) embora o DMA não possa acessá-lo. GBAtek tem mais.
Seção DS IO04000000 para o IO doméstico ARM9 e ARM7 para o DS, que inclui valores
de entrada do controlador, DMA, manipulação de tela, som, bem como os locais usados
para o coprocessador/funções matemáticas (uma função de divisão assinada de 32 ou 64
bits com clock de cerca de 18 clocks para todos os 32 bits ou 34 clocks, caso contrário,
embora tenha um ag finalizado e uma função de raiz quadrada de 64 bits com duração de
13 clocks com uma saída de 32 bits).
GBAtek naturalmente tem uma lista completa e cobre seu conteúdo e uso nas
seções relevantes e muito disso já foi abordado quando os gráficos e o som
foram abordados.
Sobre o uso de memória DSCom a maioria dos arquivos DS usando ponteiros de nível de
arquivo, pode haver a impressão de que você receberá tanta memória quanto os ponteiros
permitirem e, de fato, muitos jogos serão, dentro do razoável, capazes de gerenciá-la a ponto de
você ter mais probabilidade de ter problemas com a tela. posicionamento. Alguns jogos, no
entanto, carregam, digamos, todo o script ou arquivo na RAM e usam-no a partir daí, o que
significa que você pode limitar seu texto (ou, mais provavelmente, se for um jogo japonês, fazer
uma conversão de codificação de texto de 8 bits), codificar em uma capacidade de streaming ou
tente algo mais exótico como tentar guardar coisas no carrinho GBA ou abusar do
ponteiros de nível de arquivo para apontar para algum lugar na RAM e injetá-lo lá de alguma forma
(lembre-se que os valores são provavelmente calculados a partir de ponteiros no arquivo para orientar
as coisas quando for encontrado na RAM, para que você possa fazer algo funcionar lá usando um
número muito maior do que o esperado) .
VRAM, por outro lado, você frequentemente encontrará problemas ao manipular e
os desenvolvedores muitas vezes terão levado isso ao limite aqui.
282
marcação ASM crystaltile2/no$gba, também conhecida como NEFA Nintendo desenvolveu uma
espécie de formato de marcação para seus depuradores usarem, para o qual no$gba (na época o
principal emulador de nível de depuração para o DS) e, eventualmente, crystaltile2 ganharam
suporte. no$gba também suporta um formato chamado sym que às vezes parece quase uma
extensão do nef.
O formato permite atribuir nomes a locais de memória (sejam variáveis, nomes
para IO ou locais de funções/loops), declarar seções como dados (8,16 ou 32 bits por
entrada para um determinado número de bytes), declarar seções ser apenas código
no modo THUMB ou ARM e escrever comentários e similares a um ambiente de
montagem de desenvolvimento, pois embora a montagem seja sobre ir direto ao
básico, é trivial e não se preocupa com a velocidade resultante de um programa para
ter um bom nome para um local de memória definido durante a programação,
utilizado na programação e substituído no momento da montagem.
SRL/baixar reproduçãoOs arquivos SRL são binários gerados por ferramentas de depuração. Na
maioria das vezes, se eles são vistos em imagens ROM, geralmente são deixados extras pelo
desenvolvedor, às vezes, embora estejam lá como ou em componentes de download como o
binário principal. ROMs de download podem usar, e frequentemente usam, um binário DS de
estilo regular (geralmente chamado de utility.bin), observe que eles geralmente usam muita
compactação e quase tudo em um arquivo utility.bin será compactado.
Compressão bináriaIsso foi mencionado quando a compactação foi abordada, mas deve-se notar
que os binários e sobreposições do DS podem ser compactados, alguns grupos de cenas até os
compactaram se a ROM original não os tivesse compactado. O método de compactação padrão
usado em binários DS é um tipo de compactação LZ, às vezes conhecido como BLZ (LZ invertido)
ou, mais frequentemente, compactação binária DS. Ferramentas como o crystaltile2 lidam com a
descompressão (embora com o crystaltile2 você seja aconselhado a copiar o arquivo
normalmente e descompactar com uma das seguintes ferramentas se você planeja reinserí-lo, o
crystaltile2 também foi visto dizendo que há compressão onde não há nenhuma) assim como
ferramentas como a compressão do Cue
283
ferramentas e DSdemp. Da mesma forma, o binário precisa ser descompactado para ser executado, para
que você possa sempre retirá-lo da RAM, o que na verdade era algo que muitos faziam antes do formato
ter ferramentas criadas para ele.
Nenhuma criptografia binária foi observada, embora alguns às vezes chamem a
compactação binária de um tipo de criptografia e a ofuscação seja vista em muitas
ocasiões. Da mesma forma, existem algumas linguagens de script disponíveis para
programadores de DS, portanto pode haver alguma compilação just in time e coisas
semelhantes.
Aparentemente, o DS tem muito mais memória principal do que o GBA (288 KBytes
para o GBA e pouco mais de 4 megabytes no momento em que tudo estiver dito e feito
para o DS), mas devido ao carrinho não estar mapeado na memória, isso é não é um salto
tão grande quanto pode parecer quando se trata de realmente executar as coisas, já que o
binário ARM9 precisa aparecer na memória e na maioria das vezes os arquivos terão que
ser copiados do carrinho em vez de acessados diretamente como era no GBA . O acesso ao
carrinho do DS também é um pouco mais lento do que o GBA e, embora alguns jogos
tenham piorado no que diz respeito ao uso diário, é mais do que viável.
As interrupções são basicamente as mesmas, exceto por alguns extras no DS para lidar
com o hardware mais recente, no entanto, elas são restritas pelo processador com o SPI
(usado para salvamentos do DS e funções de bônus no cartão, como o pokewalker para
alguns dos jogos Pokémon posteriores) e wi sendo cuidado pelo ARM7.
284
O DMA é praticamente o mesmo, embora ambos os processadores possam entrar
nele, duplicando efetivamente os canais DMA. O ARM7 é praticamente igual ao GBA,
mas o ARM9 é expandido e tem mais alguns modos para lidar com novas fontes de
dados e trabalhar com o 3D, além de perder algumas das restrições, agora tem acesso
total à memória para todos os canais .
VRAM e gráficos. Mesmo com duas telas levadas em consideração, o DS tem um
pouco mais de VRAM do que o GBA, embora ainda não seja suficiente para que você
nunca acabe / as seções serão redundantes, por mais que, assim como a RAM geral
do sistema, a diferença não seja aparente como streaming diretamente de outras
partes da memória é bem possível; melhor ainda, além da imagem final renderizada
do mecanismo 3D, nada realmente afeta a memória VRAM 2D que não esteja
relacionada aos gráficos. Os diferentes motores do DS não são iguais e pode levar um
pouco de tempo para descobrir, sem falar da interação entre eles, mas na maior parte
eles são bastante lógicos.
O mecanismo 3D que era novo no DS não é, em sua maior parte, mapeado/legível na
memória, embora os registros para controlar grande parte dele sejam visíveis na memória
RAM de um emulador, mesmo que sejam gravados apenas no hardware original; as
funções de renderização e geometria recebem efetivamente áreas de memória separadas
e, assim como outras partes do sistema, o 3d é um tanto orientado por IO. É bastante fraco
no que diz respeito ao hardware 3D (como uma prova de que, ao contrário da maioria dos
motores 3D, as operações de ponto fixo estão na ordem do dia), levando a algumas
contagens de pré-cálculos e truques por parte do desenvolvedor para obter o máximo que
possível, embora vários níveis de texturização, iluminação, neblina e sombras estejam
disponíveis.
1. Ativador de cheat/miss
2. Ajustes de memória
3. Edição do jogo
O ativador é o método preferido da maioria dos criadores de cheats (embora tome cuidado para não
confundi-lo com alguns ativadores de botão integrados que um mecanismo de cheat pode oferecer a
você), com um ótimo exemplo sendo a falha do Trauma Center para recuperar a saúde; aqui, certos
pontos do jogo exigiam que o paciente estivesse com a saúde mais baixa para desencadear um evento
adicional, de modo que o truque de saúde infinita tinha que se tornar uma saúde renovada quando uma
falha acontecia.
Os ajustes de memória são provavelmente os mais comuns e funcionam porque o
estado dos botões do GBA e do DS são mapeados para a memória e, portanto, podem ser
acessados; na prática, embora muitos jogos copiem esse valor e operem com base nele, o
que tem a vantagem adicional de diminuir os efeitos de um botão que sofre falha de salto
(a maioria dos botões são apenas interruptores e podem exibir abertura e fechamento
várias vezes ao longo de um toque; se você já teve um mouse começando a clicar duas
vezes depois de ser usado por um tempo, provavelmente foi um exemplo disso).
O GBA e o DS em 4000130 hexadecimais para 16 bits possuem os botões GBA padrão
(sem X e Y) para ambos os consoles.
285
O DS tem 16 bits adicionais em 4000136 hexadecimais para X, Y, tela fechada, depuração e se
a tela sensível ao toque está sendo pressionada (nenhum dado de posição para isso, pois isso é
abordado em outro lugar).
Fica um pouco mais complexo porque há interrupções lá) com um bit para
cada um dos vários botões.
A edição de jogos é o que a maioria pensa quando ouvem o termo pela primeira vez e
aqui haverá uma interrupção ou conjunto de verificação para ler a memória de controle
(seja a seção mapeada ou a versão copiada) e agir de acordo. Aqui a funcionalidade do jogo
que faz algo semelhante será reformulada. Deve-se notar que se um jogo tiver a opção de
remapear controles, mesmo entre uma pequena seleção de mapas pré-fabricados, então
talvez seja melhor observar o que acontece com essa abstração.
Tela sensível ao toque do DSO DS possui tela sensível ao toque além dos botões. Vários
hacks foram feitos, mas como a Nintendo pressionou bastante a tela sensível ao toque para
os desenvolvedores (suas ofertas originais ainda mais), alguns jogos acabaram com
controles de tela sensível ao toque, embora os próprios jogos fossem indiscutivelmente
mais adequados para controles de botão. Entre no hacking de ROM e um monte de jogos
tiveram seus controles de tela de toque remapeados para botões, sendo dois dos mais
notáveis os da série Zelda e Starfox, o guia Crackerscrap.com para tela de toque para
controles de hacking tem um bom exemplo trabalhado de vários métodos para isso. Deve-
se notar também que a tela sensível ao toque do DS tinha algo parecido com um botão
convencional para simplesmente dizer que a tela estava sendo pressionada, além de todas
as opções ordenadas pelo movimento real.
Olhando para trás, para o editor de nível na seção de edição de nível N +, onde
020E0840 era um local da caixa de seleção acionado pela tela de toque, poderia ter sido
feito para selecioná-lo como o destino pretendido de um hack do controlador.
Periféricos extrasOs carrinhos GBA e DS possuem opções GPIO (IO de uso geral)
integradas que foram usadas em vários pontos para fazer várias coisas. No DS, esse
era principalmente o slot GBA usado para rumble, o game pad taito e o guitar grip
para guitar hero. Na verdade, os cheats feitos para permitir o uso de botões em vez
do punho da guitarra viram a seção de memória onde os estados dos botões do pad
da guitarra foram copiados/debounceados para serem manipulados.
Outros hacks aqui incluíram suporte para o controlador de remo Taito
(originalmente planejado para a versão japonesa do Arkanoid) para outros jogos
como Mario Kart DS.
5.5.6 Enganchar
Algumas discussões adicionais estão disponíveis na seção a seguir (consulte edição de
montagem destrutiva versus não destrutiva). No entanto, mesmo que você consiga
entender o código desmontado bem o suficiente para recriar o código-fonte original, no
que diz respeito a muitos hackers, isso é apenas metade da batalha, pois você
provavelmente também desejará editar e executar o código. O processo de interromper a
ROM e alterar o que ela faz/executar seu próprio código exige que você primeiro chegue a
um ponto onde possa separá-la do código original ou, para usar o termo apropriado,
conectar o código. Existem três classes principais deste
1. Edição de instruções
2. Subvertendo funções
286
3. Engate externo
No que diz respeito ao hacking geral de ROM, isso ainda é em grande parte teórico, mas
pergunte a qualquer hacker de ROM se ele gostaria que o sistema tivesse 32 megabytes
extras de memória com baixa latência, alta velocidade e endereçável diretamente na
memória, a resposta provavelmente será sim, mas isso nunca vai acontecer. O DS e DS lite,
entretanto, apresentam o slot GBA que tem 32 megabytes e todos os itens acima, embora
alguns jogos selecionados usem a seção de cabeçalho e talvez a seção de salvamento para
ganhar extras, o homebrew pode usá-lo e o navegador da web também tentará usá-lo
(nestes dois últimos casos, na verdade, é leitura/gravação), ainda deixa uma grande
quantidade de espaço disponível. Aqui, o ponteiro na RAM que inicia 02 poderia, em teoria,
ser alterado para iniciar 08 (ou 09 para os 16 megabytes superiores) e como as restrições
de DMA foram suspensas no DS, qualquer coisa que pudesse ter que ir da seção de
memória 02XXXXXX para outro lugar não deveria ficar perturbado.
287
de muitas maneiras funciona mais como um tutorial sobre como portar um cheat do que
qualquer coisa relacionada ao idioma. Este conceito de espelho de firmware é visto muito em
jogos e é útil para aqueles jogos que são extraídos de firmware, mas você não pode alterar
(alguns emuladores) ou não deseja alterar o tempo todo, embora aqui ele realmente desbloqueie
funcionalidades ocultas.
288
Despojado das partes mais relevantes
ldr r0, 0x02168f8c
Agora, existem algumas escolas de pensamento aqui
Volte e considere o que levou as coisas a este estágio (parece haver vários
ramos para 020E31E0)
Vá em frente e veja o que acontece.
Neste caso, avançar é provavelmente mais interessante e provavelmente necessário,
pois pode muito bem definir ponteiros para as seções de texto e o fato de ter que haver um
truque para selecionar o idioma em primeiro lugar significa que provavelmente é melhor
avançar neste caso. Aconteceu, como esperado, que o valor foi verificado logo no início,
então o jogo foi reiniciado e então executado por uma fração de segundo antes de ser
pausado. 020E31E0 foi selecionado (o comando go o levará até lá) e run to cursor foi usado
para chegar lá.
A partir daí, o rastreamento no comando (f8) foi usado para avançar as instruções, uma
de cada vez.
Resumindo, sem um cheat ele vê 01 lá e mais ou menos salta imediatamente
para outra área (ele verifica francês e espanhol também) e com um cheat 00
aparece antes de sair em uma tangente massiva terminando carregando a versão
em japonês .
A coisa óbvia a fazer é alterar a carga dessa seção de memória (que
289
contém 01 no caso do inglês) para retornar 00 em vez de 01. Como o valor é conhecido, significa
que ldr pode ser substituído por um mov ou pela instrução completa, conforme arm-eabi
desejará.
movimento r0, #0x00
Isso se reúne como
0000A0E3 (ele será responsável pelo endianness, mas muitos emuladores e leituras de
desmontagem o tornarão mais legível por humanos, como de fato você pode ver na imagem de
depuração do iDeaS
Pelos dados anteriores, sabemos que este é o ARM9 e que ele carrega 4000
hexadecimais na ROM e o Crystaltile2 diz que está descompactado.
0E31E0 era o local no binário, o que significa que 0E71E0 é o local na ROM. Se ele
estivesse compactado ou tivesse que ser feito muito trabalho então seria apenas uma
questão de extrair o arquivo (descompactá-lo se necessário) antes de injetá-lo de volta
como é feito com qualquer outro arquivo.
É claro que existem várias maneiras pelas quais o jogo poderia ter sido alterado
para alcançar o mesmo efeito e, mesmo que tenha sido uma única mudança de
instrução no final, pode ter havido métodos melhores no que diz respeito à otimização
do jogo.
290
O binário provavelmente foi montado até o nível de instrução para lidar com o layout tal
como existe na ROM original; mesmo que seja algo básico como texto, seus ponteiros para
cada linha provavelmente agora são endereços de memória, em oposição a alguns dos
métodos mais simples que o resto do DS utiliza.
Isso também não se limita a nenhum console e, embora os programadores sejam
incentivados a manter seus dados e código executável separados, como foi abordado em
outro lugar, e deve ser mantido em mente sempre que hackear, os programadores
também são pessoas e não são estranhos ao rápido e um método fácil quando isso
acontecer.
Provavelmente não será tão difícil fazer o seu próprio (você está fazendo algo executar
uma tarefa simples uma vez no início da sequência de inicialização), mas o DSATM 4.3.4
291
deve ter a opção de adicioná-lo (ele foi retirado de versões posteriores do
programa, que você pode obter no mesmo link).
Esta técnica é mais útil para código que precisa ser executado uma vez e mais cedo,
pois há todos os tipos de condições de borda que podem ter que ser consideradas, mas
com a falta geral de gerenciamento de memória em tempo de execução fora do que foi
programado no jogo, espere coisas que causem problemas no longo prazo.
Há também uma versão modificada do desmume que tentará rastrear a memória à medida
que ela é usada e relatará quais áreas não foram usadas em determinados pontos.
Alguns jogos foram vistos inicializando/carregando a RAM e possivelmente
esperando que certas coisas sejam assim, o que pode ser quebrado se a RAM agora
indicar DEADBEEF. Problemas relacionados foram observados ao cortar ROMs GBA e
DS até os últimos 00, o que poderia muito bem ser esperado como o fim do token de
arquivo ou algo semelhante.
Nunca foi observado que nenhum jogo GBA ou DS faça isso, mas a leitura de RAM não inicializada é
considerada uma maneira de qualidade razoavelmente alta de obter números aleatórios para usar como
semente para alguma criptografia ou algo assim, no entanto, tal coisa é tecnicamente possível. Com o
hardware sendo consertado, provavelmente existem métodos melhores para usar o hardware de som,
sem mencionar que a maioria dos jogos provavelmente não precisará de números aleatórios de grau de
segurança, portanto, um algoritmo pseudo-aleatório ou mesmo uma tabela de pesquisa é bastante
adequado.
25Outro item da lista de coisas consideradas fora do escopo deste documento seriam
algoritmos evolutivos e programação evolutiva, onde grupos de algoritmos são coletados e
ajustados ligeiramente de maneira aleatória antes de serem testados e o melhor deles sendo
292
No passado, alguns hackers trocaram partes do código do jogo real,
pularam para ele e executaram antes de trocar a parte alterada de volta pelo
código original e pular para onde as coisas precisam estar e outros
compactaram o código que vem depois seu código e o expandiu de volta
após a execução do código, excluindo o código no processo e permitindo que
o jogo funcionasse normalmente. Ambas são técnicas bastante avançadas e
não muito úteis se você puder encontrar alguma RAM ou alguma parte não
utilizada do binário para usar.
Embora o próprio binário possa estar protegido, outras partes da memória não
então têm sorte e coisas podem acontecer lá com um dos exemplos mais comuns
seria a paleta usada em imagens 2D; A animação 2D já foi abordada, mas surge
um método em que a paleta pode ser atualizada em tempo real para criar a
impressão de mudança de cores. Um ótimo exemplo disso são os blocos de arco-
íris em Mr Driller 2 no GBA e você pode ver a paleta sendo alterada em quase
todas as versões do VBA, desde que você esteja em um nível e se preferir um
exemplo de DS, há um pesadelo sequência bem no início do segundo jogo que
faz algo semelhante a um plano de fundo.
Indo para o futuro, embora seja uma técnica valiosa, alguns dos sistemas de proteção fazem
muito para evitar que ela funcione com consoles como o 360, até mesmo ganhando memória
criptografada, evitando assim a manipulação simples (alguns dos hacks na verdade adicionaram
uma área de memória não criptografada para permitir emuladores que usam técnicas
relacionadas para funcionar) e computadores domésticos muitas vezes agora uma técnica de
proteção de memória conhecida no Windows como ASLR (aleatorização de layout de espaço de
endereço) que randomiza o layout da memória na tentativa de evitar dados em um determinado
local; rapidamente, todos os programas do Windows são compilados para serem executados em
um determinado local de memória, mas o próprio Windows oculta e altera os comandos para o
que eles precisam ser, e é assim que vários programas funcionam ao mesmo tempo no Windows.
Por outro lado, há linguagens que são classificadas como linguagens reflexivas que possuem tais
habilidades como uma espécie de função central, mas isso novamente corre o risco de retornar
ao debate semântico.
Dinâmico (valores calculados)Pode-se dizer que a maioria dos ponteiros no DS são uma
variação deste e embora não seja estritamente um tipo de código polimórfico, está
relacionado a ele e é muito mais comum do que em virtude de ser usado em ponteiros
calculados e códigos semelhantes; é bastante comum em linguagens do tipo C, mas se você
se lembrar do cheat para portas de montagem e das instruções que adicionariam coisas a
valores posteriormente usados como locais de memória. Essas coisas também são a
razão pela qual nem sempre é aconselhável tentar alterar a localização de coisas na RAM ou
na ROM para coisas como o GBA, mesmo se você estiver disposto a realizar a tarefa quase
hercúlea de reposicionar tudo. É frequentemente visto em jogos programados
principalmente em assembly ou C simples, o que significa quase tudo mais antigo que um
PS1.
Aqui, se você souber a localização da memória de algo, a próxima coisa pode
293
estaremos a uma distância conhecida / fixa, então, em vez de buscar um novo
ponteiro na memória ou pior, no carrinho e incorrer em uma penalidade de
velocidade, você pode simplesmente adicionar essa distância fixa a um valor já na
memória e direcioná-lo para um novo local com este novo valor. Relacionado a isso
está a ideia de evitar ter que chamar uma função e passar vários ciclos configurando-a
(mesmo que seja uma função tão simples, tudo terá que ser empurrado, novos
valores escritos, a função saltada e concluída, valores retornados e tudo voltou antes
de retornar (embora as últimas coisas possam ser trocadas um pouco).
Os criadores de cheats muitas vezes enfrentam um problema semelhante com códigos de
ponteiro onde um jogo armazena um valor na memória, mas em vez de apenas ter um valor
simples em algum lugar escrito diretamente, ele tem um ponteiro que pode mudar e o jogo
calcula onde escrever o valor em um determinado ponto com base neste ponteiro que pode ou
não ser estático durante uma determinada execução do jogo. Se não for estático, isso impede o
método básico de alteração e verificação de cheats, bem como sempre escreve, a menos que o
ponteiro seja levado em consideração e tais coisas tenham sido vistas em áreas geralmente não
cobertas exclusivamente por cheats também.
1. Ajustes baseados em animação. Se um jogo esperar que uma animação aconteça, você o
força para o estado final mais rápido, se ele esperar que uma animação aconteça em dez
quadros, você faz com que ela aconteça em um, seja alterando a contagem de quadros ou
alterando-a para que atinja o final mais rápido (os animais vinham dois a dois, mas se
fossem quatro a quatro seria mais rápido). Funciona para animações 2D e 3D.
Esperançosamente, essas animações não são uma máscara de carregamento ou cálculo.
Você não precisa parar por aí; muitos anos atrás eu joguei Pokémon Blue, ele tinha um
pequeno dispositivo de compartilhamento de experiência que
Tirei no final porque aquilo me fazia apertar A várias vezes no final das
batalhas. Se você eliminar isso, ganhará mais velocidade/menos
aborrecimento.
294
(a) Aumente para 11. Se um jogo tiver uma configuração para velocidade de texto e tal,
então ele pode ter a opção de ir ainda mais rápido. Por exemplo, se um jogo tem
uma variável de velocidade de texto, ele pode usar essa variável para acelerar as
coisas e pode não ser um simples anúncio. Digamos então que se o valor for 90, mas
você tiver os 8 bits completos para brincar, poderá ganhar um pouco mais de
velocidade. Você também pode descobrir como isso altera a velocidade e alterá-la.
2. Loops Vblank. Provavelmente o mais fácil de atacar, mas é o que ganha mais
consequências. As atualizações de tela tendem a estar vinculadas a vblanks e isso também
é responsável por várias partes da lógica do jogo que podem acontecer. Você desativa
alguns dos loops vblank e faz com que eles aconteçam o tempo todo (ou algum evento
mais frequente) e provavelmente terá algum lixo na tela e alguns aumentos de velocidade
também. Tradicionalmente, tudo isso estava ligado à velocidade de clock de um dispositivo
que, por sua vez, ia para a tela em que ele estava, daí as conversões PAL ruins, velocidades
de clock diferentes entre regiões e até mesmo jogos antigos sendo extremamente rápidos
em máquinas modernas. Dispositivos mais novos geralmente têm um temporizador
separado, portanto, os jogos de PC funcionam tão bem em um P4 antigo quanto em um i7
com overclock, assumindo que o P4 pode produzir o número necessário de quadros para a
tela, ou mesmo o mesmo no PSP, seja ele estava com underclock ou cronometrado mais
rápido.
3. Hack completo. Se você não tem nada de bom para abusar como em 1) e 1a), você
analisa completamente o código do jogo e faz acontecer, o primeiro passo é ver se
você pode forçar algo como 1) ou 1a) a acontecer se houver é uma verificação de
limites ou limite superior estabelecido por qualquer motivo. Na verdade, a
otimização de jogos não será abordada, mas as pessoas fazem isso e isso aumenta a
velocidade, às vezes aumenta a estabilidade e aumenta a vida útil da bateria. À
medida que o tempo passa e linguagens de nível superior são usadas, há uma
quantidade cada vez maior de códigos realmente redundantes ou potencialmente
redundantes.
Alguns tentaram desabilitar o vblank/vsync ou evitar que ele esperasse para fazer
coisas lá, o que também acelera as coisas, mas muitas vezes ao custo de gráficos
corrompidos.
295
Embora na prática a criptografia inclua aspectos de segurança como um todo e
também se preocupe com o tempo necessário para quebrá-los, bem como com as
implementações adequadas/eficazes dos sistemas criptográficos, ela deverá ser
considerada um tanto fora do escopo deste documento. Se você quiser ler mais, dois livros
de Bruce Schneier conhecidos como Applied Cryptography e um livro mais recente, Liars
and Outliers, são pontos de partida e materiais de referência para a maioria dos que usam
o campo.
Voltando ao tópico, existem três áreas principais de interesse.
2. Criptografia - usando funções matemáticas para evitar que aqueles que não possuem
as informações relevantes (chaves) leiam a mensagem/arquivo
3. Assinaturas - usando funções matemáticas para gerar uma soma de verificação, mas
usando uma chave para que apenas a pessoa que possui a chave possa gerar a assinatura.
Você acabou de ver alguns dos termos/jargões, mas mais devem ser descritos antes
de continuar
Mensagem - o termo usado para descrever os dados que estão sendo verificados, criptografados ou
assinados
Texto simples - um sinônimo para a mensagem Texto cifrado - um
sinônimo para a mensagem criptografada Hash - um sinônimo
para soma de verificação
Texto simples - a mensagem original não criptografada
Chave - simplesmente um número usado para fazer/como parte do processo de criptografia ou
assinatura
Chave simétrica - usando a mesma chave para codificar e decodificar. Chave assimétrica -
usar duas ou mais chaves para permitir que alguns grupos leiam e outros criptografem, mas
aquele que possui apenas uma chave não deve ser capaz de fazer as duas coisas.
Chave privada - dependendo do que você está fazendo, a chave você mantém
bloqueada
Chave pública - dependendo do que você está fazendo, a chave você dá a
quem quiser
Colisão - quando duas mensagens diferentes produzem um arquivo com a mesma assinatura/soma
de verificação
Tabela Rainbow - uma lista de todos os hashes para cada mensagem até um determinado
comprimento
Força bruta - tentar todas as chaves possíveis ou todas as alterações em um arquivo para que ele
corresponda ao original. Para um sistema moderno e bem implementado isto não é considerado viável
Buraco - o termo para quando um método de criptografia ou assinatura tem um aw que permite
que as pessoas o contornem (geralmente em um tempo menor que a força bruta)
Segurança por obscuridade - o processo de tentar garantir a segurança usando um processo
personalizado de criptografia/hashing/assinatura, que é um método que frequentemente falha
espetacularmente
296
Somas de verificação/hashesExistem dois exemplos simples disso que serão
abordados na tentativa de explicar isso.
Paridade - em suma, se você pegou o le como um todo ou uma coleção de partes é cada
número par ou ímpar.
Bytesums - se você somasse o conteúdo de cada byte, seria produzido um
número que variaria se um dos bytes que o compunha fosse alterado.
Aqui estão os requisitos para somas de verificação/hashes usados para segurança (se você
fizer hash para fins de pesquisa, alguns deles mudam de maneira bastante óbvia). Às vezes, eles
são combinados em requisitos mais amplos, mas as ideias permanecem as mesmas.
ˆCada mensagem deve produzir um hash exclusivo, ou seja, as mensagens não devem produzir
o mesmo hash
ˆCada hash deve ser igualmente provável, ou seja, cada bit deve ter uma chance de 50/50
de ser 1
ˆCada hash deve ser imprevisível, ou seja, cada pequena alteração em uma mensagem
deve produzir uma grande mudança no hash resultante
ˆCada função hash deve fazer o mesmo hash para a mesma mensagem (sem
aleatoriedade na saída)
SalgaEste é o ato de introduzir outro dado nos dados a serem hash. Nos melhores
casos, algo exclusivo para aquele dado, mas em casos menores, algo comum a todos os
hashes a serem feitos para um sistema. É usado principalmente onde bancos de dados de
senhas são mantidos; armazenar senhas brutas é arriscado, pois elas podem ser expostas
em um vazamento e se você receber uma senha, um hash dessa senha também poderá ser
usado para verificá-la (lembre-se de que cada mensagem deve produzir um hash único,
mas imprevisível). Surgiu como tabelas arco-íris, tabelas que listam hashes para cada
combinação de valores (ocasionalmente apenas palavras de dicionário ou um determinado
conjunto de caracteres) até um determinado comprimento, tornaram-se viáveis até
mesmo para uso geral no início dos anos 2000, como resultado do aumento do espaço em
disco . Ao alterar os dados que estão sendo hashados para outra coisa, você impede que as
tabelas básicas do arco-íris sejam úteis; no entanto, como elas são facilmente geradas, é
desejável um sal único/diferente para cada hash de uma senha.
Existem maneiras de confundir os limites e os termos nem sempre coincidem com precisão
e também é possível combinar os dois; normalmente seu banco usará público
297
key para permitir que você envie uma chave para eles e, em seguida, faça a chave privada
para o restante da transação e você pode aninhar criptografias, se desejar. A chave privada/
simétrica é em muitos aspectos inferior, mas como é menos dispendiosa em termos
computacionais e, quando bem feita, funciona bem, ela permanece desde a invenção da
criptografia assimétrica.
SimétricoXOR
Voltando ao exemplo do XOR binário
Mensagem
0110 1100
Chave
1110 0001
XORing os dois
1000 1101
Ataques básicosAlguns dos métodos que você aprenderá para encontrar texto têm suas
raízes em ataques à criptografia e, de fato, tecnicamente falando, as codificações de texto
são um tipo de cifra de substituição que é uma técnica que tem sido usada há milhares de
anos. Sendo tão conhecidos por si mesmos, esses ataques normalmente não são de grande
utilidade, mas como muitos métodos derivam de princípios básicos, vale a pena conhecê-
los.
Texto simples conhecidoA forma mais simples disso é para XOR e foi vista na criptografia de
salvamento do 3ds. Aqui, os últimos bytes do chip de salvamento, que normalmente são maiores
do que o salvamento que eles contêm, foram preenchidos com 00 e o XOR da sua senha com 00
deixa a senha como texto simples. Mesmo que não fosse 00, apenas conhecendo o texto original
(ou o suficiente de it) permite que você obtenha a chave XOR simplesmente fazendo o XOR.
298
Texto simples escolhidoNovamente, se você voltar ao XOR, se puder escolher um arquivo
com todos os 00 (isso também funciona em muitos algoritmos mais avançados em vários níveis) e
fazer com que o programa o criptografe, você terá informações valiosas sobre a chave, se não
sobre a chave em si. Se você usar um cheat de replay de ação para alterar um valor na memória e
depois deixar o jogo salvar, sem ter que descobrir como um jogo faz o hash do salvamento, você
está fazendo uma variação disso.
Exemplo de texto simples conhecido e escolhidoPara obter um exemplo de por que usar uma
execução longa de 0 com XOR é uma má ideia se você deseja segurança e mais um exemplo de texto
simples conhecido
Mensagem de todos 0
0000 0000
Chave
0110 1110
XOR
0110 1110
Mensagem maior que a tecla, mas preenchida com 0
Chave 1101 1111 0000 0000
0110 1110
XOR
1011 0001 0110 1110 Texto
simples conhecido/escolhido
Então você não preencheu com 0, mas preencheu com um valor repetido de
7h (0111)
Mensagem
299
0111 1111 1101 0111 0111 0111
Chave
0101
XOR
0010 0000 0000 0010 0010 0010
Mensagem desconhecida (mas com parte conhecida ou
suspeita) XXXX XXXX XXXX 0111 0111 0111
Invertendo o XOR
0111 dá 0010
Isso significa
Para obter 0 de 0 XOR tem que ser 0
Para obter 0 de 1 XOR tem que ser 1
Para obter 1 de 1 XOR tem que ser 0
Para obter 0 de 1 XOR tem que ser 1
0101 é a chave.
ˆLista negra - se algo for detectado como estando em uma lista negra, será pré-
ventilado de ser executado ou algo semelhante.
ˆLista de permissões - a menos que algo esteja em uma lista de permissões, será impedido de
em execução ou, pelo menos, fortemente restrito, dependendo da sua configuração.
300
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
26Embora essas assinaturas não tenham sido verificadas de maneira totalmente adequada com as sobreposições
(lembre-se de que são seções de código que podem ser colocadas no lugar bem após o tempo de inicialização para
fornecer funções adicionais). Hackmii tem um bom relato dos eventos aqui.
301
que compõem o jogo naquele ponto (personagens, nomes, níveis, experiência, estados,
inventário, localização, ponto da história....) são armazenados em uma seção gravável da
memória em algum lugar usando algum formato personalizado. Seja como um tipo de
trapaça ou para fins de hacking (hacking de ROM e hacking geral27) pode ser útil editar
esses arquivos.
Descobrir como esse formato funciona geralmente envolve uma combinação de
métodos como busca por cheats (mude uma pequena coisa e veja o que mudou no formato
do arquivo), cheats reais (torna a alteração dos valores resultantes muito mais fácil), análise
simples (é certamente não tenho certeza se você ganhará alguma coisa, mas não há nada
de ruim em olhar o arquivo em um editor hexadecimal e ver se você consegue
descobrir algo com base no que você espera que esteja lá), edição de nível/estatística
(corrupção e análise lógica) e montagem (ver como ele armazena e restaura os dados do
arquivo salvo na RAM e relacionando isso com o que você sabe). Normalmente, os formatos
são bastante lógicos e isso pode funcionar a seu favor, assim como a maioria dos sistemas
de texto relativos, simplesmente aumentar o valor de um item em 1 geralmente selecionará
o próximo na lista e permitirá que você preencha a lista inteira rapidamente, possivelmente
incluindo alguns itens, locais e outros que os desenvolvedores não pretendiam ter
disponíveis para uso geral.
Além disso, os jogos frequentemente fazem algumas verificações no arquivo, tanto na forma
de uma soma de verificação básica ou talvez de algum tipo de assinatura (raramente e
frequentemente algo relativamente personalizado/fora do padrão no caso do GBA e DS) e em um
maneira semelhante a truques complexos com valores espelhados para outros locais de várias
maneiras, ponteiros usados para alterar locais, valores manipulados antes do armazenamento e
assim por diante. Encontrar a seção de checksum geralmente virá como parte da edição inicial
(lembre-se de que os checksums devem mudar até mesmo para a menor alteração nos dados que
cobrem), embora descobrir o método possa ser problemático, então, alternativamente, você pode
hackear o jogo para ignorar o checksum, pois ele tende a ser verificado apenas uma vez, logo no
início do procedimento de carregamento ou em algum momento oportuno semelhante.
27Mais do que alguns hacks para muitos consoles usaram erros no manuseio de salvamentos e no
manuseio de outro conteúdo ostensivamente editável pelo usuário para iniciar e/ou os próprios
salvamentos para conter a carga útil do hack.
302
O problema tão preocupante é que um jogo japonês pode ter usado uma codificação de 16 bits e
a localização europeia ou norte-americana provavelmente usará uma de 8 bits ou simplesmente
não incluirá todos os glifos da codificação original, fazendo com que os nomes dos personagens
sejam exibidos de maneira estranha.
Mais preocupante é que os jogos salvos geralmente são bastante específicos, com locais
codificados, portanto, se o comprimento de uma variável for alterado entre as versões, cada
variável subsequente será reduzida em uma determinada quantidade e as coisas irão para o lado
e se múltiplas variáveis forem alteradas em comprimento pode ficar ainda pior; aqui pode ser
até melhor construir um editor de salvamento completo ou uma coleção de cheats em vez de
fixando o salvamento.
303
Muitas vezes, os hackers desejam alterar as estatísticas de um jogo de cartas
colecionáveis e, muitas vezes, fazer isso torna a IA do jogo quase inútil. Para
compreender porque é útil analisar os princípios de um jogo de cartas. Optando por
um dos jogos de cartas mais simples, conhecido como Top Trumps, onde cartas com
vários itens relacionados (personagens, veículos, animais, locais e muito mais) seriam
colocadas umas contra as outras com base em uma determinada estatística e
venceriam de acordo (embora aqui as regras padrão será ejetado para criar algum
espaço para exemplos) e compará-lo vagamente (uma espécie de versão de proto-
jogo em sua maior parte) com alguns dos tipos de jogos de cartas popularizados por
nomes como Wizards of the Coast. Falando em Wizards of the Coast, se a seção a
seguir e as relacionadas lhe interessam, então eles têm um bom artigo sobre sua IA
para a versão Xbox Live Arcade de seu jogo de cartas Magic the Gathering, você pode
lê-lo aqui.
Agora o custo para jogar é zero (sem mana ou sacrifício de monstros) Não
há opção de negar uma jogada (sem interrupções ou armadilhas)
Não há persistência de uma carta (uma vez jogado, um trunfo é removido do jogo
versus o potencial para uma ameaça persistente).
Para fins deste exemplo, turnos alternados acontecerão (nenhum movimento ignorado e nenhum
vencedor permanecerá ativo)
Um jogo bastante simples, mas é preciso pensar um pouco para fazer um bom
IA.
As perguntas que precisam ser respondidas são: a IA conhece todas as cartas do baralho e
calcula a partir daí ou usa uma estimativa de probabilidade? Como o jogo compra novas cartas (7
e um novo conjunto quando terminam ou 20 e 20 para cada uma estar disponível para jogar
desde o início?), As cartas são distribuídas igualmente (sendo baseadas em itens da vida real, não
é provável mas poderia ser assim), como o jogo é jogado rodada por rodada (colocar uma carta e
ter que vencê-la ou recusar e perder uma carta aleatória)? Apenas uma estatística é mencionada
para o jogo ou todas as estatísticas estão disponíveis para a chance de perder?
1. Aproximação do jogo
2. Restrição de jogo
28Um termo secundário que surge ao discutir isso e o assunto adicional do design de mecanismos é a
jogabilidade emergente, onde alguns conceitos simples se combinam para criar um bom jogo que não precisa
de várias centenas de regras. Um grande espaço de problemas é relativamente fácil de criar, mas a jogabilidade
emergente está mais próxima de um assunto de tipo artístico, onde o objetivo é criar um bom jogo, do que da
teoria dos jogos, que geralmente é mais focada na matemática e na modelagem de uma situação. Para um
exemplo um pouco menos teórico, considere que os motores Metroid e Castlevania por si só não determinam
que o retrocesso para vários itens/vantagens seja necessário, mas os designers de níveis acrescentam tais ideias.
304
A aproximação diz coisas como na maioria das vezes o custo de lançamento é X e a
necessidade de fazer as coisas varia com o tempo de jogo de acordo com uma fórmula,
portanto, tente permitir isso.
A restrição do jogo depende da restrição da quantidade potencial de opções disponíveis
para reduzi-la a um nível mais calculável. Relacionado à aproximação, um desenvolvedor
também pode fornecer à IA do jogo uma vantagem razoavelmente frouxa sobre o jogador,
seja na IA real ou no design do oponente, coisas geralmente sendo cuidadas / ajustadas
nos testes de jogo. As restrições incluem personalização limitada de um baralho e
quantidades limitadas de cartas em relação ao mundo real, muitas vezes limitando as
opções para certas técnicas de jogo no processo. Relacionado a ambos, a IA pode receber
uma medida de habilidade sobre-humana (por exemplo, pode saber as cartas que você
possui ou pelo menos alguns dados sobre elas) o que quebraria o jogo se um humano
tivesse a habilidade, mas quando devidamente ajustado pode fazer o Trabalho de IA.
Tudo isso oferece a opção de projetar de forma um tanto intuitiva uma IA que faça
o trabalho. No entanto, com um pouco de análise usando as idéias apresentadas pela
teoria dos jogos e pelo design de mecanismos, você pode refinar consideravelmente
sua IA e sua mecânica de jogo; técnicas para certos jogos, principalmente gamão e
damas/damas, quase serviram para quebrar esses jogos também e criar IA que a
maioria dos humanos tem poucas chances de vencer.
Teoria do jogoEle foi mencionado e parcialmente coberto várias vezes, mas é necessário
um pouco mais de profundidade. A ideia básica é: e se ações e estratégias complexas
pudessem ser formuladas, compreendidas e previstas usando matemática bastante
simples (mais tarde fica complexa) como base? Acontece que isso realmente pode ser
representado como algumas equações matemáticas bastante básicas, no entanto, antes
disso, é necessário haver uma breve discussão de algumas idéias e termos, muitos deles
descrevem conceitos um tanto simplificados e em quais níveis eles se aplicam podem variar
de acordo com como você analisar as coisas e onde você começa a analisar as coisas
305
capaz de ser conhecido por todos os jogadores. O risco quando os objetivos ocultos estão em
jogo é incompleto, mas o risco quando a dominação mundial é o objetivo está completo (embora
imperfeito se você levar em conta as cartas ocultas).
ˆJogo de soma zero - se uma pessoa ganhar a outra perderá a mesma quantia.
ˆJogo de soma diferente de zero - A situação em que ganhar ou perder não significa
os jogadores ganharão e perderão igualmente (as competições com vagas são
um bom exemplo). O monopólio onde existe um banco infinito não é soma
zero, o que também traz o conceito de jogadores com recursos infinitos,
nite para o jogador ou nite para o jogo.
Quebrar um jogo ou seções dele usando este conceito pode ser usado para criar uma
boa IA ou uma boa mecânica de jogo e ser usado para obrigar certos tipos de jogo
que levam ao design do mecanismo.
306
Projeto do mecanismoAo combinar termos de teoria dos jogos e criar regras, você pode
criar certos estilos de jogo ou mesmo IA para se adequar a certos estilos de jogo. No Tetris,
por exemplo, você tem a opção de fazer um giro infinito, mas quando você está jogando
contra uma IA/jogador, você está permitindo que ele tenha liberdade de ação por vários
turnos, o que, por sua vez, significa que você provavelmente acabará com uma tela de lixo. ,
da mesma forma, o jogo diminui o lixo se você fizer linhas, mas você pode querer pegar
algumas e, assim, permitir-se dar mais linhas de lixo para o outro lado. Isso alimenta ainda
mais a IA, pois você pode construir uma série de estratégias para um jogo e desativar uma
ou mais delas para tornar o jogo mais fácil para os jogadores humanos, e voltando ao
Tetris, neste caso dê uma olhada no Tetris DS, então, se você jogar a IA em modos mais
fáceis, ela irá parar de fazer coisas como quedas fortes ou mesmo quedas suaves, poderá
parar de segurar peças para fazer um tetris um pouco mais tarde e coisas semelhantes.
Além disso, você tem coisas como sistemas de pontuação e taxas de experiência que também
trazem aspectos psicológicos em quantidades cada vez maiores; no entanto, como um hacker de
ROM, você pode estar interessado em diminuir ou aprimorar o mecanismo de jogo. Por exemplo,
em um RPG, você pode não querer ter que trabalhar para ganhar experiência por algumas horas
para continuar a história, mas o jogo mais ou menos exige isso (uma troca que os
desenvolvedores de RPGs quase invariavelmente têm que fazer) e você pode ignorar esse. Da
mesma forma, os minijogos foram extraídos de jogos maiores em diversas ocasiões e em outras a
jogabilidade foi radicalmente alterada, embora dentro do mesmo motor, para fazer algo como
um modo boss rush em um jogo como Castlevania ou Metroid (ambos títulos conhecidos por
seus elementos de exploração) ou até mesmo um beco de corrida / chefe em um jogo como
Pokémon por meio de um salvamento pré-fabricado e hack de nível que nega todo o elemento de
exploração, captura e treinamento (possivelmente / normalmente superpoderoso) em que os
jogos são baseados.
O principal problema do projetista do mecanismo é que a teoria dos jogos assume
em grande parte que os humanos são racionais e jogam por interesse próprio,
embora tenham sido feitas coisas para compensar a falta disso.
307
faça algo que perturbe o recurso.
Se a seguir você notar um padrão da franquia Pokémon que freqüentemente causa
problemas para proprietários/fabricantes de carrinhos de cinzas, hackers de ROM e usuários de
emuladores, você não seria o primeiro. Na verdade, como resultado, uma vez que as ferramentas
são feitas (elas têm para todos os jogos Pokémon da linha principal até o momento), o Pokémon
tem um mecanismo bastante bom que permite que algumas pessoas façam alguns hacks legais
sem empregar muita habilidade técnica, mas a menos que você realmente queira aprender
alguns das técnicas mais avançadas de hacking de ROM como resultado de muitos desses extras,
então Pokémon é um jogo bastante ruim para aprender, e isso independentemente do que você
está tentando fazer, exceto talvez usar um emulador para capturar gráficos e bens musicais.
Uma disciplina relacionada à teoria do emulador são os extras no hardware. Carrinhos flash e
chips mod são frequentemente vendidos com base em suas habilidades para melhorar o jogo,
mas visto que rodam em hardware, eles estão sujeitos às restrições dele, ao contrário de um
emulador onde tudo é visível e pode ser manipulado (desde que você tenha opções de
desenvolvimento no emulador ou se dê ao trabalho de anexar uma ferramenta de
desenvolvimento/depuração ao seu emulador, como muitos criadores de cheats fazem com
ferramentas como emuhaste). As três grandes coisas no que diz respeito à maioria dos hackers
de ROM que leem este documento são
29Uma das coisas mais interessantes que surgiram da emulação do N64 e que já foi vista em outros
lugares foi o conceito de recompilação dinâmica. É aqui que o console em si não seria emulado, mas o
código do jogo escrito em C poderia ser convertido para a arquitetura em que o emulador estava sendo
executado e, como resultado, ganhando um enorme aumento de velocidade. Naturalmente não era
infalível e nem tudo funcionava com ele, mas quando funcionava era incrível e permitia que máquinas
que de outra forma não teriam chance de rodar algo rodassem os jogos a toda velocidade.
30Observe que muitas pessoas vão querer que as coisas pareçam exatamente como eram em tempos
melhores em sistemas antigos e muitos desenvolvedores empregariam soluções alternativas para deficiências
aqui e, nesse caso, continuariam a fazer coisas importantes até hoje; você pode ver o áudio sendo amplificado/
normalizado até o ponto de corte, os desenvolvedores de GBA aumentando o contraste para permitir que os
modelos originais de GBA sem luz de fundo tenham uma boa aparência, muitos jogos de console modernos
ainda são otimizados para TVs que raramente são calibradas adequadamente e mais avançadas muitos
desenvolvedores da web são incentivados a fazer com que suas coisas tenham uma boa aparência, não em suas
telas bem configuradas, mas no lixo que a maioria das pessoas tem. Da mesma forma, essas deficiências podem
ser usadas para cobrir coisas (um sinal de RF difuso permite um tipo muito grosseiro de anti-aliasing) e tais
melhorias são uma das principais críticas aos emuladores e razões dadas para a preferência pelo uso de
hardware real. bogost.com tem uma boa discussão sobre as questões do CRT e como alguns começaram a
emulá-lo.
308
1. Estados salvos do DS. Um estado de salvamento é simplesmente o conteúdo de cada
pedaço de memória, registro e conceito relacionado empacotado em um arquivo para ser
restaurado em uma data posterior. O DS não tem acesso total a toda a memória no
hardware (alguns são apenas de gravação, alguns não são mapeados e muito mais), então
os savestates são de muitas maneiras incompletos, o que é um dos principais motivos (o
outro é a terceira entrada nesta lista ) por que eles não funcionam muito bem. Você pode
tentar fornecer alguns dados de exemplo para a seção ou tentar conectá-los enquanto ela
é escrita e anotá-los para usar mais tarde, se desejar.
2. Injeção de truques de RAM. Um carrinho de cinzas ou um replay de ação podem usar algumas
técnicas aqui, mas eles geralmente têm hardware integrado para ajudar com isso, então isso se
refere principalmente a ferramentas como GABSharky, GBAATM e DSATM que geralmente
funcionavam adicionando mecanismos de cheat inteiros no próprio jogo e pelo A natureza de
como os cheats precisam funcionar (lembre-se de que um dos cheats principais é
constantemente escrever/manter um valor na memória RAM) seria executado sempre e
executado junto com o código do jogo (a maioria dos consoles não são feitos para multitarefa) de
alguma maneira.
5.7.1 GBA
A seguir estão informações sobre itens personalizados e itens com os quais os carrinho de cinzas
AP e salvaO pequeno AP que foi visto foram tipos de verificação de salvamento tradicionais
lançados fora da rotina de salvamento padrão ou coisas relacionadas e na maioria dos
casos apenas causaram falha na inicialização da ROM (geralmente com uma tela de erro),
falha ao salvar ou possivelmente no caso de Samurai Deeper Kyo pode ter tornado o jogo
imbatível após o primeiro chefe, embora isso não esteja confirmado no momento. O autor
do mgba tem uma boa análise das clássicas medidas antiemulação do NES.
A maioria dos problemas de execução de carrinhos GBA historicamente e até hoje vieram de
novos tipos de salvamento (há muito tempo classificados) ou hardware extra (sensores solares,
sensores de inclinação, suporte para adaptador sem fio GBA e jogos como Plaston Gate e
Legendz - Yomigaeru Shiren no Shima tem uma conexão periférico, você tinha que conectar um
dispositivo que parecia ter alguma capacidade de processamento integrada), embora existam
jogos não despejados, como o vídeo Shrek, supostamente usando comutação de banco, que
também precisaria ser classificado para jogar em cartões de memória.
309
Economiza no GBAO GBA não tem um valor no cabeçalho nem nada que indique o tipo
de salvamento, mas se você fizer uma pesquisa de texto ASCII por EEP-ROM, FLASH ou
SRAM e aparecer um (se não, você provavelmente tem uma ROM que usa senhas para
salvar ou talvez alguns tipos de homebrew) você tem a categoria ampla e emuladores como
o VBA costumava e talvez ainda pare aqui causando alguns problemas como ter que
selecionar manualmente o tipo de salvamento para coisas como pokemon, mas depois
disso haverá alguns números para indicar o subtipo dos quais existem alguns para cada
um. Esta pesquisa é muito difícil de fazer em hardware limitado e com a maioria dos
softwares de carrinho sendo derivados de dispositivos que usam memória NOR, o que é
muito difícil de alterar as coisas ou ferramentas de cinzas personalizadas para gerenciá-lo, é
por isso que a maioria dos carrinhos de cinzas GBA tendem a precisar de ROMs corrigidos
antes de ser colocado em dispositivos.
Depois disso, um punhado de patches (sem locais de memória ou locais relativos para
causar problemas aqui) que variam em distância do nome são usados para mudar o jogo
para diferentes tipos de salvamento.
Relacionado a isso e visto novamente no DS estava o link do gamecube para certos jogos que
também precisavam ler um determinado tipo de salvamento ou mesmo um determinado cabeçalho (os
carrinhos de cinza modernos carregam um carregador e depois carregam um jogo, tornando-os um
pouco mais difíceis de ter aparecem como carrinhos simples em alguns casos). No momento, nenhum
jogo foi consertado aqui e não se sabe se é algo que precisará ser consertado em inicialização múltipla
(código ARM), lado do gamecube (código variante powerPC) ou, em vez disso, está relacionado ao tempo
ou possivelmente uma combinação de todos os três.
1. Visto apenas em cartões de cinza, especiais de Hong Kong / Lucky Lucky Man / Tourist Trap
(os dispositivos 30 em 1 que você comumente encontra (nd?) Em resorts de férias) e alguns
ROMs de vídeo GBA não descartados (alguns filmes de recursos como Shrek foram
lançados ) estava trocando de banco. O GBA só pode endereçar 32 megabytes de espaço,
mas nada impede você de enviar um sinal ao cartão para mudar para uma nova página/
banco/seção para ganhar um pouco mais de espaço para trabalhar. É uma técnica
amplamente utilizada em sistemas de cartuchos anteriores e em sistemas onde os
cartuchos eram usados para cartões de memória, mas não no GBA. No último ano de
2015 os jogos foram finalmente descartados e analisados.
3. Stu como o rádio FM GBA e similares muitas vezes usavam apenas as linhas de
energia do slot GBA para se alimentarem, em vez de realmente interagirem com o
dispositivo de uma forma significativa.
310
5.7.2 DS
A seção a seguir contém informações sobre o DS AP, salvamentos e hardware extra. Os salvamentos do
DS não serão realmente cobertos, pois eram em grande parte domínio dos fabricantes de carrinhos de
cinzas que corrigiram o jogo ou emularam fisicamente até um nível de protocolo (originalmente em
carrinhos que usavam listas de salvamento para transformar o FPGA ou CPLD integrado em um pino
para a versão compatível com pinos do chip de salvamento original e posteriormente em carrinhos que
adicionaram o modo limpo/especial/fantasma em uma tentativa de permitir que os jogos fossem
jogados antes que os xes apropriados fossem feitos). Ainda assim, se você estiver interessado, o GBAtek
tem mais, mas a ideia geral é que o barramento SPI estava mais ou menos mapeado para a memória e
tinha recursos de acesso. As verificações de DSi e 3ds feitas para verificar carrinhos de cinzas estão um
pouco em outro lugar. Principalmente porque os próprios carrinhos fingiam ser um dos jogos na lista de
permissões de jogos mais antigos (os jogos mais recentes tiveram mais assinaturas e eram inadequados
para isso), era um exemplo bastante clássico de verificação para ver se era como o original, contrariar as
verificações, novos cheques, contador...
1. Salve a verificação de tempo. A EEPROM leva um tempo conhecido para ser salva e os tipos de
memória/emulação que a maioria dos carrinhos de cinzas usam em sua operação geral serão
salvos em um tempo diferente (geralmente muito mais rápido) que pode ser detectado.
Carrinhos com modo limpo, modo especial, modo fantasma... e antigos cartões de lista de
savetype são a principal exceção e a maioria deles só tem esses modos para permitir que as
coisas sejam jogadas enquanto se aguarda um x adequado.
2. Verificações binárias - aqui o binário ou uma seção dele seria hash e, se não
correspondesse, a ROM veria uma falha na verificação do AP e agiria de acordo.
Novamente, o modo limpo, o modo especial, o modo fantasma... e os antigos cartões
de lista de savetype muitas vezes evitavam isso.
311
lançado em qualquer ponto do jogo, poderia ser enterrado em sobreposições, poderia muito bem
ficar no modo THUMB, não apareceria como um tipo padrão/comum (não há buscas simples por
um determinado conjunto de instruções), poderia falhar e não agir de acordo com ele por vários
ciclos, estar oculto no binário ARM7 (lembre-se de que não é realmente tocado pelos
desenvolvedores e existe mais como uma biblioteca dinâmica e uma espécie de gerenciamento
de hardware) e mais significa que cada verificação teve que ser encontrada e corrigida e é
também por isso que simples cheat xes para AP pararam de acontecer.
Se você estiver no ponto em que pode fazer algo a respeito, a solução provavelmente
será óbvia, mas mesmo assim será abordada. Suas três opções principais são corrigir
totalmente a verificação para que isso nunca aconteça (a maneira adequada e não mais
difícil), fazer com que a verificação retorne o valor esperado (dependendo de como
funciona, isso pode ser mais difícil do que interromper totalmente a verificação) e fazer
portanto, a rotina IF ELSE (ou no ramo mais provável do ASM if) da qual se originou tem a
condição de falha alterada para pular para a condição tudo está bem (outro método abaixo
do ideal para a maioria das ocasiões). Com as centenas de verificações que eventualmente
se tornaram padrão, os jogos muitas vezes apresentavam uma lentidão perceptível,
embora não necessariamente, de interrupção do jogo, portanto, evitar que a verificação
acontecesse é o melhor caminho.
1. Leitura do carrinho GBA. Vários jogos de DS podiam ler a porta GBA para ver se uma versão
anterior de um jogo da franquia ou um relacionado (Megaman e Boktai/Solar Boy Django
estão ligados de várias maneiras) estava presente e geralmente desbloqueando alguns
tokens extras como resultado. Isso geralmente equivalia apenas a ler o cabeçalho para
que você pudesse enganá-lo, mas com uma pequena parte lá, mas alguns jogos e mais
notavelmente Pokémon Diamond e Platinum que podiam ler salvamentos inteiros de
jogos GBA anteriores, permitindo que as pessoas negociassem ao longo da série. Esses
usuários problemáticos do carrinho de cinzas, pois seus salvamentos estariam na SRAM e
o jogo DS seria naturalmente codificado para usar a memória do tipo Flash usada pelos
jogos GBA originais. Cory1492 fez o Pokepatch, no entanto, que o corrigiu para muitos
carrinhos GBA diferentes. Além disso, a versão DS do navegador Opera tem um pouco
mais de memória (12 megabytes que foram mapeados estranhamente, tornando-o inútil
para ROMs GBA) que foi usada para o navegador da web (o homebrew mais tarde obteve
suporte para ele adicionado graças a uma biblioteca/API e o o navegador da web foi
posteriormente hackeado para suportar alguns tipos de RAM do carrinho de cinzas).
2. Expansões de slot GBA. Arkanoid tinha um controlador de remo (que Mario Kart e alguns outros
jogos foram posteriormente hackeados para suportar) e o Guitar Hero tinha um punho de
guitarra. Eles funcionaram principalmente nos ônibus, como outros mencionados aqui, mas a
maioria das pessoas que tiveram que hackeá-los, em vez disso, usaram o fato de que as leituras
foram devolvidas para a memória normal e então atacaram essas áreas, mas se você quiser
mais, veja a tela sensível ao toque para hacks do dpad, pois é muito a mesma ideia.
312
Pokémon Black and White veio com um pequeno dispositivo chamado pokewalker que era um
contador de passos que fornecia experiência para o pokémon que continha. Ele se comunicava através
de uma porta infravermelha na parte traseira do carrinho do DS que usava o barramento de salvamento
(através de um seletor) para ativá-lo e isso incomodava as técnicas tradicionais de captura de
salvamento que não tinham visto isso antes, pois não sabiam como acionar o uso do opção salvar. Antes
de as ferramentas de salvamento de software serem criadas, as ferramentas de hardware tinham o
pacote mágico enviado (tipo relacionado a um ataque chamado ataque de repetição) ou as pessoas
podiam soldar a seção de salvamento para estar sempre ligada (ou selecionada por meio de um switch)
e usar o software mais antigo.
Dispositivos homebrew como as luzes DSerial e DSx usaram habilidades aqui.
Carrinhos de cinzas aprimorados mais recentemente, como o Supercard DSTwo,
iPlayer (não fabricado oficialmente pela Supercard) e iSmart MM/iSMM (um iplayer
OEM da iSmart DS com a capacidade de reproduzir ROMs comerciais do DS ao
contrário do iplayer) que possuem recursos de processamento integrados31que
permitem extras sérios (reprodução da maioria dos tipos de vídeo até resoluções SD/
PAL e emulação de coisas até e incluindo PS1 e Amiga no caso do iSMM) e mais
classicamente em processamento integrado para DLDI onde CRC os valores dos dados
gravados nos cartões SD dos carrinhos de cinzas seriam calculados a bordo.
31As armadilhas e peculiaridades desses tipos de dispositivos estão um pouco fora do escopo deste
documento, mas na maior parte do tempo com eles foi observado que a programação era mais fácil se o
ARM9 fosse levado a um estado semelhante ao ARM7 em jogos comerciais e apenas realmente usado.
para IO básico e manuseio, como manter a sincronização e trabalhar em torno da largura de banda
limitada do slot DS e de seu protocolo, era muito difícil.
313
no. Isso é mencionado principalmente porque algumas dessas técnicas podem frustrar a
operação do carrinho de cinzas com vários treinadores de cena no DS fazendo isso e alguns hacks
de GBA levaram a alterar o cabeçalho (especificamente os 4 bytes reservados no hex BE de
compensação) em um GBA ROM da qual a maioria dos emuladores e visualizadores de cabeçalho
não reclamaram, mas carrinhos como o EZFlash 4 não concordaram (talvez em função da
necessidade do 00 para encerrar uma leitura semelhante a alguns dos problemas potenciais
discutidos no preenchimento DEADBEEF).
Aqueles que tendem a ser mais voltados para reproduções/repros, tendem a ser feitos por
hackers e programadores experientes, então qualquer método que você possa imaginar é uma
possibilidade aqui. Normalmente, eles só se preocupam em deixar o crédito/se você pagou...
telas, então é improvável que atrapalhem seu carrinho de cinzas, emulador ou outros trabalhos
de hacking. No caso deste último, muitas equipes de tradução que buscam proteger seu trabalho
perceberão que alguém pode querer alterar as estatísticas, os níveis, a música e muito mais do
jogo e, como tal, tenderão a não fazer coisas como verificações binárias completas.
314
Parte III
Exemplos, curiosidades e técnicas.
Onde a parte anterior era um pouco pesada em teoria e leve em exemplos, esta parte
conterá em grande parte exemplos de coisas comuns, alguns exemplos de coisas
menos comuns, algumas técnicas e conceitos que vale a pena conhecer e poder
empregar, bem como agir como um pouco de despejo de conhecimento geral sobre
hacking de ROM/desenvolvimento de jogos. À primeira vista, esta parte pode parecer
menos valiosa do que a anterior, mas pretende ser algo equivalente ao tempo que
você passou algumas horas mexendo em algo que você usa até hoje, em oposição às
horas e horas gastas dizendo memorizando fatos que você não imagina ter que saber
novamente fora de uma noite de curiosidades.
315
bem como exportar todos os arquivos ou reconstruí-los quando terminar. Além disso, ele
deve conter algumas informações sobre os binários e é uma das poucas ferramentas de
uso geral que a maioria das pessoas terá que exibe informações analisadas nas
sobreposições, como onde elas serão eventualmente carregadas na memória RAM.
A combinação dos dois permite que você navegue pela ROM, configurando os visualizadores para
determinados pontos e analisando quaisquer dados que puder (bastante útil para formatos de
imagem 2D) e enviando arquivos para análise posterior.
Algumas capturas de tela do programa
Visualização principal do editor hexadecimal
316
Visualizador básico do sistema de arquivos com um clique direito
Quando arquivos compactados são detectados, a descompactação e a compactação (importação
compactada como você faz) ficam disponíveis.
Cada quadro tem uma paleta separada por algum motivo, então ignore as cores quebradas
nesta.
317
Visualizador de montagem configurado para visualizar uma sobreposição
Editor de blocos
318
Conexão visualizador/emulador de memória
Crystaltile2 pode interagir com a versão de depuração no$gba para obter dados de RAM principal
e VRAM.
Você pode acessar as opções pressionando le e depois DS emulator antes de selecionar o
emulador, após o qual você verá uma janela como
Você provavelmente terá que clicar em >> para obter a lista de opções e poderá definir
algumas por conta própria.
A partir daí, clique no que desejar e na maioria das vezes será produzido um novo arquivo
contendo todos os dados. Lembre-se de que você pode despejar a memória da versão de
depuração, desmover e usar muitas das ferramentas de truques que são muito mais
estáveis.
319
Editor de roteiro
Crystaltile2 apresenta uma ferramenta de despejo rápido de script básica, mas bem apresentada, que
possui várias opções. Normalmente o arquivo é carregado, quaisquer tabelas selecionadas no menu
suspenso tbl (e feitas para usá-lo no mesmo). Depois que essa pesquisa de embaixador é pressionada e
ele retorna uma lista do que considera seções de texto viáveis. A partir daqui, o menu suspenso de
métodos de pesquisa especiais permitirá que seleções sejam feitas. A última opção de métodos especiais
de busca permite exportar os resultados selecionados para um arquivo de texto contendo a localização,
comprimento e texto decodificado em qualquer página de código que você julgar necessária. Clicar duas
vezes em um resultado leva você ao editor hexadecimal. Opções básicas de ponteiro estão disponíveis,
mas são insignificantes em comparação com os programas de extração de texto mais tradicionais.
7 Rastreamento de GBA
O rastreamento de GBA foi mencionado na discussão sobre hacking de montagem e a teoria por
trás de tudo foi abordada, mas alguns exemplos trabalhados são provavelmente úteis.
Opções de rastreamento
Não se sabe se a versão de depuração no$gba ainda pode ser obtida legitimamente.
não$gbaUm dos emuladores de depuração mais completos disponíveis em qualquer lugar. Orientado por GUI
com a opção de definir pontos de interrupção e lidar com a montagem em tempo de execução.
VBA-SDL-hUm programa mais baseado em linha de comando, mas no mesmo nível do no$gba
no que diz respeito a funções úteis.
avanço de boicoteMenos recursos que vba-sdl-h, mas mais focado na GUI e ainda assim
tem pontos de interrupção e alguns outros recursos interessantes.
Existem três usos principais para emuladores de rastreamento/depuração no que diz respeito aos
hackers de ROM
320
3. Encontrar espaço para colocar arquivos/dados na memória
Descobrir onde um determinado recurso é encontrado é especialmente útil em sistemas como o GBA, que não
possuem um sistema de arquivos e, portanto, provavelmente não possuem uma definição clara de onde as
coisas podem ser encontradas.
O processo usual é encontrar os dados de sua escolha na memória (espero que sejam
estáticos) e então executar o jogo até aquele ponto novamente, mas desta vez com um ponto de
interrupção definido em qualquer coisa que grave naquela seção. No GBA (e no DS), a CPU tem
algum acesso básico à memória (embora a recuperação seja feita por meio de comandos reais, e
não como parte de uma instrução, como acontece nas máquinas da família x86), mas a maior
parte do acesso que requer extensa transferência de dados é feito por meio de chamadas DMA
ou SWI (para dados compactados, embora nem todos os jogos usem chamadas SWI ou mesmo
compactação compatível com SWI). As chamadas SWI podem ser registradas e até alimentadas
em ferramentas de descompressão para tentar encontrar dados.
Observar a lógica do jogo geralmente faz parte da criação de alguns dos cheats de
maior alcance, mas o uso é duplo, pois os dados do jogo na ROM/ISO podem não ser os
mesmos que os dados usados na RAM e a própria lógica do jogo pode querer ser
manipulada seja como um multiplicador básico de experiência/dano ou algo mais
aprofundado (que também pode contribuir para a compreensão de formatos que não são
imediatamente aparentes). Lembre-se, porém, de que, no momento em que você vê isso na
tela, provavelmente já foi feito há várias centenas de ciclos.
Restrições de memória estão sempre presentes em dispositivos incorporados
e alguns hackers de ROM otimizam um jogo para ganhar espaço ocasionalmente.
É verdade que isso não é necessário e pode ser mais fácil abordá-lo por outro
caminho (codificação de bloco duplo, loop de áudio mais cedo e tal).
VBA-sdl-h é a ferramenta escolhida aqui, mas as ideias seguem aproximadamente para o avanço
do boicote e a versão do desenvolvedor do no$gba.
8 Rastreamento DS
Embora o hacking de montagem do DS já tenha sido feito há algum tempo, ele não é tão
avançado em termos de poder das ferramentas que o fazem como o GBA e os consoles
anteriores. Da mesma forma, o fato de o carrinho não ser mapeado para a memória complica, na
melhor das hipóteses, os métodos básicos de localização de recursos e os coloca fora do processo
mecânico bastante simples que o GBA desfruta.
Emuladores de depuração DS
Com a possível exceção de no$gba, os emuladores de depuração do DS não são
tão avançados quanto VBA-SDL-h e boicotam o avanço do GBA.
Para este fim, existem três emuladores principais com algum suporte real de depuração. Não
se sabe se a versão de depuração no$gba ainda pode ser obtida legitimamente.
não$gbanão funcionará em ROMs posteriores, a menos que você ignore qualquer um incluído
antipirataria, mas tem muitas habilidades, incluindo a capacidade de definir uma variedade de pontos de
interrupção.
321
desmembrarembora possua suporte para desmontagem e uma variedade de memória
opções de visualização, despejo e edição (em geral e como parte de cheats), bem como um
complemento completo de blocos, mapas e outros visualizadores, grande parte da
funcionalidade de depuração é destinada ao homebrew por meio do stub GDB.
Ideiasa principal reivindicação ao status de depuração junto com os outros dois é o suporte
porta para executar até a seleção e depois a função step, bem como a
capacidade de manipular registros.
GBAtek detalha grande parte do protocolo de leitura do carrinho, mas para a maioria dos propósitos
B7aaaaaaaa000000 onde os valores a são uma localização de 32 bits (em big endian/mais
significativo, nada menos) é o único comando que importa. Lembre-se de que o binário é carregado
na memória e pode conter qualquer coisa que o jogo possa usar além do próprio binário.
322
Tudo isso e o que se segue sendo dito, jogue o jogo, veja algumas imagens do
jogo e se você puder simplesmente brincar com as camadas em um emulador, isso
lhe dará pistas sobre como as coisas serão configuradas no jogo.
Embora o DS tenha um sistema de arquivos, há muitos jogos que usam arquivos grandes e
pequenos e alguns que arquivam todos os dados do jogo (talvez dar ou receber algum
áudio ou baixar o jogo).
9.2 Compressão
A compressão é conhecida e bastante bem documentada há muito tempo (o 77 em LZ77
refere-se ao ano em que foi feito), mas fazê-lo de forma útil em tempo real não funcionou
até o GBA e, em uma extensão um pouco menor, o 16 era pouco. A compactação específica
de campo (codificação dupla e múltipla, troca de paleta e todos os outros métodos
abordados nos truques do desenvolvedor) e métodos mais simples, como codificação de
comprimento de execução, já existem há muito tempo. O GBA e o DS apresentam
algoritmos de descompressão para dois métodos populares (LZSS e Human) de vários tipos,
embutidos no BIOS e bem suportados em kits de desenvolvedores oficiais. A
descompressão do BIOS nem sempre foi usada, pois era uma troca entre utilidade,
recursos necessários, tamanho do BIOS e velocidade geral, o que levou os desenvolvedores
a implementar métodos mais rápidos para descompactar
arquivos compactados com compactação padrão do BIOS ou implementando um método
personalizado de compactação.
Normalmente personalizado geralmente significa apenas que permite diferentes comprimentos ou
compactação ou usa um tipo de ag personalizado (a compactação do BIOS é bastante rigorosa quanto
ao que é necessário em um formato compactado) em vez de uma ideia verdadeiramente nova sobre
como compactar as coisas para o máximo possível. na maioria das áreas da ciência e da tecnologia,
saltos massivos são bastante raros, mas pequenas melhorias são perfeitamente possíveis. Para esse fim,
se você souber como a compactação funciona e puder pensar no que mudaria para melhorar a
compactação, normalmente estará bem.
Da mesma forma, onde os desenvolvedores desejam reduzir tamanhos (os tamanhos
dos chips ROM aumentam em potências de 2 e o preço também aumenta e cem mil vezes a
diferença no preço soma um pouco), mas os hackers ROM nem sempre são tão limitados
(problemas de memória de lado), portanto, remover a compressão em primeiro lugar pode
ser feito e geralmente é. Em alguns casos, remover a compactação também acelera o jogo.
323
Lembre-se de que no GBA você normalmente terá todos os 16 megabytes
superiores para brincar e o DS é limitado a 512 megabytes para a ROM, o que,
novamente, poucas ROMs conseguem, sem mencionar a capacidade de criar duas
ROMs e dizer jogar para este ponto então troque.
GBA
Naturalmente, existem combinações dos dois, como visto nos jogos de plataforma que
usam 3D. O DS 3d não é muito poderoso, então alguns jogos optaram por fazer jogos do
tipo galeria de tiro de estilo mais tradicional, que eram camadas e sprites. Os fundos 3D
pré-renderizados apresentavam técnicas semelhantes vistas nos primeiros títulos de
rastreamento de masmorras, onde a câmera era movida de um ponto a um ponto fixo ou fixo
imagens isométricas eram possíveis, mas isso deixava a pessoa. primeiro
Alguns jogos GBA (principalmente versões de jogos de tiro em primeira pessoa da era Doom
1 mais antigos e lm tie em jogos que fazem coisas semelhantes) usaram modos bitmap para
tentar fazer 3D real e como uma transformação de perspectiva no estilo mode7 foi possível no
GBA (e DS ) métodos de estilo mode7 podem acontecer.
9.4 Plataforma
Para a maioria aqui, a grande distinção é entre 2D e 3D, mas isso pode não ser uma grande
diferença no que diz respeito a analisar que tipos de arquivos irão compor um jogo (ambos os
tipos geralmente terão níveis próprios (mesmo que sejam 3D, ainda assim) possuem alguns
dados de mapeamento para os objetos e itens), os objetos e itens e quaisquer animações que
eles fazem.
324
jogo, mas além de uma rotina de manipulação de coisas em um mapa mundial ou mapa de masmorra,
eles podem ter pouco efeito sobre os arquivos e seus conteúdos.
9.8 Quebra-cabeça
Uma das coisas comumente vistas em jogos de quebra-cabeça é que grande parte do texto é
renderizado como um gráfico real e armazenado de maneira semelhante aos gráficos,
geralmente porque não há texto suficiente para garantir um motor completo. Isso não quer dizer
que não possa haver texto no jogo, mas como renderizar uma fonte sofisticada exigiria um
grande esforço, grande parte do texto ainda pode ser gráfica. Eles também são alguns dos mais
prováveis de serem incorporados a outros gêneros (Puzzle Quest é um bom exemplo, embora vá
além e tenha havido alguns títulos de mahjong (não de paciência) embrulhados no que muitos
considerariam.
Em termos gerais, eles são subdivididos em duas classes
As versões computadorizadas de jogos tradicionais (ou mesmo de jogos não tão tradicionais, mas
que poderiam ter sido) variam tão amplamente quanto os próprios jogos. Na verdade, como fazer
um computador jogá-los é muitas vezes um campo da computação em si ou pelo menos um
problema reconhecido (Xadrez e Go são dois dos mais famosos, embora jogos como o mahjong
também sejam bem estudados). Em muitos casos, isso também faz com que a IA desses jogos
seja classificada como quebrada ou quebrada por modificações que a maioria dos humanos fica
feliz em lidar e podem nem perceber, a menos que reservem um tempo para realmente analisá-
la.
Os jogos de re-teste, por outro lado, tendem a ter mais em comum com outros tipos de jogos
(a série Kururin, por exemplo, é frequentemente classificada como um jogo de quebra-cabeça,
mas vê-lo rodar faria com que a maioria dos hackers o abordasse como fariam).
325
um jogo de plataforma). Embora tenha havido algumas tentativas de capturar jogos de
teste do mundo real, poucas funcionaram tão bem e muitas são realmente bastante
abstratas (considere o que Tetris realmente é por um momento).
10 sobras do desenvolvedor
Mencionado várias vezes neste documento e assunto de sites como The Cutting Room
Floor, bem como algo que muitos hackers de ROM gostam de encontrar e discutir dentro
de jogos. O interesse neles é triplo, pois as pessoas gostam muito de músicas, sprites e
coisas que não foram incluídas no jogo final. Do ponto de vista do programador, isso pode
dar pistas sobre como as coisas foram feitas (referências a outras) e como as coisas podem
ser encontradas. que ajudam diretamente na engenharia reversa de formatos, seja por
terem versões muito simplistas dos formatos (você pode fazer engenharia reversa de um
modelo inteiro de dragão se quiser todos os vários milhares de pontos, mas se os
desenvolvedores deixarem modelos com um cubo, uma esfera, um cilindro e talvez algo
nele seja a melhor aposta para examiná-lo) ou, ocasionalmente, ferramentas, registros e
partes deles que revelam coisas.
Princess Maker 4 tinha quase todo o código-fonte do jogo incluído. Zoids Saga deixou o
arquivo de log usado quando os sons foram gerados (um formato conhecido como
SMAP), que foi creditado como uma das principais coisas para ajudar na engenharia reversa
do formato SDAT original.
Advance Wars Days of Ruin/Dark con ict tinha um roteiro japonês completo no
jogo e o jogo nunca foi lançado no Japão.
Magi Nation no GBA tinha um roteiro completo em inglês, apesar de nunca ter
sido lançado fora do Japão
Observou-se desde o início que Mario Kart DS tinha níveis que não chegaram ao
corte final e isso estimulou muitos hackers.
326
11 soluções alternativas
Nem todas as ferramentas fazem o trabalho corretamente, às vezes uma pequena mudança pode
ser necessária, mas criar um programa para isso pode não ser tão fácil e no caso do SDAT e do
SDK 3D as ferramentas existentes podem ficar um pouco aquém. Para um bom hacker de ROM,
isso é apenas um obstáculo e eles usarão manualmente ou massagearão a entrada para obter o
que precisam.
Relacionado a isso está o método rápido e sujo. Onde pode ser bom ou até mesmo uma boa
forma ter uma ferramenta completa, se específica do jogo, para fazer seu trabalho, você pode
fazer muito com uma ferramenta básica que permite cortar arquivos, algumas pesquisas e uma
planilha que pode lidar com hexadecimal em algum nível. Fazer isso também permite que você
forneça os dados necessários para outro membro da equipe que possa estar lidando com a
edição de texto, gráficos ou níveis, enquanto você descobre como consertar a ROM depois de
recuperar as versões editadas ou mesmo se sua tarefa for apenas para extrair as várias partes de
um jogo (afinal, extrair sons, sprites e modelos é bastante popular) e pode localizar os arquivos,
apesar de ainda não entender, digamos, o sistema de ponteiro inicial (lembre-se de que muitos
arquivos do DS começam com um selo mágico de alguma forma).
Nenhum dos dois é tão glamoroso quanto codificar ferramentas personalizadas para realizar a tarefa, mas
todos os bons hackers de ROM são capazes de fazer isso (sendo um resultado básico de ser capaz de fazer
pensamento abstrato).
ˆOs formatos de arquivo tendem a ter tamanhos de arquivo, carimbos mágicos, cabeçalhos e similares
coisas. Encontre-os e você começará a obter o resto/boas coisas.
ˆOs formatos de arquivo tendem a corresponder bastante bem ao hardware ou a ser baseados em
formatos.
327
ˆMesmo que um jogo use uma codificação personalizada, provavelmente ainda terá mensagens de erro
e tal em ASCII ou Unicode.
ˆAs classes básicas de instrução permanecem as mesmas para cada CPU e também
são a base de todo programa.
ˆSe você conseguir um sistema antigo ou um sistema de potência semelhante, você conhece (embora
Os arquivos destinados aos consoles domésticos de última geração foram eliminados dos formatos
portáteis), muitos deles permanecem bastante semelhantes em termos de formatos de arquivos (o GBA,
o DS, o GameCube e o Wii compartilham muitos formatos de arquivos básicos, se não em comum, pelo
menos em espírito). ).
ˆO que foi dito acima vale em dobro para sistemas verdadeiramente novos (o impacto para novos sistemas
pode ser muito grande, mas os desenvolvedores provavelmente desenvolveram para ambos os sistemas).
ˆTécnicas como corrupção e busca relativa podem ser bastante rudimentares, mas
eles não são específicos do sistema.
de jogos
Embora você possa gastar muito do seu tempo como hacker de ROM ponderando sobre as
implicações interessantes dos programadores trabalhando em um jogo ou mesmo
corrigindo alguns de seus erros, existem igualmente alguns programadores muito
inteligentes trabalhando em jogos. Uma implicação disso é que os desenvolvedores
empregam todos os tipos de truques para permitir que contornem as limitações do sistema
e, ao fazê-lo, criem jogos melhores. Os métodos para fazer isso variam do óbvio ao
inspirado e vários serão abordados nesta seção. Os melhores jogos e designers de níveis
muitas vezes usarão esses truques e os aplicarão no jogo de tal forma que as próprias
soluções alternativas se tornem parte da experiência do jogo (exemplos serão mencionados
em suas respectivas seções) e, de fato, podem até se tornar tropos do jogo. gênero.
328
quando em estabelecimentos de jogos de azar ou na filosofia oposta adotada por alguns
métodos de jogo, as fichas não significam nada durante o jogo), muitos dos aspectos psicológicos
da teoria dos jogos, coisas como cronogramas de recompensa e acumulação de pontos/
experiência, economia comportamental, mas esses são abordados em outro lugar bastante
extensivamente, pois as pessoas estão usando-os com grande efeito e estudando-os
intensamente no momento.
Aqui em um jogo de corrida, a quantidade de voltas e reviravoltas nas colinas e outras coisas
(pontes e coisas assim) será mantida para minimizar a quantidade de tempo que o jogador gasta
olhando onde um ponto distante precisará ser renderizado.
Jogos como os primeiros jogos Metal Gear tornaram-se jogos furtivos devido à
incapacidade de renderizar e contabilizar grandes quantidades de inimigos na tela ao
mesmo tempo.
Design de mecanismo é na verdade um termo técnico que se enquadra na teoria
dos jogos e para este parágrafo e alguns dos seguintes a definição estará mais
alinhada com o termo/definição coloquial, mas alguns pequenos exemplos podem até
receber metade do que você compraria como novo (afinal, programar um modelo
econômico real é muito difícil)?
Variáveis ocultas e conceitos relacionados. Uma técnica/ideia interessante em que um conjunto de
regras de jogo não é totalmente explicado (embora ainda possa ser facilmente aparente para aqueles
que olham) e os jogadores são deixados a preencher os espaços em branco (ou não, conforme o caso).
Usado tanto que foi notado quando a paleta e a edição de imagens foram abordadas. Aqui,
uma quantidade limitada de memória (vídeo, armazenamento e outros) pode significar que
você pode estender seu aparente zoológico de monstros, habitantes da cidade e outros,
recolorindo-os. Também é um bom ponto colocar um pouco de geração processual/
regeneração dinâmica (especialmente em 3D, algumas mudanças nas cores e nos valores
de vários controles deslizantes podem ver um exército de clones se tornar uma nação de
indivíduos ou adicionar um pouquinho de a aleatoriedade na colocação de entidades
dentro de um grupo de inimigos em marcha faz muita diferença).
32Na verdade, as versões modernas do Tetris devem retirar aleatoriamente de um saco de escolhas possíveis antes de
reiniciar o saco e ir novamente para diminuir as possibilidades de um excesso aleatório da mesma peça, levando ao
potencial de contar peças para um jogador avançado semelhante àqueles que poderiam contar cartas (vários jogos de
tabuleiro também permitem sistemas semelhantes, geralmente cartas numeradas, para serem usadas no lugar dos
dados), o que significa que, no sentido mais estrito, uma corrida ruim será eventualmente seguida por uma boa corrida,
assumindo que as mesmas peças sejam desejadas.
329
13.0.3 Pré-renderização
Donkey Kong no SNES, assim como vários outros títulos da Rare, são
conhecidos por usar essas coisas, mas o jogo mais notável nos últimos
tempos seria a primeira série Resident Evil.
A franquia Wipeout (uma série de jogos de corrida onde você passa grande parte da corrida indo
muito, muito rápido) é notável por usar um efeito de desfoque ao correr em alta velocidade,
originalmente e de muitas maneiras até hoje, ela cobria as menores habilidades de renderização
do dispositivos em que foi portado.
Nevoeiro é um conceito relacionado que visa compensar a capacidade nada
brilhante de renderizar tudo, desde o seu ponto de vista até o horizonte.
Os jogos (especialmente em discos, mas os jogos baseados em cartuchos e discos rígidos não
estão imunes a isso) eventualmente precisam ser carregados e demoram o suficiente para que
isso não possa ser feito nos bastidores. Incontáveis exemplos aqui, desde práticas de
movimento em telas de carregamento, carregamento de túneis/pontes em vários jogos de
mundo aberto, animações e imagens usadas para mascarar o carregamento de ambos no jogo
(Portas Resident Evil são um bom exemplo, mas remonta a fitas onde os jogos C64 teriam
imagens e talvez até minijogos) e fora do jogo (os créditos do desenvolvedor no início de um jogo
frequentemente fazem mais do que indicar os nomes das empresas que contribuíram para
produzi-lo, pois qualquer pessoa que tente diminuir o tempo de carregamento inicial deve estar
ciente de).
330
Também aconteceu que um método de proteção contra cópia visto no DS no jogo Houkago
Shounen (sem dúvida o primeiro título a usar proteção contra cópia/AP) cronometrava o
salvamento e o carrinho de cinzas, que era mais rápido na maioria dos casos, seria detectado.
substituição de textura 2dVários métodos aqui, incluindo coisas básicas como camarotes,
mas também incluindo objetos distantes sendo substituídos por versões renderizadas em
2D do que parecem ser para economizar esforços de renderização.
Mapeamento mip de texturaLeia um livro do outro lado da sala. O texto que seria muito
claro quando visto de perto provavelmente parece um borrão cinza-preto até você se
aproximar. Da mesma forma, objetos distantes podem ter suas texturas reduzidas em
resolução, de modo que tenham que renderizar menos detalhes.
Renderização de ponto de vistaBastante óbvio, mas você só precisa renderizar tudo o que a
câmera vê. Alguns efeitos interessantes podem ser vistos onde jogos de gamecube que
normalmente eram feitos para usar uma proporção de aspecto 4:3 foram hackeados para usar
480p.
Seleção da face posteriorPartes de modelos 3D que não são renderizadas nesse ponto
geralmente ficam claras/não renderizadas na tentativa de reduzir a quantidade de detalhes
que precisam ser renderizados.
Usos alternativos do BackfaceSe você tiver um item que normalmente não é visto ou
não é visto de um determinado ângulo, você pode usar o verso para segurar outra
coisa. A placa de New Super Mario Brothers no DS é um bom exemplo.
Não renderizando objetos ocultosSurpreendentemente, isso não foi feito há relativamente pouco tempo
em muitos jogos 3D. Aqui, se um item estiver bloqueado para visualização, ele tenderá a não ser
renderizado.
331
A maioria dos sistemas mais antigos usará sombras circulares básicas ou as terá e um tipo de
sombra mais convencional ao mesmo tempo.
332
Um incidente um tanto relacionado pode ser os métodos pelos quais a Apple e a Microsoft
escolheram renderizar fontes, eles escolheram maneiras diferentes e no final, mesmo que não
soubessem ou conhecessem a lógica subjacente, parece que as pessoas acostumadas com
qualquer um dos sistemas escolheriam e a segunda alternativa é um tanto desagradável de ver.
Não é tanto um problema nos dispositivos portáteis, onde as fontes ruins geralmente são apenas
isso (muito estreitas, muito pequenas, mal coloridas, de outra forma ilegíveis...), mas nos consoles
domésticos que foram e ainda são forçados a ultrapassar os padrões de vídeo mais antigos. e os
mais recentes, apelidados de HD, falharam aqui no que diz respeito ao dimensionamento de suas
fontes.
Foi mencionado anteriormente, mas alguns sistemas mais antigos que foram forçados a
passar por métodos de RF para entrar em uma TV costumavam dizer que as coisas ficariam um
pouco mais confusas, de maneira semelhante à ideia de ruído mencionada na seção anterior.
333
Relacionado a isso está o conceito de que os desenvolvedores de jogos e as equipes de
localização geralmente estão sob muita pressão para lançar o jogo em uma determinada
data com certas restrições e, como tal, podem cortar atalhos que você pode explorar ou ter
que contornar.
334
funções de pesquisa complicadas, embora mesmo assim, com pessoas que tendem a ter
processadores multi-core na faixa de gigahertz, desde que funcione dentro de duas ordens de
magnitude de uma linguagem rápida, você provavelmente também conseguirá fazer isso. No que
diz respeito ao código aberto, a menos que você seja obrigado a fazê-lo (usando um programa
GPL como base para o seu, por exemplo), não há nenhum estigma real associado a manter as
fontes fechadas nos círculos de hackers de ROM (a maioria dos hackers de ROM que constroem
ferramentas não são estranhos para fazer um pedaço de código espaguete para realizar o
trabalho que não é útil para ninguém que esteja aprendendo ou que queira adaptar/adaptar seus
trabalhos), embora o código aberto seja sempre bem-vindo e encorajado (formatos de arquivos e
estruturas de dados/ROM, por outro lado, tendem querer ser compartilhado).
1. Deve ser capaz de abrir qualquer arquivo. Isso geralmente inclui SQL e outras
linguagens de tipo de banco de dados, linguagens focadas em matemática e
estatística (R e matlab, por exemplo) e outras linguagens de programação específicas
de campo (avisynth, por exemplo). Pode ser possível, mas será uma dor de cabeça no
longo prazo.
2. Deve ser capaz de fazer manipulação binária (deslocar e girar para baixo para
um nível de 1 bit e incluir lógica booleana (AND, XOR, OR, NOT...). Algumas
linguagens não funcionam bem aqui, mas a maioria delas geralmente é
descontado graças ao ponto acima. Igualmente, é melhor se tudo isso vier
como uma função padrão na linguagem ou nas bibliotecas básicas/padrão dela,
pois ter que fazer a sua própria não será divertido.
3. A criação de GUI deve ser relativamente fácil. As ferramentas de linha de comando são
ótimas e, se possível, incluem opções de linha de comando (você nunca sabe quando algo
vai querer ser colocado em um arquivo em lote) e você sempre pode construir um wrapper
em outra linguagem se seu programa for apenas de linha de comando, mas se você pode
usá-lo para construir uma GUI, bem como os pontos acima, você provavelmente tem uma
boa escolha para um idioma.
15.3Píton
Existem muitos livros, mas Think Python é um dos melhores para pessoas que conhecem
conceitos de computação e hacking de ROM e lutam para segurar as mãos, foco em que
muitos livros de programação aprendem. Em uma nota semelhante, grande parte do
Apress Beginning? As séries Do Iniciante ao Profissional também são boas para quem
conhece conceitos, mas só precisa de tudo um pouco focado. As videoaulas UNSW Comp
1917 também fornecem uma boa introdução a muitos conceitos.
16 hackeamento de programas de PC
Mais uma vez, esta é uma seção que vale a pena e contém documentos muito mais longos do que
esta, apenas sobre coisas individuais. Muito do que foi dito até agora se aplica à medida que
formatos de arquivos personalizados e comuns são usados, a compactação é usada e o assembly,
embora agora x86 e x64, está de volta aos cartões, mas há diferenças bastante grandes, assim
como o PC, seja qual for o sistema operacional. você usa tem um sistema de segurança e vários
métodos bastante complexos de trabalho, a criptografia (geralmente ruim e mais próxima da
ofuscação, que é outra coisa popular de se fazer e, como tal, capaz de ser derrotada) é popular e,
mais importante, as linguagens usadas e as APIs disponíveis são muito mais extensos.
335
Falando em segurança, esta seção não cobrirá alguns dos aspectos de nível mais alto
da proteção contra anulação, pois eles podem se envolver bastante e o campo está se
movendo bastante rapidamente, sem mencionar se você entendeu a idéia por trás de
alguns dos métodos de proteção contra anulação (com a nota adicional que alguns
programas de PC modernos podem buscar e buscam trechos de código realmente úteis da
Internet/redes) e como contornar a ofuscação (um truque interessante é otimizar o
programa), é melhor se aventurar na Internet e assistir a vídeos de conferências. Da mesma
forma, esta seção não cobrirá nada sobre programas de hacking na tentativa de colocar o
controle do computador nas mãos de um invasor (veja novamente os vídeos da conferência
e em outros lugares na Internet) ou qualquer coisa sobre trapaça (funciona da mesma
forma em qualquer sistema). Basicamente, esta seção tratará de engenharia reversa
puramente funcional de programas onde não existem tentativas mínimas de evitá-la.
16.1 Depuração
OllyDbgi é o que a maioria das pessoas tem como ferramenta de nível básico e fornece um bom
desmontador e ferramentas básicas de depuração/listagem.
O mecanismo de cheat funciona de maneira semelhante ao emuhaste abordado
na criação de cheats.
Mais abaixo na linha você tem coisas como
Visualizador de exportação de DLL para ter uma ideia aproximada de quais são as opções de entrada dos
arquivos DLL (e nomes de funções) e escopo.
GDIView (fontes abertas e como elas são definidas e coisas semelhantes) Visualizador de IO
de dispositivo para quando você precisar fazer engenharia reversa de drivers. A Nirsoft abriu
o visualizador para saber quais programas abriram o quê e também existe o Process Explorer
que faz coisas semelhantes.
Rec tenta transformar programas desenvolvidos em C novamente em algo semelhante
ao código-fonte.
Como mencionado, a grande ferramenta da qual a maioria das pessoas acaba tendo
uma cópia é o IDA, pois é tanto desmontador quanto depurador, o que permite muitas
habilidades aqui.
336
16.2 Descompilação
Tradicionalmente, a compilação era uma maneira única de33e, de fato, a maior parte da
programação paga gira ou talvez girasse em torno desse conceito. À medida que as pessoas
continuam a pesquisar em ciência da computação e usam linguagens de nível superior, a
descompilação, que é o ato de transformar um arquivo binário em código-fonte (provavelmente e
infelizmente sem comentários), torna-se cada vez mais viável. Isso não deve ser confundido com a
engenharia reversa como um todo, que sempre foi capaz de ser feita (na verdade, a maior parte
deste guia visa ensinar métodos para fazer isso), embora muitas vezes seja necessário muito
tempo para fazê-lo.
Linguagens interpretadasEm geral, qualquer coisa que não esteja diretamente relacionada a C ou
Assembly provavelmente será uma linguagem de script/interpretada, em oposição a uma
linguagem verdadeiramente compilada (as linhas podem ficar muito confusas, como o C#
provavelmente demonstrará). No entanto, em vez de deixá-lo como código legível por humanos,
haverá uma conversão para algo conhecido como bytecode (ainda é mais rápido manipular boas
seleções de números de comprimentos conhecidos do que analisar uma seleção completa de
texto legível por humanos que pode ter qualquer comprimento, embora existam também
ferramentas que ajudam a encurtar isso) que eventualmente serão transformadas em instruções
de montagem (às vezes no início da execução e às vezes logo antes de serem necessárias- uma
técnica conhecida comoJ.apenasEUnTcompilação ime), mas esse bytecode pode frequentemente
ser transformado novamente em código-fonte. Existem inúmeras linguagens interpretadas, mas
se você procurar por descompilador e pela linguagem interpretada que deseja descompilar,
geralmente obterá algo. Naturalmente, existem maneiras de ofuscar intencionalmente ou não
seu programa e, de fato, alguns dos tempos de execução de linguagens interpretadas oferecem
métodos para fazer isso em vários níveis.
C#Embora o C# seja, estritamente falando, uma linguagem compilada muito parecida com
os predecessores C e C++ e outros membros da família C, ele vem com uma coleção muito
grande de bibliotecas e tempos de execução (uma das principais razões para sua criação
foi, de fato, fornecer um coleção padrão deles para impedir que os programas tenham
muitas e variadas versões em todo o sistema) que podem ser chamados por programas
que usam a linguagem. Sabendo disso, diversas ferramentas foram criadas para remover
as chamadas e formular como elas são chamadas, deixando apenas o código personalizado
real que foi criado em primeiro lugar. Existe uma variedade de ferramentas para isso,
sendo algumas das mais populares ilspy (código aberto), dotPeek (freeware) e .NET Re ector
(pago)
33Existe um problema conhecido como problema da parada que gira em torno do fato de que você pode
produzir um algoritmo que não pode produzir um resultado a partir de todas as combinações de entradas (o
exemplo clássico, embora um pouco instável, seria qual é a raiz quadrada de menos um?) . Na prática, isso
normalmente é visto que você não pode avaliar um programa para todas as entradas possíveis e também se
baseia na ideia de que a entrada humana é meio difícil de imitar/considerar e é necessária para o funcionamento
do programa. No entanto, você pode aproximar soluções e executar programas na tentativa de obter uma saída
típica ou um conjunto restrito de entradas (embora você possa colocar entradas em uma função que causa um
erro, grande parte da programação moderna é projetada para evitar que aconteça - muitas vezes sendo tanto o
causas de travamentos e meios pelos quais os hackers podem fazer o que fazem), que é o que a pesquisa de
descompilação tem feito muito esforço, sem mencionar os modernos processadores X86 (e compiladores e
técnicas de codificação para eles) que tentam prever o mais lógico caminho e faça-o antes que seja solicitado.
337
CA descompilação de C++ não está tão avançada neste momento, mas a
descompilação de C está um pouco mais avançada do que no passado e
ferramentas como REC usadas em conjunto com os métodos de tipo de
depuração acima podem fazer muito para fugir da montagem.
338
Designers de níveisConcedido com a maior parte do hacking de ROM normalmente focado
em esforços de tradução ou projetos solo (ou seriam projetos solo com alguns membros da
equipe de habilidades semelhantes) e igualmente a maioria das pessoas que estão
pensando em hackear um jogo geralmente entenderão muito disso. em um nível intuitivo,
essa função não é tão comum quanto no desenvolvimento geral de jogos ou mesmo em
jogos de modificação para PC. No entanto, com os editores de níveis sendo criados e a
edição de níveis acontecendo, sem mencionar a ideia de conversões totais, a ideia de ter
um designer de níveis como membro da equipe talvez não seja tão estranha como era
antes. Além disso, a ideia da teoria dos jogos e da psicologia relacionada foi mencionada
algumas vezes no documento e relacionada a isso está a ideia do design do mecanismo,
pois do ponto de vista da programação multiplicar por 4 não é diferente de multiplicar por
7 (ignorando ideias como excesso de fluxo e limitações de tamanho), mas uma taxa de
geração de experiência quase o dobro de outro (veja alguns dos servidores de terceiros
para jogos como World of Warcraft e as críticas daqueles quando aumentam os
multiplicadores de experiência), uma progressão de pontuação duas vezes maior que a de
outro e especialmente em jogos como aqueles que podem ser descritos como estratégia
em tempo real, uma velocidade de batalha duas vezes maior que a de outro torna o jogo
radicalmente diferente.
gestor de projeto Na vida real, isso pode ser um papel, mas no que diz respeito ao hacking de ROM
Geralmente é uma função adotada por uma única pessoa dentro de uma equipe
(geralmente uma com uma função bastante limitada ou que nem sempre será necessária
ao longo de um projeto). Houve alguns gerentes de projeto em hacking de ROM, mas na
prática parecem ser aqueles que podem estar apenas emprestando algumas habilidades
para um projeto (digamos, um hacker capaz de editar texto e coisas assim, mas menos
habilidoso em montagem) ou alguém que tenha gerenciou anteriormente um projeto
(levando a uma situação complicada em que experiência é necessária, mas obter
experiência não acontecerá a menos que você já a tenha).
Gerenciamento de pipelineO caso mais básico disso é o software de injeção de texto. Os outros
membros da sua equipe podem ter habilidades incríveis em outras áreas e níveis razoáveis de
habilidade técnica, mas ainda assim pode ser sua responsabilidade. Se você tiver que editar
manualmente 3.000 arquivos separados, fica muito tedioso muito rápido, então automatizar um
pouco disso é importante e da mesma forma corta o caminho inverso e se o seu tradutor tiver
que visualizar e editar em um editor hexadecimal ou lidar com uma montanha de extras de
programação provavelmente não irá bem. Geralmente é aqui que aparecem o controle de versão
e coisas que um dia podem acabar como gráficos de Gantt.
339
ˆCVS Embora isto esteja rapidamente saindo de moda, pois não está sendo
desenvolvido, é um dos métodos mais antigos e tem uma longa história.
ˆMecurial Uma opção relativamente nova no controle de versão, mas como oferece vários recursos interessantes
recursos, tornou-se bastante popular a ponto de começar a acompanhar os
métodos mais antigos.
ˆsvn também conhecido como subversão. Já existe há um bom tempo e mais ou menos se tornou
o sucessor do CVS quando este parou de ser desenvolvido, embora os outros
mencionados tenham feito grandes progressos nele.
ˆPerforce O único software pago nesta lista (existem muitos outros softwares pagos
sistemas de controle de versão de software), mas bastante comumente usado no
desenvolvimento de jogos reais.
Além disso, seu tradutor pode desejar uma classe de ferramenta relacionada para usar para isso.
Eles são conhecidos como ferramentas CAT (tradução assistida por computador) e são
praticamente obrigatórios nos domínios da tradução profissional e visto que você no campo de
hacking de ROM está indo contra eles, vale a pena ver o que eles fizeram antes de você, mas isso
está coberto de volta em hackeamento de texto.
Voltando ao tópico, você pode usá-lo para armazenar especificações que você está fazendo
engenharia reversa, arte e música que você precisa converter, texto que você extraiu, programas
personalizados que você está fazendo para a edição (muitas vezes você pode construir um
programa básico e editar em especificações cs, portanto, poder voltar para seu próximo
programa/projeto é ótimo - lembre-se de que a programação sempre trata da reutilização de
códigos e conceitos existentes), bem como de patches concluídos como um todo. Feito
corretamente, também permitirá que outros continuem caso alguém desista.
Geralmente é considerado obrigatório para projetos de programação profissional hoje em
dia e voltando aos extras deixados pelo desenvolvedor, muitas vezes há pequenos arquivos
gerados por essas ferramentas que são deixados em ROMs que podem fornecer algumas dicas.
18.1 Links
Esta seção será principalmente um despejo de links de todos os links em outras partes deste
documento.
340
18.2 Leitura adicional
Há muito mais para aprender e que os jogos usarão com o passar do tempo (já
no lado do PC, os jogos são vistos usando técnicas de programação de banco de
dados, por exemplo, veja algumas das coisas que entraram na engenharia
reversa do World of Warcraft ).
A seção 3D abordou um pouco disso, mas com o hardware GBA e DS sendo tão
limitado, alguns dos aspectos dos modelos de texturização e iluminação foram, na melhor
das hipóteses, ignorados e, na pior, totalmente omitidos.
A teoria dos jogos foi brevemente mencionada e, embora seja bastante
perigoso aprender se você quiser continuar se divertindo (é realmente o
equivalente a ver como os truques são feitos), suas aplicações são quase infinitas.
De maneira semelhante, aprendendo sobre certos aspectos da psicologia a partir de
coisas mais práticas, como a psicologia visual, que informa muitos aspectos dos jogos
(sabemos que os humanos tendem a ver o movimento, mesmo que sejam quadros
estáticos reproduzidos a uma taxa de cerca de 17 quadros por segundo , sabemos que o
olho humano detecta melhor a luminância (brilho) do que as cores (e o azul é mais difícil de
detectar bem) e que certas partes do quadro têm maior probabilidade de não ter erros
notados (isso leva à ideia de a matriz de quantização)) até coisas mais filosóficas/
sociológicas, como O Herói de Mil Faces, de Joseph Campbell, que detalha as semelhanças
entre mitologias e pondera como elas podem se aplicar mais em geral aos humanos.
Relacionado a isso estão alguns dos aspectos do cinema e da fotografia e como as coisas
funcionam lá, pois os jogos são um meio amplamente visual e apesar de todo o conteúdo
técnico deste documento os jogos contam histórias e transmitem conceitos de forma
criativa e vendo o trabalho que o envolveu pegando um sprite 2D básico e usando-o para
gerar um modelo 3D, codificação manual em ASM usando áreas matemáticas recém-
desenvolvidas um mecanismo 3D aprimorado que ultrapassa os limites do hardware para
fornecer recursos não vistos deste lado de lugares com fazendas de renderização que não
funcionam bem do ponto de vista da narrativa, já que você não enquadrou a câmera
corretamente / usou a composição adequada é, em muitos aspectos, bastante trágico.
341
Parte IV
Formatos de arquivo (especificações,
métodos e formatos conhecidos).
Esta parte tem como objetivo detalhar alguns dos formatos de arquivo básicos que são
conhecidos quando se trata de imagens DS ROM, bem como alguns formatos mais
avançados e incomuns. Também aqui estão algumas visões gerais rápidas do hardware DS
e alguns guias para separar formatos.
342
Dois sites populares que hospedam muitas informações sobre formatos são o xentax.com e o
multimedia.cx (voltado mais para multimídia, mas que abriga uma grande quantidade de
informações sobre os formatos de música e vídeo usados em jogos).
DGTEFF tem um bom ponto de vista alternativo sobre algumas das técnicas
abordadas aqui e vale a pena ler o Guia De nitivo para Explorar Formatos de Arquivo.
21.1 Cabeçalhos
São encontrados na maioria das les e pode fazer muito. Geralmente contêm um comprimento
marcas voadoras, um total idêntico, um comprimento do próprio cabeçalho, localizações do
outras áreas que contêm informações, talvez le nomes ou pelo menos le identi -
algum tipo de cátion.
Também existem subcabeçalhos onde o formato pode ter um cabeçalho de informações
básicas e outro para realmente cobrir o conteúdo do arquivo.
Ignorar os formatos de embalagem, a menos que você esteja olhando dentro de um tamanho de
arquivo, pode dar uma pista sobre seu conteúdo. Por exemplo, se você estiver fazendo
engenharia reversa de um formato gráfico 2D e tiver dois arquivos pequenos e um arquivo
grande, o menor será uma disputa entre o layout e a paleta e o maior provavelmente será os
dados reais do bloco.
Supondo que seu arquivo não esteja compactado e mesmo que você não esteja procurando imagens, dê
uma olhada nele com um editor de blocos e uma paleta apropriada. Embora a maioria de nós reconheça
os números instintivamente, ainda estamos programados para procurar pistas visuais; portanto, se você
vir grandes pedaços de espaço em branco, provavelmente não está olhando para o texto e, da mesma
forma, poderá ter uma ideia dos padrões (cabeçalho, informações e mais cabeçalho e mais informações,
por exemplo). Os editores hexadecimais também oferecem frequentemente colorir a janela/porção
hexadecimal, embora isso não seja o ideal em muitos casos.
343
21.6 Ponteiros e afins
Na maioria das vezes você se encontrará extraindo dados sem muita ideia do que
os ponteiros dizem, mas no lado do ip, se você vir um grupo do que poderiam ser
ponteiros (geralmente após o cabeçalho inicial), tente segui-los e dividir o arquivo
de acordo.
22 Som
22.1 SDAT
SDAT é o formato de áudio dominante no DS e embora por si só não contenha
informações sonoras, ele contém as localizações e as relações entre os vários
arquivos que ele contém.
Localização Tamanho Descrição
22.2 SSEQ
Localização Tamanho Descrição
22.3 STRM
Ocasionalmente visto fora do arquivo SDAT. Oficialmente o único que o faz.
344
Localização Tamanho Descrição
22.4 SWAR
Localização Tamanho Descrição
22.5 SWAR
Localização Tamanho Descrição
345
22.6 BANCO
Localização Tamanho Descrição
346
Localização Tamanho Descrição
23 Gráficos
2d
23.1 NCER
Localização Tamanho Descrição
23.2 NANR
Localização Tamanho Descrição
347
23.3 NCGR
Localização Tamanho Descrição
23.4 RSN
Localização Tamanho Descrição
23,5 NMCR
Localização Tamanho Descrição
23.6 NFTR
Um formato de fonte comum visto no DS. Também viu algumas revisões.
348
Localização Tamanho Descrição
3d
23.7 NSBMD
Um formato de modelo 3D com uma seção de textura opcional (as cores dos materiais estão
disponíveis como texturas separadas).
Localização Tamanho Descrição
23.8 NSBTX
O arquivo NSBMD pode armazenar texturas para serem usadas, mas texturas separadas estão
disponíveis para aqueles que precisam delas.
Localização Tamanho Descrição
349
23.9 NSBCA
Um formato de animação para a família NSBMD. Vários desenvolvedores optaram por não usarg
NSBCA e escreveram seus próprios animações.
Localização Tamanho Descrição
24 Formato da embalagem
25 Texto
Embora a maior parte do texto seja personalizada e o que muitos hackers de ROM gastam grande
parte do seu tempo descobrindo, a Nintendo forneceu um formato de texto em seu SDK que
alguns desenvolvedores e muitas vezes a própria Nintendo usam.
25,1 BMG
A versão curta é unicode U16 empilhado sobre ponteiros às vezes relativos, às
vezes padrão, empilhados sobre um formato nitroSDK bastante padrão.
350
Localização Tamanho Descrição
351
Parte V
Glossário, índice e afins
26 Glossário
Um glossário de termos
ˆAbsoluto - também conhecido pelo nome de função ABS. Se um número for negativo ele
retorna o valor positivo (-4 vira 4) e se for positivo também retorna o
valor positivo. Útil ao lidar com valores assinados.
ˆAction replay - um dispositivo que efetua hacking de memória e captura todos os termos
para qualquer dispositivo ou código que também hackeie a memória para trapacear.
ˆAND - uma operação booleana. Classificadas como saídas altas se todas as entradas forem
alto. O inverso de NAND.
ˆAnti Pirataria - um termo usado para descrever uma técnica usada por desenvolvedores para
impedir que jogos copiados funcionem corretamente.
ˆASCII - um método antigo de 8 bits (7 bits na prática) para codificação de texto e des
padrão de fato para a maioria dos arquivos até que o texto adequado seja necessário.
352
ˆAssembly - uma série de linguagens de computador de baixo nível que correspondem di-
diretamente às instruções da máquina e que variam amplamente entre a arquitetura do
processador e do sistema.
ˆBinários - nome coletivo para os arquivos que abrigam a execução dos processadores de código
embora eles não precisem apenas armazenar o código do processador.
ˆTrapaça - refere-se à alteração dos valores da memória para efetuar mudanças dentro de um
jogo (action replay) ou alterar como o jogo vê a imagem ROM (game
genie)
ˆChecksum - um processo pelo qual os dados são analisados e certas coisas importantes
observado sobre isso que permite que outro (espero) detecte se ele foi alterado
desde que a soma de verificação foi feita.
ˆCompilador - uma ferramenta para transformar linguagens de alto nível em código que pode ser
rodar em um processador. Verbo é compilar.
ˆCompressão - o ato de reduzir o tamanho de um arquivo, mas permitir que ele ainda seja
ler. Duas categorias conhecidas como com e sem perdas, cada uma com muitos métodos.
Os métodos sem perdas comuns incluem LZ, U8 e Hu man.
353
ˆCrystaltile2 - ferramenta de hacking completa com visualizador e editor de montagem,
editor hexadecimal, editor de blocos líder de classe, visualizador de blocos e suporte para muitos
formatos DS.
ˆDecompiler - uma ferramenta para transformar código de máquina novamente em uma linguagem de alto nível.
medidor. Existe mais para linguagens de alto nível, pois a compilação é frequentemente
considerada um processo unilateral.
ˆDMA - acesso direto à memória. Um método pelo qual um dispositivo pode se mover
seções de dados na memória sem ter que passar pelo processador.
ˆELF - Um formato usado para armazenar código executável. Comumente usado pelo Unix
sistemas baseados (Linux e BSD), bem como desenvolvedores de homebrew.
ˆEmuhaste - uma ferramenta que se conecta a emuladores que permite a visualização da memória
e manipulação. Usado principalmente para fazer cheats, mas tem outros usos.
354
ˆFirmware - o código atualizável no DS e em muitos carrinhos de cinzas que pro-
fornece uma interface de usuário básica e algumas funções adicionais e gerenciamento de
sistema.
ˆPonto fixo - outro método pelo qual os computadores podem lidar com números não inteiros
números e significa literalmente o ponto após o qual a parte não inteira
começa. Visto nos sistemas DS 3D.
ˆFloat - o processo pelo qual a maioria dos computadores e programas lidam com não
números inteiros (inteiros).
ˆFurigana - uma chave de pronúncia para Kanji, mas na prática é frequentemente usada como
tipo de nota de rodapé.
ˆGame genie - nome para um dispositivo de uma empresa extinta que permitia
pessoas alterassem o que um console viu em um cartucho e captassem todos os termos para
códigos/dispositivos que fazem coisas semelhantes. Nome agora usado em um dispositivo estilo
action replay.
ˆHasteDS - um programa mais antigo que se conecta a emuladores para permitir o desenvolvimento
mento de cheats. Substituído por mais por Emuhaste.
ˆEditor hexadecimal - uma ferramenta que exibe o conteúdo bruto de um arquivo e geralmente
a localização nele e uma leitura usando uma determinada codificação, sendo o
padrão geralmente ASCII.
355
ˆHooking - o ato de fazer com que código extra seja executado onde não há abertura intencional
foi fornecido para isso.
ˆLinguagem interpretada - uma linguagem que é deixada como código-fonte ou uma linguagem próxima
equivalente até o tempo de execução. Java, Python, Lua e Lisp possuem opções
interpretadas.
ˆInterrupções - métodos pelos quais o código pode interromper a parte atualmente em execução
de código quando algo muda.
ˆIPS - formato de patch mais antigo de uso comum em hackeamento de ROM. Não está mais em
uso comum em sistemas modernos devido a limitações.
ˆISO - Nome de um organismo de padronização mundial, mas também se refere a uma cópia dos dados
de um pedaço de mídia óptica.
ˆLisp - uma linguagem de programação de alto nível muito extensível usada por alguns
de programas como o assembler ARMish.
ˆLua - uma linguagem de programação de alto nível que foi vista em alguns DS
jogos como Puzzle Quest.
ˆLZ77- uma variação da compressão LZ desenvolvida em 1977. Muitas vezes por engano
usado como um termo abrangente para compactação LZ moderna ou erroneamente como uma
alternativa ao LZSS.
356
ˆLZM - uma variação do tipo de compressão
ˆLZSS - um derivado do LZ77 (ele próprio uma versão do LZ) e base para alguns dos
os algoritmos de compressão GBA e DS.
ˆNAND - uma operação booleana. Classificadas como saídas altas se nenhuma das
as entradas são altas. O inverso da NAND e a operação fundamental a partir da qual todas
as outras operações booleanas podem ser construídas.
ˆNEF - originalmente um formato auxiliar de depuração interno da Nintendo que mais tarde foi obtido
suportado em no$gba e Crystaltile2.
ˆNitro hax - um programa que permitiu aos usuários do carrinho de cinzas no DS a capacidade
ter hacking de memória em jogos normais.
ˆNitro SDK - um termo comumente usado para descrever o kit de desenvolvimento Nin-
tendo é enviado para desenvolvedores licenciados que apresenta muitos tipos de arquivos.
ˆNOP – abreviação de Sem Operação. Uma instrução que não faz nada que
permite que as coisas sejam concluídas ou um hacker remova uma
instrução sem alterar o código a seguir.
ˆNOR - uma operação booleana. Classificadas como saídas altas se nenhuma das
insumos é alto. O inverso de OR.
ˆNOT - uma operação booleana. Classificadas como saídas altas se a entrada for baixa.
Também conhecido como invertido.
357
ˆollydbg - um programa comumente usado para analisar, fazer engenharia reversa e depurar
Arquivos executáveis do Windows.
ˆOR - uma operação booleana. Classificadas como saídas altas se alguma entrada for alta.
O inverso de NOR.
ˆPatching - a maioria dos hacks de ROM são distribuídos como listas de alterações e patches
ing é o ato de aplicar um patch. Refere-se também à remoção de medidas de
proteção.
ˆPCM - Uma forma de armazenar/codificar uma representação de uma onda de áudio eu.
Também é um formato de arquivo geral para alguns jogos como N+.
ˆPonteiro - um método pelo qual a localização dos dados é anotada. Pode ser usado
para formatos de arquivo, em código de máquina, em gráficos, em texto, em som e muito mais.
ˆROM - Memória somente leitura. Refere-se frequentemente à imagem ROM que é uma cópia
dos dados de um cartucho.
ˆGirar - o ato de mover bits em uma determinada quantidade em uma direção ou outra.
Bits que não estão no comprimento original retornam para o outro lado (1001 girado para a esquerda
torna-se 0011)
358
ˆRTC - relógio em tempo real. O processo de adicionar um relógio que sabe a hora
no dispositivo (e esperançosamente no mundo real) geralmente para adicionar
eventos de acordo. Visto no GBA onde era um extra no carrinho (precisando de
patches para rodar em carrinhos de cinzas sem o hardware para isso) e no DS onde
fazia parte do sistema principal.
ˆSetor - um método pelo qual pequenos números de endereço podem ser estendidos para
permitir um alcance maior.
ˆShift - o ato de mover bits em uma determinada quantidade em uma direção ou outra.
Os bits que não estão no comprimento original são perdidos.
ˆAssinatura - um processo de fazer uma soma de verificação, mas usando métodos de estilo de criptografia
ods (espero) significar que apenas alguém com as chaves relevantes pode gerar
novos cheques.
ˆSRAM - Economize RAM. Um tipo de memória de amplo uso usado pelo GBA e
vários outros sistemas e carrinhos de cinzas para salvar jogos. Famoso por precisar de
uma bateria para armazenar dados entre usos em muitas configurações.
ˆSSEQ - o formato de rastreador de estilo midi usado, mas o formato de som SDAT.
Vinculado ao Banco.
ˆTinke - Um dos kits de ferramentas de hacking de ROM de uso geral voltado para DS
jogos com suporte para vários letypes comuns e muito mais.
359
ˆVBA-SDL-h - o fork de hacking e depuração do emulador GBA VBA.
ˆXNOR - uma operação booleana. Classificadas como saídas altas se ambas as entradas forem
o mesmo. Inverso de XOR e também geralmente visto apenas em dois formulários de entrada.
ˆXOR - uma operação booleana. Classificadas como saídas altas se uma e única
uma entrada é alta. Geralmente visto apenas em dois formatos de entrada. O inverso de
XNOR.
360