对MobSF的源码进行分析
来源:互联网 发布:java 乘法溢出 编辑:程序博客网 时间:2024/06/05 10:07
前言
如上篇文章http://blog.csdn.net/leehdsniper/article/details/51317900所述,首先我们需要分析MobSF的源码,明白一个apk的静态分析的步骤是什么。经过分析,如何将apk文件解压就是进行apk行为分析的第一步,确切的说应该是第二步,第一步应该是去壳。但是为了简单起见,去壳这一步就暂时忽略。
首先从MobSF的源码分析开始
运行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函数:- 上传文件进行分析
上传一个apk进行分析,可以在服务器终端看到如下运行日志:
和Upload函数中的提示信息进行核对,发现完全一致: - 继续沿着这条线走下去
这个函数最终会向客户端发送一个json数据包,在这个数据包中包含了以下内容:response_data['url'] = 'StaticAnalyzer/?name='+request.FILES['file'].name+'&type=apk&checksum='+md5
response_data['status'] = 'success'
首先包含了一个URL,不管这个json在客户端会产生什么,总之Upload函数的功能在返回这个json数据包之后就完成了。那么猜想客户端必定还要向服务器发送消息启动分析。
前面说过在urls.py文件中,包含了所有的http请求和对应的处理方法,找到包含StaticAnalyser的项目:
显然,有一个StaticAnalyzer.views.StaticAnalyzer的函数负责静态分析。
在StaticAnalyser文件夹中的views.py中找到这个函数: - 正式开始
将上面这个文件中的函数折叠起来,整个文件的结构就非常清楚了。
研究StaticAnalyser函数,就是研究整个静态分析的过程:
找到第一个调用的函数(前面计算md5值等部分就可以暂时忽略):line 389: FILES=Unzip(APP_PATH,APP_DIR)
也就是说,apk文件其实是一个zip文件,为了将证实这一点,将一个后缀名为.apk的文件后缀改为.zip,打开
显然是这样的,在里面可以找到所有的apk源码。
结语
下一步就是实现对apk文件的解压,将使用zlib库实现这一功能。
后续的任务就是一步一步实现StaticAnalyser函数其实是views.py文件中的所有功能,并将他们整合到一起,再使用Qt做出图形界面。
- 对MobSF的源码进行分析
- MobSF分析.ipa文件,MobSF分析iOS app
- 对MBProgressHUD第三方进行源码分析
- 对Volley的源码分析
- MobSF简单静态分析apk文件
- 对所抓的报文进行分析
- 对jQuery的html()方法进行分析
- 对给定的一句话进行依存分析
- 使用随机梯度算法对高斯核模型进行最小二乘学习法的MATLAB程序源码分析
- 对ARM7 LPC2210的Bootloader源码分析
- 对MFC源码Include文件夹的分析
- 对ARM7 LPC2210的Bootloader源码分析
- 对SelectionEditPolicy策略的源码分析
- (十九)对libevent源码分析的总结
- 关于对equals的源码分析
- 移动安全测试框架MobSF(一):静态分析
- 移动安全测试框架MobSF(二):动态分析
- php中对HTML字符进行源码输出的方法
- [POJ1155]TELE(树形dp)
- 数据库建表时字段长度
- FFMPEG
- 环信sdk与支付宝的冲突
- Session监听
- 对MobSF的源码进行分析
- 模拟BootStrap的弹框功能
- C#连接数据库的方法
- 利用curand的host API生成均匀分布的随机数
- 【arduino】通过Esp8266-01模块实现的WiFi通信(3)使用TCP协议进行局域网通信(client篇)
- Leetcode - Isomorphic Strings
- Spring Mvc那点事---(1)开发环境搭建
- 19.Remove Nth Node From End of List(7.54%)
- Android-SQLiteDatabase数据存储