1、AnalyzeAPK(filename)
加载文件开始分析
$ androguard analyze
Androguard version 3.1.1 started
In [1]: a, d, dx = AnalyzeAPK("examples/android/abcore/app-prod-debug.apk")
# Depending on the size of the APK, this might take a while...
In [2]:
1) a 表示apk对象,通过apk对象,我们获取到apk包的信息。比如,包名、权限、AndroidManifest.xml、resources
(AndroidManifest是应用清单,每个应用的根目录中都必须包含一个,并且文件名必须一模一样。它包含了app的配置信息,系统需要根据里面的内容运行APP的代码,显示界面)
2) d 表示DalvikVMFormat对象数组。
DalvikVMFormat对应apk文件中的dex文件,从dex文件中我们可以获取类、方法和字符串
3)dx 表示Analysis对象,包含特殊的类,这些类链接了关于classes.dex的信息,甚至可以一次处理许多DEX文件
(dex文件:Dalvik字节码文件,是一种能够被Dalvik虚拟机(DVM:Dalvik Virtual Machine)或者Art虚拟机执行并且加载的文件格式。)
注:dex 与 class
2、根据返回对象获取apk信息
A> APK 对象
1)a.get_permissions() //apk 权限获取
2)a.get_activities() //获取定义在AndroidManifest.xml中的活动列表
3)a.get_package() //获取包名
3) a.get_app_name() //获取app 名
4)a.get_app_icon() //获取icon path
5)a.get_androidversion_code() //numeric version
6)a.get_androidversion_name() //字符串version
//the minimal, maximal, target and effective SDK version
7)a.get_min_sdk_version()
8)a.get_max_sdk_version()
9)a.get_target_sdk_version()
10)a.get_effective_target_sdk_version()
11) a.get_android_manifest_axml().get_xml() //AndroidManifest.xml
12) a.get_android_manifest_xml() //AndroidManifest.xml的 ElementTree 对象
B> Analysis对象
Analysis
object 包含在DEX文件中classes, methods, fields and strings中的所有信息,同时还可以获取graphs和 crossreferences (XREFs) 为每一个 method, class, field和 string.(可以研究特定API调用的应用程序或者创建图形来查看不同类的依赖关系)
1)analysis.ClassAnalysis //返回a list of ClassAnalysis objects
注:有些版本返回的是dict_value 类型,通过下标访问时需通过list()强转
2)dx.get_classes()[2].get_vm_class() //ClassAnalysis不包含实际的代码,但ClassDefItem可以使用get_vm_class()来加载
//如果类是EXTERNAL, 则返回a ExternalClass.