diff options
Diffstat (limited to 'plugins/python')
-rw-r--r-- | plugins/python/androperms/Makefile.am | 8 | ||||
-rw-r--r-- | plugins/python/androperms/androperms.py | 30 | ||||
-rw-r--r-- | plugins/python/androperms/panel.py | 89 |
3 files changed, 127 insertions, 0 deletions
diff --git a/plugins/python/androperms/Makefile.am b/plugins/python/androperms/Makefile.am index 3d1755c..f44be3c 100644 --- a/plugins/python/androperms/Makefile.am +++ b/plugins/python/androperms/Makefile.am @@ -3,10 +3,18 @@ andropermsdir = $(datadir)/openida/plugins/python/androperms androperms_DATA = \ __init__.py \ + androperms.db \ androperms.py \ defs.py \ manifest.py \ + panel.py \ parser.py \ reader.py \ stack.py \ string.py + +androperms.db: + @tmpzip=`tempfile` ; \ + wget http://www.android-permissions.org/permissionmap.zip -O $$tmpzip ; \ + unzip -p $$tmpzip permissionmap/APICalls.txt | tail -n +2 - > androperms.db ; \ + rm $$tmpzip diff --git a/plugins/python/androperms/androperms.py b/plugins/python/androperms/androperms.py index f85d402..0d70edc 100644 --- a/plugins/python/androperms/androperms.py +++ b/plugins/python/androperms/androperms.py @@ -3,8 +3,10 @@ from pychrysalide import Plugin from manifest import AndroidManifest +from panel import PermsPanel from xml.dom import minidom +import gtk import zipfile @@ -35,7 +37,35 @@ class AndroPerms(Plugin): 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 diff --git a/plugins/python/androperms/panel.py b/plugins/python/androperms/panel.py new file mode 100644 index 0000000..b852049 --- /dev/null +++ b/plugins/python/androperms/panel.py @@ -0,0 +1,89 @@ + +import gtk +import os + + +class PermsPanel: + """Display all permissions found in the Manifest.""" + + def __init__(self): + + + tree = gtk.TreeView() + + languages = gtk.TreeViewColumn() + languages.set_title("Programming languages") + + cell = gtk.CellRendererText() + languages.pack_start(cell, True) + languages.add_attribute(cell, "text", 0) + + treestore = gtk.TreeStore(str) + + it = treestore.append(None, ["Scripting languages"]) + treestore.append(it, ["Python"]) + treestore.append(it, ["PHP"]) + treestore.append(it, ["Perl"]) + treestore.append(it, ["Ruby"]) + + it = treestore.append(None, ["Compiling languages"]) + treestore.append(it, ["C#"]) + treestore.append(it, ["C++"]) + treestore.append(it, ["C"]) + treestore.append(it, ["Java"]) + + tree.append_column(languages) + tree.set_model(treestore) + + tree.show() + + self._view = tree + + self._perms = { } + + self._load_all_definitions() + + + def get_widget(self): + + return self._view + + + + + + def _load_all_definitions(self): + """Load the database in memory.""" + + with open(os.path.dirname(__file__) + '/androperms.db', 'r') as f: + + for line in f.readlines(): + + perm = line.strip("\n").split("\t") + + for p in perm[1].split(" "): + + if not p.startswith("android.permission."): + continue + + if p not in self._perms: + self._perms[p] = [] + + self._perms[p].append(perm[0]) + + + def filter_permissions(self, used): + """Forget all permissions which are not used.""" + + keep = {} + + for p in self._perms: + if p in used: + keep[p] = self._perms[p] + + self._perms = keep + + # for p in self._perms: + # print p + # for v in self._perms[p]: + # print " - ", v |