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 static void Decrypt(int I, string file) { KKtIO reader = KKtIO.OpenReader(file); if (reader.ReadInt64() != 0x454C494641564944) { reader.Close(); Encrypt(I, file); } else { Console.Title = "PD_Tool: DIVAFILE Decryptor - File: " + Path.GetFileName(file); reader.ReadUInt32(); int StreamLenght = (int)reader.Length; int FileLenght = reader.ReadInt32(); byte[] decrypted = new byte[StreamLenght]; reader.Seek(0, 0); 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(reader.BaseStream, crypto.CreateDecryptor(crypto.Key, crypto.IV), CryptoStreamMode.Read)) cryptoData.Read(decrypted, 0, StreamLenght); } KKtIO writer = KKtIO.OpenWriter(file, FileLenght); for (int i = 0x10; i < StreamLenght && i < FileLenght + 0x10; i++) { writer.Write(decrypted[i]); } writer.Close(); } Console.Title = "PD_Tool"; }
public static int BINReader(ref AUTH Data, string file) { Data = new AUTH { dataArray = new string[4], Name = new List <string>(), Value = new List <string>() }; KKtIO reader = KKtIO.OpenReader(file + ".bin"); reader.Format = KKtMain.Format.F; Data.Signature = reader.ReadInt32(); if (Data.Signature != 0x44334123) { return(0); } Data.Signature = reader.ReadInt32(); if (Data.Signature != 0x5F5F5F41) { return(0); } reader.ReadInt64(); byte[] STRData = reader.ReadBytes((int)(reader.Length - reader.Position)); string TempSTRData = ""; foreach (byte a in STRData) { if (a == 0x0A) { if (!TempSTRData.StartsWith("#")) { Data.dataArray = TempSTRData.Split('='); Data.Name.Add(Data.dataArray[0]); Data.Value.Add(Data.dataArray[1]); } TempSTRData = ""; } else { TempSTRData += Convert.ToChar(a); } } for (int i = 0; i < Data.Name.Count; i++) { if (Data.Name[i] == "category.length") { Data.Category = new string[int.Parse(Data.Value[i])]; } else if (Data.Name[i] == "uid.length") { Data.UID = new UID[int.Parse(Data.Value[i])]; } } if (Data.Category != null) { for (int i0 = 0; i0 < Data.Category.Length; i0++) { for (int i = 0; i < Data.Name.Count; i++) { if (Data.Name[i] == "category." + i0 + ".value") { Data.Category[i0] = Data.Value[i]; } } } } if (Data.UID != null) { for (int i0 = 0; i0 < Data.UID.Length; i0++) { Data.UID[i0].Category = ""; Data.UID[i0].Size = -1; Data.UID[i0].Value = ""; for (int i = 0; i < Data.Name.Count; i++) { if (Data.Name[i] == "uid." + i0 + ".category") { Data.UID[i0].Category = Data.Value[i]; } else if (Data.Name[i] == "uid." + i0 + ".size") { Data.UID[i0].Size = int.Parse(Data.Value[i]); } else if (Data.Name[i] == "uid." + i0 + ".value") { Data.UID[i0].Value = Data.Value[i]; } } } } reader.Close(); return(1); }
public int STRReader() { KKtIO reader = KKtIO.OpenReader(filepath + ext); reader.Format = KKtMain.Format.F; Header.Signature = reader.ReadInt32(); if (Header.Signature == 0x41525453) { Header = reader.ReadHeader(true); STR = new List <String>(); POF = KKtMain.AddPOF(Header); reader.Position = Header.Lenght; Count = reader.ReadInt32Endian(); Offset = reader.ReadInt32Endian(); if (Offset == 0) { Offset = Count; OffsetX = reader.ReadInt64(); Count = reader.ReadInt64(); reader.XOffset = Header.Lenght; reader.Format = KKtMain.Format.X; } reader.LongPosition = reader.IsX ? Offset + reader.XOffset : Offset; for (int i = 0; i < Count; i++) { String Str = new String { StrOffset = reader.GetOffset(ref POF).ReadInt32Endian(), ID = reader.ReadInt32Endian() }; if (reader.IsX) { Str.StrOffset += (int)OffsetX; } STR.Add(Str); } for (int i = 0; i < Count; i++) { reader.LongPosition = STR[i].StrOffset + (reader.IsX ? reader.XOffset : 0); STR[i] = new String { ID = STR[i].ID, Str = KKtText. ToUTF8(reader.NullTerminated()), StrOffset = STR[i].StrOffset }; } reader.Seek(POF.Offset, 0); reader.ReadPOF(ref POF); } else { reader.Seek(-4, (SeekOrigin)1); int i = 0; STR = new List <String>(); while (reader.LongPosition > 0 && reader.LongPosition < reader.LongLength) { int a = reader.ReadInt32(); if (a != 0) { reader.Seek(-4, (SeekOrigin)1); STR.Add(new String { Str = KKtText.ToUTF8(reader.NullTerminated()), ID = i }); i++; } else { break; } } Count = STR.Count; } reader.Close(); return(1); }