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

  • 相关阅读:
    UC_online在线抽奖_新浪UC(Tab页功能)
    Asp.Net上传文件示例(保存文件路径到数据库)
    中国十大美丽女主播
    行业应用软件项目经理三步曲
    TVB十大女星比美十大名花
    SQLServer和Oracle常用函数对比
    如何撰写商业计划
    带农历的日历
    ASP+VML制作统计图的源程序
    Winamp网页播放器
  • 原文地址:https://www.cnblogs.com/rainduck/p/3668527.html
Copyright © 2011-2022 走看看