按需要对Androguard进行定制增强
按需对Androguard进行增强和定制修改
Androguard是一个对android应用程序进行分析的基于python的平台,功能强大。但是在使用的过程中,提供的功能不一定如我们所需,所以需要进行额外的patch一下。
例如,androguard只提供了函数show_Permissions(dx)
来获取权限的使用情况。但由于该函数直接将结果输出,而非返回一个结果,所以不利用后面继续处理。故尝试如下步骤进行修改:
定位需要修改的位置
给show_Permissions()输入一个错误的参数,即可显示相应文件或模块的目录,即androguard/androguard/core/analysis/analysis.py
.
修改逻辑
打开analysis.py之后,容易看清show_permissions的逻辑。所以向其中加入如下代码,实现将权限使用情况以dictionary形式返回。
def get_dx_permissions(dx): ''' Show where permissions are used in a specific application :param dx : the analysis virtual machine :type dx: a :class:VMAnalysisobject Almost the same with show_Permissions(dx). Instead of
output the result directly, get_dx_Permissions(dx) return the result as a dictionary.
'''
p = dx.get_permissions([])
permissions_with_path = {};
for i in p :
#print i, ":"
paths = []
for j in p[i] :
#show_Path( dx.get_vm(), j )
paths.append(get_Path(dx.get_vm(), j))
permissions_with_path[i]= paths return permissions_with_path
def get_Path(vm, path):
cm = vm.get_class_manager()
if isinstance(path, PathVar):
dst_class_name, dst_method_name, dst_descriptor = path.get_dst( cm )
info_var = path.get_var_info()
result = "%s %s (0x%x) ---> %s->%s%s" % (path.get_access_flag(), info_var, path.get_idx(), dst_class_name, dst_method_name, dst_descriptor) #print "%s %s (0x%x) ---> %s->%s%s" % (path.get_access_flag(),
#info_var,
#path.get_idx(),
#dst_class_name,
#dst_method_name,
#dst_descriptor)
else :
if path.get_access_flag() == TAINTED_PACKAGE_CALL :
src_class_name, src_method_name, src_descriptor = path.get_src( cm )
dst_class_name, dst_method_name, dst_descriptor = path.get_dst( cm )
result = "%d %s->%s%s (0x%x) ---> %s->%s%s" % (path.get_access_flag(),
src_class_name,
src_method_name,
src_descriptor,
path.get_idx(),
dst_class_name,
dst_method_name,
dst_descriptor)
#print "%d %s->%s%s (0x%x) ---> %s->%s%s" % (path.get_access_flag(),
#src_class_name,
#src_method_name,
#src_descriptor,
#path.get_idx(),
#dst_class_name,
#dst_method_name,
#dst_descriptor)
else :
src_class_name, src_method_name, src_descriptor = path.get_src( cm )
result = "%d %s->%s%s (0x%x)" % (path.get_access_flag(),
src_class_name,
src_method_name,
src_descriptor,
path.get_idx())
#print "%d %s->%s%s (0x%x)" % (path.get_access_flag(),
#src_class_name,
#src_method_name,
#src_descriptor,
#path.get_idx())
return result
使配置生效
直接 python setup.py install
.。现在就可以在androguard中使用get_dx_permissions咯,可以将返回结果进行后续的处理咯。
抛砖引玉,其他修改类似。
-------------------------
华丽的分割线
后来又发现实际上修改androguard目录下的androlyze.py更方便。(自己写py直接调用androguard的库也是没问题的,但是没有直接修改androlyze.py方便)。
修改Androlyze.py的好处,就是不需要重新使用setup.py进行更新配置。略微不足之处就是非全局生效,比较适合个人二次开发
按需要对Androguard进行定制增强的更多相关文章
- PA教材提纲 TAW10-1
Unit1 SAP systems(SAP系统) 1.1 Explain the Key Capabilities of SAP NetWeaver(解释SAP NetWeaver的关键能力) Rep ...
- atitit.信息系统方案规划 p71.doc
[信息系统方案规划 ] 版本 v2 2015-7-1 变更记录 日期 修改人 版本 变更事由 说明 2015.07 艾龙 1.0 初创 2015.07 艾龙 2.0 添加接口 1. 业务功能与流程设计 ...
- xorm:golang的orm(只写了一小部分)
xorm xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.这个库是国人开发的,是基于原版 xorm:https://github.com/go-xorm/xorm 的定制 ...
- Redux:中间件
redux中间件概念 比较容易理解. 在使用redux时,改变store state的一个固定套路是调用store.dispatch(action)方法,将action送到reducer中. 所谓中间 ...
- CSharpGL(28)得到高精度可定制字形贴图的极简方法
CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...
- VR软件定制外包团队:国内设备开发公司已超90家
昨日是UNITE 2015 BEIJING大会的第二天,相比于新手训练营和VR Day活动,昨天的大会更加注重分享和展示.Unity 创始人David Helgason在也大会上进行了Unity 5 ...
- ECharts-基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表
ECharts http://ecomfe.github.com/echarts 基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算 ...
- 转载:Cellebrite发布新版手机取证软件,增强调查能力
2012-5-24 7:57:51 文章来源:文传商讯 作者:文传商讯 UFED 1.1.9.7版本为移动取证数据提取.编码和分析提供了先进的技术突破 新闻事实: Cellebrite发布其旗舰产 ...
- 使用 SELinux 和 Smack 增强轻量级容器
http://www.bitscn.com/os/linux/200904/158771.html 安全 Linux 容器实现指南 轻量级容器 又称作 Virtual Private Servers ...
随机推荐
- transition transform animate的使用
注:代码显示效果可以自行粘贴复制查看 transition(过渡),主要是关注property的变化主要有四个属性transition-property.transition-durantion.tr ...
- MySQL数据库从windows迁移到linux
前几天搭建了lamp环境,想把之前写的小东西迁到linux上运行,涉及到把mysql数据库的文件迁移到linux上,直接用fileZilla传过去应该不行,我试了下,反正没成功.下面是我采用的方法: ...
- .ini配置CAN信息
#include <iostream> #include <windows.h>//这个头文件一定要添加,否则GetPrivateProfileString(...)函数无法使 ...
- 最全面的Android Webview详解
转自:最全面的Android Webview详解 前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 那么这种该如何实现呢?其实这是 ...
- [ CodeVS冲杯之路 ] P1576
不充钱,你怎么AC? 题目:http://codevs.cn/problem/1576/ 这和上一道题十分的类似,所以直接秒杀 ( 上一题:http://www.cnblogs.com/hadilo/ ...
- CentOS下SVN使用
1. 介绍 这里想在CentOS上搭建的是基于http访问的SVN Server 2. 软件 安装相关软件 yum install httpd httpd-devel mod_dav_svn subv ...
- (10)ubuntu内核源码树
ubuntu内核源码树目录: root@ubuntu:/lib/modules/3.13.0-32-generic/build#
- BootStrap容器介绍
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- luogu P1182 数列分段Section II
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- [洛谷3796]【模板】AC自动机(加强版)
题目大意: 给定$n(n\leq150)$个模式串$p_i(|p_i|\le70)$和一个$t(|t|\le10^6)$,求$t$中被匹配次数最多的$p_i$. 思路: AC自动机.匹配时记录一下匹配 ...