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; }
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); }
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())); } } }
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); }
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()); } } }
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)); } }