1. 背景
该工具是基于Androguard开源项目修改而成的,仅仅提取了其权限检查的功能(Androguard是一款功能丰富的Apk静态分析工具)。最初是为了方便Android M版本的权限更新和升级而开发,以方便我们查找APK中存在的权限使用位置。
目前,为了让大家更容易的分析Apk的权限,对原来权限工具进行如下改进:
- 该工具成功移植到windows环境下(以前Androguard只支持linux环境),并且大大简化了环境配置过程,使用成本大大降低。但是目前只能确保权限检查功能可以正常使用,Androguard的其它功能并没有测试。
- 解决APK分包后不能全面查找权限的问题,自动匹配多个.dex文件。
- 生成权限txt文档,同时过滤出危险权限(Dangerous和Signature权限)。
2. 使用方法
该工具的使用十分简单,环境配置也很方便,支持win和mac,步骤如下:
确保系统中Python版本为2.7.x(推荐使用2.7.10,如果是低版本需要另外安装setuptools),一定不能是3.x版本。如果版本不对,可以参考官网进行升级处理。
-
拷贝Androguard文件夹至本地,并进入根目录下在cmd中执行:
python setup.py install
如果是linux或mac系统,也是同样的方法。
-
接下来,只找到需要分析权限的Apk。在cmd中的BaiduAndroguard根目录下执行:
androlyze.py -i "路径/文件名" -x
例如:
androlyze.py -i "TestActivity.apk" -x
-
这样就会得到两个txt文件,如下图:
其中,Permissions.txt包含APK的所有权限;Permissions_filtered.txt是过滤出来的重要权限,包含Dangerous和Signature两类危险权限。
-
权限分析的结果是使用Smali语言表示,如下图所示:
第一行的ACCESS_NETWORK_STATE指的是使用的权限名称,后面每行表示一个使用该权限的位置。基本语法如下:
V void
Z boolean
B byte
S short
C char
I int
J long
F float
D doubleLandroid/net/ConnectivityManager; 相当于java中的android.net.ConnectivityManager
L表示这是一个对象类型。;表示对象名称的结束。这些语法可以去Smali官方网站查看。
3. 存在的问题
目前来看,该工具还存在一些弊端和不足,在后续的研发中还会持续跟进。
- 当前的权限分析是基于多伦多大学的PScout开源mapping文件得到,但是目前该mapping仅更新到API22,还没有适配23,因此可能存在一些权限检查的遗漏。
- 对于某些权限并不能完全检查出来,例如读写SD卡的权限,存在遗漏的情况。
4. 文件下载地址
参见Github的AndroPermissions