private static byte[] ZlibDecompress(Stream data, int expectedLength) { using (MemoryStream output = new MemoryStream(expectedLength)) { #if WITH_DOTNETZIP using (var stream = new Ionic.Zlib.ZlibStream(data, Ionic.Zlib.CompressionMode.Decompress)) { stream.CopyTo(output); } #elif WITH_SHARPCOMPRESS using (var stream = new SharpCompress.Compressors.Deflate.ZlibStream(data, SharpCompress.Compressors.CompressionMode.Decompress)) { stream.CopyTo(output); } #elif WITH_SHARPZIPLIB using (var stream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(data)) { stream.CopyTo(output); } #else throw new NotImplementedException("Please define which compression library you want to use"); #endif return(output.ToArray()); } }
public long ZLib_Managed() { byte[] compData = SrcFiles[$"{Level}_{SrcFileName}.zz"]; using MemoryStream ms = new MemoryStream(); using (MemoryStream rms = new MemoryStream(compData)) using (SharpCompress.Compressors.Deflate.ZlibStream zs = new SharpCompress.Compressors.Deflate.ZlibStream(rms, SharpCompress.Compressors.CompressionMode.Decompress)) { zs.CopyTo(ms); } ms.Flush(); return(ms.Length); }
public double ZLib_Managed() { long compLen; byte[] rawData = SrcFiles[SrcFileName]; using (MemoryStream ms = new MemoryStream()) { using MemoryStream rms = new MemoryStream(rawData); using SharpCompress.Compressors.Deflate.ZlibStream zs = new SharpCompress.Compressors.Deflate.ZlibStream(ms, SharpCompress.Compressors.CompressionMode.Compress, ManagedZLibLevelDict[Level]); rms.CopyTo(zs); ms.Flush(); compLen = ms.Position; } CompRatio = (double)compLen / rawData.Length; return(CompRatio); }
/// <summary> /// Suck the brains out of the app /// </summary> private static void Main(string[] args) { Console.WriteLine("SanteDB BrainBug - Android Extraction Tool"); Console.WriteLine("Version {0}", Assembly.GetEntryAssembly().GetName().Version); Console.WriteLine(Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyCopyrightAttribute>().Copyright); var parameters = new ParameterParser <ConsoleParameters>().Parse(args); if (parameters.Help || args.Length == 0) { new ParameterParser <ConsoleParameters>().WriteHelp(Console.Out); return; } if (parameters.TargetFile == null && parameters.ExtractDir == null) { Console.WriteLine("Either --tar or --extract must be specified"); return; } if (parameters.PackageId != null) { var exeFile = Path.Combine(parameters.SdkPath, "platform-tools", "adb.exe"); StringBuilder argStr = new StringBuilder(); if (!String.IsNullOrEmpty(parameters.DeviceId)) { argStr.AppendFormat(" -s {0} ", parameters.DeviceId); } argStr.Append("backup "); argStr.AppendFormat("-f \"backup.ab\"", parameters.BackupFile); argStr.Append(" -noapk -noobb "); argStr.Append(parameters.PackageId); Console.WriteLine("Starting {0} {1}", exeFile, argStr.ToString()); var pi = new Process(); pi.StartInfo.FileName = String.Format("\"{0}\"", exeFile); pi.StartInfo.Arguments = argStr.ToString(); pi.StartInfo.CreateNoWindow = true; pi.StartInfo.RedirectStandardError = true; pi.StartInfo.RedirectStandardOutput = true; pi.StartInfo.UseShellExecute = false; pi.Start(); Console.WriteLine(pi.StandardOutput.ReadToEnd()); Console.WriteLine(pi.StandardError.ReadToEnd()); pi.WaitForExit(); if (File.Exists(parameters.BackupFile)) { File.Delete(parameters.BackupFile); } File.Move("backup.ab", parameters.BackupFile); } if (!File.Exists(parameters.BackupFile)) { Console.WriteLine("Cannot find specified backup file!"); return; } try { Console.WriteLine("Extracting {0}...", parameters.BackupFile); byte[] buffer = new byte[8096]; using (FileStream ins = File.OpenRead(parameters.BackupFile)) { ins.Read(buffer, 0, 24); String magic = System.Text.Encoding.UTF8.GetString(buffer, 0, 24); //ins.Seek(24, SeekOrigin.Begin); using (FileStream outs = File.Create(parameters.TargetFile)) { using (SharpCompress.Compressors.Deflate.ZlibStream df = new SharpCompress.Compressors.Deflate.ZlibStream(ins, SharpCompress.Compressors.CompressionMode.Decompress)) { int br = 8096; while (br == 8096) { br = df.Read(buffer, 0, 8096); outs.Write(buffer, 0, br); } } } } // Extract if (parameters.ExtractDir != null) { if (!Directory.Exists(parameters.ExtractDir)) { Directory.CreateDirectory(parameters.ExtractDir); } using (var fs = File.OpenRead(parameters.TargetFile)) using (var tar = TarReader.Open(fs)) while (tar.MoveToNextEntry()) { string outName = Path.Combine(parameters.ExtractDir, tar.Entry.Key); if (!Directory.Exists(Path.GetDirectoryName(outName))) { Directory.CreateDirectory(Path.GetDirectoryName(outName)); } Console.WriteLine("{0} > {1}", tar.Entry.Key, outName); if (!tar.Entry.IsDirectory) { using (var ofs = File.Create(outName)) tar.WriteEntryTo(ofs); } } } } catch (Exception e) { Console.WriteLine(e.Message); } }