首页
社区
课程
招聘
[原创]使用frida来hook加固的Android应用的java层
发表于: 2018-9-11 00:26 37085

[原创]使用frida来hook加固的Android应用的java层

2018-9-11 00:26
37085

完整的代码已经上传github,30cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6K6L8h3q4J5N6r3c8G2L8X3g2Q4x3V1k6r3M7X3W2V1j5g2)9J5k6q4y4U0M7X3W2H3N6s2y4Q4x3V1k6@1M7X3g2W2i4K6u0r3L8h3q4K6N6r3g2J5i4K6u0r3M7$3S2W2L8r3H3`.,如果喜欢请star哦

在对一些加固的Android应用做测试的时候,脱壳二次打包是一个相当相当复杂的工作。所以一般是脱壳分析代码,然后用hook的方式来动态劫持代码。使用xposed来hook加固的应用大家可能已经很熟悉了,但是使用frida大概没有多少人尝试,今天就给大家分享下如何使用xposed来hook加固之后的Android应用。

要hook加固的应用分为三步,第一步是拿到加载应用本事dex的classloader;第二步是通过这个classloader去找到被加固的类;第三步是通过这个类去hook需要hook的方法

得到第一步的classloader之后的hook操作和hook未加固的应用基本类似。

我们看Android的android.app.Application的源码d91K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4F1k6s2u0G2K9h3c8^5M7X3g2X3i4K6u0W2j5$3!0E0i4K6u0r3y4#2)9J5k6e0q4Q4x3X3f1J5i4K6g2X3M7U0x3$3i4K6u0r3P5s2u0W2k6W2)9J5c8X3k6J5j5h3#2W2N6$3!0J5K9%4y4Q4x3V1k6T1j5i4y4W2i4K6u0r3j5$3!0J5k6g2)9J5c8X3A6S2N6X3q4Q4x3V1k6S2L8X3c8J5L8$3W2V1i4K6u0r3j5i4m8H3i4K6u0r3b7i4m8H3L8r3W2U0j5i4c8A6L8$3&6Q4x3X3g2B7j5i4k6S2i4K6t1K6x3e0R3^5可以发现,自己定义的ApplicationattachBaseContext方法是在Applicationattach方法里面被调用的。而基本上所有的壳都是在attachBaseContext里面完成的代码解密并且内存加载dex,在attachBaseContext执行完之后就可以去拿classloader,此时的classloader就已经是加载过加固dex的classloader了。

i春秋app为例,此应用使用的360加固,我们的目标是hook他的flytv.run.monitor.fragment.user.AyWelcomeonCreate方法,然后弹出一个Toast

我们直接使用Java.use来获取这个Activity,代码如下:

使用如下命令来注入这个js:

运行之后会报如下的错误:

也就是找不到这个类,也就是我们现在这个默认的classloader找不到flytv.run.monitor.fragment.user.AyWelcome这个类。

代码如下:

现在我们在attach方法执行之后拿到了Context,并且通过context获取了classloader,我们看现在的classloader是否加载了被加固的dex。我们使用classloader的loadClass方法去加载flytv.run.monitor.fragment.user.AyWelcome这个类,看是否成功:

注入这个js,可以正确的打印出flytv.run.monitor.fragment.user.AyWelcome类名,说明我们拿到这个这个classloader是加载了加固过的dex的。

在上一步我们虽然可以通过frida来获取到加固之后的class,但是你如果直接使用这个{class}.{fuction}依然会失败,因为class没有这个成员变量,所以我们需要来实现获取到与Java.use一样的js对象,那么如何解决呢?当然是read the fuking source code

我们看frida-java的use方法的实现,代码在66eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3M7X3W2V1j5g2)9J5c8X3k6J5K9h3c8S2i4K6u0V1K9X3q4$3j5g2)9J5c8X3u0D9L8$3u0Q4x3V1j5&6j5X3g2U0j5K6t1%4x3o6V1I4y4e0M7$3k6X3x3I4z5e0S2V1j5K6u0S2y4K6p5&6j5K6m8X3k6h3c8T1x3K6m8S2x3U0M7H3j5U0t1^5i4K6u0r3L8r3W2T1i4K6u0r3j5$3I4S2M7%4y4Q4x3X3c8X3j5h3y4@1L8%4u0&6i4K6u0W2K9Y4y4Q4x3U0y4x3x3e0x3&6代码如下:

从代码中我们可以看出来,他会先到他存class的一个列表里面去找,如果找不到,就会判断loader是不是null,loader不为null,就会使用loader加载class,loader为null就会使用JNIEnv的findClass方法去找类,也就是使用默认的classloader。所以现在目标明确了,我们只需要让这个loader是我们从Applicaiton的attach方法获取到的classloader即可,那么怎么替换呢?

很显然直接Java.loader会说undefined,我们看最终导出的是index.js这个脚本ed7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6X3M7X3W2V1j5g2)9J5c8X3k6J5K9h3c8S2i4K6u0V1K9X3q4$3j5g2)9J5c8X3u0D9L8$3u0Q4x3V1j5H3x3U0u0T1j5K6N6V1z5e0g2U0x3o6m8V1y4U0t1%4x3o6V1I4k6o6c8W2k6r3x3H3k6X3j5^5y4$3t1$3y4$3c8W2y4h3p5&6y4K6x3&6i4K6u0r3K9h3&6V1k6i4S2Q4x3X3g2B7M7#2)9J5x3@1H3J5x3R3`.`.,有下面几个成员变量:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-5-30 10:34 被smartdon编辑 ,原因:
收藏
免费 8
支持
分享
打赏 + 2.00雪花
打赏次数 1 雪花 + 2.00
 
赞赏  junkboy   +2.00 2018/09/11
最新回复 (32)
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
支持楼主。虽然看不懂
2018-9-11 01:11
0
雪    币: 3603
活跃值: (799)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
3
哈哈, 很棒! 
2018-9-11 10:27
0
雪    币: 36
活跃值: (1161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
mark
2018-9-11 11:46
0
雪    币: 3549
活跃值: (951)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
kiyaa 哈哈, 很棒!
感谢道友支持
2018-9-11 12:31
0
雪    币: 54
活跃值: (745)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
路过,感觉很nb
2018-9-11 15:11
0
雪    币: 215
活跃值: (417)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
666666
2018-9-11 15:17
0
雪    币: 905
活跃值: (1127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我记得frida一般情况下是可以直接hook加固应用的吧,而且我这边测试也通过了(APP官网下的3.7.0.67版本),不过还是很感谢楼主的分享!

2018-9-11 18:50
0
雪    币: 3549
活跃值: (951)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
9
wx_La0s 我记得frida一般情况下是可以直接hook加固应用的吧,而且我这边测试也通过了(APP官网下的3.7.0.67版本),不过还是很感谢楼主的分享!
难道就我的frida hook不到,我直接java.use的时候回class not found
2018-9-11 20:04
0
雪    币: 237
活跃值: (83)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
难道就我的frida hook不到
2018-9-11 20:46
0
雪    币: 905
活跃值: (1127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
smartdon 难道就我的frida hook不到,我直接java.use的时候回class not found
我用frida测试的时候只有一种情况会报ClassNotFoundException on path: DexPathList... 就是hook动态加载的dex时候(跟壳没有关系),当然这个题目应该不是
最后于 2018-9-11 21:19 被La0s编辑 ,原因:
2018-9-11 21:17
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
2018-9-11 23:53
0
雪    币: 41
活跃值: (88)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
呃...
2018-9-13 12:59
0
雪    币: 160
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
666,非常好,感谢楼主分享
2018-9-13 14:22
0
雪    币: 181
活跃值: (720)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主分享,hook不到可能是因为在壳动态加载之前hook的? 按理讲是可以直接hook加固应用的,因为java.use使用的classloader就是加载应用的classloader,frida是通过android.app.ActivityThread.currentApplication().getClassLoader()获取的,和你这个手工获取的classloader应该同一个。
2018-9-14 14:22
0
雪    币: 107
活跃值: (429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
good job.
2018-9-14 18:11
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
楼主从源码分析的过程很赞。之前测试frida、xposed都可以hook加固后的应用。“java.use的时候回class not found”应该是壳代码没执行完吧。你运行app等一会,再执行frida试试
2018-9-15 14:45
0
雪    币: 102
活跃值: (2815)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
mark
2018-9-16 15:24
0
雪    币: 3549
活跃值: (951)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
19
glider菜鸟 谢谢楼主分享,hook不到可能是因为在壳动态加载之前hook的? 按理讲是可以直接hook加固应用的,因为java.use使用的classloader就是加载应用的classloader,frida是 ...
应该就是这个原因了
2018-9-17 16:59
0
雪    币: 15922
活跃值: (7153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
smartdon 应该就是这个原因了
lz开始转向frida?Xposed使用动态获取类一样可以hook
2018-11-14 11:23
0
雪    币: 51
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文
2019-1-5 20:05
0
雪    币: 109
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
您好,我想问一下,实例化一个类之后,怎么去修改他全局变量的值呢?比如一个 boolean类型的全局变量,去赋值成 true.
最后于 2019-5-5 15:06 被mb_kmjaeuwz编辑 ,原因:
2019-4-28 20:56
0
雪    币: 2630
活跃值: (5097)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
Xposed hook全部方法 导致 OOM,楼主怎么解决。
2019-4-30 17:16
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
什么是OOM?
2019-5-1 17:17
0
雪    币: 634
活跃值: (1508)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
小黄鸭爱学习 Xposed hook全部方法 导致 OOM,楼主怎么解决。
复用
2019-5-6 18:47
0
游客
登录 | 注册 方可回帖
返回