【移动样本分析】Android锁机病毒分析

2022年4月23日 334点热度 1人点赞 0条评论

作者坛账号: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

33010【移动样本分析】Android锁机病毒分析

这个人很懒,什么都没留下

文章评论