public static void Encrypt(int I, string file) { KKtIO reader = KKtIO.OpenReader(file); if (reader.ReadInt64() == 0x454C494641564944) { reader.Close(); Decrypt(I, file); } else { Console.Title = "PD_Tool: DIVAFILE Encryptor - File: " + Path.GetFileName(file); int FileLenghtOrigin = (int)reader.Length; int FileLenght = (int)KKtMain.Align((long)FileLenghtOrigin, 16); reader.Close(); byte[] In = File.ReadAllBytes(file); byte[] Inalign = new byte[FileLenght]; for (int i = 0; i < In.Length; i++) { Inalign[i] = In[i]; } In = null; byte[] encrypted = new byte[FileLenght]; using (AesManaged crypto = new AesManaged()) { crypto.Key = Key; crypto.IV = new byte[16]; crypto.Mode = CipherMode.ECB; crypto.Padding = PaddingMode.Zeros; using (CryptoStream cryptoData = new CryptoStream(new MemoryStream(Inalign), crypto.CreateEncryptor(crypto.Key, crypto.IV), CryptoStreamMode.Read)) cryptoData.Read(encrypted, 0, FileLenght); } KKtIO writer = KKtIO.OpenWriter(file, Inalign.Length); writer.Write(0x454C494641564944); writer.Write(FileLenght); writer.Write(FileLenghtOrigin); writer.Write(encrypted); writer.Close(); } Console.Title = "PD_Tool"; }
public void DEXWriter() { KKtIO writer = KKtIO.OpenWriter(filepath + (Header.Format > KKtMain.Format.F ? ".dex" : ".bin"), true); writer.Format = Header.Format; if (writer.Format > KKtMain.Format.F) { Header.Lenght = 0x20; Header.DataSize = 0x00; Header.Signature = 0x43505845; Header.SectionSize = 0x00; writer.Write(Header); } writer.Write(0x64); writer.Write(DEX.Length); if (Header.Format == KKtMain.Format.X) { writer.Write(0x28); writer.Write(0x00); writer.Write(0x18 + (int)KKtMain.Align(DEX.Length * 3 * 8, 0x10)); writer.Write(0x00); writer.Seek(KKtMain.Align(DEX.Length * 3 * 8, 0x10) + 0x20 + Header.Lenght, 0); } else { writer.Write(0x20); writer.Write(0x10 + (int)KKtMain.Align(DEX.Length * 3 * 4, 0x10)); writer.Seek(KKtMain.Align(DEX.Length * 3 * 4, 0x10) + 0x30 + Header.Lenght, 0); } for (int i0 = 0; i0 < DEX.Length; i0++) { DEX[i0].MainOffset = writer.Position - Header.Lenght; for (int i1 = 0; i1 < DEX[i0].Main.Count; i1++) { writer.Write((float)DEX[i0].Main[i1].Frame); writer.Write(DEX[i0].Main[i1].Both); writer.Write(DEX[i0].Main[i1].ID); writer.Write((float)DEX[i0].Main[i1].Value); writer.Write((float)DEX[i0].Main[i1].Trans); } writer.Align(0x20, true); DEX[i0].EyesOffset = writer.Position - Header.Lenght; for (int i1 = 0; i1 < DEX[i0].Eyes.Count; i1++) { writer.Write((float)DEX[i0].Eyes[i1].Frame); writer.Write(DEX[i0].Eyes[i1].Both); writer.Write(DEX[i0].Eyes[i1].ID); writer.Write((float)DEX[i0].Eyes[i1].Value); writer.Write((float)DEX[i0].Eyes[i1].Trans); } writer.Align(0x20, true); } for (int i0 = 0; i0 < DEX.Length; i0++) { DEX[i0].NameOffset = writer.Position - Header.Lenght; writer.Write(DEX[i0].Name + "\0"); } writer.Align(0x10, true); if (Header.Format == KKtMain.Format.X) { writer.Seek(Header.Lenght + 0x28, 0); } else { writer.Seek(Header.Lenght + 0x20, 0); } for (int i0 = 0; i0 < DEX.Length; i0++) { writer.Write(DEX[i0].MainOffset); if (Header.Format == KKtMain.Format.X) { writer.Write(0x00); } writer.Write(DEX[i0].EyesOffset); if (Header.Format == KKtMain.Format.X) { writer.Write(0x00); } } for (int i0 = 0; i0 < DEX.Length; i0++) { writer.Write(DEX[i0].NameOffset); if (Header.Format == KKtMain.Format.X) { writer.Write(0x00); } } if (writer.Format > KKtMain.Format.F) { Offset = writer.Length - Header.Lenght; writer.Seek(writer.Length, 0); writer.WriteEOFC(0); writer.Seek(0, 0); Header.DataSize = Offset; Header.SectionSize = Offset; writer.Write(Header); } writer.Close(); }