app bks证书双向认证抓包
字数 1409 2025-08-22 12:22:48

BKS证书双向认证抓包教学文档

0x1 概述

双向认证(Mutual TLS Authentication)是一种安全机制,要求客户端和服务器端互相验证对方的证书。本文档将详细介绍如何对使用BKS格式证书进行双向认证的Android应用进行抓包分析。

0x2 准备工作

所需工具

  1. 逆向工具:用于脱壳和分析APP(如Jadx、Ghidra等)
  2. Frida:用于动态分析APP
  3. Wireshark/Charles/Burp Suite:抓包工具
  4. KeyStore Explorer:用于处理BKS证书
  5. WinHex:十六进制编辑器
  6. tracer-keystore.js:Frida脚本

0x3 识别双向认证

  1. 使用代理工具(如Burp Suite)设置WIFI代理
  2. 尝试抓取目标APP的请求
  3. 观察返回错误:
    • 如果收到400错误
    • 错误信息中包含"No required SSL certificate was sent"

这些迹象表明应用使用了双向认证。

0x4 获取BKS证书和密码

4.1 查找证书文件

  1. 解压APK文件
  2. 在资源文件中查找.bks后缀的文件
  3. 注意:有时.bks文件内容可能不是真实的证书内容

4.2 查找证书密码

  1. 使用逆向工具分析APP代码
  2. 搜索.bks关键字定位证书加载代码
  3. 常见模式:KayakSC.getClientBksPassword()等类似方法

4.3 动态获取密码

如果密码获取方法是native方法:

  1. 使用Frida进行hook
  2. 使用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));
    }
}
  1. 运行Frida命令:
frida -U -f com.target.app -l tracer-keystore.js --no-pause
  1. 从输出中获取:
    • 证书的十六进制数据
    • 证书密码

0x5 处理BKS证书

  1. 将从Frida获取的十六进制证书数据导入WinHex
  2. 保存为.bks格式文件
  3. 使用KeyStore Explorer工具(https://keystore-explorer.org/downloads.html):
    • 打开保存的BKS证书
    • 输入hook获取到的密码
    • 将证书转换为P12格式

0x6 配置抓包工具

6.1 Burp Suite配置

  1. 打开Burp Suite
  2. 进入"Proxy" -> "Options" -> "TLS"选项卡
  3. 点击"Add"按钮
  4. 导入转换后的P12证书
  5. 输入证书密码

6.2 Charles配置

  1. 打开Charles
  2. 进入"Proxy" -> "SSL Proxying Settings"
  3. 添加目标主机和端口
  4. 在"Client Certificates"中添加P12证书

0x7 验证抓包

  1. 启动APP
  2. 观察抓包工具中的请求
  3. 确认可以正常捕获HTTP/HTTPS请求

0x8 注意事项

  1. 某些APP可能对证书进行额外加密或混淆,需要进一步分析
  2. 如果BKS证书不是标准格式,可能需要分析APP如何加载和使用证书
  3. 部分APP会检测代理设置,可能需要配合其他工具绕过
  4. 确保测试环境合法合规,遵守相关法律法规

0x9 进阶技巧

  1. 对于加固的APP,需要先脱壳再分析
  2. 如果密码在SO文件中,可能需要逆向分析native代码
  3. 某些APP会动态生成证书,需要hook证书生成过程
  4. 可以使用Xposed模块替代Frida进行hook

0xA 参考资源

  1. Android Keystore Audit
  2. KeyStore Explorer
  3. Frida官方文档
  4. BKS证书格式说明
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 脚本修改版: 运行Frida命令: 从输出中获取: 证书的十六进制数据 证书密码 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 0xA 参考资源 Android Keystore Audit KeyStore Explorer Frida官方文档 BKS证书格式说明