Hacking Hacking with 3DS Save DeEncrypter

  • Thread starter Thread starter Immortal_no1
  • Start date Start date
  • Views Views 99,962
  • Replies Replies 243
  • Likes Likes 2
Status
Not open for further replies.
Immortal_no1 said:
Ok, I've uploaded an archive containing 3 Gamesaves for Super MonkeyBall 3D (UK).

Save1-AAAAAAAA.sav
Name: AAAAAAAA
Score: 74768

Save2-BBBBBBBB.sav
Name: BBBBBBBB
Score: 75060

Save3-CCCCCCCC.sav
Name: CCCCCCCC
Score: 75292

The archive contains the decrypted versions of these files along with the Reset.sav file to blank the card if anyone wants to give it a shot themselves.

The Saved data is between the values:
0x8000 -> 0x8FFF
The Scores above are at locations: 0x813C - 0x813E
The Checksum for these 4096 bytes is = EC07847ADD802BDDE3EC82AE490AA2D0BDB8FD4AB1C44FB5A5E6957CB02D3B8B
The Location of the CRC is at: 0x1C060
For example in Save3-CCCCCCCC.sav at address 0x813C you will see "1C 26 01" This is the Reverse Endian of the score, e.g ("01 26 1C" in hex and "75292" in decimal)

Can anyone see anything i'm missing? there are some areas that are different and 2 checksums that i can't see where they're calculated from at addresses 0x1C000 & 0x1C020

Download Files Here:

Just Recalculating the CRC after modifying it will result in a corrupted save, can anyone point me in the right direction? or am i the most experienced person here?

Wait, I thought you said you successfully re-CRC'd and re-encrypted Monkey Ball 3D except your modifications didn't do anything.

Also I found some cool differences between 2 backups of my Samurai Warriors game save. The one with 1 more item (and $100 less cash, which is virtually nothing in this game) is wildly different than the backup directly before it. The newer one (with the 1 extra item and $100 or so less cash) has several extra checksums, including at least 1 new one. (I only went through 12/48+ of the checksums) Basically what I saw was it wasn't modifying the checksums, it was adding more, at least, in this case.
 
What i said was "I modified Super Monkeyball 3D and re-encrypted the data and the game didn't say it was corrupt however my change didn't appear in the game, but the re-crc and re-encrypt worked. I believe there must be a CRC of the CRC data, or a Hash table that matches parts of the data which isn't being changed. If only i had a 3DS development cartridge Datasheet or even better a memory map document. Surely game developers have these, just have to wait for one to be leaked, otherwise it's hit and miss and recently it's been mostly misses."

I did successfully re-CRC and re-encrypt my Monkey Ball 3D game save after making a change to my score. The modifications didn't do anything and didn't show the change as i believe that the area which i changed was one of the backup areas which keeps the record from the last time the game was saved. (This is why you made 2 changes... more money and less money and yet your save increases in data, this would be because it's backing up the changes from the last save and it would increase the size of the header data and create more areas for the data.)
 
nekoakuma said:
haven't checked these forums in a while, but does this add anything?

if the links still work, my original ripped savs are in this thread:
http://gbatemp.net/t283529-nds-adaptor-plu...p;#entry3840241

where we tried to (unsuccessfully) edit and restore save files.

You've already posted this message, and i already replied that it

QUOTEI added posts to the end of that thread a couple of weeks ago, they way that it was being done was completely incorrect. Ridgeracer is slightly different as some of the data was stored on SD card also. But in total the data on the game save is CRC'd and that sata after being changed needs the checksum recalculated. there is another place which checks the checksum which is what i need to find. Once that can be calculated then games should be able to be modified correctly
 
Immortal_no1,

Okay gotcha it makes sense now to me :-) Let's just hope and pray someone will find an exploit really really soon or perhaps before x-mas when Nintendo will probably release some nice titles for the holidays lol. Thanks for the explain!
 
