Esempio n. 1
0
 public override Stream OpenEntry(ArcFile arc, Entry entry)
 {
     if (entry.Name.HasAnyOfExtensions("TXT", "DAT"))
     {
         var input = arc.File.CreateStream(entry.Offset, entry.Size);
         var dec   = new DesTransform(DefaultKey);
         return(new InputCryptoStream(input, dec));
     }
     else if (entry.Name.HasExtension("JPG"))
     {
         using (var dec = new DesTransform(DefaultKey))
         {
             var data = arc.File.View.ReadBytes(entry.Offset, entry.Size);
             for (int i = 0; i < data.Length; i += 0x1000)
             {
                 int count = Math.Min(8, data.Length - i);
                 dec.TransformBlock(data, i, count, data, i);
             }
             return(new BinMemoryStream(data, entry.Name));
         }
     }
     else
     {
         return(base.OpenEntry(arc, entry));
     }
 }
Esempio n. 2
0
 public override Stream OpenEntry(ArcFile arc, Entry entry)
 {
     if (entry.Name.HasAnyOfExtensions("TXT", "DAT"))
     {
         var input      = arc.File.CreateStream(entry.Offset, entry.Size, entry.Name);
         int first_byte = (int)input.Signature & 0xFF;
         if (first_byte == '#' || first_byte == '*')
         {
             return(input);
         }
         var dec = new DesTransform(DefaultKey);
         return(new InputCryptoStream(input, dec));
     }
     else if (entry.Name.HasExtension("JPG"))
     {
         using (var dec = new DesTransform(DefaultKey))
         {
             var data = arc.File.View.ReadBytes(entry.Offset, entry.Size);
             for (int i = 0; i < data.Length; i += 0x1000)
             {
                 int count = Math.Min(8, data.Length - i);
                 dec.TransformBlock(data, i, count, data, i);
             }
             return(new BinMemoryStream(data, entry.Name));
         }
     }
     else if (entry.Name.HasExtension("BMP"))
     {
         var data = arc.File.View.ReadBytes(entry.Offset, entry.Size);
         int bpp  = data.ToUInt16(0x1C);
         if (4 == bpp)
         {
             data[0x1C] = 8;
         }
         else if (16 == bpp)
         {
             data[0x1C] = 24;
         }
         int pixels_src    = 0x36;
         int pixels_length = data.Length - pixels_src;
         if (pixels_length > 0x493AA)
         {
             using (var dec = new DesTransform(DefaultKey))
             {
                 for (int src = pixels_src + 0x493AA; src + 8 <= data.Length; src += 0xA0)
                 {
                     dec.TransformBlock(data, src, 8, data, src);
                 }
             }
         }
         return(new BinMemoryStream(data, entry.Name));
     }
     else
     {
         return(base.OpenEntry(arc, entry));
     }
 }