编辑推荐: |
本文将主要介绍各分析工具在对APK进行静态、动态分析时,使用到的技术进行分析。 本文来自于个人微博,由火龙果软件Alice编辑、推荐。
|
|
MobSF
MobSF,全称(Mobile-Security-Framework),是一款优秀的开源移动应用自动分析平台。该平台可对安卓、苹果应用程序进行恶意代码自动分析,并在web端输出报告。该平台同时包含静态分析和动态分析功能,静态分析适用于安卓、苹果应用程序,而动态分析暂时只支持安卓应用程序。(PS:其web界面相当美观,而且支持分析结果存入数据库,方便检索)
静态分析实现原理
MobSF实现静态分析的代码位于StaticAnalyzer目录下,其目录中文件如下:
静态分析同时支持对APK、IPA两种文件格式的支持,本文主要分析其处理APK文件的流程及技术。其主要处理流程在android.py中。先定位到StaticAnalyzer函数中,忽视所有web处理方面的内容,得到其关键代码以及流程如下:
分析上述主代码流程可知,MobSF中主要进行恶意代码分析的函数有:ManifestAnalysis、CodeAnalysisStrings。对apk进行处理的流程如下:
a. 解压apk
b. 获取文本模式AndroidManifest.xml
c. 自动分析AndroidManifest.xml中信息
d. dex转jar
e. dex转smali
f. jar转java
g. 自动分析反编译得到的java代码
其中ManifestAnalysis函数主要功能大致如下:
从ManifestAnalysis函数主要的作用是对AndroidManifest.xml进行解析,提取其中permission、granturipermissions、application、activties、services、intents、actions等,将分析结果直接统计并返回到前端页面进行展示。
CodeAnalysis功能大致如下:
其源码分析部分主要利用正则表达式对java源码进行匹配来实现的。主要通过匹配常见方法中的关键词来提取源码中用到的方法,通过匹配敏感关键词来提取账号密码等信息,通过匹配常见API字符串来判定是否有调用这些API,通过匹配URL、Email的格式来提取源码中的URL和邮箱信息。
匹配得到结果后,整合结果,输出到前端展示出来。至此,动态分析结果全部输出。前端展示如图所示:
动态分析实现原理
MobSF同时还支持对安卓程序进行动态分析,主要是利用安卓虚拟机,安装例如xposed等框架,而后安装并运行需分析的样本。得到样本输出的日志,分析日志并在前端展示出来。
其动态分析主要目录结构如下图:
DynamicAnalyzer/views目录下的android.py则正是需要重点分析的,根据其前端展示页面可知其主要功能有:
1.Environment Created
2.Start / Stop Screen
3.Install / Remove MobSF RootCA
4.Start Exported Activity Tester
5.Start Activity Tester
6.Take a Screenshot
7.Finish
接下来对源码中针对各功能的实现过程进行分析。
Environment Created
这部分,主要是做一些环境的检测,以及设置web代理、设置adb连接、样本安装运行工作,主要代码如下:
所以,整个流程大致为:
1.利用pyWebProxy中提供的功能设置web代理。用来抓取APP访问流量。
2.建立adb连接 adb connect ip:port
3.安装运行程序 adb install -r xxx.apk adb
shell am start -m xxx
4.获取屏幕大小 adb shell dumpsys windows
| grep mUnrestrictedScreen
Start / Stop Screen
MobSF中提供实时操作功能,其实现主要利用屏幕录制软件screencast提供的服务,其实现代码如下:
在其中开启服务后,另起了一个线程ScreenCastService来对screencast服务进行处理:
ScreenCastService不停地访问SCREEN_DIR,读取该文件夹下的图片文件,并且将图片数据输出到web端进行显示。从而完成远程实时显示的功能。同时MobSF还提供远程操作的功能,具体实现代码在Touch函数中,具体实现如下:
由源码可知其主要实现过程是,获取屏幕点击时的坐标,通过adb shell
input tap来完成点击操作。
Install / Remove MobSF RootCA
安装、卸载RootCA,主要是为了方便对样本中HTTPS流量进行截获。主要实现过程如下:
1.adb push ca.crt /data/local/tmp/xxx
2.adb shell su -c cp /data/local/tmp/xxx
/system/etc/security/cacerts/
3.Start /Stop Exported Activity Tester
这部分主要是想尽量多的触发样本中所有行为,MobSF的做法是:遍历AndroidManifest.xml中的所有Exported
Activity,并利用am start来依次启动,以方便xposed能获取到更多的日志。
其主要流程是:
1.获取静态分析得到的exported activity列表
2.遍历activity,并用adb -s IP:PORT shell
am start -n PACKAGE/ACTIVITY 启动相应的activity
3.获取当前activity运行时的屏幕截图 adb -s IP:PORT
shell screencap -p /data/local/screen.png
4.保存该截屏
5.强制关闭该应用 adb -s IP:PORT shell am
force-stop PACKAGE
Start / Stop Activity Tester
与Exported Activity不同的是,这个测试将会遍历AndroidManifest.xml中所有Activity,而不单单是Exported。其流程与处理Exported
Activity一致。所以不做重复阐述。
Take a Screenshot
即,截屏,然后保存到本地。具体实现是:
1.adb -s IP:PORT shell screencap
-p /data/local/screen.png
2.adb -s IP:PORT pull /data/local/screen.png
xxxx/xxx.png
Finish
除了前面介绍的几个功能外,还需要介绍其主要动态信息获取以及输出日志分析时用到的一些函数。
在FinialTest中,主要做一些扫尾的工作,将程序运行过程中所有dalvikvm的
Warning 和ActivityManager 的 Information 收集起来:adb -s
IP:PORT logcat -d dalvikvm :W ActivityManager:I >
logcat.txt。同时,将Xposed目录下的API监控日志提取出来:adb -s IP:PORT
pull / data /data / de.robv.android.xposed.installer
/ log / error.log x_logcat.txt。再 dumpsys :adb -s IP:PORT
shell dumpsys > dump.txt 。
除此之外,平台还会利用datapusher来打包样本安装运行后留下的文件:adb
-s IP : PORT shell am startservice -a PACKAGE opensecurity
. ajin.datapusher / .GetPackageLocation 。
MobSF对日志的分析功能主要在APIAnalysis和RunAnalysis两个函数中,和静态日志分析一样,动态日志分析也是以正则匹配为主,APIAnalysis主要对x_logcat.txt中Droidmon.apk产生的日志进行处理,主要进行API调用分析,主要代码如下:
其RunAnalysis函数主要处理样本运行后留下的WebTraffic.txt、logcat.txt、x_logcat.txt中
在RunAnalysis中,MobSF首先用正则匹配出所有可能的url,而后再从网上同步下来最新的恶意url集合,然后再一一对比完成对url的鉴定。
此外,RunAnalysis还会对样本运行产生数据进行分类,同时匹配出可能的邮箱。
至此,MobSF完成了所有的检测和分析工作,并且将所有可用信息输出到web界面,方便分析人员进行分析。其动态分析结果界面如图:
总结
从上文对源码的分析大致可知MobSF的工作原理以及流程。
在对样本进行静态分析时,MobSF主要使用了现有的dex2jar、dex2smali、jar2java、AXMLPrinter、CertPrint等工具。其主要完成了两项工作:解析AndroidManifest.xml得到了应用程序的各类相关信息、对apk进行反编译得到java代码,而后利用正则匹配找出该样本主要进行了哪些工作。
而在对样本进行动态分析时,MobSF主要利用到了Xposed框架、Droidmon实现对应用程序调用API的情况进行监控,并且可灵活维护一份需要hook的API列表。同时,MobSF还使用了DataPusher来对样本数据进行打包、使用了ScreenCast结合adb
shell input完成对手机的远程控制功能。当然,其中还使用隐藏root权限、伪造成正式机器等技术来应对一些反虚拟机的程序。其主要做了一下几件事:1、利用webproxy实现代理进而拦截样本流量。2、安装证书以便拦截https流量。3、遍历所有activity,尽量多的获取各activity运行得到的日志。4、利用正则匹配出API及参数和返回值。5、实时更新恶意url库,以url信息特征进行查杀。
其实,最最最重要的一点是,MobSF所有分析结果都在web端展示,关键是,界面很美、很美……
|