summaryrefslogtreecommitdiff
path: root/plugins/python/androperms
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/python/androperms')
-rw-r--r--plugins/python/androperms/androperms.py18
-rw-r--r--plugins/python/androperms/db.py24
-rw-r--r--plugins/python/androperms/panel.py8
3 files changed, 28 insertions, 22 deletions
diff --git a/plugins/python/androperms/androperms.py b/plugins/python/androperms/androperms.py
index 18443fc..ddccb8a 100644
--- a/plugins/python/androperms/androperms.py
+++ b/plugins/python/androperms/androperms.py
@@ -56,8 +56,9 @@ class AndroPerms(Plugin):
db = PermsDataBase()
db.filter_permissions(plist)
+ fmt = binary.get_format()
instrs = binary.get_instructions()
- buffer = binary.disassembled_buffer
+ buf = binary.disassembled_buffer
pfn = re.compile('<.* ([^ ]*)\(')
@@ -65,15 +66,20 @@ class AndroPerms(Plugin):
if i.keyword.startswith("invoke"):
- line = buffer.find_line_by_addr(i.address)
+ line = buf.find_line_by_addr(i.address)
text = line.get_text()
- #print "check %s" % text
-
name = pfn.search(text)
if name != None:
- #print " --> ", name.group(1)
- db.check_call(i.address, name.group(1))
+
+ resolved = fmt.resolve_relative_routine(i.address)
+
+ if resolved == None:
+ reladdr = "0x%08x" % i.address
+ else:
+ reladdr = "<%s()+0x%x>" % (resolved[0], resolved[1])
+
+ db.check_call(i.address, name.group(1), reladdr)
self._panel.memorize_permissions(binary, db.get_used_permissions())
diff --git a/plugins/python/androperms/db.py b/plugins/python/androperms/db.py
index 625d400..7014915 100644
--- a/plugins/python/androperms/db.py
+++ b/plugins/python/androperms/db.py
@@ -53,7 +53,7 @@ class PermsDataBase:
self._used[p] = []
- def check_call(self, addr, line):
+ def check_call(self, addr, line, reladdr):
"""Check if a call requires some rights."""
found = False
@@ -69,23 +69,23 @@ class PermsDataBase:
#if line.find(c) > -1:
if c.find(line) > -1:
- self._used[p].append([addr, c + "()"])
- #found = True
+ self._used[p].append([reladdr, c + "()", addr])
+ found = True
- if not found:
+ # if not found:
- func = line.split('.')[-1]
+ # func = line.split('.')[-1]
- for p in self._perms:
+ # for p in self._perms:
- for c in self._perms[p]:
+ # for c in self._perms[p]:
- if line.find("Wall") > -1:
- print " <> ", c, " vs ", func
+ # if c.find(func) > -1:
- if c.find(func) > -1:
- self._used[p].append([addr, line + "()"])
- break
+ # #print ">>> %s found in %s" % (func, c)
+
+ # self._used[p].append([reladdr, line + "()", addr])
+ # break
def get_used_permissions(self):
diff --git a/plugins/python/androperms/panel.py b/plugins/python/androperms/panel.py
index bebeed5..b892339 100644
--- a/plugins/python/androperms/panel.py
+++ b/plugins/python/androperms/panel.py
@@ -41,7 +41,7 @@ def _build_permissions_panel_content():
functions.pack_start(cell, True)
functions.add_attribute(cell, 'text', 3)
- store = gtk.TreeStore(gtk.gdk.Pixbuf, str, gtk.gdk.Pixbuf, str)
+ store = gtk.TreeStore(gtk.gdk.Pixbuf, str, gtk.gdk.Pixbuf, str, str)
tree.set_model(store)
return scrolled_window, tree, store
@@ -97,13 +97,13 @@ class PermsPanel(PanelItem):
img = os.path.dirname(os.path.abspath(__file__)) + '/android.png'
buf = gtk.gdk.pixbuf_new_from_file(img)
- it = self._store.append(None, [buf, p, None, None])
+ it = self._store.append(None, [buf, p, None, None, None])
img = os.path.dirname(os.path.abspath(__file__)) + '/routine.png'
buf = gtk.gdk.pixbuf_new_from_file(img)
for f in used[p]:
- self._store.append(it, [None, "0x%08x" % f[0], buf, f[1]])
+ self._store.append(it, [None, f[0], buf, f[1], f[2]])
self._tree.expand_all()
@@ -117,4 +117,4 @@ class PermsPanel(PanelItem):
# On ne traite que les lignes de code
if model.get_value(it, 0) == None:
- self.get_current_view().scroll_to_address(int(model.get_value(it, 1), 16))
+ self.get_current_view().scroll_to_address(int(model.get_value(it, 4)))