首页
论坛
课程
招聘
[原创]Android恶意样本分析——frida破解三层锁机样本
2021-8-30 19:01 6970

[原创]Android恶意样本分析——frida破解三层锁机样本

2021-8-30 19:01
6970

Android 恶意样本分析——三层锁机样本破解

一、样本介绍

最近在吾爱上看到一个三层锁机的样本,恰好最近在学习研究Frida,通过动静态分析来彻底了解一下这个锁机样本。

 

image-20210830143432238

二、实验环境

夜神模拟器+Kali

 

jadx-gui

 

Visual Studio Code

 

Android Studio

三、实验步骤

(1)静态分析

我们先通过jadx-gui打开恶意样本程序,开始静态分析:

 

image-20210830143432238

 

我们在AndroidManifest.xml文件中可以找到样本的入口点,可以发现样本中存在三个service,这个是样本后续实现三层锁机的服务,我们进入MainActivity

 

image-20210830143813056

1
2
3
代码解释:
1)我们可以看出入口处使用ADRTLogCatReader记录软件运行期间所产生的日志,这是大部分锁机样本都会用到的。
2)使用是startService启动服务,然后通过Class.forName隐式的跳转Activity,然后传入活动,并启动intent跳转

然后我们定位到跳转的类com.k7.qq2856437148.K7

 

image-20210830145804065

 

image-20210830145938966

 

image-20210830150108763

1
2
3
4
5
代码解释:
1)首先我们使用WindowManager制作一个悬浮窗,然后把该窗口权限设置最高,这样就可以放置在顶层,用户除了点击串口界面,不能返回,初步到达了锁机的目的
2)我们继续分析,发现两处的代码被混淆,这里可能是一些字符串信息,可能包含我们的密钥
3)到了点击函数中,我们可以发现1处第一个判断语句,前面值来源于我们的文本框输入,后面是k7中存放的字符串,匹配成功后,这里也是我们的hook点
42处跳转到K71,3处将当前的窗口移除,4处停止进程,这就完成了锁机窗口的切换

我们进入K71类中继续分析

 

image-20210830151649019

 

我们可以发现基本原理和我们k7中一样,只是这里对密钥进行了加密处理,我们再查看k72,我们只需要对这里hook即可,即是我们的hook点2

 

image-20210830151848975

 

k72的实现原理和k71一样,也是采用加密算法对密钥做了处理,我们只需要对这里hook,即是我们的hook点3

(2)动态分析

objection动态分析

首先,我们先需要配置frida环境,具体教程参考网上,我们启动frida_server

 

image-20210830152334885

 

然后我们先使用objection工具对程序进行初步的hook动静态分析,objection的使用这里参考肉丝大佬安全客上的文章:https://www.anquanke.com/post/id/197657#h3-6

1
2
3
4
5
6
7
8
9
10
11
常见的hook命令:
objection -g com.android.settings explore  //注入设置应用
android hooking list activities  //查看Activity,service相同
android intent launch_activity com.android.settings.DisplaySettings  //实现Activity跳转
android heap search instances com.android.settings.DisplaySettings   //搜索类的实例
android heap execute 0x2526 getPreferenceScreenResId    //主动调用实例
android hooking list classes  //列出内存中所有类
android hooking search methods display  //列出内存中所有的方法
android hooking watch class android.bluetooth.BluetoothDevice  //hook相关类的所有方法
android hooking watch class_method android.bluetooth.BluetoothDevice.getName --dump-args --dump-return --dump-backtrace  //打印具体方法的参数、返回值、堆栈信息
平时使用的就是这些,具体可以参考肉丝大佬的博客

我们使用objection,对样本进行初步的分析:

 

image-20210830153528638

 

image-20210830153630602

 

和我们之前静态分析的一样,样本有1个Activity和3个service,我们先看能不能直接实现跳转

 

image-20210830153850709

 

我们发现不能直接跳转,那我们尝试查看一些函数信息,并初步对一些函数进行hook

 

image-20210830154136379

 

image-20210830154412653

 

我们hook类K7中的函数c失败,这是因为在我们启动时,实例已经加载所以没有hook上,我们在启动时便hook看看

 

