按需要对Androguard进行定制增强
2024-08-24 09:00:51
按需对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进行更新配置。略微不足之处就是非全局生效,比较适合个人二次开发
最新文章
- spring源码:学习线索(li)
- iOS运行时与method swizzling
- Spring IoC实现解耦合
- hdu Cup
- hibernate的dao中参数的传递取值
- 《JavaScript权威指南》读书笔记(三)
- java 学习连接
- IOI1994 北京2008的挂钟 迭代加深
- 过滤器(filter)实现
- NetAnalyzer笔记 之 八 NetAnalyzer2016使用方法(2)
- wamp无法登录phpmyadmin问题
- VS2010编译以前版本工程时 ERROR CVT1100:duplicate resource,type:MANIFEST解决办法
- Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
- WINFORM数据库操作,有点像安装里面的SQLITE
- Android 5.0 调色 Palette调色功能
- js字符串String提取方法比较
- GDB调试qemu-kvm
- cut命令详解
- Windows 8 Stroe Apps 控件
- 【Java】详解java对象的序列化
热门文章
- EOJ-大学生程序设计邀请赛(华东师范大学)-E-黑心啤酒厂
- 不只是内存分析工具~valgrind
- Linux下的GitHub安装与简单配置教程 ~ 转载
- apache快速配置简易网站
- 【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制
- V++ MFC CEdit输出数组 UNICODE TO ASCII码
- ubuntu安装ftp server并匿名访问
- python--asyncio模块
- pymongo: MongoClient opened before fork错误排解
- Matlab,C++存取二进制