首页
社区
课程
招聘
[原创]Android app三种常见抓包场景及案例分析
发表于: 2024-9-15 22:54 39953

[原创]Android app三种常见抓包场景及案例分析

2024-9-15 22:54
39953

一、未校验:配置证书就能抓

1.这种情况是最简单的情况,Android 7.0之前的设备,直接配置用户证书,就能进行抓包,Android 7.0之后的设备,需要获取root权限1后,把用户证书移到系统证书目录下,或者配置系统强制信任用户证书。
对于移动用户证书到系统证书目录下的情况,推荐使用这个插件:316K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6&6M7K6p5J5x3K6q4Q4x3V1k6y4L8%4k6W2b7$3g2J5N6r3W2X3K9h3y4S2N6r3f1`.
对于强制信任用户证书的这种情况,推荐使用这个插件:10aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6z5g2V1W2e0e0%4y4W2j5%4g2J5K9i4c8&6i4K6u0r3e0h3q4Y4K9i4y4C8g2s2u0#2M7%4c8g2M7$3g2J5b7$3g2J5N6s2x3`.
2.对于这种情况,我们安装完证书后,直接使用代理/vpn的方式进行抓包就可以了,这里我们以某浏览器为例,进行抓包演示,因为我用的设备是Android 7.0以上的,所以我们首先是配置系统强制信任用户证书的插件。

3.配置完成后,我们在抓包软件上导出证书,然后在设备上进行安装。

4.接下来,我们就可以进行抓包了,抓包成功。

二、单向证书认证:客户端校验服务器证书--SSL Pinning

1.这是第二种情况,也就是我们常说的sslpinning,想具体了解sslpining技术,可以去看这2篇文章:
054K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6K9s2g2F1K9i4S2Q4x3X3g2U0L8$3#2Q4x3V1k6K6M7$3I4Q4x3X3c8H3K9h3&6F1K9h3&6Y4i4K6u0r3
14eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6N6g2)9J5k6r3A6S2j5$3E0Q4x3X3g2Y4K9i4c8Z5N6h3u0Q4x3X3g2A6L8#2)9J5c8U0t1H3x3U0m8Q4x3V1j5H3x3#2)9J5c8U0l9J5i4K6u0r3M7%4y4D9i4K6u0V1M7r3W2F1L8X3W2F1k6#2)9J5c8R3`.`.

2.针对这种情况,我们以x答x单app为例,进行抓包,上面我们已经试过了,用我们的测试设备是可以正常抓到https的数据包的,然后我们再去抓一下x答x单这个app的包,点击发送验证码按钮后会提示发送失败,请重试 ,说明我们抓包失败了。

3.这里报错:Client closed the connection before a request was made. Possibly the SSL certificate was rejected,表明在 SSL/TLS 握手阶段,客户端在没有发送 HTTP 请求之前就关闭了连接,客户端拒绝了服务器的证书,也就是上面我们所说的sslpinning技术,还有另外一种报错得情况:SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown),也是用到了sslpinning技术。那遇到上述这2种情况,我们应该怎么处理呢?使用frida进行hook,我们这里直接用大佬们写好的脚本进行hook,地址:a3cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6i4L8$3!0&6N6h3&6p5L8%4c8S2i4K6u0r3c8s2u0G2K9h3c8e0f1@1I4g2L8Y4m8A6L8X3&6A6L8X3N6Q4x3V1k6T1L8r3!0T1i4K6u0r3L8h3q4K6N6r3g2J5i4K6u0r3e0$3u0B7k6h3y4@1K9h3!0F1g2h3&6H3K9h3&6F1K9h3&6Y4f1r3I4#2M7#2)9J5c8X3S2G2L8$3E0K6i4K6u0W2K9Y4x3`.

4.用了大佬的脚本后,发现还是不行,还是失败了,只能换一个再试试了,又尝试了justtrustme,地址:c6cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6r3N6i4A6A6L8$3^5J5y4q4)9J5c8V1A6#2M7%4c8f1M7Y4g2K6N6p5#2W2i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1%4i4@1u0n7i4K6V1K6i4@1f1$3i4K6W2q4i4K6W2o6i4@1f1^5i4@1u0r3i4K6V1^5i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1^5i4@1p5I4i4K6S2o6i4@1f1K6i4K6R3H3i4K6R3J5

5.在辗转反侧之时,我想起之前用算法助手时,里面带着一个justtruatme的升级版,于是就拿来试了试,结果成功拿下。可以正常进行抓包了。

