Android锁机病毒分析
本帖最后由 Nattevak 于 2022-4-22 15:03 编辑# 免流服务器
## 一、基本分析,并提取病毒样本
### 1.模拟真实场景,在模拟器中运行样本
安装并运行免流服务器APK,启动后点击安装核心文件,提示申请ROOT权限,所以程序内部执行了su命令代码。
通过代码提权,隐藏性较高,存在隐藏性危险。
核心安装完成后根据提示重启
### 2.待病毒执行之后,观察可疑情况
当重启之后,会发现 android 系统被锁,而且会发送大量的短信
输入任意密码,尝试直接解锁,无法解锁,需要进一步分析
3.提取样本
使用 adb shell 命令进入 android 系统的 shell
使用 ps 命令查看进程,观察是否存在可疑进程
进程可能会存在伪装,影响观察,所以直接前往Android安装apk的位置查看
在 Android 中安装 apk 的位置有 3 个:
1. /system/app(系统预装 app 所在目录,默认不可写,但是如果有 root 权限,则可以修改为可写)
2. /data/app(用户安装 app 所在的目录,存储完整的 apk 文件)
zs.ip.proxy-1.apk是之前安装的免流服务器APK
3. /data/data/包名 (用户安装 app 生成的与包名一致的文件夹,存储 app 的相关配置数据等信息 )
使用 adb pull 命令将路径下apk文件下载到本地
### 4.样本概况
文件: zs.ip.proxy-1.apk
大小: 799835 bytes
修改时间: 2016年3月16日, 23:26:10
MD5: 2EFCA46F34A565C2EF4052B89B6B364B
SHA1: 5493A958A592BB0B19C43ACB2C1F52C898885207
CRC32: 7F89A927
文件: stk3.apk
大小: 240372 bytes
修改时间: 2022年4月21日, 16:52:44
MD5: 44DBCF4F3410CF4CDCD9463B76AF0A91
SHA1: 1A2F265932EC81224AD4B922764E38413DADC8E1
CRC32: 7B31436E
## 二、行为分析,获取病毒行为
在公开平台上搜索看是否有已经分析的报告
### zs.ip.proxy-1.apk
打开zs.ip.proxy-1.apk即免流服务器APK查看概况信息
### stk3.apk
打开stk3.apk查看概况信息
## 三、详细分析病毒代码,获取行为的恶意代码
### zs.ip.proxy-1.apk
分析入口类的 onCreate 函数,其功能为从apk中assets目录中拷贝APK到SD卡中
查看layout布局文件
az是安装核心的函数
az调用copyAppToSystem函数
1.拷贝APP到系统目录:copyAppToSystem("/storage/sdcard0/stk3.apk");
2.获取ROOT权限,执行su命令:getRoot();
Runtime.getRuntime().exec("su");
3.修改系统目录:mount -o remount, rw /system/
4.拷贝文件到系统目录:cp /storage/sdcard0/stk3.apk /system/app/
5.修改文件权限为可读可写可执行:chmod 0777 /system/app/stk3.apk
6.退出命令行:exit
主要功能:拷贝自己资源中的 apk 到系统并修改权限
### stk3.apk
分析入口类的 onCreate 函数,功能为启动com.android.stk3.llxfc服务
查看服务代码,分析 onCreate 函数,只有发送恶意短信代码
分析onStartComand函数,观察到其中中有对按钮的监听器的设置
①由于输入密码后需要点击解锁按钮,自然存在获取数据的函数,故搜索getText函数,同样定位到onClick函数处。
②解锁按钮必然要获取输入的内容进行比较,而比较就需要用到equals函数比较字符串,同样能定位到onClick函数处。
根据响应代码,
`this.this$0.bjk0.getText().toString().equals("T") && this.this$0.bjk1.getText().toString().equals("F") && this.this$0.bjk2.getText().toString().equals("B") && this.this$0.bjk3.getText().toString().equals("4")`
可知密码为TFB4
输入密码TFB4,完成解锁
## 四、提取病毒特征,完成查杀
### 1.病毒特征
MD5: 2EFCA46F34A565C2EF4052B89B6B364B
MD5: 44DBCF4F3410CF4CDCD9463B76AF0A91
### 2.手工查杀步骤
①根据代码解出密码,密码:TFB4,输入密码解锁,但这样不能清除病毒,每次开机都需要输入。
②卸载免流服务器.apk,删除安装包
③清理病毒文件
/system/app目录:存放着stk3.apk文件,提示只读,需要修改 system 目录属性:mount -o remount, rw /system/,删除该文件;
/data/app目录:存放着用户安装 app ,删除该文件;
/data/data/zs.ip.proxy目录 和 /data/data/com.android.stk3目录:存放着两个文件的相关配置数据等信息,删除这两个文件;
/strorage/sdcard0目录:存放着stk3.apk文件,删除该文件。
# 王者荣耀刷皮肤
## 一、基本分析,并提取病毒样本
### 1.模拟真实场景,在模拟器中运行样本
三大巨头:王者荣耀刷皮肤、穿越火线刷枪、刺激战场透视自瞄
这也。。。太明显的过分了。。。
诱导安装激活的唯一方法应该就是设计一个充满诱惑力的名字了
### 2.待病毒执行之后,观察可疑情况
成功被锁,根据激活提示已知这里是被更改了屏幕解锁密码并锁定屏幕了,大致没有其他行为
### 3.提取样本
使用 adb shell 命令进入 android 系统的 shell
使用 ps 命令查看进程,观察是否存在可疑进程
进程可能会存在伪装,影响观察,所以直接前往Android安装apk的位置查看
在 Android 中安装 apk 的位置有 3 个:
1. /system/app(系统预装 app 所在目录,默认不可写,但是如果有 root 权限,则可以修改为可写)
2. /data/app(用户安装 app 所在的目录,存储完整的 apk 文件)
只发现了这个APK,com.android.getbest-1.apk
3. /data/data/包名 (用户安装 app 生成的与包名一致的文件夹,存储 app 的相关配置数据等信息 )
直接分析安装的apk就行了
### 4.样本概况
文件: 王者荣耀刷皮肤.apk
大小: 261080 bytes
修改时间: 2016年3月19日, 22:57:58
MD5: CB9E3C9C5CDED91F96AA9662BA150DB8
SHA1: 3852A0324A1B57B23DE15A6D5298E61BF4C087E2
CRC32: D4DA0CB5
## 二、行为分析,获取病毒行为
在公开平台上搜索看是否有已经分析的报告
打开王者荣耀刷皮肤.apk查看概况信息
## 三、详细分析病毒代码,获取行为的恶意代码
分析入口类的 onCreate 函数,jiemi函数瞩目,优先看一下
查看jiemi函数,可知该程序采用了AES进行字符串加密
checkAdmin函数,功能:检查设备管理器是否激活
查看layout布局文件
分析jihuo函数
查看getAdmin函数
跟踪分析com.android.getbest.MyAdmin类,找到关键函数LockNow和resetPassword,得到密码6699
输入密码6699,完成解锁
## 四、提取病毒特征,完成查杀
### 1.病毒特征
MD5: CB9E3C9C5CDED91F96AA9662BA150DB8
### 2.手工查杀步骤
①根据代码解出密码,密码:6699,输入密码解锁,但这样不能清除病毒,每次开机都需要输入。
②卸载免流服务器.apk,删除安装包
无法直接卸载程序
需要取消激活设备管理器
③关闭锁屏密码或更改为自己的密码(设置->安全->屏幕安全保护->屏幕锁定->输入PIN:6699)
或删除系统文件中密码文件:/data/system/password.key
# 秒抢红包
## 一、基本分析,并提取病毒样本
### 1.模拟真实场景,在模拟器中运行样本
激活设备管理器,观察执行操作的行为,便于后续解锁
### 2.待病毒执行之后,观察可疑情况
成功被锁,观察锁屏上的信息,提供了一个随机码,是解锁序列号69426768;序列号解锁20元,无序列号解100元,看来这个序列号小值80元。。。
### 3.提取样本
使用 adb shell 命令进入 android 系统的 shell
使用 ps 命令查看进程,观察是否存在可疑进程
进程可能会存在伪装,影响观察,所以直接前往Android安装apk的位置查看
在 Android 中安装 apk 的位置有 3 个:
1. /system/app(系统预装 app 所在目录,默认不可写,但是如果有 root 权限,则可以修改为可写)
2. /data/app(用户安装 app 所在的目录,存储完整的 apk 文件)
只发现了这个APK,com.h-1.apk
3. /data/data/包名 (用户安装 app 生成的与包名一致的文件夹,存储 app 的相关配置数据等信息 )
直接分析安装的apk就行了
### 4.样本概况
文件: 秒抢红包.apk
大小: 251271 bytes
修改时间: 2016年4月15日, 23:37:26
MD5: 033AE1BA78676130E99ACC8D9F853124
SHA1: B43F731C59FF37602CB9F971F893965EF19C9DEE
CRC32: AAC480FC
## 二、行为分析,获取病毒行为
在公开平台上搜索看是否有已经分析的报告
打开秒抢红包.apk查看概况信息
## 三、详细分析病毒代码,获取行为的恶意代码
分析入口类的 onCreate 函数,调用了activiteDevice函数,并启动com.h.MyAdmin
进入com.h.MyAdmin类,在onEnabled中发现了resetPassword函数以及重设的密码8985
尝试密码8985,并没有解锁,看来不止这一层锁;说明就算给作者打钱得到这里的密码也不一定能完全解锁。
继续分析,这里启动了com.h.s服务
### 代码分析
分析com.h.s,获取了Flowers.xml文件,写入了pass以及passw
查看Flowers.xml文件,可知m就是pass,值为69426768,passw加密了,但我们已经在代码部分得知passw=pass+8985,值为69435753。
### 编写解码代码
由于需要解锁,而且有按钮、输入框,那么就需要使用到getText和equals函数,直接搜索这两个函数,定位到解锁位置。
编写解密代码,获取到解密密码为69435753
### Smali 注入
在 DU 类中的 decrypt 函数返回之前插入 log
当调用时会输出 log,输出密码
输入解密密码,解开了悬浮窗锁界面
还有锁,这是安卓自己的PIN屏幕锁,我们之前已经通过resetPassword函数定位到了重设的密码8985
尝试解锁,成功解开屏幕锁
自此解锁完成,秒抢红包这个程序包含两层锁,密码分别为69435753和8985,但第一层锁解锁密码需要根据生成的随机数判断,密码样式为:随机数+8985。
## 四、提取病毒特征,完成查杀
### 1.病毒特征
MD5: 033AE1BA78676130E99ACC8D9F853124
### 2.手工查杀步骤
①根据代码解出密码,密码:69435753和8985,输入密码解锁,但这样不能清除病毒,每次开机都需要输入。
②卸载秒抢红包.apk,删除安装包
无法直接卸载程序
需要取消激活设备管理器
③关闭锁屏密码或更改为自己的密码(设置->安全->屏幕安全保护->屏幕锁定->输入PIN:8985)
或删除系统文件中密码文件:/data/system/password.key
这种没什么技术含量的帖子 ,能给精华?!
移动安全区的版主是觉得论坛帖子技术含量低的严重,差中选字数多的,让此贴顶上?!
这种帖子通篇在水 , 没什么技术含量 , 在看雪给个优秀都难 , 在吾爱能拿精华 , 令人费解
{:301_1008:}
还是不要下载安装来路不明的app 还是不要下载安装来路不明的app 确实这种帖子没有什么技术含量,纯水字数... {:301_998:}以为有样本下载,有的话还可以扔模拟器里瞅瞅 给了思路,还有很长的路才能读懂。 虽然我能差不多看懂代码,为啥我一打开一个样本就分析不出来呢? hackerbob 发表于 2022-4-22 15:47
虽然我能差不多看懂代码,为啥我一打开一个样本就分析不出来呢?
先搞点简单的练练手找找关键函数啥的,比如我这几个 Nattevak 发表于 2022-4-22 15:59
先搞点简单的练练手找找关键函数啥的,比如我这几个
病毒分析主要记关键函数吗?
我一直是从最开始一点点看的。。。。。。 支持一下楼主,写的很好~~ 很强,太厉害了 学习一下 谢谢楼主