静态分析androguard

1.androaxml 读取配置文件AndroidManifest.xml

Options:

    -h --help            

    -i --INPUT

    -o --OUTPUT

    -v --version        

python2 androaxml.py -i manager.apk -o output.xml

python2 androaxml.py -i AndroidManifest.xml -o output.xml

 

2.androapkinfo 显示所有类(包括构造方法、method)、显示权限、activities、services、receivers、Providers、是否调用非java代码是否使用反射机制、是否使用动态调用

    -h --help            

    -i --INPUT

    -d --directory(输出目录无效,没什么反应)

python2 androapkinfo.py -i manager.apk

功能分析:通过权限分析,可以分析出app是否创建了文件。

3.androdd 用于生成apk文件显示每个类的方法调用流程图

Options:

    -h --help           

    -i --INPUT

    -o --OUTPUT

    -d --dot            

    -f --FORMAT (允许PNG和JPG两种格式)

    -v --version   

python2 androdd.py -i manager.apk -o /home/ec2-user -d -f PNG

报异常,无法正常工作

 

4 androdiff 用于比较两个文件的差异

options:

    -h --help  

    -i --input

    -v --version

Identical:相同点

Similar:同类

New:新增的点

Deleted:删除的点

Skipped:跳过的点

功能分析:从上图可以看出两个apk完全一致,通过这个运行,可以测试出用户安装的软件是否是正版。


5.androdump 用来dump一个Linux进程的信息。(一般不适用)

    python2 androdump.py -i pid


6.androgexf.py 用于生成apk的gexf格式的图形文件。

    python2 androgexf -i ./manager.apk -o ./manager.gexf

    所有的方法形成的节点图


7.androsim.py 用于计算两个apk之间的相似度

    python2 androsim.py -i  ./manager.apk ./manager1.apk

    methods:相近度

    功能分析:通过比较得出两个apk的相似度,可以得出是否抄袭。


8.androrisk.py 用于评估apk风险

    Option:

    -m --每个方法

    -i --输入

    -d --目录

    Dex:动态加载dex native:调用非java代码的次数 dynamic:从sd动态加载dex次数

    Crypto:隐藏的dex  Reflection:反射使用次数

    Apk: dex:dex的使用次数 executable:可执行的次数 zip:压缩包 shell_script:shell脚本的次数 apk:包含其他apk的个数 share_libraries:分享数据库个数

    Perm:各种权限的使用

    fuzzyRisk:最终风险评估

功能分析:通过得出风险评估,可以判定apk的安全系数


9.androlyze.py 分析apk

导入modlue from androguard.core.bytecodes import apk,dvm


(1).通过 a= apk.APK("/tmp/manager.apk")得到一个APK class


(2).通过a的方法可以得到关于apk一些文件基本信息(AndroidManifest所有信息、文件信息) :

  其中一个文件classes.dex是jar转换成dex格式。通过a.get_dex()可以获取dex数据的string类型

 

(3).通过 d= dvm.DalvikOdexVMFormat(a.get_dex())得到将String类型dex转换成dvm格式 :

  通过d的方法可以得到一些关于class基本信息

  比如get_classes_names() 得到classes名称

  get_class_manager()得到ClassManager类

  get_methods() 得到所有的方法

  get_method(p)得到指定的方法 import re p = re.compile('mkdir*')

  还提供一些通过索引查找class、method和debug的方法

 

(4).如何获取方法的参数名称:

 apk =APK("/tmp/manager.apk") 获取apk信息

 dalvik = DalvikVMFormat(a.get_dex()) 通过传递classes.dex获取dex信息

 encodeMethod = dalvik.get_method(re.compile("deleteFile"))[0]

 encoedeMethod .get_information()可以查看参数类型,返回类型 寄存器

 debugInfoItem = encodeMethod.get_debug()

 debugInfoItem.get_Parameter_names() 可以得到参数名称的字节码

 debugInfoItem.get_translated_parameter_names()得到参数名称

 encoedeMethod.add_note("")在方法中添加代码

 

(5).如何通过方法获取是否需要权限 :

 apk =APK("/tmp/manager.apk")

 dalvik = DalvikVMFormat(a.get_dex())

 anlysis = VMAnalysis(dalvik) 对apk进行分析

 method = anlysis.get_method(re.compile("deleteFile"))

 anlysis.get_permissions_method(method) 可以得出方法是否需要权限(报错)


(6).如何获取需要这一权限方法的信息

 apk =APK("/tmp/manager.apk")

 dalvik = DalvikVMFormat(a.get_dex())

 anlysis = VMAnalysis(dalvik) 对apk进行分析

 dictiion = anlysis.get_permissions([]) 传递[] 返回权限路径的数组

 dictionItem=diction.get("KILL_BACKGROUND_PROCESSES") 获取其中一组关于KILL_BACKGROUND_PROCESSES的

 dictionItem0 =dictionItem[0] 获取第一组数据

 //method = d.get_method.by_idx(ddictionItem0.get_idx()) (报错)

 method =d.get_method_by_idx(ddictionItem0.get_src_idx()) 通过idx获取方法信息

 method.show_info() 显示method信息

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值