Exemplo n.º 1
0
        static void ReadAxml(String filePath)
        {
            using (AxmlFile axml = new AxmlFile(StreamLoader.FromFile(filePath)))
            {
                if (!axml.Header.IsValid)
                {
                    throw new ArgumentException("Invalid header");
                }

                Utils.ConsoleWriteMembers(axml.Header);
                Console.WriteLine(axml.RootNode.ConvertToString());
            }
        }
Exemplo n.º 2
0
        /// <summary>Create instance AndroidManifest.xml</summary>
        /// <param name="axml">AXML file decoder</param>
        /// <param name="resources">ARSC file decoder</param>
        /// <returns>AndroidManifest object</returns>
        public static AndroidManifest Load(AxmlFile axml, ArscFile resources)
        {
            if (axml == null || resources == null)
            {
                return(null);
            }

            if (!axml.Header.IsValid || !resources.Header.IsValid)
            {
                return(null);
            }

            return(new AndroidManifest(axml.RootNode, resources));
        }
Exemplo n.º 3
0
        static void ReadApkManifest(String manifestPath, String resourcesPath)
        {
            AxmlFile axml      = new AxmlFile(StreamLoader.FromFile(manifestPath));
            ArscFile resources = new ArscFile(File.ReadAllBytes(resourcesPath));

            if (!axml.Header.IsValid || !resources.Header.IsValid)
            {
                throw new InvalidOperationException();
            }

            AndroidManifest apk = AndroidManifest.Load(axml, resources);

            Console.WriteLine("Label: " + apk.Application.Label);
            Console.WriteLine("Package: " + apk.Package);
            Console.WriteLine("Icon: " + apk.Application.Icon);
            Console.WriteLine("Permissions: " + String.Join(", ", apk.UsesPermission.Select(p => p.Name)));
            Console.WriteLine("Services: " + String.Join(", ", apk.Application.Service));
            Console.WriteLine("Activities: " + String.Join(", ", apk.Application.Activity));
            Console.WriteLine("Reciever: " + String.Join(", ", apk.Application.Reciever));
            Console.WriteLine("Features: " + String.Join(", ", apk.UsesFeature));
            Console.WriteLine("Uses Libraries: " + String.Join(", ", apk.Application.UsesLibrary.Select(p => p.Name)));
        }
Exemplo n.º 4
0
        static void ReadManifest(String filePath)
        {
            AxmlFile manifest = new AxmlFile(StreamLoader.FromFile(filePath));

            Console.Write(manifest.RootNode.ConvertToString());
        }
Exemplo n.º 5
0
        static void ReadApk(String filePath)
        {
            using (ApkFile apk = new ApkFile(filePath))
            {
                Console.WriteLine("Package: {0}", apk.AndroidManifest.Package);
                Console.WriteLine("Application name: {0} ({1})", apk.AndroidManifest.Application.Label, apk.AndroidManifest.VersionName);

                if (apk.MfFile != null)
                {
                    UInt32 totalFiles   = 0;
                    UInt32 hashNotFound = 0;
                    UInt32 invalidHash  = 0;
                    foreach (String apkFilePath in apk.GetFiles())
                    {
                        totalFiles++;
                        String sHash = apk.MfFile[apkFilePath];
                        if (sHash == null)
                        {
                            //Console.WriteLine("Hash not found for file: {0}", apkFilePath);
                            hashNotFound++;
                        }
                        else if (!apk.MfFile.ValidateHash(apkFilePath, apk.GetFile(apkFilePath)))
                        {
                            //Console.WriteLine("InvalidHash: {0} ({1})", apkFilePath, sHash);
                            invalidHash++;
                        }
                    }

                    Console.WriteLine("Total files: {0:N0}", totalFiles);
                    if (hashNotFound > 0)
                    {
                        Console.WriteLine("Hash Not found: {0:N0}", hashNotFound);
                    }
                    if (invalidHash > 0)
                    {
                        Console.WriteLine("Invalid hash: {0:N0}", invalidHash);
                    }
                }

                TreeDto root = BuildTree(apk.GetHeaderFiles().ToArray(), '/');
                String  test = ConvertTreeToStringRec(root, 0);

                foreach (String xmlFile in apk.GetHeaderFiles())
                {
                    switch (Path.GetExtension(xmlFile).ToLowerInvariant())
                    {
                    case ".xml":
                        /*if(xmlFile.Equals("AndroidManifest.xml", StringComparison.OrdinalIgnoreCase))
                         *      continue;*/

                        Byte[] file = apk.GetFile(xmlFile);
                        //ManifestFile manifest = new ManifestFile(file);
                        //Console.WriteLine(manifest.Xml.ConvertToString());

                        AxmlFile axml = new AxmlFile(StreamLoader.FromMemory(file, xmlFile));
                        if (axml.Header.IsValid)
                        {
                            XmlNode xml = axml.RootNode;
                            Console.WriteLine("---" + xmlFile + ":");
                            Console.WriteLine(xml.ConvertToString());
                        }
                        else
                        {
                            Console.WriteLine("---" + xmlFile + ":");
                            Console.WriteLine(System.Text.Encoding.UTF8.GetString(file));
                        }
                        break;
                    }
                }

                ReadApkManifestRecursive(apk.AndroidManifest);
            }
        }