app bks证书双向认证抓包
字数 1409 2025-08-22 12:22:48
BKS证书双向认证抓包教学文档
0x1 概述
双向认证(Mutual TLS Authentication)是一种安全机制,要求客户端和服务器端互相验证对方的证书。本文档将详细介绍如何对使用BKS格式证书进行双向认证的Android应用进行抓包分析。
0x2 准备工作
所需工具
- 逆向工具:用于脱壳和分析APP(如Jadx、Ghidra等)
- Frida:用于动态分析APP
- Wireshark/Charles/Burp Suite:抓包工具
- KeyStore Explorer:用于处理BKS证书
- WinHex:十六进制编辑器
- tracer-keystore.js:Frida脚本
0x3 识别双向认证
- 使用代理工具(如Burp Suite)设置WIFI代理
- 尝试抓取目标APP的请求
- 观察返回错误:
- 如果收到400错误
- 错误信息中包含"No required SSL certificate was sent"
这些迹象表明应用使用了双向认证。
0x4 获取BKS证书和密码
4.1 查找证书文件
- 解压APK文件
- 在资源文件中查找
.bks后缀的文件 - 注意:有时.bks文件内容可能不是真实的证书内容
4.2 查找证书密码
- 使用逆向工具分析APP代码
- 搜索
.bks关键字定位证书加载代码 - 常见模式:
KayakSC.getClientBksPassword()等类似方法
4.3 动态获取密码
如果密码获取方法是native方法:
- 使用Frida进行hook
- 使用
tracer-keystore.js脚本修改版:
function hookKeystoreLoadStream(dump) {
var keyStoreLoadStream = Java.use('java.security.KeyStore')['load'].overload('java.io.InputStream', '[C');
keyStoreLoadStream.implementation = function (stream, charArray) {
var hexString = readStreamToHex(stream);
console.log("[Keystore.load(InputStream, char[])]: keystoreType: " +
this.getType() +
", password: '" +
charArrayToString(charArray) +
"', inputSteam: " +
hexString);
this.load(stream, charArray);
if (dump) console.log(" Keystore loaded aliases: " + ListAliasesObj(this));
}
}
- 运行Frida命令:
frida -U -f com.target.app -l tracer-keystore.js --no-pause
- 从输出中获取:
- 证书的十六进制数据
- 证书密码
0x5 处理BKS证书
- 将从Frida获取的十六进制证书数据导入WinHex
- 保存为
.bks格式文件 - 使用KeyStore Explorer工具(https://keystore-explorer.org/downloads.html):
- 打开保存的BKS证书
- 输入hook获取到的密码
- 将证书转换为P12格式
0x6 配置抓包工具
6.1 Burp Suite配置
- 打开Burp Suite
- 进入"Proxy" -> "Options" -> "TLS"选项卡
- 点击"Add"按钮
- 导入转换后的P12证书
- 输入证书密码
6.2 Charles配置
- 打开Charles
- 进入"Proxy" -> "SSL Proxying Settings"
- 添加目标主机和端口
- 在"Client Certificates"中添加P12证书
0x7 验证抓包
- 启动APP
- 观察抓包工具中的请求
- 确认可以正常捕获HTTP/HTTPS请求
0x8 注意事项
- 某些APP可能对证书进行额外加密或混淆,需要进一步分析
- 如果BKS证书不是标准格式,可能需要分析APP如何加载和使用证书
- 部分APP会检测代理设置,可能需要配合其他工具绕过
- 确保测试环境合法合规,遵守相关法律法规
0x9 进阶技巧
- 对于加固的APP,需要先脱壳再分析
- 如果密码在SO文件中,可能需要逆向分析native代码
- 某些APP会动态生成证书,需要hook证书生成过程
- 可以使用Xposed模块替代Frida进行hook