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

posted on 2014-04-16 14:08  rainduck  阅读(1203)  评论(4编辑  收藏  举报

导航