前言
本系列前面的文章说过,为了某信息安全比赛,我选了一个APK行为分析的题目。之前一直在研究安卓的编程,然后看了一下关于apk分析方面的书,觉得完全没有目标,不知道如何下手,偶然间在freebuf闲逛的时候,随手搜了一下这方面的资料,还真找到了两篇文章:
第一篇文章介绍的就是我选择的一个C/S架构的工具MobSF,用django+python写的。作者是Ajin Abraham,这个项目他发布在了github上面https://github.com/ajinabraham/Mobile-Security-Framework-MobSF,一直在更新,所以如果提交issue的话他很快就会回。
自己看书完全不知道如何做,所以我决定用C++/Qt重写这个项目。后续的文章会同步开发过程。
安装MobSF
怎么安装MobSF在FreeBuf的文章中已经说的很清楚了,将源码、虚拟机、java、依赖项下载安装好后,应该是这样:
进入终端输入
python manage.py runserver
显然,错误是不可避免的:
直接根据错误提示打开java.py,解决第一个错误(应该是java路径的问题)
问题出在第65行:
proc = subprocess.Popen(args,stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)
subprocess.Popen函数的详细用法与作用可百度,这里以args为参数打开了一个新的进程,既然问题出在这里,而且args参数是传递进来的,回溯到调用RunProcess(args)的地方:
可以看到:
MAC_LINUX_JAVA="/usr/bin/"
args=[MAC_LINUX_JAVA+"java"]
也就是说,subprocess.Popen()在这里实际上执行了一个命令:/usr/bin/java
和我们在命令行下输入这条命令是一样的。那么我们尝试在命令行下输入这条命令:
显然,路径是错误的。我的java 并没有直接装在/usr/bin目录下:
而是在/usr/bin/jdk1.8.0_91下。
找到可执行文件java,在/usr/bin/jdk1.8.0_91/bin/下:
在命令行下输入
/usr/bin/jdk1.8.0_91/bin/java
看完终端的输出结果,就可以明白作者在java.py中这一段代码的含义:
就是检测在运行java可执行文件后,检测终端的输出中有没有“oracle”字段,从而判断有没有安装java。
既然如此,我们就有两个选择:
1. 修改源码
2. 修改java安装地址
显然,修改源码更方便:
修改java.py第43行为:
MAC_LINUX_JAVA="/usr/bin/jdk1.8.0_91/bin/"
再次运行manage.py:
OK.
打开网站127.0.0.1:8000
随便上传一个apk进行分析,结果又有报错:
第一个错误应该是python的一个第三方包xhtml2pdf安装出了问题导致无法导入,这个问题在ubuntu16.04LTS上没有得到解决,忽略不计,关注第二个错误。应该是编码错误,将源码的文件夹复制到home中,使得文件夹路径中不包含中文,再次执行,ok了:
其他
关于MobSF的使用方法就需要自己研究了,下一节将从MobSF的静态分析部分的源码分析开始,并开始第一步:使用zlib解压apk文件夹。