6.经过上述尝试,我们针对sslpinning这种,可以先用市面上已有的sslunpinning工具进行尝试,如果遇到都无法进行成功的情况,那就需要我们去手工进行hook了,大致有两种思路,一是对所有HTTP字符串相关类进行Hook,二是考虑到App在验证证书时会打开证书文件判断是否是App自身所信任的,因此一定会使用File类的构造函数打开证书文件获得文件的句柄,所以我们在测试时可以Hook上所有File类的构造函数,即对File.init函数进行hook。这里我用了objection进行hook的:`objection -N -h 127.0.0.1 -p 26666 -g cn.ticktick.task explore -P ~/.objection/plugins -s "android hooking watch class_method java.io.File.\init --dump-args --dump-backtrace --dump-return"`,这里因为$在命令行中有特殊含义,所以用\对它进行转义,避免被当成命令行变量。hook之后,我们在得到的数据里面搜索/system/etc/security/cacerts

7.我们在搜到的数据里面,找到了一个关于证书的堆栈信息,我们用jadx反编译后,找到这个方法

8.复制一下,丢给chatgpt分析一下,得出结论,这段代码是关于处理 SSL 证书验证的逻辑,是基于域名和证书的哈希值进行匹配,检查传入的证书是否符合某些预期的标准,那我们尝试hook它,并让它返回空,这样不就能绕过证书校验了嘛。

1
2
3
4
5
6
7
8
9
10
11
function main(){
    Java.perform(function(){
        console.log("启动");
       let f = Java.use("ll.f");
        f["a"].implementation=function(str, list){
            console.log(`f.a is called: str=${str}, list=${list}`);
           return;
       };
   });
}
setTimeout(main,500)

9.非常幸运,经过hook后,我们成功抓到了这个数据包,至此完成。

三、双向证书认证:服务器校验客户端证书。

1.这是第三种情况,我们以x利蜂app为例,进行抓包尝试,经过尝试,还是和之前一样报错:SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)

2.我们先使用objection的android sslpinning disable把这个sslpinning过掉,过掉之后,我们再抓包,发现请求正常发出,响应返回报错:400 No required SSL certificate was sent。判断为服务器校验客户端证书。

3.当我们遇到这种情况,需要我们从app中找到内置的客户端证书,导入到抓包工具中,才能正常进行抓包,那怎么才能找到客户端的证书呢?通常是有二种方法,第一种是用r0ysue大佬写的r0capture进行hook导出,第二种是去hook Keystore,找到加载证书的地方,手动分析源码去找到证书和密码。我们先用一下第一种方案:直接上r0capture,有枣没枣打一杆子试试。


[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 10
支持
分享
最新回复 (16)
雪    币: 2721
活跃值: (3111)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
很不错的的文章
2024-9-17 08:56
0
雪    币: 1100
活跃值: (1074)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
逆天而行 很不错的的文章
感谢,互相学习,互相进步
2024-9-17 13:31
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
师傅有联系方式嘛,最近也遇到了一个双向证书校验的app,各种方式都尝试了,但还是无果,想请教下师傅
2024-9-23 09:08
0
雪    币: 5138
活跃值: (4925)
能力值: ( LV10,RANK:171 )
在线值:
发帖
回帖
粉丝
5
感谢分享!
2024-9-23 10:11
0
雪    币: 1366
活跃值: (1991)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
mb_ygxdlbdi 师傅有联系方式嘛,最近也遇到了一个双向证书校验的app,各种方式都尝试了,但还是无果,想请教下师傅
装个xposed模块,justtrustme就行了
2024-9-23 10:58
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
ChrQwQ 装个xposed模块,justtrustme就行了
我的机子都是环境配好了的,哪些方式都不能开箱使用,分析就是双向证书校验,目前分析代码是找到了证书,但是密码hook不出来
2024-9-23 11:58
0
雪    币: 1366
活跃值: (1991)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
mb_ygxdlbdi 我的机子都是环境配好了的,哪些方式都不能开箱使用,分析就是双向证书校验,目前分析代码是找到了证书,但是密码hook不出来
app是什么,看看
2024-9-24 09:32
0
雪    币: 102
活跃值: (2440)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
mark
2024-9-24 10:52
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
ChrQwQ app是什么,看看
师傅加个qq吧,2114674524,我发你
2024-9-25 13:40
0
雪    币: 1366
活跃值: (1991)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
mb_ygxdlbdi 师傅加个qq吧,2114674524,我发你
加了
2024-9-25 14:30
0
雪    币: 246
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
学习   
2024-9-30 10:57
0
雪    币: 251
活跃值: (1326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我这里测试的时候用哪个脚本app闪退?楼主没有闪退吗
2024-10-4 09:53
0
雪    币: 1100
活跃值: (1074)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
jfztaq 我这里测试的时候用哪个脚本app闪退?楼主没有闪退吗
没有呀
2024-10-8 09:03
0
雪    币: 197
活跃值: (1373)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2024-10-8 11:18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
trustme 升级版是什么?
2024-11-11 11:48
0
雪    币: 60
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
感谢分享,学习了
2024-11-11 12:36
0
游客
登录 | 注册 方可回帖
返回