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

  • 相关阅读:
    【weka应用技术与实践】过滤器
    【软件分析与挖掘】Vision of Software Clone Management: Past, Present, and Future (Keynote Paper)
    【软件分析与挖掘】Multiple kernel ensemble learning for software defect prediction
    【Thinking in Java-CHAPTER 3】操作符
    【软件分析与挖掘】A Comparative Study of Supervised Learning Algorithms for Re-opened Bug Prediction
    【Thinking in Java-CHAPTER 1&&2】对象导论&&一切都是对象
    【cs229-Lecture20】策略搜索
    【cs229-Lecture19】微分动态规划
    【cs229-Lecture18】线性二次型调节控制
    【cs229-Lecture17】离散与维数灾难
  • 原文地址:https://www.cnblogs.com/rainduck/p/3668527.html
Copyright © 2011-2022 走看看