Exemplo n.º 1
0
        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());
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        /// <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);
            }
        }