1.Android Java与Smali语言学习
学习Java或是Smali语言的方法
Smali语言是Android Java层的反编译语言
所以我们学习这两门语言,在会Java的基础语法(或是C++)之上就可以使用反编译工具进行分析学习即可.
2.Android四大组件与权限控制
Android中有四大组件,了解它们对于在逆向分析过程中有很大帮助.
1.Activity-Android的窗口界面
2.Service-Android的后台服务3.BroadcastReceiver-广播接收器/全局回调
4.ContentProvider-内容提供商/注册表
3.Android病毒的常见类型以及恶意行为
在Android中常见的病毒类型:
1.信息窃取(privacy)
名称:a.privacy.GpsSpy.a(窃听幽灵) 命名方式:android+病毒类型+家族、功能+变种
2.恶意扣费(payment)
名称:a.payment.suad.a(扣费内鬼)
3.远程控制(remote)
名称:a.remote.DieSms.a(致命短信)
4.资费消耗(expense)
名称:a.expense.vimob.a(TT僵尸)
5.诱骗欺诈(fraud)
名称:a.fraud.Selfmite.a(伪哥魅影)
6.流氓行为(rogue)
名称:a.rogue.SimpleLocker.a(流氓之锁)
7.系统破坏(system)
名称:a.system.AppKiller.a(软件杀手)
1.获取用户手机信息
常用API:
TelephonyManager类,获取手机信息
getLine1Number(手机号)
getMacAddress(用户位置信息)
getDeviceId(设备ID)
getSubscriberId(获取ISMI号).
getSimSerialNumber(获得SIM卡的序号)
android.os.Build.MODEL(手机型号)
常见后续操作1:上传服务器.
常见后续操作2:使用位置信息调用百度地图之类的第三方服务器获取详细位置
2.发送短信
常用API:
SmsManger类,发送短信
sendTextMessage(发送单条信息)
sendMultipartTextMessage(发送多条信息)
3.获取用户手机上的联系人列表
常用API:
getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
.…)
常见后续操作1:上传服务器.
常见后续操作2:发送到指定邮箱.
常见后续操作3:群发带有短url的短信
(send TextMessage、sendMultipartTextMessage)继续扩散病毒
4.获取用户手机上的短信数据
常用API:
getContentResolver().query(“content://sms/“.…)
常见后续操作1:上传服务器.
常见后续操作2:发送到指定邮箱.
常见后续操作3:判断是否是控制码短信,譬如是否是控制端手机发来的控制短信.如果是,屏蔽短
信(abortBroadcast),再根据短信内容执行其它操作.
常见后续操作4:扣费短信情况会检测是否是sp的回馈短信,譬如检测短信开头是否是”10086”、内容是否是”确认订购”之类,如果是则屏蔽短信,私自回复”Y/是”,来完成订购.
5.获取用户手机安装应用列表
常用API:
getPackageManager().getInstalledPackages()
getRunningAppProcesses()
常见后续操作1:上传服务器.
常见后续操作2:检测列表中是否有目标程序
(杀软).
6.获取root权限(exec)
常用API:
Runtime.getRuntime().exec(cmd)
通过Runtime.getRuntime().exec可以调用底层Linux下的程序或脚本
常见后续操作1:静默下载恶意插件或其他apk程序.
常见后续操作2:加载恶意插件(DexClassLoader),插件形式可能是dex,jar,zip文件,通过反射机制调用(invoke).
常见后续操作3:静默安装apk文件
(application/vnd.android.package-archive、
“pm install-r”)
7.为防止用户卸载激活设备管理器
常用API:
DevicePolicyManager
android.app.action.ADD_DEVICE_ADMIN
常见后续操作1:隐藏自身图标
setComponentEnabledSetting
8.私自关闭用户wifi
8.私自关闭用户wifi(setWifiEnabled),开启用户移动网络跑流量(setMobileDataEnabled).
常用API:
setWifiEnabled(关闭WIFI)
setMobileDataEnabled(移动网络跑流量)常见后续操作1:
连接指定服务器,会上传自身程序包的一些信息,移动要知道这些流量是谁跑出来的,用于结算
病毒刚安装之后不一定会立即启动,常用的激活恶意代码的条件一般为:
1.检测用户划屏解锁启动.
2.检测用户开机启动.
3.检测用户网络变化启动.
这些信息都注册在AndroidManifest.xml文件之中,熟悉安卓4大组件和权限,对恶意代码快速定位有很大帮助.
4.Android病毒的传播方式
1.浏览器搜索关键词,诱惑用户下载
.搜索内容:美女图片,激情视频
2.短信传播下载地址,诱导用户下载.短信内容:孩子成绩、老婆丈夫出事
3.捆绑正常APP,伪装广告诱导用户下载
4.二维码
5.其他(加壳加密,免杀)
实战
搭建分析环境
使用一个有多开功能的Android模拟器,是比较的选择,这里选择夜神模拟器.除此之外,Android Monitor也是必不可少的.还有就是反编译工具.
Adb环境:
4由于夜神模拟器中的adb有所修改,为了统一,可以将androidkiler中的adb复制覆盖夜神模拟器中nox_adb.exe,以及动态库AdbWinApi.dll和AdbWinUsbApi.dll.SDK中的adb也是用androidkiller中的adb进行覆盖.
总而言之,应该让这三个地方的adb都一致!!
①夜神模拟器的安装目录中的nox adbe
②sdk/platform-tools 目录下的adbe
③androidkiller 安装目录下的adb
分析-免流服务器
1.安装和使用APK+
2.使用adb 找出恶意代码apk 并清除
使用adb shell 进入android 系统的shell
使用ps命令查看进程,然后通过过滤掉系统进程,然后逐一进行排查,最后找出了恶意代码apk:com.android.stk3
在android中安装apk的位置有3个:
1./system/app(系统预装app所在目录,默认不可写,但是如果有root权限,则可以修改为可写)
2./data/app(用户安装app所在的目录,存储完整的apk文件)
3./data/data/包名(用户安装app生成的与包名一致的文件夹,存储app的相关配置数据等信息)
可以在以上目录使用Is 查看是否存在stk3.apk,发现有,则使用rm 命令删除
如果提示只读,需要修改system目录属性:mount -o remount, rw /system/
删除之后,重启模拟器.当重启之后,恶意代码就没有再运行.在实际中,删除之前,应该下载下来了,提取样本,进行分析.
最后应该将免流服务器删除.
3.恶意代码分析
免流服务器.apk样本介绍
文件摘要信息:
修改时间:2016年3月16日,23:26:10
MD5:2EFCA46F34A565C2EF4052B89B6B364B SHA1:5493A958A592BB0B19C43ACB2C1F52C898885207
CRC32:7F89A927I
(当我们拿到摘要信息之后,如果样本属于公司内部,不外传,我们可以使用MD5或是SHA1在公开平台上投索看是否有已经分析的报告.有的话直接去看即可,没有的话,在手动分析)
查看清单文件,确定入口类,分析onCreate函数
onCreate没有设置响应代码,分析资源文件layout
到此这个apk分析完毕,它的主要功能就是拷贝自己资源中的apk到系统并修改权限.那下一步分析 stik3.apk.