二、小试牛刀-APK文件分析

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.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值