吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12214|回复: 71
收起左侧

[Android 原创] 解决APP双向证书校验,抓取某灵魂聊天软件的通信包。

    [复制链接]
zldtb19931116 发表于 2021-4-2 12:51
本帖最后由 zldtb19931116 于 2021-9-3 11:57 编辑

部分android APK为了通信的安全,采用了服务器和客户端双向证书校验,会导致我们无法正常抓包。

双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。而常规的https只是客户端校验服务端的证书验证服务器的身份。

因此双向证书认证在一定程度上能增大中间人攻击的难度和我们抓包分析的难度。
例如最近大火的某灵魂软件,soul,直接burp或者fidder等是抓不到包的,因为用了3层保护,第一层是服务器https证书强验证,二是ssl pining,三是服务器验证客户端身份(双向认证)。

安装了JustTrustMe等插件,我们使用burpsuite、charles等抓包工具也只能抓到上行包。但由于我们使用了抓包工具,通信包相当于是被抓包工具拦截,然后转发至服务器,此时服务器检测到通信包没有带上正常的客户端证书,也就是无法认证客户端身份,会响应异常。
解决了服务器证书校验和ssl pining后,可以抓到上行包,但观察响应时,会发现服务器返回了400异常信息:

1

1

这个信息告诉我们,我们用了抓包工具以后发出去的包没有带上客户端证书,所以服务器端拒绝处理。想要正常抓包,就必须导入客户端证书,同时需要输入证书密码。
这就说明app使用了双向证书校验,也就是说app客户端一定是夹带了一张证书的。最常用的就是p12证书了。所以我们可以直接用apktool等工具反编译apk或者直接解压缩。证书这类文件通常放在assets目录下面,我们在里面找p12后缀名的文件即可:
image.png
把这个文件复制出来保存到任意位置,第一步就完成了。但光有证书,不知道证书密码也没用。
所以第二部:找证书密码。
直接dex2jar或者jadx等工具逆向出java代码,搜索关键词“client.p12”,或者搜索java.security.KeyStore.open()方法,基本能直接找到使用证书的地方。此处我们搜索“client.p12”:
image.png
如果是jadx可以右键查找使用的地方,跟进去:
image.png
上下文中就能找到加载证书的地方,找到load方法,这个load方法第一个参数是证书文件流,第二个参数即为证书的密码,所以我们只要知道这第二个参数传进来的值是什么就可以了。从代码可以看到第二个参数c2来源是SoulNetworkSDK.c方法,c方法返回值即为我们需要的证书密码,这时候办法就多了,代码能力强的直接阅读逻辑能看出来,像我等比较懒的就喜欢在这儿下断点动态调试直接看参数和返回值。
不过我最喜欢的方法是直接hook,可以自己写xposed模块,也可以用我之前写的另一个基于xposed的hook工具:easyHook,直接填入包名类名方法名和对应参数类型,即可显示出参数和返回值,详情和下载地址见我的另一篇帖子:
https://www.52pojie.cn/thread-1408286-1-1.html
image.png
填写好这个灵魂软件的包名、以及对应的类名方法名和参数类型,点击保存,打开悬浮窗,运行灵魂软件,效果如下:
image.png
可以看到,证书密码已经轻松获取到了,长按可以直接复制到剪切板。这时候把先前保存的证书文件导入charles。
点击charles>proxy>ssl proxy settings>client certificates,创建一个,密码随便输入,自己记住。点击add,然后添加我们需要抓包的网站地址和端口(https端口默认为443),点击右下角的import p12,导入我们之前找到的client.p12文件,输入我们刚刚hook到的证书密码,即可开始正常抓包。
image.png
再次运行灵魂软件,即可开始正常抓包:

image.png

免费评分

参与人数 22威望 +1 吾爱币 +37 热心值 +18 收起 理由
QingYi. + 1 + 1 我很赞同!
noback + 1 热心回复!
kask + 1 + 1 热心回复!
狄人3 + 1 + 1 谢谢@Thanks!
从零学习的歪经小 + 1 已经失效
xsk666 + 1 热心回复!
小公主々 + 1 + 1 热心回复!
zhicx + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qq134359 + 1 + 1 谢谢@Thanks!
★☆CNVIP☆★ + 1 + 1 热心回复!
chinawolf2000 + 1 + 1 热心回复!
jerrylin + 1 谢谢@Thanks!
ldy2333 + 1 用心讨论,共获提升!
andixingchen + 1 有用!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Courser + 1 谢谢@Thanks!
朮小凯 + 1 + 1 谢谢@Thanks!
杨辣子 + 1 + 1 谢谢@Thanks!
fanvalen + 1 + 1 我很赞同!
qq9953 + 1 谢谢@Thanks!
liye1320 + 2 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wuh 发表于 2021-4-7 15:55
zldtb19931116 发表于 2021-4-2 14:36
抓包是第一步,python、java都可以带上证书发请求。里面的加密和签名也可以逆向代码翻出来

那不太妙啊,这个是给黑产提供思路了.....
如果按照理论上的做法,可以做到全自动发广告以及注册等相关行为....养号
给了一些骗子黄赌毒可乘之机...唉
 楼主| zldtb19931116 发表于 2021-7-19 08:56
狄人3 发表于 2021-7-18 11:42
楼主,如果apk包内没有发现直接的证书文件怎么办?密码已经成功解出,甚至已经发现读取的证书文件名,但是就 ...

有可能是首次运行的时候从云端下载的证书,也可能是加密了存在某个地方使用时再解密的。这你得看看上下文逻辑了
stefankuok 发表于 2021-4-2 13:06
djxding 发表于 2021-4-2 13:09
好文章啊,对于我来说,不算难也不算太容易,正好!
感谢,谢谢楼主分享。
 楼主| zldtb19931116 发表于 2021-4-2 13:14
djxding 发表于 2021-4-2 13:09
好文章啊,对于我来说,不算难也不算太容易,正好!
感谢,谢谢楼主分享。

一起进步

langyeie 发表于 2021-4-2 13:15
很干货,很强势
DS_FLY100 发表于 2021-4-2 13:23
好文章,这种双向认证,对APP安全也很有帮助。非常好的思路。
cptw 发表于 2021-4-2 13:37

好东西,感谢分享
andyhou9527 发表于 2021-4-2 13:38
说句题外话,刚开始这个软件还是挺不错的,现在开始走偏了
讲真,快播真不该被拉黑
MrKang 发表于 2021-4-2 13:45
操作太强了。。之前做双向证书认证时候,还想着不容易 被突破
流泪的小白 发表于 2021-4-2 13:46
太狠了吧,强
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-25 13:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表