That was actually a fun brain teaser.
Code:
python3 sgex.py rally2.bin
Save Game Extractor
(github.com/slinga-homebrew/Save-Game-Extractor)
Errors Corrected: 6
Transmitted Filename: RALLYPLUS_0
Transmitted Save Size: 5056
Transmitted MD5: 1884dd2a14312001e07dc1642e67c5ef
Computed MD5: 1884dd2a14312001e07dc1642e67c5ef
MD5 hashes validate, save is correct.
Wrote save game RALLYPLUS_0 to disk
If you are curious here's how I did it:
1) I reviewed all of the "### NOCARRIER ndata=130" values. Each transmission (except the last) should be 128 bytes + 2 sync bytes. I noticed the 6th one was only 129 so it clearly lost a byte.
2) I grabbed the entire block containing the missing byte. I then inserted a 0x00 at position 0-254 until Reed Solomon was able to decode. RS is able to recover bit flips not missing bytes.
3) Once I found an offset that worked I edited the rally.bin file and added a 0x00 there.
4) I was now able to run SGEX and RS was able to recover correctly