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信息