Guest User

Untitled

a guest
Nov 14th, 2015
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.33 KB | None | 0 0
  1. public static byte[] Decode(byte[] data, string key, string extension = "")
  2.     {
  3.         string @string = Encoding.UTF8.GetString(data, 0, 4);
  4.         if (@string != ResourceFileElement.SIGNATURE)
  5.         {
  6.             Debug.LogError("not .fe");
  7.             return null;
  8.         }
  9.         int num = (int)BitConverter.ToInt16(data, 12);
  10.         int num2 = (int)BitConverter.ToInt16(data, 14);
  11.         byte[] array = new byte[16];
  12.         Array.Copy(data, 16, array, 0, 16);
  13.         byte[] array2 = new byte[16];
  14.         Array.Copy(data, 32, array2, 0, 16);
  15.         int size = data.Length - 48;
  16.         byte[] array3 = ResourceFileElement.DecodeAES(data, 48, size, array2, Encoding.UTF8.GetBytes(key));
  17.         if (num2 > 0)
  18.         {
  19.             Array.Resize<byte>(ref array3, array3.Length - num2);
  20.         }
  21.         if (num == 1)
  22.         {
  23.             array3 = ResourceFileElement.DecompressGZip(array3);
  24.         }
  25.         byte[] data2 = null;
  26.         using (MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider())
  27.         {
  28.             data2 = mD5CryptoServiceProvider.ComputeHash(array3);
  29.         }
  30.         if (Utility.Bin2Hex(array, -1) != Utility.Bin2Hex(data2, -1))
  31.         {
  32.             Debug.LogError("md5 check error.");
  33.             return null;
  34.         }
  35.         string text = string.Empty;
  36.         bool flag = false;
  37.         switch (extension)
  38.         {
  39.         case ".unity3d":
  40.             text = Encoding.UTF8.GetString(array3, 0, 8);
  41.             if (text != "UnityWeb" && text != "UnityRaw")
  42.             {
  43.                 flag = true;
  44.             }
  45.             break;
  46.         case ".jpg":
  47.             text = BitConverter.ToString(array3, 0, 2);
  48.             if (text != "FF-D8")
  49.             {
  50.                 flag = true;
  51.             }
  52.             break;
  53.         case ".png":
  54.             text = BitConverter.ToString(array3, 0, 4);
  55.             if (text != "89-50-4E-47")
  56.             {
  57.                 flag = true;
  58.             }
  59.             break;
  60.         case ".acb":
  61.         case ".acf":
  62.             text = Encoding.UTF8.GetString(array3, 0, 4);
  63.             if (text != "@UTF")
  64.             {
  65.                 flag = true;
  66.             }
  67.             break;
  68.         }
  69.         if (flag)
  70.         {
  71.             Debug.LogError("signature = " + text + " error.");
  72.             return null;
  73.         }
  74.         return array3;
  75.     }
  76.  
  77.     public static byte[] DecompressGZip(byte[] data)
  78.     {
  79.         byte[] array = new byte[32768];
  80.         MemoryStream memoryStream = new MemoryStream(data, 0, data.Length);
  81.         MemoryStream memoryStream2 = new MemoryStream();
  82.         GZipStream gZipStream = new GZipStream(memoryStream, CompressionMode.Decompress);
  83.         int count;
  84.         while ((count = gZipStream.Read(array, 0, array.Length)) > 0)
  85.         {
  86.             memoryStream2.Write(array, 0, count);
  87.         }
  88.         byte[] result = memoryStream2.ToArray();
  89.         memoryStream2.Close();
  90.         gZipStream.Close();
  91.         memoryStream.Close();
  92.         return result;
  93.     }
  94.     public static byte[] DecodeAES(byte[] data, int seek, int size, byte[] iv, byte[] key)
  95.     {
  96.         AesManaged aesManaged = new AesManaged();
  97.         aesManaged.BlockSize = 128;
  98.         aesManaged.KeySize = 128;
  99.         aesManaged.Mode = CipherMode.CBC;
  100.         aesManaged.Padding = PaddingMode.Zeros;
  101.         aesManaged.IV = iv;
  102.         aesManaged.Key = key;
  103.         byte[] result = null;
  104.         using (MemoryStream memoryStream = new MemoryStream(data, seek, size, false, true))
  105.         {
  106.             using (CryptoStream cryptoStream = new CryptoStream(memoryStream, aesManaged.CreateDecryptor(), CryptoStreamMode.Read))
  107.             {
  108.                 using (MemoryStream memoryStream2 = new MemoryStream())
  109.                 {
  110.                     byte[] array = new byte[32768];
  111.                     while (true)
  112.                     {
  113.                         int num = cryptoStream.Read(array, 0, array.Length);
  114.                         if (num <= 0)
  115.                         {
  116.                             break;
  117.                         }
  118.                         memoryStream2.Write(array, 0, num);
  119.                     }
  120.                     result = memoryStream2.ToArray();
  121.                 }
  122.             }
  123.         }
  124.         return result;
  125.     }
Advertisement
Add Comment
Please, Sign In to add comment