- Top 1 Fama · ★ 1.145
- Juntou-se
- 02 de Abril de 2019
- Postagens
- 271
- Bravecoins
- 259
- Área
- Programação
- Motor de jogo
- RPG Maker 2000
Aqui eu vou explicar de maneira pratica a estrutura de um arquivo IPS, como definir o endereço, a quantidade de bytes e como inserir os dados que vão sobrepor os originais.
Em geral as pessoas conhecem esse método como um meio de distribuir Hack-roms sem violar a propriedade intelectual (direitos autorais), mas na verdade isso pode ser usado em softwares ou mesmo arquivos de dados pequenos.
Não vou ensinar como localizar os endereços, essa tutorial é para quem já tem algum conhecimento de Hexadecimal ou leitura e edição direto na memória de um processo executável rodando no computador.
O arquivo sempre terá a extensão "ips" para facilitar para os softwares, mas na estrutura a divisão é feita da seguinte maneira:
O arquivo não se limita apenas à um endereço, cada endereço é o inicio de um seguimento, mas o endereço tem um formato de 24-bit em hexadecimal, por exemplo:
O formato do tamanho dos dados será de 16-bits, mas tratando como valor numérico ele poderá ir de 1 até 65535 bytes,
Os dados terão de ter justamente o tamanho declarado, exceto pelo ultimo seguimento, vamos usar como exemplo 17 bytes:
E pra definir o fim do arquivo será usando
Aqui vou mostrar um arquivo pronto no editor hexadecimal e mostrar como separar a estrutura dele só olhando.
O arquivo de exemplo será um Patch que eu criei para modificar o editor do RPG Maker 2000 1.62 e que pode ser baixado aqui:
https://condadobraveheart.com/threads/8755
Aqui está a estrutura dele em hexadecimal:
Veja que cada item corresponde à um caractere do lado, mas visualmente não parece tão simples, então vou separar em linhas:
Veja que a segunda linha começa com um endereço
O endereço seguinte é 18 89 1A, mas o tamanho é 5 (00 05), por que neste ponto a string que vai ser substituída é provavelmente para alguma caixa de texto do programa.
Os dados são
Cada linha é um seguimento, quando chegar na ultima será o fechamento do arquivo.
Com isso imagine enviar um arquivo e precisar corrigir apenas uma parte dele sem precisar obrigar o usuário baixar novamente já atualizado.
Os meus editores Hexadecimal online preferidos:
Ferramentas para aplicar IPS:
Em geral as pessoas conhecem esse método como um meio de distribuir Hack-roms sem violar a propriedade intelectual (direitos autorais), mas na verdade isso pode ser usado em softwares ou mesmo arquivos de dados pequenos.
Não vou ensinar como localizar os endereços, essa tutorial é para quem já tem algum conhecimento de Hexadecimal ou leitura e edição direto na memória de um processo executável rodando no computador.
O arquivo sempre terá a extensão "ips" para facilitar para os softwares, mas na estrutura a divisão é feita da seguinte maneira:
- Cabeçalho (esse só será declarado uma vez no começo)
- Endereço
- Tamanho dos dados
- Dados
- Fim do arquivo (esse só será declarado uma vez no final)
PATCH que em hexadecimal ficará assim:
Código:
50 41 54 43 48
O arquivo não se limita apenas à um endereço, cada endereço é o inicio de um seguimento, mas o endereço tem um formato de 24-bit em hexadecimal, por exemplo:
Código:
AB CD EF
O formato do tamanho dos dados será de 16-bits, mas tratando como valor numérico ele poderá ir de 1 até 65535 bytes,
00 00 até FF FF em hexadecimalOs dados terão de ter justamente o tamanho declarado, exceto pelo ultimo seguimento, vamos usar como exemplo 17 bytes:
Código:
63 6F 6E 64 61 64 6F 62 72 61 76 65 68 65 61 72 74
E pra definir o fim do arquivo será usando
EOF (End of File), mas em Hexadecimal:
Código:
45 4F 46
Aqui vou mostrar um arquivo pronto no editor hexadecimal e mostrar como separar a estrutura dele só olhando.
O arquivo de exemplo será um Patch que eu criei para modificar o editor do RPG Maker 2000 1.62 e que pode ser baixado aqui:
https://condadobraveheart.com/threads/8755
Aqui está a estrutura dele em hexadecimal:
Veja que cada item corresponde à um caractere do lado, mas visualmente não parece tão simples, então vou separar em linhas:
50 41 54 43 4809 6A B4 00 03 6F 67 6718 89 1A 00 05 6F 00 67 00 6718 89 40 00 05 6F 00 67 00 6718 8A C6 00 05 4F 00 47 00 4718 8A E0 00 05 6F 00 67 00 6718 8A EE 00 05 6F 00 67 00 6745 4F 46Veja que a segunda linha começa com um endereço
09 6A B4 e em seguida vem um numero ocupando 16-bit 00 03, esse será a quantidade de bytes lidos na sequencia e que são esses três 6F 67 67, eles correspondem a string ogg. Já que que é por que esse Patch substitui o termo "mp3" por "ogg".O endereço seguinte é 18 89 1A, mas o tamanho é 5 (00 05), por que neste ponto a string que vai ser substituída é provavelmente para alguma caixa de texto do programa.
Os dados são
6F 00 67 00 67Cada linha é um seguimento, quando chegar na ultima será o fechamento do arquivo.
Com isso imagine enviar um arquivo e precisar corrigir apenas uma parte dele sem precisar obrigar o usuário baixar novamente já atualizado.
Os meus editores Hexadecimal online preferidos:
Ferramentas para aplicar IPS:
- https://www.romhacking.net/utilities/240/
- https://www.marcrobledo.com/RomPatcher.js/
(Neste você vai poder saber o CRC32 do arquivo, assim evita que selecione uma versão incompatível)
Última edição:
