首页
论坛
课程
招聘
[原创][原创]Android恶意样本WifiKillerpro.apk分析
2021-6-12 10:14 8591

[原创][原创]Android恶意样本WifiKillerpro.apk分析

2021-6-12 10:14
8591

一、样本介绍

        Wifikillpro.apk——锁机软件,现在Android恶意程序包括远控、锁机、恶意读取通信录信息等,其中锁机是最常见的恶意样本之一,往往通过使用root将应用设置为系统应用或直接安装锁机等来实现。

二、实验环境

三、实验步骤

  1. 样本工作原理分析

    锁机样本的工作原理如下 所示:

  2. 实验环境搭建

    我们在虚拟机上搭建的win7环境,如下图所示:(这里我们使用的是吾爱的win7系统)

  3. 沙箱分析和漏洞测试

    (1)沙箱分析

    我们使用奇安信情报系统作为沙箱,将APK拖入沙箱中进行分析(如下图所示):

    我们可以得出软件是恶意的,其恶意行为包括锁住电源,获取手机的基本信息,这仅仅是一个初步的判断。

    (2)Mobsf框架测试

    我们使用Mobsf框架对恶意样本进行了一个初步的静态分析(如下图所示):

    (3)软件运行情况

    我们将软件运行起来,并分别未授权root(如图1所示)和授权root(如图2所示)

  4. 静态分析

    (1)java层分析

    java层的静态分析一般分为入口点分析和字符串定位,我们首先采用入口点分析,来弄清软件的工作原理,首先,我们把程序拖入GAD中,进行分析:

    我们发现程序没有进行加壳处理,我们直接找到入口点进行分析

    我们看到主代码端,然后开始对代码段进行分析(如图所示):

    我们通过静态分析,可以知道恶意样本就是从data.jar中读取恶意程序,然后释放。与此同时,通过申请root权限,将系统应用挂载,然后将释放的cia.apk存放到恶意应用中,完成一个开机锁屏的情况。

    (2)so层分析

    经过我们上面的分析,从程序的入口点开始分析,我们现在想通过字符串进行定位,但是发现搜索不到,我们则推断关键的字符串混淆严重,或放在so层。

    我们将so文件拖入IDA中,找入口点:静态注册(java_)和动态注册(jni_

  5. 动态分析

    我们使用Android Studio进行动态调试

    此时我们发现错误,经过分析应该是程序没有开启调试开关或存在反调试策略,我们将调试开关打开。我们在AndroidManifest.xml文件中加入debuggable=true,然后重打包。但是遇到一些有重打包检测的apk,我们可以尝试用mprop模块去设置ro.debuggable的值,我们也可以通过定制android源码的方式,不过这个就比较复杂了。

    我们分析可能程序存在反Android Studio调试,我们将使用JEB继续动态调试。

    经过动态调试和之前的分析,我们可以找到恶意样本程序cia.apk,并知道其安装路径,我们只需要将程序找到并删除,便可以解开此锁机程序了

  6. 动静态分析恶意样本

    (1)静态分析

    我们找到恶意程序cia.apk后,对程序进行静态分析


    我们可以知道程序的锁机原理,就是通过WindowsPanager制作一个弹窗口,并把弹窗的权限设置成最高,这样置于上层应用上,使得用户无法触及当前的进程,便完成了一个锁机。而且我们可以找到程序对锁机进行验证的代码段,这里采用随机数验证的机制,我们可以通过hook打印前后堆栈值,即可以获得密钥。

    (2)动态分析

    我们对程序进行进一步的动态分析:

    通过动态分析,我们进一步确定了程序的密码是一个随机数产生的加密密码,程序可以通过比对密码来判定是否解除锁机,其中removeview()stopself()就是来实现解除锁机窗口的函数。


  7. 抓包检测

    根据前面沙箱的检测情况,我们发现程序可能存在代理,然后我们对程序进行抓包,分析其协议字段:

    经过我们的抓包检测,我们发现程序并未发现有价值的协议字段,说明程序并未通过网络来产生恶意行为。

四、实验总结

        本次实验为Android逆向分析实例,对一个wifikillpro.apk样本进行静态、动态的分析,找出产生恶意行为的具体代码块,并通过分析恶意程序,进一步理解锁机的实现原理。样本通过用户触发程序后,将从data.jar包中读取出恶意程序,并申请获得root权限,并将恶意程序挂载到手机的系统应用中,使得用户在重启设备后,就会被锁机,与此同时会控制电源按钮,使得手机会重启。

   我们通过分析锁机样本,发现基本的锁机原理大致相似,都是通过WindowsPanager()生成一个窗口,并设置权限最高,将窗口置于应用进程之上,而此时用户在查看当前的进程,发现我们的恶意进程被隐藏,这也是锁机应用常用的一个套路。经过上面分析,我们看到用户通过输入密码,程序经过和自己的随机数密码判断,并对使用removeview()和stopself()函数,对解锁进行解除,我们常见的多层锁机应用,而只是多跳转几次而已。


五、参考链接

         http://www.520monkey.com/archives/1025

         http://www.520monkey.com/archives/1053

         https://www.52pojie.cn/forum.php?mod=viewthread&tid=1005665&highlight=%CB%F8%BB%FA




[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

最后于 2021-6-12 10:39 被随风而行aa编辑 ,原因: 格式问题
收藏
点赞7
打赏
分享
打赏 + 1.00
打赏次数 1 金额 + 1.00
 
赞赏  风中奇缘aa   +1.00 2021/06/14
最新回复 (8)
雪    币: 119
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
风中奇缘aa 活跃值 2021-6-14 13:14
2
0
不错不错,最近正在分析一个android恶意样本,大佬提供了一个不错的分析思路
雪    币: 93
活跃值: 活跃值 (129)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DungeonBat 活跃值 2021-6-15 15:55
4
0
不错哦 点赞
雪    币: 633
活跃值: 活跃值 (447)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guangzisam 活跃值 2021-6-16 18:44
5
0
分析得好全面,并逐个分析释放的恶意文件
雪    币: 2250
活跃值: 活跃值 (1300)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
危楼高百尺 活跃值 1 2021-6-17 20:38
6
0
郭老板牛蛙
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
万里星河 活跃值 2021-6-18 02:06
7
0
如果是随机数 有没有网络传输数据 那恶意软件的制作者如何知道解锁密码
雪    币: 2083
活跃值: 活跃值 (1959)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
随风而行aa 活跃值 1 2021-6-18 10:48
8
0
万里星河 如果是随机数 有没有网络传输数据 那恶意软件的制作者如何知道解锁密码
一般两种形式,有网络和无网络都可以,无网络一般把随机数的密钥值会存在本地的文件,恶意应用者会去要用户把文件发给他,从而获取密钥,解密。网络传输类则是可以通过申请密钥去获取。
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_for my test 活跃值 2021-6-18 10:51
9
0
楼主分析的很全面,最近恰好在分析Android恶意软件,恰好借鉴借鉴思路
游客
登录 | 注册 方可回帖
返回