def __init__(self, filepath, string_processing=True): super(APK, self).__init__(filepath) if not self.looks_like_an_apk(filepath): raise APKParsingError self._files = [] self._extract_and_set_entries(string_processing) if len(self._files) == 0 or self._cert is None: raise APKParsingError self._app_name = Aapt.get_app_name(filepath)
def test_get_app_permissions(self): for filename in self.files: self.assertTrue(Aapt.get_app_permissions(self.files[filename]) == self.files_properties[filename]['permissions'])
def test_get_manifest_info(self): for filename in self.files: man = Aapt.get_manifest_info(self.files[filename]) self.assertTrue(man['activities'] == self.files_properties[filename]['activities']) self.assertTrue(man['services'] == self.files_properties[filename]['services']) self.assertTrue(man['receivers'] == self.files_properties[filename]['receivers'])
def test_get_apk_info(self): for filename in self.files: apk = Aapt.get_apk_info(self.files[filename]) self.assertTrue(apk['package_name'] == self.files_properties[filename]['package_name']) self.assertTrue(apk['version'] == self.files_properties[filename]['version']) self.assertTrue(apk['sdk'] == self.files_properties[filename]['sdk'])
def test_get_app_name(self): for filename in self.files: self.assertTrue(Aapt.get_app_name(self.files[filename]) == self.files_properties[filename]['app_name'])
def __init__(self, filepath, binary=False, apk_path=""): super(AndroidManifest, self).__init__(filepath, "AndroidManifest.xml") # Load the AndroidManifest.xml structure: with open(AndroidManifest.__MANIFEST_CONFIG_FILE, 'r') as config: cfg = json.load(config) with open(filepath, 'rb') as fp: try: if binary: self._raw = AXMLPrinter(fp.read()).getBuff() xml = minidom.parseString(self._raw) else: xml = minidom.parse(filepath) except ExpatError: if apk_path != "": apk = Aapt.get_apk_info(apk_path) self._package_name = apk["package_name"] self._version = apk["version"] self._sdk = apk["sdk"] self._permissions = Aapt.get_app_permissions(apk_path) man = Aapt.get_manifest_info(apk_path) self._activities = man["activities"] self._services = man["services"] self._receivers = man["receivers"] else: raise AndroidManifestParsingError except IOError: raise AndroidManifestParsingError else: manifest = xml.documentElement # Extract the package info: self._package_name = manifest.getAttribute( cfg['package']['name']) self._version = {"code": "", "name": ""} try: self._version['code'] = int( manifest.getAttribute( cfg['package']['version']['code'])) except ValueError: pass self._version['name'] = manifest.getAttribute( cfg['package']['version']['name']) # Extract the SDK info: sdk = self._parse_element_to_list_of_dict( manifest, cfg['uses-sdk'], "uses-sdk") if len(sdk) > 0: self._sdk = sdk[0] else: self._sdk = {} # Extract the permissions info: self._permissions = AndroidManifest._parse_element_to_simple_list( manifest, "uses-permission", cfg['uses-permission'][0]) # Extract the application info: application = manifest.getElementsByTagName( cfg['application']['tag']) application = application[0] self._activities = AndroidManifest._parse_element_to_list_of_dict( application, cfg['application']['activity'], "activity") self._services = AndroidManifest._parse_element_to_list_of_dict( application, cfg['application']['service'], "service") self._receivers = AndroidManifest._parse_element_to_list_of_dict( application, cfg['application']['receiver'], "receiver")