🤔 Para Refletir :
"Às vezes a vida parece um evento aleatório, mas lembre-se: até o evento aleatório tem suas recompensas!"
- riquecamarg0

Criação de arquivos IPS (International Patch System)

DevWithCoffee

Conde
Membro
Membro
Top 1 Fama · ★ 1.165
Juntou-se
02 de Abril de 2019
Postagens
271
Bravecoins
262
Á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:
  • 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)
O cabeçalho será sempre o mesmo, a palavra em caixa alta 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 hexadecimal

Os 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:
1793329495261.png


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 48
09 6A B4 00 03 6F 67 67
18 89 1A 00 05 6F 00 67 00 67
18 89 40 00 05 6F 00 67 00 67
18 8A C6 00 05 4F 00 47 00 47
18 8A E0 00 05 6F 00 67 00 67
18 8A EE 00 05 6F 00 67 00 67
45 4F 46

Veja 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 67

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:
 
Última edição:
Voltar
Superior Inferior