Line 1: |
Line 1: |
− | '''Mii Maker''' lets you create Miis, like Wii Mii Channel. Here you can transfer Miis over [[NWM_Services|local-WLAN]] from other systems running Mii Maker(3DS/Wii U), or from Wii Mii Channel. 3DS Miis can't be transfered to Wii Mii Channel, only from Wii. | + | '''Mii Maker''' lets you create [[Mii]]s, and is the successor of the Wii's Mii Channel. |
| + | |
| + | It can transfer Miis over [[NWM_Services|local wireless]] from other systems running Mii Maker (3DS/Wii U), or receive, but not send, from Mii Channel. |
| | | |
| == Wii Mii Channel transfer protocol == | | == Wii Mii Channel transfer protocol == |
Line 9: |
Line 11: |
| 3DS Mii QR is a standard 57x57 pixel Level 10 High ECC QR code with 'Mii' logo in center (refer to [http://www.denso-wave.com/qrcode Denso-Wave Inc] web site for QR Code format specifications). It contains 0x70-bytes of binary data. 3DS seems to have a 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. | | 3DS Mii QR is a standard 57x57 pixel Level 10 High ECC QR code with 'Mii' logo in center (refer to [http://www.denso-wave.com/qrcode Denso-Wave Inc] web site for QR Code format specifications). It contains 0x70-bytes of binary data. 3DS seems to have a 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 with AES-CCM, xorpads can be determined from known plaintext here. The Mii Maker application uses the [[NS]] APT Wrap/Unwrap commands to encrypt/decrypt this Mii data. For the NS [[APT:Unwrap|Unwrap]] command, the Mii Maker application uses blocksize=12, noncesize=10, and inputbuffer-size=0x60. The first 8-bytes(cleartext MiiID+MAC address) in the below Mii data is the nonce used with the NS Unwrap/Wrap commands, the rest of the data at 0x8-0x5F is encrypted. | + | The data itself is encrypted with AES-CCM, xorpads can be determined from known plaintext here. The Mii Maker application uses the [[NS]] APT Wrap/Unwrap commands to encrypt/decrypt this Mii data. For the NS [[APT:Unwrap|Unwrap]] command, the Mii Maker application uses nonceoffset=12, noncesize=10, and inputbuffer-size=0x60. Note that the actual nonce size is 8 bytes due to Wrap/Unwrap implementation, and the nonce data should be moved 12 bytes afterwards after decryption. The rest of the data at 0x8-0x5F is encrypted, and should be split into two parts after decryption, with the nonce data in the middle. (See [[APT:Wrap|Wrap]] and [[APT:Unwrap|Unwrap]] for more information) |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 19: |
Line 21: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Mii ID (big-endian 32-bit unsigned integer) | + | | Mii ID (big-endian 32-bit unsigned integer)<br/>The most significant 3 bits determine whether the Mii is Special, Foreign, or Normal [https://web.archive.org/web/20071011001718/http://www.davidhawley.co.uk/special-miis-gold-pants-and-creating.aspx]<br/>time_offset = (mii_id & 0x0FFFFFFF) * 2;<br/>time_offset is the time the Mii was created, represented as the number of seconds since 01/01/2010 00:00:00 |
− | | |
− | 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] | |
− | | |
− | time_offset = (mii_id & 0x0FFFFFFF) * 2; | |
− | | |
− | time_offset is the time the Mii was created, represented as the number of seconds since 01/01/2010 00:00:00 | |
| |- | | |- |
| | 0x4 | | | 0x4 |
Line 32: |
Line 28: |
| |- | | |- |
| | 0x8 | | | 0x8 |
− | | 0x1 | + | | 0x4 |
− | | Unknown, the encrypted data begins here. | + | | [[Mii#Mii_ID|Mii ID]], the encrypted data begins here. |
| + | |- |
| + | | 0xC |
| + | | 0x8 |
| + | | System ID (this ID is produced by the output from [https://www.3dbrew.org/wiki/Cfg:GenHashConsoleUnique GenHashConsoleUnique(0x0)]) |
| |- | | |- |
− | | 0x9 | + | | 0x14 |
− | | 0x1 | + | | 0x2 |
− | | Allow Copying | + | | Low 2 octets of MAC address |
| |- | | |- |
− | | 0xA | + | | 0x16 |
− | | 0xE | + | | 0x2 |
− | | unknown | + | | padding (0000) |
| |- | | |- |
| | 0x18 | | | 0x18 |
Line 49: |
Line 49: |
| | 0x1A | | | 0x1A |
| | 0x14 | | | 0x14 |
− | | UTF-16 Mii Name | + | | UTF-16 Mii Name (10 chars max) |
| |- | | |- |
| | 0x2E | | | 0x2E |
| | 0x2 | | | 0x2 |
− | | unknown | + | | width & height |
| |- | | |- |
| | 0x30 | | | 0x30 |
| | 0x1 | | | 0x1 |
− | | Mii Sharing Value | + | | bit 0: disable sharing<br/>bit 1-4: face shape<br/>bit 5-7: skin color |
| |- | | |- |
| | 0x31 | | | 0x31 |
− | | 0xB | + | | 0x1 |
| + | | bit 0-3: wrinkles<br/>bit 4-7: makeup |
| + | |- |
| + | | 0x32 |
| + | | 0x1 |
| + | | hair style |
| + | |- |
| + | | 0x33 |
| + | | 0x1 |
| + | | bit 0-2: hair color<br/>bit 3: flip hair |
| + | |- |
| + | | 0x34 |
| + | | 0x4 |
| | unknown | | | unknown |
| + | |- |
| + | | 0x38 |
| + | | 0x1 |
| + | | bit 0-4: eyebrow style<br/>bit 5-7: eyebrow color |
| + | |- |
| + | | 0x39 |
| + | | 0x1 |
| + | | bit 0-3: eyebrow scale<br/>bit 4-6: eyebrow yscale |
| + | |- |
| + | | 0x3A |
| + | | 0x2 |
| + | | note that the bytes are swapped over (little-endian layout)<br/>bit 0-3: eyebrow rotation<br/>bit 5-8: eyebrow x spacing<br/>bit 9-13: eyebrow y position |
| |- | | |- |
| | 0x3C | | | 0x3C |
Line 81: |
Line 105: |
| | 0x48 | | | 0x48 |
| | 0x14 | | | 0x14 |
− | | UTF-16 Author Name | + | | UTF-16 Author Name (10 chars max) |
| |- | | |- |
| | 0x5C | | | 0x5C |
Line 89: |
Line 113: |
| | 0x5E | | | 0x5E |
| | 0x2 | | | 0x2 |
− | | unknown | + | | CRC16 over the previous 0x5E |
| |- | | |- |
| | 0x60 | | | 0x60 |
Line 97: |
Line 121: |
| | | |
| * QR codes made from the same 3DS for the same Mii are use the same AES-CCM nonce (you can recreate the xorpad by xoring with known values from this table). | | * QR codes made from the same 3DS for the same Mii are use the same AES-CCM nonce (you can recreate the xorpad by xoring with known values from this table). |
| + | |
| + | == Mii Database == |
| + | |
| + | Created, received, or even met-in-multiplayer Miis are saved in [[Mii|CFL_DB.dat]]. |
| + | |
| + | == Savedata == |
| + | === editSaveData.bin === |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | "TIDE" header (EDIT byteswapped) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | zero |
| + | |- |
| + | | 0xC |
| + | | 0x4 (?) |
| + | | 01000000 (constant?) |
| + | |- |
| + | | 0x100 |
| + | | 0x4 |
| + | | Number of scanned Special Mii QRs |
| + | |- |
| + | | 0x104 |
| + | | - |
| + | | Some data identifying each scanned Special Mii QRs, for the purpose of not making them scannable again. 8 or 12 byte each? |
| + | |- |
| + | | 0x2904 |
| + | | 0x4 |
| + | | Checksum? |
| + | |} |
| + | |
| | | |
| == ExtData == | | == ExtData == |
− | The ExtData File System for Mii Maker is as follows: | + | The ExtData [[Extdata#Filesystem|File System]] for Mii Maker is as follows: |
| | | |
| root | | root |