International Patching System Format
____
\__/____)\____)\
___\____ \.___/1.1 - 12/24/94
/ .\| __/__ .\ International Patching System Format
/ _>\ |/ . _>\MindRape
\_ : ./ |\ : /
: . : :: :
. . .. .
. .
This goal of this document is to detail the internals of the International
Patching System (IPS) format.
IPS is a simple patching system that is used to change certain bytes that
have been changed. Instead of redistributing large binaries around, one
can distribute a much smaller IPS patch (depending on the number of
changes). It originated on the Amiga platform, where it was mainly used for distributing
cracks to pirated console games. However due to the generalization of the
format it can be used patch anything.
I would give the original author credit for creation of this format, but I
don't know who he is! If you can email me the correct information, I'll
promptly update this document.
In this version of this documentation the RLE compression scheme has been
left out. I have never seen an IPS implementation use this before.
An IPS patch can be of a variable size, but it can only address
16777215 bytes. This is because of the address bytes only being 3
bytes. And since there isn't strong support on other platforms
that use the IPS format, i doubt people will switch to a 4 byte
addressing scheme.
An IPS file is made up of individual patches, which we will
call clusters. Each cluster can only be 64K max in size, due
to the patch size being defined as 2 bytes.
The only way to determine how many clusters there are is to
go though the file, reading the Patch Size and skipping those
bytes until you read the address, and patch size again. Then
skip those byte, and keep going until you hit EOF marker and
it is at the end of the file.
IPS files have the extension of .IPS (i.e. smworld.ips).
Here is the format to an IPS file.
IPS Element
Description
Majic
This is the signature of a IPS patch. It is 5 bytes and should be the
word "PATCH".
Address
The location in the binary to patch. 3 chars.
Patch Size
The number of bytes to patch for this cluster. It is 2 bytes,
therefore 64K maximum in size.
Bytes to patch
These are the modified bytes that need to be patched. They are
patched at the above address.
Its size is variable, you can
determine it's length by looking at the Patch Size.
...
Address, Patch and Bytes to patch, repeated as many times as it wants.
EOF
This is the end of file marker. It is always located at the end of a
IPS patch. It could also be used to validate whether a IPS patch
is complete. 3 chars = "EOF"
Examples
Here are some example patches to give you an idea of what is going on
inside an IPS file.
The following example contains 10 patches, each patch is exactly one byte.
PATCHaaappbaaappbaaappbaaappbaaappbaaappbaaappbaaappbaaappbaaappbEOF
The following example contains 3 patches, each patch is of the following
byte sizes: 3, 10 and 5 bytes.
PATCHaaappbbbaaappbbbbbbbbbbaaappbbbbbEOF
Keys
Description
PATCH
This is the signature of a IPS file.
It always resides at the start of every IPS file.
aaa
Address (3 Bytes)
pp
Patch Size (2 Bytes)
b
These are the changed bytes that need to replace the one
in the orginal binary. There are pp number of these.
EOF
End of file marker.
Damaged Cybernetics is not connected or affiliated with any mentioned
company in any way. The opinions of Damaged Cybernetics do not reflect the
views of the various companies mentioned here. Companies and all products
pertaining to that company are trademarks of that company. Please contact
that company for trademark and copyright information.
© 1996 Damaged Cybernetics All Rights Reserved