如上篇文章http://blog.csdn.net/leehdsniper/article/details/51317900所述,首先我们需要分析MobSF的源码,明白一个apk的静态分析的步骤是什么。经过分析,如何将apk文件解压就是进行apk行为分析的第一步,确切的说应该是第二步,第一步应该是去壳。但是为了简单起见,去壳这一步就暂时忽略。
运行MobSF
首先从网页入手进行分析,启动服务端后打开127.0.0.1:8000,进入开发者模式:
可以看到,中间的Update&Analyse按钮属于一个表单,这个表单采用POST的方式向服务器传递数据。简单猜想一下,传递的数据必定是上传的.apk文件,传到哪里表单头中并没有说明,那么肯定是使用javascript代码完成上传动作。
在本页的javascript代码中,可以看到使用AJAX技术上传了文件:
显然这个文件被Post到../Upload/页面。
但是通过搜索整个源代码文件夹,并没有发现Upload页面,虽然之前没有使用过Django框架,但是有Flask的经验,猜想必定有一个定义url的文件,在MobSF的文件夹,果然找到了一个urls.py文件:
打开发现果然没错,这里详细描述了http消息和在服务器上的处理方法(函数)之间的关系:
分析在apk文件在服务器上的处理流程
从urls.py文件中,可以看到,点击上传按钮后,处理apk的函数是MobSF.views.Upload,找到MobSF文件夹下的views.py,打开找到其中的Upload函数:
response_data['url'] = 'StaticAnalyzer/?name='+request.FILES['file'].name+'&type=apk&checksum='+md5
response_data['status'] = 'success'
line 389: FILES=Unzip(APP_PATH,APP_DIR)
下一步就是实现对apk文件的解压,将使用zlib库实现这一功能。
后续的任务就是一步一步实现StaticAnalyser函数其实是views.py文件中的所有功能,并将他们整合到一起,再使用Qt做出图形界面。