#!/usr/bin/python # -*- coding: utf-8 -*- from pychrysalide import Plugin from manifest import AndroidManifest from panel import PermsPanel from xml.dom import minidom import gtk import zipfile class AndroPerms(Plugin): """List all permissions given to an APK files.""" def get_action(self): """Register the plugin for given actions.""" return Plugin.PGA_DISASS_PROCESS def execute_on_binary(self, binary, action): """Process once a binary is disassembled.""" zf = zipfile.ZipFile(binary.get_filename()) f = zf.open('AndroidManifest.xml', 'r') data = f.read() f.closed manifest = AndroidManifest(data) xml = minidom.parseString(manifest.getXML()) print print "Permissions for ", binary.get_filename(), " :" print "-------------" print plist = [] for p in xml.getElementsByTagName("uses-permission"): plist.append(p.getAttribute("android:name")) print p.getAttribute("android:name") print button = gtk.Button("Hello World") button.show() treestore = gtk.TreeStore(str, str, str) panel = PermsPanel() panel.filter_permissions(plist) #self.add_wgt(panel.get_widget()) instrs = binary.get_instructions() for i in instrs: # print i, " :: 0x%08lx" % i.address line = binary.disassembled_buffer.find_line_by_addr(i.address) text = line.get_text() if text.startswith("invoke"): #print "[0x%08lx] " % i.address, text pass