【移动样本分析】Android锁机病毒分析
2022-4-24 14:3:59 Author: mp.weixin.qq.com(查看原文) 阅读量:23 收藏

作者坛账号:Nattevak

一、基本分析,并提取病毒样本

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

--

www.52pojie.cn

--

pojie_52


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5Mjc3MDM2Mw==&mid=2651137484&idx=1&sn=21e58d21eff784b566452ef1bbe7e71f&chksm=bd50b5988a273c8e3f28675e00491c90a5b0792fc492630b8f81da15213fe468ede49c498320#rd
如有侵权请联系:admin#unsafe.sh