image.png

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(软件杀手)

在Android中常见的病毒行为:

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+

点击安装核心,会提示申请root权限
image.png
需要重启模拟器
image.png

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/
image.png
image.png
image.png
删除之后,重启模拟器.当重启之后,恶意代码就没有再运行.在实际中,删除之前,应该下载下来了,提取样本,进行分析.
最后应该将免流服务器删除.

3.恶意代码分析

免流服务器.apk样本介绍

image.png
文件摘要信息:
修改时间:2016年3月16日,23:26:10
MD5:2EFCA46F34A565C2EF4052B89B6B364B SHA1:5493A958A592BB0B19C43ACB2C1F52C898885207
CRC32:7F89A927I
(当我们拿到摘要信息之后,如果样本属于公司内部,不外传,我们可以使用MD5或是SHA1在公开平台上投索看是否有已经分析的报告.有的话直接去看即可,没有的话,在手动分析)

查看清单文件,确定入口类,分析onCreate函数

image.png
image.png
image.png

onCreate没有设置响应代码,分析资源文件layout

image.png
到此这个apk分析完毕,它的主要功能就是拷贝自己资源中的apk到系统并修改权限.那下一步分析 stik3.apk.

分析stk3.apk

image.png
image.png

查看清单文件,确定入口类,分析onCreate

image.png

image.png

之后看onStartComand,中有对按钮的监听器的设置,找到解锁按钮,发现密码.

image.png
完整的密码是TFB4