前言
写这篇文章的缘由:
因为向学校多次请假都被拒绝,所以我不能去实习,也没法参加hvv.
幸运的是,在学校找到了一位愿意让我跟实验室的老师:
而恰好自己前段时间有了解过PC端恶意代码检测:
所以目前打算跟着老师做移动恶意代码检测.
于是就写下了这篇文章来规划一下近期需要学习的东西和路线, 先扫扫盲, 免得到时候啥也不会!
关于移动安全检测:
关于恶意代码检测:
基础知识
APK
Android应用程序包(Android application package,APK)是Android操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个被Android系统所能识别的文件才可以被运行,而这种能被Android系统识别并运行的文件格式便是“APK”。
一个APK文件内包含被编译的代码文件(.dex 文件),文件资源(resources), assets,证书(certificates),和清单文件(manifest file)。
Dalvik
Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即「Dalvik Executable」)格式的Java应用程序的运行。
.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
ART
ART(Android RunTime)虚拟机,其处理机制根本上的区别是:它采用AOT(Ahead-Of-Time)技术,会在应用程序安装时就转换成机器语言,不再在执行时解释,从而优化了应用运行的速度。在内存管理方面,ART也有比较大的改进,对内存分配和回收都做了算法优化,降低了内存碎片化程度,回收时间也得以缩短。
Smali
Android代码一般是用java编写的,执行java程序一般需要用到java虚拟机,在Android平台上也不例外,但是出于性能上的考虑,并没有使用标准的JVM,而是使用专门的Android虚拟机(5.0以下为Dalvik,5.0以上为ART)。Android虚拟机的可执行文件并不是普通的class文件,而是再重新整合打包后生成的dex文件。dex文件反编译之后就是Smali代码,所以说,Smali语言是Android虚拟机的反汇编语言。
So
Linux下的.so是基于Linux下的动态链接,其功能和作用类似于windows下.dll文件。通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。
检测方法
主要有两种
-
静态分析
-
动态分析
静态分析
简介:
静态分析是不运行程序仅对Android应用及其解析生成的文件进行分析的方法.
分析对象:
-
AndroidManifest.xml
-
Java源码
-
Dalvik字节码
原理:
利用从分析对象中提取出来的权限特征,文本特征以及API调用特征来识别应用中是否包含恶意代码.
优缺点:
-
优点
-
快速, 高效
-
缺点
-
只适用于未经代码混淆和多态变形的恶意代码
动态分析
简介:
动态分析是一种基于应用程序运行时的检测技术.
原理:
在应用运行时,监控该应用对网络、系统调用、文件和内存的访问,信息的访问模式及其处理行为等.通过分析这些行为是否正常来判断其恶意性.
优缺点:
-
优点
-
不受代码混淆和加密的影响
-
缺点
-
需要耗费系统资源
-
不利于大规模的应用进行检测
研究现状
《基于Android平台的恶意代码行为分析研究》
将DEX文件反编译,并分析其Dalvik字节码中调用的系统函数.通过对每个系统函数分配不同的风险等级.
统计整个应用中各系统函数出现的频次.计算其加权平均值 ,以其值是否超过阈值判断这个应用是否是恶意应用.
《基于Dalvik指令的Android恶意代码特征描述及验证》
通过提取Dalvik指令序列 ,然后以Smali代 码中的方法为单位将指令序列进行形式化描述 ,并采用MOSS算法、闵可夫斯基距离以及编辑距离算法计算形式化描述后的代码与已知恶意特征的相似度,并根据相 似度比对结果判断待测应用是否含有恶意代码.
《基于动态API调用序列的Android恶意代码检测方法研究》
从Dalvik字节码序列中提取N-Gram特征.
然后利用随机森林对恶 意代码进行检测和分类.
《基于函数调用图的Android恶意代码检测方法研究》
利用函数调用图来检测Android恶意代码的方法.通过反 编译 DEX 文件提取出函数调用图,然后计算出函数调用图的特征向量,利用得到的特征向量进行恶意代码的检测.
《一种基于本地代码特征的Android恶意代码检测方法》
通过提取Android应用的本地代码的控制流图特征来检测和分析恶意代码.
将待检测应用的DEX文件和SO文件转化为ARM汇编代码 ,并提取汇编代码的控制流图集合,将其与已知恶意应用的控制流 图集合进行相 似性比较,得出它们的相似度.如果相似度大于某个阈值,则可以确定待检测的Android应用包含了恶意代码.
《用机器学习检测Android恶意代码》
用机器学习工具Weka进行模型测试,检测模型的准确度。
得到准确度高的模型可以用来预测未知Android代码是否为恶意代码。
学习路线
可以从分析方法为目标去学习如何检测/分析恶意代码.
静态分析
-
结构分析
-
apk目录结构
-
签名
-
AndroidManifest.xml
-
字符串, 类结构, 类成员
-
代码分析
-
Java层加载so,声明接口
-
Java反编译
-
smali反汇编
-
ARM反汇编
-
native分析
动态分析
-
动态行为分析
-
短信上传隐私行为
-
网络上传隐私行为
-
短信控制行为
-
短信拦截行为
-
Logcat日志
-
网络行为
-
应用下载
-
隐私窃取上传
-
指令获取
-
Host,IP,端口
-
流量分析
-
传输的信息
当掌握以上两种方法后,技能树差不多如下:
-
Java
-
Android开发
-
smali
-
汇编
-
apk逆向
-
脱壳加壳
-
...
然后就可以开始上手真实案例,结合着工具分析,巩固自己所学的基础.
工具使用
推荐:
https://www.cnblogs.com/17bdw/p/10254565.html
-
恶意代码分析实战
-
恶意软件自动化分析工具套件
-
文档分析工具
-
JavaScript分析工具
-
系统&文件监视工具
-
shellcode分析工具
-
网络分析工具
-
URL分析工具
-
SWF分析工具
-
内存取证分析工具
-
调试器
-
反汇编工具
-
十六进制编辑器
-
查壳工具
-
DNS&IP信息搜集工具
-
PE分析工具
-
虚拟机镜像
不知道学完这些需要多久,但是我觉得能学到这里的人,肯定对以后的方向已经心里有数了, 所以这篇文章到这里就结束了.
最后给大家分享一本电子书:
《OWASP移动安全测试指南》
有需要的师傅可以在公众号后台私信我.
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论