Yeah, never surrender. That’s our motto.
When we left, our checksum had started failing mysteriously partially down the file. We were checking further down because our hex editor said that a true CHK32 did not give the value the file was storing for the checksum. The game was afoot!
We tried a few permutations of “maybe the…”
byte order is reversed? nope
offset is no longer 4? nope
several other wild-ass-guesses? nope
Until we realized that in our initial notes, we’d commented that the checksum’s neighbor was also a suspicious-looking character. Change him – Ding, it works! Next, try a few more bytes to identify the “crossover” point. There we go.
Back to the hex editor, to checksum just that first part. Drat! Still doesn’t match the file checksum.
With the location of the “crossover”, and this new SUM32 failure from the hex editor, it’s totally obvious if you sit back and inspect the notes you should have taken.
- A crossover occurrs at right around 1/4 the file length.
- There are only two checksum dwords (not 4)
- At the 1/4 point crossover we stop having an effect on the dword we are calling chk1 and we begin having an effect on the dword we are calling chk2.
Got it yet? Well we always prefer to bash something wide open before we take the time to write trial code, so here’s more data if you need more clues.
- Yes, at the 1/2 file marker we switch back to chk1
- Yes, at the 3/4 file marker we switch back to chk2
So there you go: Break the file into 4 parts and SUM32 the dwords in the even blocks into chk1 and the odd blocks into chk2. If filelen % 16 !=0 then any extra dwords go on the 4th block.
I guess that SP forgot to disclose the MMP file checksum algorithm publicly, but since they based their code on GPL we were happy to take this opportunity to recover it for you. Always glad to help!
Here’s the source and some binaries (win/linx86) for the chkmmp tool. If you hex edited 8000_MMI.RAP, you would validate the checksum using
./chkmmp 8000_MMI.RAP
That usage will only warn you if it detects a failure. To update the file checksum to the proper value, attach the w (write) modifier to the end of the usage.
./chkmmp 8000_MMI.RAP
chkmmp source code and binaries
This is (again) not the prettiest code, but it functions. Feel free to change it to suit your purposes but you must leave greets to us in your tool. That’s etiquette, suckaz.
So go forth and hex edit some shit. We hereby grant you the ability to run that questionable code on your device.






Recent Comments