def ParseManifest(self, ManifestFile): ap = AXMLPrinter(open(ManifestFile, "rb").read()) xml = minidom.parseString(ap.getBuff()) package = xml.documentElement.getAttribute("package") classes = set() classnames = set() for tag_name in ["activity", "service", "receiver", "provider"]: for item in xml.getElementsByTagName(tag_name): value = item.getAttribute("android:name") if len(value) > 0: if value[ 0] == ".": # Short form with implicit package name classes.add(package + value) classnames.add(value.split('.')[-1]) else: # Fully-qualified name classes.add(value) classnames.add(value.split('.')[-1]) # Hack: Some apke does not follow this rule as set in the SDK # As a workround treat them as short form as well classes.add(package + '.' + value) return classes, classnames
def ParseManifest(self, ManifestFile): ap = AXMLPrinter(open(ManifestFile, "rb").read()) xml = minidom.parseString(ap.getBuff()) package = xml.documentElement.getAttribute( "package" ) classes = set() classnames = set() for tag_name in ["activity", "service", "receiver", "provider"]: for item in xml.getElementsByTagName(tag_name) : value = item.getAttribute("android:name") if len(value) > 0 : if value[0] == "." : # Short form with implicit package name classes.add(package + value) classnames.add(value.split('.')[-1]) else : # Fully-qualified name classes.add(value) classnames.add(value.split('.')[-1]) # Hack: Some apke does not follow this rule as set in the SDK # As a workround treat them as short form as well classes.add(package + '.' + value) return classes, classnames
import re import sys, os import codecs #http://androguard.blogspot.com/2011/03/androids-binary-xml.html from apk import AXMLPrinter from xml.dom import minidom if sys.argv[1] != '-': ap = AXMLPrinter(open(sys.argv[1], "rb").read()) else: ap = AXMLPrinter(sys.stdin.read()) xml = minidom.parseString(ap.getBuff()) if sys.argv[2] != '-': xml.writexml(codecs.open(sys.argv[2], "wb", "utf-8")) else: xml.writexml(codecs.getwriter('utf-8')(sys.stdout))