private static byte[] EncryptPBRSaveData(byte[] input) { byte[] output = new byte[input.Length]; for (int base_ofs = 0; base_ofs < SaveUtil.SIZE_G4BR; base_ofs += 0x1C0000) { Array.Copy(input, base_ofs, output, base_ofs, 8); ushort[] keys = new ushort[4]; for (int i = 0; i < keys.Length; i++) { keys[i] = BigEndian.ToUInt16(input, base_ofs + i * 2); } for (int ofs = base_ofs + 8; ofs < base_ofs + 0x1C0000; ofs += 8) { for (int i = 0; i < keys.Length; i++) { ushort val = BigEndian.ToUInt16(input, ofs + i * 2); val += keys[i]; BigEndian.GetBytes(val).CopyTo(output, ofs + i * 2); } keys = SaveUtil.AdvanceGCKeys(keys); } } return(output); }