No problem, things are always easier with an explanation, i want an explanation on how the EEPROM in the save files is created :;(
 
Immortal_no1 said:
No problem, things are always easier with an explanation, i want an explanation on how the EEPROM in the save files is created :;(

Did you try asking Dr. Neo? He made an EEPROM dumping/writing tool so I assume he might know something of how the EEPROM in the save file is created.

EDIT: also can you make a tutorial of how you re-crc'd the "backup" portion of your Monkey Ball 3D save? It may be just for a backup, but practice makes perfect.
 
I'm in the process of writing a tutorial, it's indepth. As for asking Dr Neo, i don't believe that there's anything that he would be able to tell me about it, as dumping and writing the EEPROM isn't the same as knowing the data structure so you can manipulate it.
 
Game Save Re-CRC (Checksum re-hashing)

Required tools:
3DS Save De/Encrypter v1.5a
HXD or Hash Calc
NDS Adapter plus with firmware updated to v3.02

Load up 3DS Save De/Encrypter v1.5a
Click on the Experimental Button
Pic-1.jpg


Load the decrypted game save and the Checksums will be visable.
Pic-2.jpg


Our Score Data for Super MonkeyBall 3D is between the values:
0x8000 -> 0x8FFF

The Scores 75292 which is for "World 1" is at the location: 0x813C - 0x813E
If you look in the Experimental section of the application you can see the Checksum for this is =

098E0450538E9EDDB618729102712CC0F61C035F2CA48BB4B5BE9F04CE2A4115

The Location of the CRC is at: 0x1C060

So, first of all confirm the CRC value.
Load up the game save in HXD
Pic-3.jpg


Press CTRL+E to bring up the Goto window
Pic-4.jpg


Enter the Start-offset value as 8000
Enter the Length value as 1000
Make sure the hex 'radio button' is checked.
We should now see the End-offset value change to 8FFF
Press OK

Click on Analysis in the middle of the menu bar, and click on "Checksums..."
Select SHA-256 from the Available algorithms list and click on the OK button.
Pic-5.jpg


At the bottom of the HXD screen you will now see the SHA-256 checksum for the address 0x8000 - 0x8FFF
This appears as: 098E0450538E9EDDB618729102712CC0F61C035F2CA48BB4B5BE9F04CE2A4115 and matches the one from 3DS Save De/Encrypter.
Pic-6.jpg


Now press CTRL+G to bring up the Goto window.
Enter the CRC-offset value as 1C060 with the hex 'radio button' checked and the offset relative set to begin.
Press Enter


What we now see is the location of the CRC, and we can read the CRC off as:
09 8E 04 50 53 8E 9E DD B6 18 72 91 02 71 2C C0 F6 1C 03 5F 2C A4 8B B4 B5 BE 9F 04 CE 2A 41 15
Which is the same as the CRC we have from the area 0x8000-0x8FFF
Pic-7.jpg


So now we can find the CRC and we know how to make/check the CRC, so to modify the score...

At address 0x813C you will see "1C 26 01" This is the Reverse Endian of the score, e.g ("01 26 1C" in hex and "75292" in decimal) This is our score for World 1. If we change that to 80500 it would be "01 3A 74" in hex and "74 3A 01" with the Endian flipped. So if we replace "1C 26 01" with "74 3A 01". We then have to recalculate the checksum for 0x8000-0x8FFF.

Once again:
Press CTRL+E to bring up the Goto window
Enter the Start-offset value as 8000
Enter the Length value as 1000
Make sure the hex 'radio button' is checked.
We should now see the End-offset value change to 8FFF
Press OK

Click on Analysis in the middle of the menu bar, and click on "Checksums..."
Select SHA-256 from the Available algorithms list (it should still be selected) and click on the OK button.

Our SHA-256 Checksum will now replace the old one at the bottom of the screen. The checksum now reads: 23130E7CCE222C23E3CD54257CB1DA41B76B7406255EC193DE921722FF681101

So the next thing to do is go back to the location of the original checksum.
Press CTRL+G to bring up the Goto window.
Enter the CRC-offset value as 1C060 with the hex 'radio button' checked and the offset relative set to begin.
Press Enter

Right click on the checksum at the bottom of the screen in the Checksum window and click on copy.

Then Highlight the 0x20 byte checksum in the Hex window, right click on it and click on paste-insert.
Pic-8.jpg



Save the file out as a different name so you don't overwrite your original.

At this point in time in most cases the re-CRC of an area will result in a corrupted game save as there must be another check which is performed on the save. This is being looked into.

This same process can be used on the other areas found in the Experimental section.
There are Backup areas which we can seem to modify and the save will work afterwards however the change doesn't appear to do anything, this would be because it's a backup area and it's not in use.
 
Immortal_no1 said:
Ok, I've uploaded an archive containing 3 Gamesaves for Super MonkeyBall 3D (UK).

Save1-AAAAAAAA.sav
Name: AAAAAAAA
Score: 74768

Save2-BBBBBBBB.sav
Name: BBBBBBBB
Score: 75060

Save3-CCCCCCCC.sav
Name: CCCCCCCC
Score: 75292

The archive contains the decrypted versions of these files along with the Reset.sav file to blank the card if anyone wants to give it a shot themselves.

The Saved data is between the values:
0x8000 -> 0x8FFF
The Scores above are at locations: 0x813C - 0x813E
The Checksum for these 4096 bytes is = EC07847ADD802BDDE3EC82AE490AA2D0BDB8FD4AB1C44FB5A5E6957CB02D3B8B
The Location of the CRC is at: 0x1C060
For example in Save3-CCCCCCCC.sav at address 0x813C you will see "1C 26 01" This is the Reverse Endian of the score, e.g ("01 26 1C" in hex and "75292" in decimal)

Can anyone see anything i'm missing? there are some areas that are different and 2 checksums that i can't see where they're calculated from at addresses 0x1C000 & 0x1C020

Download Files Here:

Just Recalculating the CRC after modifying it will result in a corrupted save, can anyone point me in the right direction? or am i the most experienced person here?

compair 2 and 3


the only thing the header_entry say 1 is 1 2 is 2 etc

Ther may is some checksum in the sector_entry because the different entrys says something like that it

2
 
I think i understand what you're saying, your English is a little broken, understandable since it's your 2nd - 3rd language?

So i've compared 2 and 3, the header entry goes from 01 - 1F this is the same for all 3 saves.

There is a checksum entry in the sector_entry. These appear after the header_entry.

Can you explain the following section a little better as i'm not sure what you're saying:

2
 
I've uploaded an analysis of the file i'm working on, trying to see if the actual data that we know of is correct.

You can separate the data using the following structure. from 3dsbrew

uint8_t virt_sec; // Mapped to sector
uint8_t prev_virt_sec; // Physical sector previously mapped to
uint8_t phys_sec; // Mapped from sector
uint8_t prev_phys_sec; // Virtual sector previously mapped to
uint8_t phys_realloc_cnt; // Amount of times physical sector has been remapped
uint8_t virt_realloc_cnt; // Amount of times virtual sector has been remapped
uint8_t chksums[8];

At the bottom of the page i have included the differences in the Header between the 3 game saves.

Save3-CCCCCCCC-Analysis.pdf

Feedback wanted
 
ichichfly said:
Immortal_no1 said:
Ok, I've uploaded an archive containing 3 Gamesaves for Super MonkeyBall 3D (UK).

Save1-AAAAAAAA.sav
Name: AAAAAAAA
Score: 74768

Save2-BBBBBBBB.sav
Name: BBBBBBBB
Score: 75060

Save3-CCCCCCCC.sav
Name: CCCCCCCC
Score: 75292

The archive contains the decrypted versions of these files along with the Reset.sav file to blank the card if anyone wants to give it a shot themselves.

The Saved data is between the values:
0x8000 -> 0x8FFF
The Scores above are at locations: 0x813C - 0x813E
The Checksum for these 4096 bytes is = EC07847ADD802BDDE3EC82AE490AA2D0BDB8FD4AB1C44FB5A5E6957CB02D3B8B
The Location of the CRC is at: 0x1C060
For example in Save3-CCCCCCCC.sav at address 0x813C you will see "1C 26 01" This is the Reverse Endian of the score, e.g ("01 26 1C" in hex and "75292" in decimal)

Can anyone see anything i'm missing? there are some areas that are different and 2 checksums that i can't see where they're calculated from at addresses 0x1C000 & 0x1C020

Download Files Here:

Just Recalculating the CRC after modifying it will result in a corrupted save, can anyone point me in the right direction? or am i the most experienced person here?

compair 2 and 3


the only thing the header_entry say 1 is 1 2 is 2 etc

Ther may is some checksum in the sector_entry because the different entrys says something like that it

2
 
Immortal_no1 said:
ichichfly said:
Immortal_no1 said:
Ok, I've uploaded an archive containing 3 Gamesaves for Super MonkeyBall 3D (UK).

Save1-AAAAAAAA.sav
Name: AAAAAAAA
Score: 74768

Save2-BBBBBBBB.sav
Name: BBBBBBBB
Score: 75060

Save3-CCCCCCCC.sav
Name: CCCCCCCC
Score: 75292

The archive contains the decrypted versions of these files along with the Reset.sav file to blank the card if anyone wants to give it a shot themselves.

The Saved data is between the values:
0x8000 -> 0x8FFF
The Scores above are at locations: 0x813C - 0x813E
The Checksum for these 4096 bytes is = EC07847ADD802BDDE3EC82AE490AA2D0BDB8FD4AB1C44FB5A5E6957CB02D3B8B
The Location of the CRC is at: 0x1C060
For example in Save3-CCCCCCCC.sav at address 0x813C you will see "1C 26 01" This is the Reverse Endian of the score, e.g ("01 26 1C" in hex and "75292" in decimal)

Can anyone see anything i'm missing? there are some areas that are different and 2 checksums that i can't see where they're calculated from at addresses 0x1C000 & 0x1C020

Download Files Here:

Just Recalculating the CRC after modifying it will result in a corrupted save, can anyone point me in the right direction? or am i the most experienced person here?

compair 2 and 3


the only thing the header_entry say 1 is 1 2 is 2 etc

Ther may is some checksum in the sector_entry because the different entrys says something like that it

2
 
ADD3: what happend if you destroy the checksum in the sector_entry ?

The game save will be corrupted
 
Hi! I have a short question:
Your tool shows the FS entries ant their size, but why doesn't it show what the file contains?
 
lazymarek said:
Hi! I have a short question:
Your tool shows the FS entries ant their size, but why doesn't it show what the file contains?

Because at the moment the only way to show the data would be in hex and that wouldn't be useful to anyone at this point. What would be better is to show the addresses of the locations of the files so that they can be extracted. I'm looking into that at the moment. I'm a little tied up in checksums at the moment though. My brain wants to explode with all the data flowing through it.
 
QUOTE said:
What would be better is to show the addresses of the locations of the files so that they can be extracted.
Yeah, that would be cool!
Thanks for fast reply!
 
Immortal_no1 said:
lazymarek said:
Hi! I have a short question:
Your tool shows the FS entries ant their size, but why doesn't it show what the file contains?

Because at the moment the only way to show the data would be in hex and that wouldn't be useful to anyone at this point. What would be better is to show the addresses of the locations of the files so that they can be extracted. I'm looking into that at the moment. I'm a little tied up in checksums at the moment though. My brain wants to explode with all the data flowing through it.

You can't show one address for any file because they use Wear leveling that means that address you read from the file is a virtual address not physical it is like on the pc the mmu map physical ram to virtual addresses. example with other sector size and a possible map (on older games new games are more complicated) the 3ds reads in the first block block something like this sector 3 is maped to 6 and 8 to 5 etc. so if you say the file starts at 5ff9 and ends at 6100 than the 3ds knows 5xxx is sector 5 sector 5 is sector 8 onthe save so i read at 8ff9 than it cross the line to virtual 6000 than the 3ds say 6000 is sector 6 and physical 3 so I read from 3000. But I don't think the user knows that
 
Status
Not open for further replies.

Site & Scene News

Popular threads in this forum