Jump to navigation Jump to search

Splatoon 2/Save

1,575 bytes added, 15:42, 20 December 2018
Sponsored by splatsave, world's first ver 8 save tool.
| 0x88D90
| Introduced new look-up table and now shuffles twice, before and after encryption. Content is presumably still the same as Ver 3.
| 8
| 4.3.1
| 0x88D90
| Introduced additional encryption for each shuffle blocks. Shuffling now uses bit reversed/flipped CRC32 checksum as seed. Content is still the same as Ver 3.
by <code>Cmn::SaveDataFactory::Impl::IEncodedAllAccessor::createKey</code>.
The For version 4, a shuffling process for save body takes was added to take place after it is the save body gets encrypted. In revision This shuffling is not present in version five, but is done twice in version 7and onward, with a shuffle is done before the body encryption as well. The In save version 8, the shuffling doubles as an added layer of encryption. For determining the block sizes to shuffle, the game constructs constructs a new <code>sead::Random</code> object . In version 4 and 7, this <code>sead::Random</code> object is initialized simply with the CRC32 checksum from the save header; in version 8, rather, the checksum is bit-reversed before being used for the after-encryption shuffle, and bit-reversed, plus bit-flipped for the before-encryption shuffle. It The game then uses this the <code>sead::Random</code> object to generate block sizes larger than
1/16 of body size and smaller than 1/8 of body size (or total remaining size,
in case the remaining size is smaller than 1/8 of body size). When the
remaining size is smaller than 1/16 of body size, it is added as the size of
the last block. The body size for version 8, despite following the same general principal, goes an extra step to make sure that all the generated block sizes are multiple of 0x10, for the added "shuffle encryption" purpose. The game then uses <code>sead::PtrArrayImpl::shuffle</code> with the same previous <code>sead::Random</code> object to complete the shuffle. While in version 4 and 7, the shuffling is done by simply copying over the block buffers, the version 8 save creates more <code>sead::Random</code> objects for each block, initialized with the respective block size. The game uses these <code>sead::Random</code> objects to generate the IV used for block encryption, and then chains the object into <code>Cmn::SaveDataFactory::Impl::IEncodedAllAccessor::createKey</code>, the same key generation function used in "whole-body" encryption, to create the encryption key. Lastly, all the blocks are encrypted into their shuffled position with the existing AES-128 CBC algorithm.
== File Structure ==

Navigation menu