记一次某交友app双向认证破解

guyuegeqian   ·   发表于 2020-05-31 16:24:24   ·   技术文章

前言

最近遇到的一款进行双向认证的app,记录一下怎么解决app的双向认证。

判断是否存在双向认证

正常配置burp证书后,开启代理抓包,发现返回包报错。
No required SSL certificate was sent

当服务器启用了证书双向认证之后,除了客户端去验证服务器端的证书外,服务器也同时需要验证客户端的证书,也就是会要求客户端提供自己的证书,如果没有通过验证,则会拒绝连接,如果通过验证,服务器获得用户的公钥。关于双向认证更多细节参考https://www.songma.com/news/txtlist_i39807v.html

突破思路

双向认证的客户端有一个证书文件。通过修改安装包后缀名为zip,直接解压文件,在assets中可找到.p12的证书文件。


点击安装发现需要密码。


接下来就需要寻找证书密码了,这个密码一般都是硬编码在代码中,接下来需要反编译apk查找证书密码。

获取安装证书密码

我这里使用的jeb工具进行apk反编译,全局搜索 client.p12 字符串。

分析代码发现此处是加载证书的地方,load方法的第二个参数就是密码,通过追踪v1参数发现是通过native调用so文件获取密码值。


查看该方法调用的so文件,在apk解压文件中查找 libsoulpower.so 文件 丢入ida进行反编译。


在function中搜索getStorePasswd,发现函数。


按F5查看伪代码,没能发现密码。


寻找密码的旅程进行到这里就卡住了。既然没法直接在代码中找到密码,就只能祭出hook大法了。
xposed框架hook编写参考https://www.cnblogs.com/gordon0918/p/6689883.html
我这里直接hook的的a方法,在获取到密码之后进行打印。

编译项目将生成的apk安装到模拟器,将编写的模块选手重启。


此时打开目标app发送请求包,查看xposed日志成功获取到证书密码

burp安装证书

burp选择user options -> SSL


选择填写host的时候注意,如果请求包里面host是域名就填域名,ip就填ip。
选择p12文件,输入密码导入勾选即可使用。


此时可以正常使用抓包了。

参考文章,感谢各位大佬的倾情奉献
https://xz.aliyun.com/t/6551#toc-10
https://www.songma.com/news/txtlist_i39807v.html
https://www.anquanke.com/post/id/190080#h2-0

用户名金币积分时间理由
admin 100.00 0 2020-06-01 15:03:51 建议将参考文章内容汇总,完善一篇专题

打赏我,让我更有动力~

0 条回复   |  直到 2020-5-31 | 2138 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.