原文链接:http://blog.csdn.net/xbalien29/article/details/21885297
虽然在windows端免费版的IDA、VTS等工具都可用来静态分析,但相对来说这些工具用来人工分析在合适不过,但对于项目开发,相对来说都忽视很好扩展。而在androguard却很适合进行扩展或者移植成为自己项目的某一模块,虽然早有耳闻,但也最近才动手体验几把。当然,androguard也被很多人再次开发过了,包括一些提供上传入口的检测网站,静态分析部分感觉都有使用该模块,很多静态分析工具都基于它,其中还有一款ApkInspector也很出名。
androguard主要用来进行静态分析,其默认采用ded作为反编译的软件,同时提供了很多模块供分析人员使用。项目地址 https://code.google.com/p/androguard/ 安装方法见wiki部分。如果觉得麻烦可以下载santoku,该系统是订制Ubuntu,主要用于移动设备,包括很多分析工具集合androguard、drozer也在其中,类似于kali。
这次主要是对其中几个模块进行了初步使用:
- androrisk.py 该模块用于分析apk危险级别
- androapkinfo.py 该模块分析apk列出其中的文件类型、权限、4大组件、是否NDK反射等信息
- androaxml.py 该模块用于展示apk androidmanifest.xml
- androgexf.py 该模块生成函数调用图
- apkviewer.py 该模块生成指令级别的调用图
- androlyze.py 该模块为交互分析环境
可以看出该用本 dex中存在反射 权限中有5个为隐私权限 2个与扣费有关1个联网 3个短信等等 而这些权限是根据其自身的配置文件进行分类,位于./tools/permissions/AndroidManifest.xml
2.我们根据简单的特征可以判断出该样本确实权限很大,进而可以采用androapkinfo.py以及androaxml.py进行分析
如下命令./androaxml.py -i ./sample.apk ./androapkinfo.py -i ./sample.apk > ./sample.apk.info
前者就只是androidmanifest.xml的展示而后者内容较多,最好重定向到文本中vim查看,内容列举如下(除了权限、文件以外还多了如下):
当我看到罗列的信息后突然觉得好想有些检测网站的结果也类似,所以估计是整合进了项目里的,列举内容还算详细可以用来参考
3.有时候我们需要分析函数调用流程,那androgexf.py就用上了 ./androgexf.py -i ./sample.apk -o ./sample.apk.gexf
就生成了一个图片,这个图片我们可以用Gephi打开,下载地址 http://gephi.org/users/download/
打开后选择流程Yifan Hu 运行生成分析图:
从数据资料中进行查找,我们要查找KC2011这个类的调用流程,在数据资料中搜索KC2011然后右键选择之后,点击概览就出现了流程:
之后自己拖动一下,函数流程就清晰的出来了,但是我有一些问题,这个好像只判断拿了重这个函数调用了那些函数,调用顺序好像没有体现,看着有点忧伤。。。不知道有人能否指点
4.以上是函数级别的调用关系,如果要看指令级别的就需要apkviewer.py这个模块了,这个模块需要networkx,安装详见该博客 http://blog.csdn.net/flydirk/article/details/8506463
命令如下:./apkviewer.py -i ./sample.apk -o ./sample
该模块生成了很多图片,对应于每一个类,当然也有一个汇总的调用关系图,一样可以用gephi打开,虽然看着也一样很忧伤,就不截图了。但是该模块实现的调用流程用来做后期改进还是一个不错的选择
5.剩下就是androlyze.py交互模块了命令./androlyze.py -s
进入交互窗口后,我们可以采用apk,d,dex = AnalyzeAPK("./sample.apk")
分别获得获得apk对象、dex对象、分析结果对象
对于这些对象的操作.之后tab可以列举出对应的很多方法,d,dex也类似具体大家可以去了解
例如apk对象就可以通过get_xxxx获取对应的信息包括文件,权限,组件等等,其实这些函数正式androguard工作的核心类,有兴趣的可以研究下./androguard/core下的代码
x
除了以上列出来的模块,还有几个模块也挺有意思的:androsign.py androcsign.py 一个用于检测apk信息是否在数据库中,一个用于将apk一些特征信息加入数据库中,类似特征库,而androdiff.py用来比较两个APK间的差异