按需对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进行更新配置。略微不足之处就是非全局生效,比较适合个人二次开发

最新文章

  1. spring源码:学习线索(li)
  2. iOS运行时与method swizzling
  3. Spring IoC实现解耦合
  4. hdu Cup
  5. hibernate的dao中参数的传递取值
  6. 《JavaScript权威指南》读书笔记(三)
  7. java 学习连接
  8. IOI1994 北京2008的挂钟 迭代加深
  9. 过滤器(filter)实现
  10. NetAnalyzer笔记 之 八 NetAnalyzer2016使用方法(2)
  11. wamp无法登录phpmyadmin问题
  12. VS2010编译以前版本工程时 ERROR CVT1100:duplicate resource,type:MANIFEST解决办法
  13. Android -- 带你从源码角度领悟Dagger2入门到放弃(二)
  14. WINFORM数据库操作,有点像安装里面的SQLITE
  15. Android 5.0 调色 Palette调色功能
  16. js字符串String提取方法比较
  17. GDB调试qemu-kvm
  18. cut命令详解
  19. Windows 8 Stroe Apps 控件
  20. 【Java】详解java对象的序列化

热门文章

  1. EOJ-大学生程序设计邀请赛(华东师范大学)-E-黑心啤酒厂
  2. 不只是内存分析工具~valgrind
  3. Linux下的GitHub安装与简单配置教程 ~ 转载
  4. apache快速配置简易网站
  5. 【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制
  6. V++ MFC CEdit输出数组 UNICODE TO ASCII码
  7. ubuntu安装ftp server并匿名访问
  8. python--asyncio模块
  9. pymongo: MongoClient opened before fork错误排解
  10. Matlab,C++存取二进制