Esses dias estava pensando em treinar um pouco engenharia reversa, então decidi procurar um jogo de Nintendo DS/DSi para fazer isso, fui a uma lista e comecei a verificar alguns jogos que utilizavam string no profile e dei de cara com esse jogo(que inclusive é um DSi Enhanced e tem uma versão Wii se não estou enganado), o jogo não é lá essas coisas interessante, pelo que eu entendi é um jogo para você basicamente chegar ao seu corpo ideal ou peso ideal, de qualquer maneira a ideia é bem por aí haha.
Com o jogo em mãos, utilizei o Desmume para emular, salvei um backup do save e temos apenas 8kb para trabalhar em cima, apesar de ser pouco ainda dá para fazer algumas coisas divertidas. Fui analisar o save e notei algumas coisas importantes, como 4 bytes fixos e 4 bytes que sempre alteravam com qualquer mudança feita no save(poderia ser qualquer tipo de checagem, algo próprio ou um crc, checksum e etc), para descobrir a estrutura do save utilizei o IDA Pro e abri o binário do jogo e comecei a analisar e achei a resposta, não foi uma tarefa difícil(posso dizer que foi algo meio trabalhoso para descobrir), de qualquer maneira a estrutura do save é algo simples, vou listar:
4 Bytes que é o Magic Num “GSID”, caso o jogo não encontre essa string, ele apenas descarta o save
4 Bytes que é um CRC32 com o tamanho do save in game
X Bytes(geralmente 1 byte) que é o tamanho do Save usando in Game
Para editar a string, basta mudar o que você deseja e fazer um CRC32 do tamanho do save a partir desse byte e *bingo*, conseguimos modificar a string, o próximo passo é determinar o endereço onde vai ficar nosso código, como teremos 8kb de EEPROM, você pode selecionar um endereço mais a frente do save, para ficar mais simples, O Desmume tem uma ferramenta para dumpar memória, basta dumpar e verificar com editor hexadecimal onde está seu save e escrever o endereço. O resto é o mesmo, editar a string e verificar o momento que o LR é re-escrito e depois saltar para sua região de código, o resultado ?
De qualquer forma, você tem 8kb para brincar com código, eu não tenho muito conhecimento com o DS/DSi, então não consegui fazer muita coisas impressionante, além disso procurei saber se jogos DSI Enhanced e até onde sei, o acesso ao SD é desativado quando o jogo inicializa.
Para quem quiser testar,:
https://github.com/St4rk/The-Biggest-Loser