private static void sfo2edat(string infile) { string outFile = null; outFile = new C00EDAT().makeedat(infile, outFile); if (Directory.Exists("temp")) { Directory.Delete("temp", true); } if (outFile.EndsWith(".edat")) { Console.WriteLine("Created " + outFile); } }
private string ExtractFiles(string decryptedPKGFileName, string encryptedPKGFileName) { Exception exception; try { int num = 0x1400000; uint num2 = 0; uint num3 = 0; uint num4 = 0; long sourceIndex = 0L; string str = null; if (encryptedPKGFileName.Contains(@"\")) { str = encryptedPKGFileName.Substring(encryptedPKGFileName.LastIndexOf(@"\")).Replace(@"\", "").Replace(".pkg", ""); } else { str = encryptedPKGFileName.Replace(".pkg", ""); } string path = "temp/" + str; Directory.CreateDirectory("temp"); if (Directory.Exists(path)) { Directory.Delete(path, true); Thread.Sleep(100); Directory.CreateDirectory(path); Thread.Sleep(100); } byte[] sourceArray = new byte[0x4e200]; byte[] buffer3 = new byte[8]; byte[] destinationArray = new byte[4]; byte[] buffer5 = new byte[4]; byte[] buffer6 = new byte[4]; byte[] buffer7 = new byte[4]; byte[] buffer8 = new byte[4]; byte[] buffer9 = new byte[4]; byte[] buffer10 = new byte[4]; byte[] buffer11 = new byte[4]; byte[] buffer12 = new byte[0x20]; byte[] buffer13 = new byte[8]; byte num6 = 0; byte num7 = 0; bool flag = false; Stream input = new FileStream(decryptedPKGFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader reader = new BinaryReader(input); Stream stream2 = new FileStream(encryptedPKGFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader brEncrPKG = new BinaryReader(stream2); input.Seek(0L, SeekOrigin.Begin); sourceArray = reader.ReadBytes(sourceArray.Length); sourceIndex = 0L; num4 = 0; Array.Copy(sourceArray, 0, buffer5, 0, buffer5.Length); Array.Reverse(buffer5); uint num9 = BitConverter.ToUInt32(buffer5, 0) / 0x20; Array.Copy(sourceArray, 12, destinationArray, 0, destinationArray.Length); Array.Reverse(destinationArray); uint num10 = BitConverter.ToUInt32(destinationArray, 0); input.Seek(0L, SeekOrigin.Begin); sourceArray = reader.ReadBytes((int) num10); if (num9 < 0) { return ""; } for (int i = 0; i < num9; i++) { byte[] buffer2; BinaryWriter writer; double num14; ulong num15; ulong num16; ulong num17; Array.Copy(sourceArray, sourceIndex + 12L, buffer8, 0L, (long) buffer8.Length); Array.Reverse(buffer8); num2 = BitConverter.ToUInt32(buffer8, 0) + num4; Array.Copy(sourceArray, sourceIndex + 20L, buffer9, 0L, (long) buffer9.Length); Array.Reverse(buffer9); num3 = BitConverter.ToUInt32(buffer9, 0); Array.Copy(sourceArray, sourceIndex, buffer10, 0L, (long) buffer10.Length); Array.Reverse(buffer10); uint num12 = BitConverter.ToUInt32(buffer10, 0); Array.Copy(sourceArray, sourceIndex + 4L, buffer11, 0L, (long) buffer11.Length); Array.Reverse(buffer11); uint num13 = BitConverter.ToUInt32(buffer11, 0); num6 = sourceArray[(int) ((IntPtr) (sourceIndex + 0x18L))]; num7 = sourceArray[(int) ((IntPtr) (sourceIndex + 0x1bL))]; buffer12 = new byte[num13]; Array.Copy(sourceArray, (long) num12, buffer12, 0L, (long) num13); string str5 = ByteArrayToAscii(buffer12, 0, buffer12.Length, true); string str6 = string.Concat((IEnumerable<string>) (from b in buffer12 select b.ToString("x2"))); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); Thread.Sleep(100); } FileStream output = null; if ((num7 == 4) && (num3 == 0)) { flag = false; } else { flag = true; } if (num6 == 0x90) { string str7 = (path + @"\" + str5).Replace("/", @"\"); DirectoryInfo parent = Directory.GetParent(str7); if (!Directory.Exists(parent.ToString())) { Directory.CreateDirectory(parent.ToString()); } output = new FileStream(str7, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite); } else { Array.Copy(this.DecryptData((int) num13, (long) num12, (long) this.uiEncryptedFileStartOffset, this.PS3AesKey, stream2, brEncrPKG), 0L, buffer12, 0L, (long) num13); str5 = ByteArrayToAscii(buffer12, 0, buffer12.Length, true); if (!flag) { try { } catch (Exception exception1) { exception = exception1; str5 = i.ToString() + ".raw"; } } else if (str5 == "PARAM.SFO") { try { output = new FileStream(path + @"\" + str5, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite); } catch (Exception exception2) { exception = exception2; str5 = i.ToString() + ".raw"; } } } if (((num6 == 0x90) && flag) && (str5 == "PARAM.SFO")) { writer = new BinaryWriter(output); input.Seek((long) num2, SeekOrigin.Begin); num14 = ((double) num3) / ((double) num); num15 = (ulong) Math.Floor(num14); num16 = ((ulong) num3) % ((ulong) num); if (num16 > 0L) { num15 += (ulong) 1L; } buffer2 = new byte[num]; num17 = 0L; while (num17 < num15) { if ((num16 > 0L) && (num17 == (num15 - ((ulong) 1L)))) { buffer2 = new byte[num16]; } reader.Read(buffer2, 0, buffer2.Length); writer.Write(buffer2); num17 += (ulong) 1L; } output.Close(); writer.Close(); } if (((num6 != 0x90) && flag) && (str5 == "PARAM.SFO")) { writer = new BinaryWriter(output); input.Seek((long) num2, SeekOrigin.Begin); num14 = ((double) num3) / ((double) num); num15 = (ulong) Math.Floor(num14); num16 = ((ulong) num3) % ((ulong) num); if (num16 > 0L) { num15 += (ulong) 1L; } buffer2 = new byte[num]; long length = 0L; for (num17 = 0L; num17 < num15; num17 += (ulong) 1L) { if ((num16 > 0L) && (num17 == (num15 - ((ulong) 1L)))) { buffer2 = new byte[num16]; } byte[] buffer = this.DecryptData(buffer2.Length, num2 + length, (long) this.uiEncryptedFileStartOffset, this.PS3AesKey, stream2, brEncrPKG); length = buffer2.Length; writer.Write(buffer, 0, buffer2.Length); } output.Close(); writer.Close(); } sourceIndex += 0x20L; } stream2.Close(); brEncrPKG.Close(); input.Close(); reader.Close(); if (File.Exists(decryptedPKGFileName)) { File.Delete(decryptedPKGFileName); } Console.WriteLine("Creating EDAT"); string outFile = null; C00EDAT cedat = new C00EDAT(); return cedat.makeedat(path + "/PARAM.SFO", outFile); } catch (Exception exception3) { exception = exception3; SystemSounds.Beep.Play(); return ""; } }