image-20210830154631759

 

主要是c函数的返回值等都为空,所以我们并没有获得实际有用信息,我们使用objection hook分析也初步结束了

Frida代码hook

经过我们前面的动静态分析,我们先对第一个hook点,编写代码hook:

 

image-20210830170146388

1
2
3
4
5
6
7
8
Java.choose("com.k7.qq2856437148.K7",{
            onMatch:function(instance){
                console.log("Found instance:",instance);
                console.log("k7:",instance.k7.value);
            },onComplete:function() {
                console.log("search completed!")
            }
        })

我们这里只需要hook出k7的值即可

 

image-20210830170320559

 

我们输入字段值,然后进入第二层锁机

 

image-20210830170605106

 

然后我们对第二个hook点开始hook

 

image-20210830170719875

 

image-20210830170827169

 

这里我们可以发现,第二层密钥就是将K7进行加密,我们hook加密函数即可,当然我们也可以编写代码把K7值hook出来得到密钥

1
2
3
4
5
Java.use("com.k7.qq2856437148.jiami").GetMD5Code.implementation = function(x) {
           var result = this.GetMD5Code(x);
           console.log("x,result",x,result);
           return result;
       }

我们随便输入密码,然后hook

 

image-20210830171222305

 

输入密钥,我们进入最后一层

 

image-20210830171356883

 

image-20210830171453977

 

我们直接继续对加密函数hook即可

 

image-20210830171736095

 

然后我们把密钥输入进去,可以发现最后一层锁机解除

四、实验总结

这里我利用frida技术对三层锁机进行了动静态分析,对锁机的样本原理进行了一个初步分析。我们发现三层锁机的密钥,第一层是固定密钥,这个可以通过动态调试获得,第二层则是根据你输入密码或产生的密钥,就只能通过编写加密程序,或者找到对应的hook点进行获得,第三层密钥和第二层密钥原理一样,只是加密方式比较复杂一点,这里直接hook出密钥结果最好。

 

最后这里很多地方参考了肉丝大佬的博客和星球,对frida的理解进一步深入了,此次样本分析就到这里,还有什么问题请各位大佬指教。


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

上传的附件:
收藏
点赞4
打赏
分享
最新回复 (10)
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_HungryFoolish 活跃值 2021-9-1 10:52
2
0
为什么不能下载apk
雪    币: 2366
活跃值: 活跃值 (1389)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
危楼高百尺 活跃值 1 2021-9-1 15:02
3
0
郭老板牛蛙
雪    币: 151
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
风中奇缘aa 活跃值 2021-9-2 10:35
4
0
学习学习 
雪    币: 4463
活跃值: 活跃值 (3833)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
随风而行aa 活跃值 3 2021-9-2 10:37
5
0
wx_HungryFoolish 为什么不能下载apk
可以的吧 应该可以下载呀
雪    币: 4463
活跃值: 活跃值 (3833)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
随风而行aa 活跃值 3 2021-9-2 10:37
6
0
危楼高百尺 郭老板牛蛙
雪    币: 212
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_如羽 活跃值 2021-9-2 23:19
7
0
危楼高百尺 郭老板牛蛙
郭老板牛呀
雪    币: 954
活跃值: 活跃值 (291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
镜中人24 活跃值 2021-9-18 16:52
8
0
我也不是抬杠,关闭悬浮窗权限、重启手机、adb unstall卸载哪种方式不方便?
雪    币: 227
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
chengweiquan 活跃值 2021-9-18 17:54
9
0
郭老板牛呀
雪    币: 4463
活跃值: 活跃值 (3833)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
随风而行aa 活跃值 3 2021-9-19 00:25
10
0
镜中人24 我也不是抬杠,关闭悬浮窗权限、重启手机、adb unstall卸载哪种方式不方便?[em_41]
这样解决这个样本 方式当然很多,这里只是用作frida技术的一个案例哈
雪    币: 4463
活跃值: 活跃值 (3833)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
随风而行aa 活跃值 3 2021-9-19 00:26
11
0
chengweiquan 郭老板牛呀
游客
登录 | 注册 方可回帖
返回