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);
            }
        }
Example #2
0
 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 "";
     }
 }