Пример #1
3
 public static BinaryReader Decompress(BinaryReader br, int size, int outsize, out int compressLevel)
 {
     if (input.Length < size)
     {
         input = new byte[size];
     }
     if (output.Length < outsize)
     {
         output = new byte[outsize];
     }
     int n = br.Read(input, 0, size);
     ms.Position = 0;
     ms.Write(input, 0, n);
     ms.SetLength(n);
     ms.Position = 0;
     using (var inf = new Ionic.Zlib.ZlibStream(ms, Ionic.Zlib.CompressionMode.Decompress, Ionic.Zlib.CompressionLevel.Default, true))
     {
         n = inf.Read(output, 0, output.Length);
         if (n != outsize)
             Trace.Write("Compression Output does not match expected size");
         compressLevel = (int)Ionic.Zlib.CompressionLevel.Default;
     }
     ms.Position = 0;
     ms.Write(output, 0, outsize);
     ms.SetLength(outsize);
     ms.Position = 0;
     return compReader;
 }
Пример #2
0
        public static BinaryReader Decompress(BinaryReader br, int size, int outsize, out int compressLevel)
        {
            if (input.Length < size)
            {
                input = new byte[size];
            }
            if (output.Length < outsize)
            {
                output = new byte[outsize];
            }
            int n = br.Read(input, 0, size);

            ms.Position = 0;
            ms.Write(input, 0, n);
            ms.SetLength(n);
            ms.Position = 0;
            using (var inf = new Ionic.Zlib.ZlibStream(ms, Ionic.Zlib.CompressionMode.Decompress, Ionic.Zlib.CompressionLevel.Default, true))
            {
                n = inf.Read(output, 0, output.Length);
                if (n != outsize)
                {
                    Trace.Write("Compression Output does not match expected size");
                }
                compressLevel = (int)Ionic.Zlib.CompressionLevel.Default;
            }
            ms.Position = 0;
            ms.Write(output, 0, outsize);
            ms.SetLength(outsize);
            ms.Position = 0;
            return(compReader);
        }
Пример #3
0
        public static string DecompressZlib(Stream input, Encoding e)
        {
            using (Ionic.Zlib.ZlibStream decompressor = new Ionic.Zlib.ZlibStream(input, Ionic.Zlib.CompressionMode.Decompress))
            {
                int read   = 0;
                var buffer = new byte[BUFFER_SIZE];

                using (MemoryStream output = new MemoryStream())
                {
                    while ((read = decompressor.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        output.Write(buffer, 0, read);
                    }
                    return(e.GetString(output.ToArray()));
                }
            }
        }
Пример #4
0
        public byte[] GetContents()
        {
            BinaryReader reader = new BinaryReader(File.Open(Parent.Path, FileMode.Open, FileAccess.Read));

            reader.BaseStream.Seek(Offset, SeekOrigin.Begin);
            byte[] buffer = reader.ReadBytes((Int32)Size);
            reader.Close();

            if (IsCompressed)
            {
                using (MemoryStream compressedStream = new MemoryStream(buffer))
                {
                    using (Ionic.Zlib.ZlibStream zlibStream = new Ionic.Zlib.ZlibStream(compressedStream, Ionic.Zlib.CompressionMode.Decompress))
                    {
                        byte[] decompressed = new byte[SizeUncompressed];
                        zlibStream.Read(decompressed, 0, (Int32)SizeUncompressed);
                        return(decompressed);
                    }
                }
            }

            return(buffer);
        }
Пример #5
0
        public static string DecompressZlib(Stream input, Encoding e)
        {
            using (Ionic.Zlib.ZlibStream decompressor = new Ionic.Zlib.ZlibStream(input, Ionic.Zlib.CompressionMode.Decompress))
            {

                int read = 0;
                var buffer = new byte[BUFFER_SIZE];

                using (MemoryStream output = new MemoryStream())
                {
                    while ((read = decompressor.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        output.Write(buffer, 0, read);
                    }
                    return e.GetString(output.ToArray());
                }
            }
        }
Пример #6
0
        public void GetSwf()
        {
            try
            {
                // check if we can retrieve
                if (string.IsNullOrEmpty(swfUrl)) return;
                Uri swfUri = new Uri(swfUrl);

                if (swfCache.ContainsKey(swfUrl))
                {
                    SWFHash = swfCache[swfUrl].Hash;
                    SWFSize = swfCache[swfUrl].Size;
                }
                else
                {
                    // get the swf file from the web
                    HttpWebRequest request = WebRequest.Create(swfUri) as HttpWebRequest;
                    if (request == null) return;
                    request.Accept = "*/*";
                    request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
                    request.Timeout = 5000; // don't wait longer than 5 seconds
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    System.IO.Stream responseStream;
                    if (response.ContentEncoding.ToLower().Contains("gzip"))
                        responseStream = new System.IO.Compression.GZipStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
                    else if (response.ContentEncoding.ToLower().Contains("deflate"))
                        responseStream = new System.IO.Compression.DeflateStream(response.GetResponseStream(), System.IO.Compression.CompressionMode.Decompress);
                    else
                        responseStream = response.GetResponseStream();

                    byte[] tempBuff = new byte[1024 * 1024 * 10];
                    int bytesRead = 0;
                    int totalBytesRead = 0;
                    while ((bytesRead = responseStream.Read(tempBuff, totalBytesRead, tempBuff.Length - totalBytesRead)) > 0)
                    {
                        totalBytesRead += bytesRead;
                    }
                    byte[] buff = new byte[totalBytesRead];
                    Array.Copy(tempBuff, buff, totalBytesRead);

                    MemoryStream ms = new MemoryStream(buff);
                    BinaryReader br = new BinaryReader(ms);
                    // compressed swf?
                    if (br.PeekChar() == 'C')
                    {
                        // read size
                        br.BaseStream.Position = 4; // skip signature
                        SWFSize = Convert.ToInt32(br.ReadUInt32());
                        // read swf head
                        byte[] uncompressed = new byte[SWFSize];
                        br.BaseStream.Position = 0;
                        br.Read(uncompressed, 0, 8); // header data is not compressed
                        uncompressed[0] = System.Text.Encoding.ASCII.GetBytes(new char[] { 'F' })[0];
                        // un-zip
                        byte[] compressed = br.ReadBytes(SWFSize);
                        Ionic.Zlib.ZlibStream dStream = new Ionic.Zlib.ZlibStream(new MemoryStream(compressed), Ionic.Zlib.CompressionMode.Decompress);
                        int read = dStream.Read(uncompressed, 8, SWFSize - 8);

                        byte[] finalUncompressed = new byte[8 + read];
                        Array.Copy(uncompressed, finalUncompressed, 8 + read);
                        buff = finalUncompressed;
                    }
                    System.Security.Cryptography.HMACSHA256 sha256Hmac = new System.Security.Cryptography.HMACSHA256(System.Text.Encoding.ASCII.GetBytes("Genuine Adobe Flash Player 001"));
                    SWFHash = sha256Hmac.ComputeHash(buff);
                    Logger.Log(string.Format("Size of decompressed SWF: {0}, Hash:", SWFSize));
                    Logger.LogHex(SWFHash, 0, SWFHash.Length);
                    swfCache.Add(swfUrl, new SwFInfo() { Hash = SWFHash, Size = SWFSize, Time = DateTime.Now });
                }
            }
            catch (Exception ex)
            {
                Logger.Log(string.Format("Error while getting swf ({0}): {1}", swfUrl, ex.Message));
            }
        }