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()); } }
/// <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)); }
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))); }
static void ReadManifest(String filePath) { AxmlFile manifest = new AxmlFile(StreamLoader.FromFile(filePath)); Console.Write(manifest.RootNode.ConvertToString()); }
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); } }