<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Immortal</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Immortal"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Immortal"/>
	<updated>2026-05-12T23:12:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Mii_Maker&amp;diff=4220</id>
		<title>Mii Maker</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Mii_Maker&amp;diff=4220"/>
		<updated>2012-11-02T16:28:43Z</updated>

		<summary type="html">&lt;p&gt;Immortal: /* Mii QR Code format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mii Maker&#039;&#039;&#039; lets you create Miis, like Wii Mii Channel. Here you can transfer Miis locally from other 3DSes, or from Wii Mii Channel. 3DS Miis can&#039;t be transfered to Wii Mii Channel, only from Wii.&lt;br /&gt;
&lt;br /&gt;
== Wii Mii Channel transfer protocol ==&lt;br /&gt;
&lt;br /&gt;
The Wii beacons are similar to the usual multi-cart NDS beacons, except: beacon_type is zero, and payload size is 0x14. The payload data is just the Wii UTF-16 nickname, with some extra unused zero data. The usual multi-cast NDS protocol is used for sending the 3DS nick to the Wii. After many keep-alive frames, it eventually sends a bunch of frames, each containing the whole Mii. There&#039;s a 6-byte header, followed by [http://wiibrew.org/wiki/Wiimote/Mii_Data Mii data]. At the end of these frames like most NDS frames is the 0200 byte marker.&lt;br /&gt;
&lt;br /&gt;
== Mii QR Code format ==&lt;br /&gt;
&lt;br /&gt;
3DS Mii QR is a standard 57x57 pixel Level 10 High ECC QR code with &#039;Mii&#039; logo in center (refer to [http://www.denso-wave.com/qrcode Denso-Wave Inc] web site for QR Code format specifications). It contain 112 byte of binary data. 3DS seems to have fully implemented QR-code decoder, as it can interpret such Mii binary data being encoded even in the smallest possible for that data size Level 6 Low ECC QR code. The data itself is encrypted, presumably AES-CTR since some xorpads can be determined from known plaintext here. The CTR might be based on data stored here?&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! &lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Mii ID (big-endian 32-bit unsigned integer)&lt;br /&gt;
&lt;br /&gt;
The most significant 3 bits determine whether the Mii is Special, Foreign, or Normal [http://www.davidhawley.co.uk/special-miis-gold-pants-and-creating.aspx]&lt;br /&gt;
&lt;br /&gt;
time_offset = (mii_id &amp;amp; 0x0FFFFFFF) * 2;&lt;br /&gt;
&lt;br /&gt;
time_offset is the time the Mii was created, represented as the number of seconds since 01/01/2010 00:00:00&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| High 4 octets of MAC address [http://www.adminsub.net/mac-address-finder/nintendo]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| Allow Copying&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0xE&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x2&lt;br /&gt;
| Bit-mapped: Birthday (4bit-day,5bit-month), Sex, Shirt, ??&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 0x14&lt;br /&gt;
| UTF-16 Mii Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x1&lt;br /&gt;
| Mii Sharing Value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 0xB&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Allow Copying&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 0x3&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x1&lt;br /&gt;
| Mii Sharing Value&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| 0x7&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x14&lt;br /&gt;
| UTF-16 Author Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E&lt;br /&gt;
| 0x2&lt;br /&gt;
| unknown (seems like the start of the checksum)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x10&lt;br /&gt;
| AES-CCM MAC?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Codes made from the same 3DS for the same Mii are encrypted with the same xorpad (you can recreate it by xoring with known values from this table).&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Friend_code&amp;diff=1377</id>
		<title>Friend code</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Friend_code&amp;diff=1377"/>
		<updated>2011-10-11T17:21:32Z</updated>

		<summary type="html">&lt;p&gt;Immortal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;32%&amp;quot; | User&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | Friend code&lt;br /&gt;
! width=&amp;quot;8%&amp;quot; |Region&lt;br /&gt;
! width=&amp;quot;30%&amp;quot; |Comment here&lt;br /&gt;
! |Mii image&lt;br /&gt;
|-&lt;br /&gt;
| Matyapiro31&lt;br /&gt;
|   &amp;lt;nowiki&amp;gt;4339-2455-6521&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Japan&lt;br /&gt;
| Let&#039;s hack 3DS! But how?&lt;br /&gt;
| [[File:HNI 0019.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
| Crediar&lt;br /&gt;
|   2535-3625-3742&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Kazuma&lt;br /&gt;
|   2277-6646-9164&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SaltyPancakes&lt;br /&gt;
|   0044-2836-4738&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Inspectah&lt;br /&gt;
|   3909-7495-9525&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| XanLoves&lt;br /&gt;
|   3995-6523-2805&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| muhkuh2005&lt;br /&gt;
|   2449-4689-9707&lt;br /&gt;
| Europe&lt;br /&gt;
| Germanfag&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| RHOPKINS13&lt;br /&gt;
|   4854-6450-1577&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
| [[File:RHOPKINS13_Mii.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
| fishuyo&lt;br /&gt;
|   2535-3630-0678&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| marcosxd&lt;br /&gt;
|   0216-0901-5448&lt;br /&gt;
| Mexico&lt;br /&gt;
| Crediar add me please, I already added you :)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mafril&lt;br /&gt;
|   5112-3460-1421&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
| [[File:Mafril_Mii.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
|Epicdude&lt;br /&gt;
|0130-1922-3022&lt;br /&gt;
|USA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|David&lt;br /&gt;
|3553-9962-0973&lt;br /&gt;
|USA&lt;br /&gt;
|Add me&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Muzer&lt;br /&gt;
| 3136-6762-5385&lt;br /&gt;
| Europe&lt;br /&gt;
| I have added everyone on this list who has a valid friend code (David and marcosxd don&#039;t) - so please add me if you get the chance.&lt;br /&gt;
| [[File:Muzer_Mii.jpg|120px]]&lt;br /&gt;
|-&lt;br /&gt;
| Rikku2000&lt;br /&gt;
|   &amp;lt;nowiki&amp;gt;1461-6425-0347&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Germany&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Elisherer&lt;br /&gt;
|0001-3489-0550&lt;br /&gt;
|USA&lt;br /&gt;
|None&lt;br /&gt;
|[[File:Elisherer_Mii.JPG|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|Liam87&lt;br /&gt;
|2664-2361-9358&lt;br /&gt;
|England&lt;br /&gt;
|Add me please, i have added everyone on here, thank you&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Luishane&lt;br /&gt;
|1289-8459-2533&lt;br /&gt;
|Venezuela&lt;br /&gt;
|Add me...thanks&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Immortal_no1&lt;br /&gt;
|0516-7257-0011&lt;br /&gt;
|UK&lt;br /&gt;
|Add me and PM me on gbatemp.net with yours or e-mail me on  &amp;quot;immortal_no1@hotmail.com&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Friend_code&amp;diff=1376</id>
		<title>Friend code</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Friend_code&amp;diff=1376"/>
		<updated>2011-10-11T17:20:35Z</updated>

		<summary type="html">&lt;p&gt;Immortal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;32%&amp;quot; | User&lt;br /&gt;
! width=&amp;quot;20%&amp;quot; | Friend code&lt;br /&gt;
! width=&amp;quot;8%&amp;quot; |Region&lt;br /&gt;
! width=&amp;quot;30%&amp;quot; |Comment here&lt;br /&gt;
! |Mii image&lt;br /&gt;
|-&lt;br /&gt;
| Matyapiro31&lt;br /&gt;
|   &amp;lt;nowiki&amp;gt;4339-2455-6521&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Japan&lt;br /&gt;
| Let&#039;s hack 3DS! But how?&lt;br /&gt;
| [[File:HNI 0019.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
| Crediar&lt;br /&gt;
|   2535-3625-3742&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Kazuma&lt;br /&gt;
|   2277-6646-9164&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| SaltyPancakes&lt;br /&gt;
|   0044-2836-4738&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Inspectah&lt;br /&gt;
|   3909-7495-9525&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| XanLoves&lt;br /&gt;
|   3995-6523-2805&lt;br /&gt;
| Europe&lt;br /&gt;
| None&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| muhkuh2005&lt;br /&gt;
|   2449-4689-9707&lt;br /&gt;
| Europe&lt;br /&gt;
| Germanfag&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| RHOPKINS13&lt;br /&gt;
|   4854-6450-1577&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
| [[File:RHOPKINS13_Mii.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
| fishuyo&lt;br /&gt;
|   2535-3630-0678&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| marcosxd&lt;br /&gt;
|   0216-0901-5448&lt;br /&gt;
| Mexico&lt;br /&gt;
| Crediar add me please, I already added you :)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Mafril&lt;br /&gt;
|   5112-3460-1421&lt;br /&gt;
| USA&lt;br /&gt;
| None&lt;br /&gt;
| [[File:Mafril_Mii.JPG]]&lt;br /&gt;
|-&lt;br /&gt;
|Epicdude&lt;br /&gt;
|0130-1922-3022&lt;br /&gt;
|USA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|David&lt;br /&gt;
|3553-9962-0973&lt;br /&gt;
|USA&lt;br /&gt;
|Add me&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Muzer&lt;br /&gt;
| 3136-6762-5385&lt;br /&gt;
| Europe&lt;br /&gt;
| I have added everyone on this list who has a valid friend code (David and marcosxd don&#039;t) - so please add me if you get the chance.&lt;br /&gt;
| [[File:Muzer_Mii.jpg|120px]]&lt;br /&gt;
|-&lt;br /&gt;
| Rikku2000&lt;br /&gt;
|   &amp;lt;nowiki&amp;gt;1461-6425-0347&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| Germany&lt;br /&gt;
| None&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Elisherer&lt;br /&gt;
|0001-3489-0550&lt;br /&gt;
|USA&lt;br /&gt;
|None&lt;br /&gt;
|[[File:Elisherer_Mii.JPG|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|Liam87&lt;br /&gt;
|2664-2361-9358&lt;br /&gt;
|England&lt;br /&gt;
|Add me please, i have added everyone on here, thank you&lt;br /&gt;
|-&lt;br /&gt;
|Luishane&lt;br /&gt;
|1289-8459-2533&lt;br /&gt;
|Venezuela&lt;br /&gt;
|Add me...thanks&lt;br /&gt;
|-&lt;br /&gt;
|Immortal_no1&lt;br /&gt;
|0516-7257-0011&lt;br /&gt;
|UK&lt;br /&gt;
|Add me and PM me on gbatemp.net with yours or e-mail me on  &amp;quot;immortal_no1@hotmail.com&amp;quot;&lt;br /&gt;
|-&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Savegames&amp;diff=1082</id>
		<title>Savegames</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Savegames&amp;diff=1082"/>
		<updated>2011-08-19T06:18:28Z</updated>

		<summary type="html">&lt;p&gt;Immortal: /* Partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Encryption ===&lt;br /&gt;
&lt;br /&gt;
On the 3DS savegames are stored much like on the DS, that is on a FLASH chip in the gamecart. On the DS these savegames were stored in plain-text but on the 3DS a layer of encryption was added. This is highly likely a streamcipher, as the contents of several savegames exhibit the odd behavior that xor-ing certain parts of the savegame together will result in the plain-text appearing.&lt;br /&gt;
&lt;br /&gt;
The reason this works is because the stream cipher used has a period of 512 bytes. That is to say, it will repeat the same keystream after 512 bytes. The way you encrypt with a stream cipher is you XOR your data with the keystream as it is produced. Unfortunately, if your streamcipher repeats and you are encrypting a known plain-text (in our case, zeros) you are basically giving away your valuable keystream.&lt;br /&gt;
&lt;br /&gt;
So how do you use this to decrypt a savegame on a 3DS? First off, you chunk up the savegame into 512 byte chunks. Then, you bin these chunks by their contents, discarding any that contain only FF. Now look for the most common chunk. This is your keystream. Now XOR the keystream with your original savegame and you should have a fully decrypted savegame. XOR with the keystream again to produce an encrypted savegame.&lt;br /&gt;
&lt;br /&gt;
=== Wear leveling ===&lt;br /&gt;
&lt;br /&gt;
The 3DS employs a wear leveling scheme on the savegame FLASH chips. This is done through the usage of blockmaps and a journal. The blockmap is located at offset 0 of the flash chip, and is immediately followed by the journal. The initial state is dictated by the blockmap, and the journal is then applied to that.&lt;br /&gt;
&lt;br /&gt;
The blockmap structure is simple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct header_entry {&lt;br /&gt;
        uint8_t chksums[8];&lt;br /&gt;
        uint8_t phys_sec;&lt;br /&gt;
        uint8_t alloc_cnt;&lt;br /&gt;
} __attribute__((__packed__));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The journal structure is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct sector_entry {&lt;br /&gt;
        uint8_t virt_sec;       // Mapped to sector&lt;br /&gt;
        uint8_t prev_virt_sec;  // Physical sector previously mapped to&lt;br /&gt;
        uint8_t phys_sec;       // Mapped from sector&lt;br /&gt;
        uint8_t prev_phys_sec;  // Virtual sector previously mapped to&lt;br /&gt;
        uint8_t phys_realloc_cnt;       // Amount of times physical sector has been remapped&lt;br /&gt;
        uint8_t virt_realloc_cnt;       // Amount of times virtual sector has been remapped&lt;br /&gt;
        uint8_t chksums[8];&lt;br /&gt;
} __attribute__((__packed__));&lt;br /&gt;
&lt;br /&gt;
struct long_sector_entry{&lt;br /&gt;
        struct sector_entry sector;&lt;br /&gt;
        struct sector_entry dupe;&lt;br /&gt;
        uint32_t magic;&lt;br /&gt;
}__attribute__((__packed__));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With magic being a constant 0x080d6ce0.&lt;br /&gt;
&lt;br /&gt;
=== Partitions ===&lt;br /&gt;
&lt;br /&gt;
There can be multiple partitions on the chip. For some games one is a backup partition, some other games seem to use only one partition, yet other games actually use multiple partitions. Partitions are defined at the start of the de-wearleveled blob. At offset 0x200 into the image, the DIFI blobs start. These 0x130 large blobs describe the partitions. Every DIFI blob describes a partition. In order to find the partitions, you will need the uint32_t at 0x9C into the DIFI block, and the uint32_t at 0xA4. The uint32_t at 0x9C describes the length of the hash table at the start of the partition, the uint32_t at 0xA4 is the length of the filesystem. Partitions are catted together, so the end of one partition is the beginning of the next. &lt;br /&gt;
&lt;br /&gt;
The first partition starts at 0x2000. The hashtable at the start of the partitions describe each in-use block in the partition with a SHA256 of the 0x1000 sized block.&lt;br /&gt;
&lt;br /&gt;
* The exact location of the partition can vary in each save/game.&lt;br /&gt;
* The first two hashes don&#039;t seem to be associated with any 0x1000 block.&lt;br /&gt;
* (edit) The last 0x20 bytes of the hash table, doesn&#039;t appear to change along with the rest of the data and repeats at the end of all other hash-tables, even when the hashes/data are different. (edit) The last 0x20 bytes of the hash table is NULL data, it is because the Hash table is only 0x1E0 in size and the XOR hash is 0x200 in size, so the 0x20 bytes you see at the end is actually 0x20 bytes of (FF) xor&#039;d with the last 0x20 bytes of the key. Thus the data recurs. --[[User:Immortal|Immortal]] 09:14, 19 August 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
The hash in the DISA blob hashes 300 bytes of the first DIFI blob.&lt;br /&gt;
&lt;br /&gt;
* If the uint32 before the hash in the DISA is 0x01, the first DIFI blob is hashed, if it&#039;s 0x00 the second DIFI is hashed. The offsets and size for each DIFI can be found beneath the DISA tag (10h, 20h and 18h, 30h relative to the DISA location). &lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
 &lt;br /&gt;
Savefiles are stored on the FLASH in a custom filesystem called SAVE. SAVE has a header which describes where the various bits of the filesystem live. The most important is the FST or filesystem table. You can find the FST by first finding the file base offset which is the offset to which all the entries in the FST are relative. The file base offset is a uint16_t at 0x58 from the filesystem start. The FST offset is a uint32_t at 0x6C and is in blocks (which are 0x200 bytes large).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the FST, parsing it is fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 struct fs_entry {&lt;br /&gt;
     u32 node_cnt;&lt;br /&gt;
     u8  filename[0x10];&lt;br /&gt;
     u32 index;&lt;br /&gt;
     u32 unk1; // magic?&lt;br /&gt;
     u32 block_offset;&lt;br /&gt;
     u32 file_size;&lt;br /&gt;
     u32 unk2;&lt;br /&gt;
     u32 unk3; // flags and/or date?&lt;br /&gt;
     u32 unk4;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first entry is the root directory, easily identifiable by the node_cnt being larger than 1. The node_cnt includes the root directory itself, so there are node_cnt - 1 files in the root directory. The entries that follow after the root directory are the actual files. Reading them out is as simple as taking the file base offset and adding (block_offset * 0x200) to it.&lt;br /&gt;
&lt;br /&gt;
Example from Super MonkeyBall 3D:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0003800: 04000000 21000000 00000000 00000000  ....!...........&lt;br /&gt;
0003810: 00000000 00000000 00000000 00000000  ................&lt;br /&gt;
0003820: 00000000 00000000 00000000 00000000  ................&lt;br /&gt;
0003830: 01000000 736d6233 64732e64 61740000  ....smb3ds.dat..&lt;br /&gt;
0003840: 00000000 00000000 d57b1100 05000000  .........{......&lt;br /&gt;
0003850: e4060000 00000000 c8cf0008 00000000  ................&lt;br /&gt;
0003860: 01000000 6d677265 706c6179 30302e64  ....mgreplay00.d&lt;br /&gt;
0003870: 61740000 01000000 d57b1100 09000000  at.......{......&lt;br /&gt;
0003880: 1c210000 00000000 cd331000 00000000  .!.......3......&lt;br /&gt;
0003890: 01000000 6d677265 706c6179 30312e64  ....mgreplay01.d&lt;br /&gt;
00038a0: 61740000 02000000 d57b1100 1a000000  at.......{......&lt;br /&gt;
00038b0: 1c210000 00000000 00000000 00000000  .!..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initialization ===&lt;br /&gt;
&lt;br /&gt;
When a save EEPROM contains all xFFFF blocks it&#039;s assumed uninitialized by the game cartridges and it initializes default data in place, without prompting the user. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[セーブデータ|Japanese]]&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Savegames&amp;diff=1081</id>
		<title>Savegames</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Savegames&amp;diff=1081"/>
		<updated>2011-08-19T06:13:51Z</updated>

		<summary type="html">&lt;p&gt;Immortal: /* Partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Encryption ===&lt;br /&gt;
&lt;br /&gt;
On the 3DS savegames are stored much like on the DS, that is on a FLASH chip in the gamecart. On the DS these savegames were stored in plain-text but on the 3DS a layer of encryption was added. This is highly likely a streamcipher, as the contents of several savegames exhibit the odd behavior that xor-ing certain parts of the savegame together will result in the plain-text appearing.&lt;br /&gt;
&lt;br /&gt;
The reason this works is because the stream cipher used has a period of 512 bytes. That is to say, it will repeat the same keystream after 512 bytes. The way you encrypt with a stream cipher is you XOR your data with the keystream as it is produced. Unfortunately, if your streamcipher repeats and you are encrypting a known plain-text (in our case, zeros) you are basically giving away your valuable keystream.&lt;br /&gt;
&lt;br /&gt;
So how do you use this to decrypt a savegame on a 3DS? First off, you chunk up the savegame into 512 byte chunks. Then, you bin these chunks by their contents, discarding any that contain only FF. Now look for the most common chunk. This is your keystream. Now XOR the keystream with your original savegame and you should have a fully decrypted savegame. XOR with the keystream again to produce an encrypted savegame.&lt;br /&gt;
&lt;br /&gt;
=== Wear leveling ===&lt;br /&gt;
&lt;br /&gt;
The 3DS employs a wear leveling scheme on the savegame FLASH chips. This is done through the usage of blockmaps and a journal. The blockmap is located at offset 0 of the flash chip, and is immediately followed by the journal. The initial state is dictated by the blockmap, and the journal is then applied to that.&lt;br /&gt;
&lt;br /&gt;
The blockmap structure is simple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct header_entry {&lt;br /&gt;
        uint8_t chksums[8];&lt;br /&gt;
        uint8_t phys_sec;&lt;br /&gt;
        uint8_t alloc_cnt;&lt;br /&gt;
} __attribute__((__packed__));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The journal structure is as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct sector_entry {&lt;br /&gt;
        uint8_t virt_sec;       // Mapped to sector&lt;br /&gt;
        uint8_t prev_virt_sec;  // Physical sector previously mapped to&lt;br /&gt;
        uint8_t phys_sec;       // Mapped from sector&lt;br /&gt;
        uint8_t prev_phys_sec;  // Virtual sector previously mapped to&lt;br /&gt;
        uint8_t phys_realloc_cnt;       // Amount of times physical sector has been remapped&lt;br /&gt;
        uint8_t virt_realloc_cnt;       // Amount of times virtual sector has been remapped&lt;br /&gt;
        uint8_t chksums[8];&lt;br /&gt;
} __attribute__((__packed__));&lt;br /&gt;
&lt;br /&gt;
struct long_sector_entry{&lt;br /&gt;
        struct sector_entry sector;&lt;br /&gt;
        struct sector_entry dupe;&lt;br /&gt;
        uint32_t magic;&lt;br /&gt;
}__attribute__((__packed__));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With magic being a constant 0x080d6ce0.&lt;br /&gt;
&lt;br /&gt;
=== Partitions ===&lt;br /&gt;
&lt;br /&gt;
There can be multiple partitions on the chip. For some games one is a backup partition, some other games seem to use only one partition, yet other games actually use multiple partitions. Partitions are defined at the start of the de-wearleveled blob. At offset 0x200 into the image, the DIFI blobs start. These 0x130 large blobs describe the partitions. Every DIFI blob describes a partition. In order to find the partitions, you will need the uint32_t at 0x9C into the DIFI block, and the uint32_t at 0xA4. The uint32_t at 0x9C describes the length of the hash table at the start of the partition, the uint32_t at 0xA4 is the length of the filesystem. Partitions are catted together, so the end of one partition is the beginning of the next. &lt;br /&gt;
&lt;br /&gt;
The first partition starts at 0x2000. The hashtable at the start of the partitions describe each in-use block in the partition with a SHA256 of the 0x1000 sized block.&lt;br /&gt;
&lt;br /&gt;
* The exact location of the partition can vary in each save/game.&lt;br /&gt;
* The first two hashes don&#039;t seem to be associated with any 0x1000 block.&lt;br /&gt;
&lt;br /&gt;
* (edit)The last 0x20 bytes of the hash table, doesn&#039;t appear to change along with the rest of the data and repeats at the end of all other hash-tables, even when the hashes/data are different. (edit) The last 0x20 bytes of the hash table is NULL data, it is because the Hash table is only 0x1E0 in size and the XOR hash is 0x200 in size, so the 0x20 bytes you see at the end is actually 0x20 bytes of (FF) xor&#039;d with the last 0x20 bytes of the key. Thus the data recurs. &lt;br /&gt;
&lt;br /&gt;
The hash in the DISA blob hashes 300 bytes of the first DIFI blob.&lt;br /&gt;
&lt;br /&gt;
* If the uint32 before the hash in the DISA is 0x01, the first DIFI blob is hashed, if it&#039;s 0x00 the second DIFI is hashed. The offsets and size for each DIFI can be found beneath the DISA tag (10h, 20h and 18h, 30h relative to the DISA location). --[[User:Immortal|Immortal]] 09:14, 19 August 2011 (GMT)&lt;br /&gt;
&lt;br /&gt;
=== Filesystem ===&lt;br /&gt;
 &lt;br /&gt;
Savefiles are stored on the FLASH in a custom filesystem called SAVE. SAVE has a header which describes where the various bits of the filesystem live. The most important is the FST or filesystem table. You can find the FST by first finding the file base offset which is the offset to which all the entries in the FST are relative. The file base offset is a uint16_t at 0x58 from the filesystem start. The FST offset is a uint32_t at 0x6C and is in blocks (which are 0x200 bytes large).&lt;br /&gt;
&lt;br /&gt;
Once you&#039;ve found the FST, parsing it is fairly straightforward.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 struct fs_entry {&lt;br /&gt;
     u32 node_cnt;&lt;br /&gt;
     u8  filename[0x10];&lt;br /&gt;
     u32 index;&lt;br /&gt;
     u32 unk1; // magic?&lt;br /&gt;
     u32 block_offset;&lt;br /&gt;
     u32 file_size;&lt;br /&gt;
     u32 unk2;&lt;br /&gt;
     u32 unk3; // flags and/or date?&lt;br /&gt;
     u32 unk4;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first entry is the root directory, easily identifiable by the node_cnt being larger than 1. The node_cnt includes the root directory itself, so there are node_cnt - 1 files in the root directory. The entries that follow after the root directory are the actual files. Reading them out is as simple as taking the file base offset and adding (block_offset * 0x200) to it.&lt;br /&gt;
&lt;br /&gt;
Example from Super MonkeyBall 3D:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0003800: 04000000 21000000 00000000 00000000  ....!...........&lt;br /&gt;
0003810: 00000000 00000000 00000000 00000000  ................&lt;br /&gt;
0003820: 00000000 00000000 00000000 00000000  ................&lt;br /&gt;
0003830: 01000000 736d6233 64732e64 61740000  ....smb3ds.dat..&lt;br /&gt;
0003840: 00000000 00000000 d57b1100 05000000  .........{......&lt;br /&gt;
0003850: e4060000 00000000 c8cf0008 00000000  ................&lt;br /&gt;
0003860: 01000000 6d677265 706c6179 30302e64  ....mgreplay00.d&lt;br /&gt;
0003870: 61740000 01000000 d57b1100 09000000  at.......{......&lt;br /&gt;
0003880: 1c210000 00000000 cd331000 00000000  .!.......3......&lt;br /&gt;
0003890: 01000000 6d677265 706c6179 30312e64  ....mgreplay01.d&lt;br /&gt;
00038a0: 61740000 02000000 d57b1100 1a000000  at.......{......&lt;br /&gt;
00038b0: 1c210000 00000000 00000000 00000000  .!..............&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initialization ===&lt;br /&gt;
&lt;br /&gt;
When a save EEPROM contains all xFFFF blocks it&#039;s assumed uninitialized by the game cartridges and it initializes default data in place, without prompting the user. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[セーブデータ|Japanese]]&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1080</id>
		<title>Talk:Savegames</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1080"/>
		<updated>2011-08-18T07:10:51Z</updated>

		<summary type="html">&lt;p&gt;Immortal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unknowns:&lt;br /&gt;
* Hashes at the end of each DIFI blob.&lt;br /&gt;
* How order / location of hash vs. partitioned blocks is determined. (since not sequentially).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think there should be a page with infos on how to dump/restore saves.&lt;br /&gt;
[[メインページ|Matyapiro]]:So then,I show you how to do dump and restore saves.&lt;br /&gt;
First,you should have either Nintendo DS/Lite or NDS Adapter a tool to dump DS saves.&lt;br /&gt;
It can restore saves,but Almost saves cannot dump with NDS Adapter,but some of them can.&lt;br /&gt;
If you have Nintendo DS or DS Lite,you should try DSaveManager.&lt;br /&gt;
It uses FTP to dump saves,only dump. Last,I show you another save backup tool for DS. NDS Backup Tool by Rudolph. Eepinator by WinterMute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hardware:&lt;br /&gt;
* NDS Adapter Plus (by hkems)&lt;br /&gt;
* DS/DSLite &amp;amp; DSaveManager&lt;br /&gt;
* Neo SMS4 (by neoflash, untested)&lt;br /&gt;
&lt;br /&gt;
But I cannot find any key word like player name,high score or play time&lt;br /&gt;
if I decrypt the save.&lt;br /&gt;
&lt;br /&gt;
How do you think about whether any other encryption or special way to read/write save used ?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
&lt;br /&gt;
* I found those things in a SSFIV saved game...&lt;br /&gt;
&lt;br /&gt;
The important offsets are usually constant, the values change, it&#039;s not hard to look for an offset of data that&#039;s changing predictably after you re-save. &lt;br /&gt;
&lt;br /&gt;
Sometimes you have to use your imagination. To find 20,000 points in SSFIV, you&#039;d search for &amp;quot;0xC8&amp;quot; ( 200 in decimal == &amp;quot;20,000&amp;quot; in game ) because it stores the points in multiples of 100. It&#039;s easier to see if you&#039;re editing saves in front of yourself and constantly making minor changes to it - to see where those changes show up later. --jl&lt;br /&gt;
&lt;br /&gt;
So we need analyze project with each save.?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Only if you&#039;re trying to figure out where the game data is. Just common sense.&lt;br /&gt;
* You can examine each save manually after making small changes ( while playing with it on the 3DS ) but we still don&#039;t know what all the hashes are being used for.&lt;br /&gt;
&lt;br /&gt;
spell error?What&#039;s this?&lt;br /&gt;
~Partitions are &amp;quot;catted&amp;quot; together　&lt;br /&gt;
[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Con&#039;&#039;&#039;cat&#039;&#039;&#039;enated. Attached, joined, appended. One follows after the other. lol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I looked into that blockmap structure thing, but I fear I didn&#039;t get it right...&lt;br /&gt;
* sectors would be 4096 bytes. The Rayman 3D save is 128mb and has 31 blockmap entries; the Ridge Racer 3D save is 1mb but only has 127 blockmap entries (however the second half of that save is mostly a mirror of the first half, except for the first (special) sector).&lt;br /&gt;
* the dword at the beginning of the image tells the sector size (1&amp;lt;&amp;lt;val = sector size)?&lt;br /&gt;
* blockmap entries are phys_sec,alloc_cnt,checksum instead of checksum,phys_sec,alloc_cnt. There are then two spare bytes between the blockmap and the journal.&lt;br /&gt;
* bit7 of phys_sec in blockmap entries is set when the entry&#039;s checksum isn&#039;t zero&lt;br /&gt;
--[[User:Luigi2us|Luigi2us]] 18:29, 4 August 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3DS Save De/Encrypter&lt;br /&gt;
&lt;br /&gt;
3DS Save De/Encrypter application needs useful info on the header Blockmap\Journal foe save modification. I&#039;m so close i can feel it.&lt;br /&gt;
--[[User:Immortal|Immortal]] 10:10, 18 August 2011 (GMT)&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1079</id>
		<title>Talk:Savegames</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1079"/>
		<updated>2011-08-18T07:10:02Z</updated>

		<summary type="html">&lt;p&gt;Immortal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unknowns:&lt;br /&gt;
* Hashes at the end of each DIFI blob.&lt;br /&gt;
* How order / location of hash vs. partitioned blocks is determined. (since not sequentially).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think there should be a page with infos on how to dump/restore saves.&lt;br /&gt;
[[メインページ|Matyapiro]]:So then,I show you how to do dump and restore saves.&lt;br /&gt;
First,you should have either Nintendo DS/Lite or NDS Adapter a tool to dump DS saves.&lt;br /&gt;
It can restore saves,but Almost saves cannot dump with NDS Adapter,but some of them can.&lt;br /&gt;
If you have Nintendo DS or DS Lite,you should try DSaveManager.&lt;br /&gt;
It uses FTP to dump saves,only dump. Last,I show you another save backup tool for DS. NDS Backup Tool by Rudolph. Eepinator by WinterMute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hardware:&lt;br /&gt;
* NDS Adapter Plus (by hkems)&lt;br /&gt;
* DS/DSLite &amp;amp; DSaveManager&lt;br /&gt;
* Neo SMS4 (by neoflash, untested)&lt;br /&gt;
&lt;br /&gt;
But I cannot find any key word like player name,high score or play time&lt;br /&gt;
if I decrypt the save.&lt;br /&gt;
&lt;br /&gt;
How do you think about whether any other encryption or special way to read/write save used ?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
&lt;br /&gt;
* I found those things in a SSFIV saved game...&lt;br /&gt;
&lt;br /&gt;
The important offsets are usually constant, the values change, it&#039;s not hard to look for an offset of data that&#039;s changing predictably after you re-save. &lt;br /&gt;
&lt;br /&gt;
Sometimes you have to use your imagination. To find 20,000 points in SSFIV, you&#039;d search for &amp;quot;0xC8&amp;quot; ( 200 in decimal == &amp;quot;20,000&amp;quot; in game ) because it stores the points in multiples of 100. It&#039;s easier to see if you&#039;re editing saves in front of yourself and constantly making minor changes to it - to see where those changes show up later. --jl&lt;br /&gt;
&lt;br /&gt;
So we need analyze project with each save.?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Only if you&#039;re trying to figure out where the game data is. Just common sense.&lt;br /&gt;
* You can examine each save manually after making small changes ( while playing with it on the 3DS ) but we still don&#039;t know what all the hashes are being used for.&lt;br /&gt;
&lt;br /&gt;
spell error?What&#039;s this?&lt;br /&gt;
~Partitions are &amp;quot;catted&amp;quot; together　&lt;br /&gt;
[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Con&#039;&#039;&#039;cat&#039;&#039;&#039;enated. Attached, joined, appended. One follows after the other. lol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I looked into that blockmap structure thing, but I fear I didn&#039;t get it right...&lt;br /&gt;
* sectors would be 4096 bytes. The Rayman 3D save is 128mb and has 31 blockmap entries; the Ridge Racer 3D save is 1mb but only has 127 blockmap entries (however the second half of that save is mostly a mirror of the first half, except for the first (special) sector).&lt;br /&gt;
* the dword at the beginning of the image tells the sector size (1&amp;lt;&amp;lt;val = sector size)?&lt;br /&gt;
* blockmap entries are phys_sec,alloc_cnt,checksum instead of checksum,phys_sec,alloc_cnt. There are then two spare bytes between the blockmap and the journal.&lt;br /&gt;
* bit7 of phys_sec in blockmap entries is set when the entry&#039;s checksum isn&#039;t zero&lt;br /&gt;
--[[User:Luigi2us|Luigi2us]] 18:29, 4 August 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3DS Save De/Encrypter:&lt;br /&gt;
3DS Save De/Encrypter application needs useful info on the header Blockmap\Journal foe save modification. I&#039;m so close i can feel it.&lt;br /&gt;
--[[User:Immortal|Immortal]] 10:10, 18 August 2011 (GMT)&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1078</id>
		<title>Talk:Savegames</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Savegames&amp;diff=1078"/>
		<updated>2011-08-18T07:08:27Z</updated>

		<summary type="html">&lt;p&gt;Immortal: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unknowns:&lt;br /&gt;
* Hashes at the end of each DIFI blob.&lt;br /&gt;
* How order / location of hash vs. partitioned blocks is determined. (since not sequentially).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I think there should be a page with infos on how to dump/restore saves.&lt;br /&gt;
[[メインページ|Matyapiro]]:So then,I show you how to do dump and restore saves.&lt;br /&gt;
First,you should have either Nintendo DS/Lite or NDS Adapter a tool to dump DS saves.&lt;br /&gt;
It can restore saves,but Almost saves cannot dump with NDS Adapter,but some of them can.&lt;br /&gt;
If you have Nintendo DS or DS Lite,you should try DSaveManager.&lt;br /&gt;
It uses FTP to dump saves,only dump. Last,I show you another save backup tool for DS. NDS Backup Tool by Rudolph. Eepinator by WinterMute&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hardware:&lt;br /&gt;
* NDS Adapter Plus (by hkems)&lt;br /&gt;
* DS/DSLite &amp;amp; DSaveManager&lt;br /&gt;
* Neo SMS4 (by neoflash, untested)&lt;br /&gt;
&lt;br /&gt;
But I cannot find any key word like player name,high score or play time&lt;br /&gt;
if I decrypt the save.&lt;br /&gt;
&lt;br /&gt;
How do you think about whether any other encryption or special way to read/write save used ?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
&lt;br /&gt;
* I found those things in a SSFIV saved game...&lt;br /&gt;
&lt;br /&gt;
The important offsets are usually constant, the values change, it&#039;s not hard to look for an offset of data that&#039;s changing predictably after you re-save. &lt;br /&gt;
&lt;br /&gt;
Sometimes you have to use your imagination. To find 20,000 points in SSFIV, you&#039;d search for &amp;quot;0xC8&amp;quot; ( 200 in decimal == &amp;quot;20,000&amp;quot; in game ) because it stores the points in multiples of 100. It&#039;s easier to see if you&#039;re editing saves in front of yourself and constantly making minor changes to it - to see where those changes show up later. --jl&lt;br /&gt;
&lt;br /&gt;
So we need analyze project with each save.?[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Only if you&#039;re trying to figure out where the game data is. Just common sense.&lt;br /&gt;
* You can examine each save manually after making small changes ( while playing with it on the 3DS ) but we still don&#039;t know what all the hashes are being used for.&lt;br /&gt;
&lt;br /&gt;
spell error?What&#039;s this?&lt;br /&gt;
~Partitions are &amp;quot;catted&amp;quot; together　&lt;br /&gt;
[[User talk:Matyapiro31|Matyapiro]]&lt;br /&gt;
* Con&#039;&#039;&#039;cat&#039;&#039;&#039;enated. Attached, joined, appended. One follows after the other. lol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I looked into that blockmap structure thing, but I fear I didn&#039;t get it right...&lt;br /&gt;
* sectors would be 4096 bytes. The Rayman 3D save is 128mb and has 31 blockmap entries; the Ridge Racer 3D save is 1mb but only has 127 blockmap entries (however the second half of that save is mostly a mirror of the first half, except for the first (special) sector).&lt;br /&gt;
* the dword at the beginning of the image tells the sector size (1&amp;lt;&amp;lt;val = sector size)?&lt;br /&gt;
* blockmap entries are phys_sec,alloc_cnt,checksum instead of checksum,phys_sec,alloc_cnt. There are then two spare bytes between the blockmap and the journal.&lt;br /&gt;
* bit7 of phys_sec in blockmap entries is set when the entry&#039;s checksum isn&#039;t zero&lt;br /&gt;
--[[User:Luigi2us|Luigi2us]] 18:29, 4 August 2011 (CEST)&lt;br /&gt;
&lt;br /&gt;
3DS Save De/Encrypter application needs useful info on the header Blockmap\Journal foe save modification. I&#039;m so close i can feel it.&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_Save_DeEncrypter3DS&amp;diff=1045</id>
		<title>3DS Save DeEncrypter3DS</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_Save_DeEncrypter3DS&amp;diff=1045"/>
		<updated>2011-08-05T14:06:13Z</updated>

		<summary type="html">&lt;p&gt;Immortal: just removed no essential old info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox homebrew&lt;br /&gt;
| title       = 3DS Save DeEncrypter&lt;br /&gt;
| image       = &lt;br /&gt;
| type        = system tool&lt;br /&gt;
| author      = [[User:Blite|Blite]]&lt;br /&gt;
| download    = http://hotfile.com/dl/125810393/5d24186/3DS_Save_DeEncrypter_v1.4.zip.html&lt;br /&gt;
| version     = 1.4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3DS Save DeEncrypter v1.4 released by Blite to Decrypt and encrypt 3DS gamesaves. Windows GUI used so no need for console commands. &lt;br /&gt;
&lt;br /&gt;
v1.4	-Decryption now places &amp;quot;FF&amp;quot; into decrypted file incase of CRC checksum miscalculations.&lt;br /&gt;
	 So now removed the need for backwards compatability with 3DS SaveTool by crediar.&lt;br /&gt;
	-Some people have said they needed a file to get the application running so added&lt;br /&gt;
	 COMCTL32.OCX to archive for those people that need it.&lt;br /&gt;
	-Added an icon for aesthetics.&lt;br /&gt;
&lt;br /&gt;
v1.3	-Added creation of EEPROM save Reset to restore Game cartridges to Factory default (e.g. 0xFF)&lt;br /&gt;
&lt;br /&gt;
v1.2	-Major upgrade to the speed of the decryption/encryption.&lt;br /&gt;
	-Save File info added to FIle menu.&lt;br /&gt;
&lt;br /&gt;
v1.1	-Conversion of decrypted files using 3DS Save DeEncrypter to those that 3DSaveTool will support&lt;br /&gt;
&lt;br /&gt;
v1.0	-Works on all computers tested with so far, no issues with critical sections using MSVCR100.dll as it down&#039;t use it. &lt;br /&gt;
&lt;br /&gt;
Tested on all games that i own and works. Encryption of files correctly binary compares with the origional encrypted file. &lt;br /&gt;
&lt;br /&gt;
Down the line &lt;br /&gt;
-CRC info in Save File info &lt;br /&gt;
-Specific game save information: currently working on:	- Resident Evil Mercenaries&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=3DS_Save_DeEncrypter3DS&amp;diff=1044</id>
		<title>3DS Save DeEncrypter3DS</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=3DS_Save_DeEncrypter3DS&amp;diff=1044"/>
		<updated>2011-08-05T14:05:37Z</updated>

		<summary type="html">&lt;p&gt;Immortal: Updated to v1.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox homebrew&lt;br /&gt;
| title       = 3DS Save DeEncrypter&lt;br /&gt;
| image       = &lt;br /&gt;
| type        = system tool&lt;br /&gt;
| author      = [[User:Blite|Blite]]&lt;br /&gt;
| download    = http://hotfile.com/dl/125810393/5d24186/3DS_Save_DeEncrypter_v1.4.zip.html&lt;br /&gt;
| version     = 1.4&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3DS Save DeEncrypter v1.4 released by Blite to Decrypt and encrypt 3DS gamesaves. Windows GUI used so no need for console commands. &lt;br /&gt;
&lt;br /&gt;
v1.4	-Decryption now places &amp;quot;FF&amp;quot; into decrypted file incase of CRC checksum miscalculations.&lt;br /&gt;
	 So now removed the need for backwards compatability with 3DS SaveTool by crediar.&lt;br /&gt;
	-Some people have said they needed a file to get the application running so added&lt;br /&gt;
	 COMCTL32.OCX to archive for those people that need it.&lt;br /&gt;
	-Added an icon for aesthetics.&lt;br /&gt;
&lt;br /&gt;
v1.3	-Added creation of EEPROM save Reset to restore Game cartridges to Factory default (e.g. 0xFF)&lt;br /&gt;
&lt;br /&gt;
v1.2	-Major upgrade to the speed of the decryption/encryption.&lt;br /&gt;
	-Save File info added to FIle menu.&lt;br /&gt;
&lt;br /&gt;
v1.1	-Conversion of decrypted files using 3DS Save DeEncrypter to those that 3DSaveTool will support&lt;br /&gt;
&lt;br /&gt;
v1.0	-Works on all computers tested with so far, no issues with critical sections using MSVCR100.dll as it down&#039;t use it. &lt;br /&gt;
&lt;br /&gt;
-Decryption places &amp;quot;DE AD BE EF&amp;quot; into decrypted file for easy tracking and re-encryption, &lt;br /&gt;
Tested on all games that i own and works. Encryption of files correctly binary compares with the origional encrypted file. &lt;br /&gt;
&lt;br /&gt;
Down the line &lt;br /&gt;
-CRC info in Save File info &lt;br /&gt;
-Specific game save information: currently working on:	- Resident Evil Mercenaries&lt;/div&gt;</summary>
		<author><name>Immortal</name></author>
	</entry>
</feed>