按需对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进行定制增强的更多相关文章

  1. PA教材提纲 TAW10-1

    Unit1 SAP systems(SAP系统) 1.1 Explain the Key Capabilities of SAP NetWeaver(解释SAP NetWeaver的关键能力) Rep ...

  2. atitit.信息系统方案规划 p71.doc

    [信息系统方案规划 ] 版本 v2 2015-7-1 变更记录 日期 修改人 版本 变更事由 说明 2015.07 艾龙 1.0 初创 2015.07 艾龙 2.0 添加接口 1. 业务功能与流程设计 ...

  3. xorm:golang的orm(只写了一小部分)

    xorm xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.这个库是国人开发的,是基于原版 xorm:https://github.com/go-xorm/xorm 的定制 ...

  4. Redux:中间件

    redux中间件概念 比较容易理解. 在使用redux时,改变store state的一个固定套路是调用store.dispatch(action)方法,将action送到reducer中. 所谓中间 ...

  5. CSharpGL(28)得到高精度可定制字形贴图的极简方法

    CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...

  6. VR软件定制外包团队:国内设备开发公司已超90家

    昨日是UNITE 2015 BEIJING大会的第二天,相比于新手训练营和VR Day活动,昨天的大会更加注重分享和展示.Unity 创始人David Helgason在也大会上进行了Unity 5 ...

  7. ECharts-基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表

    ECharts http://ecomfe.github.com/echarts 基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表.创新的拖拽重计算 ...

  8. 转载:Cellebrite发布新版手机取证软件,增强调查能力

    2012-5-24 7:57:51  文章来源:文传商讯  作者:文传商讯 UFED 1.1.9.7版本为移动取证数据提取.编码和分析提供了先进的技术突破 新闻事实: Cellebrite发布其旗舰产 ...

  9. 使用 SELinux 和 Smack 增强轻量级容器

    http://www.bitscn.com/os/linux/200904/158771.html 安全 Linux 容器实现指南 轻量级容器 又称作 Virtual Private Servers ...

随机推荐

  1. js 数组遍历

    map.filter.forEach.every.some http://www.runoob.com/jsref/jsref-obj-array.html 1.在字符串中使用 map 在一个Stri ...

  2. [Oracle] oracle统计信息

    Oracle统计信息 Oracle数据库里的统计信息可以分为6种类型: 表的统计信息 索引的统计信息 列的统计信息 系统统计信息 数据字典统计信息 内部对象统计信息 图 1: Oracle统计信息 基 ...

  3. PHPUnit安装(无需PEAR)

    转自:http://www.cnblogs.com/bourneli/articles/2447155.html   phpunit源代码下载:http://pear.phpunit.de/   如何 ...

  4. Java解决跨域的方案

    在后台加上,在数据返回之前添加 response.setHeader("Access-Control-Allow-Origin","*"); 就可以了,前台不用 ...

  5. 如何使用python发送邮件

    使用python发送邮件,用的是SMTP协议. 因此在qq邮箱中,要设置开启SMTP服务 只要能开启一个就行 在我们执行程序的时候,会发现邮件被发送过来了 在python中还有一个更简单的第三方模块, ...

  6. PSR-2 编码风格规范

    本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合作时,就需要一 ...

  7. (8)java基础知识-字符编码

    这块比较乱待整理... http://www.regexlab.com/zh/encoding.htm 字符编码 将各种文字.图形.标点.数字整合在一个集合叫做字符集. 把这些字符集按照不用规则进行编 ...

  8. 洛谷 P1739 表达式括号匹配【STL/stack/模拟】

    题目描述 假设一个表达式有英文字母(小写).运算符(+,-,*,/)和左右小(圆)括号构成,以"@"作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返 ...

  9. HDU 1203 【01背包/小数/概率DP】

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...

  10. poj3693(后缀数组)

    poj3693 题意 给出一个串,求重复次数最多的连续重复子串,输出字典序最小的. 分析 论文 例8(P21). Sparse-Table算法预处理出任意两个后缀串的LCP. code #includ ...