当前位置: 首页 > news >正文

Frida/Objection 实战:Hook 3类SSL Pinning方法(JustTrustMe替代方案)

Frida/Objection 实战:手动Hook 3类SSL Pinning实现

在移动安全测试中,SSL Pinning(证书绑定)是最常见的防抓包手段之一。与直接使用JustTrustMe等现成工具不同,本文将深入OkHttp、X509TrustManager和CertificatePinner三种主流实现方式,通过Frida/Objection编写精准Hook脚本,提供更灵活的绕过方案。

1. SSL Pinning技术原理与分类

SSL Pinning的核心思想是将服务器证书或公钥预先内置在客户端,建立连接时对比校验。根据实现方式可分为三类:

  • 网络框架层校验:以OkHttp为代表的框架内置校验逻辑
  • 证书管理器校验:通过X509TrustManager自定义验证逻辑
  • 证书固定校验:使用CertificatePinner进行公钥指纹匹配
// 典型SSL Pinning实现示例 OkHttpClient client = new OkHttpClient.Builder() .certificatePinner(new CertificatePinner.Builder() .add("example.com", "sha256/AAAAAAAA...") .build()) .sslSocketFactory(sslSocketFactory, trustManager) .build();

三种方式的对比如下:

类型实现位置校验粒度典型特征
OkHttp校验网络框架层域名级别使用OkHttpClient.Builder
X509TrustManager证书验证层证书链实现checkServerTrusted方法
CertificatePinner公钥指纹层公钥哈希配置sha256/前缀的指纹

2. OkHttp校验的Hook方案

OkHttp的校验通常通过SSLSocketFactory和TrustManager实现。通过Frida Hook关键类方法:

// Hook OkHttpClient.Builder的sslSocketFactory方法 Java.perform(function() { var OkHttpClient_Builder = Java.use('okhttp3.OkHttpClient$Builder'); OkHttpClient_Builder.sslSocketFactory.overload( 'javax.net.ssl.SSLSocketFactory', 'javax.net.ssl.X509TrustManager' ).implementation = function(factory, manager) { console.log("[+] Bypassing OkHttp SSL verification"); // 替换为空的TrustManager var TrustManager = Java.registerClass({ name: 'com.example.BypassTrustManager', implements: [Java.use('javax.net.ssl.X509TrustManager')], methods: { checkClientTrusted: function(chain, authType) {}, checkServerTrusted: function(chain, authType) {}, getAcceptedIssuers: function() { return []; } } }); return this.sslSocketFactory(factory, TrustManager.$new()); }; });

关键Hook点:

  1. okhttp3.OkHttpClient.Builder的sslSocketFactory方法
  2. 替换原TrustManager为空实现
  3. 保持原始SSLSocketFactory不变

3. X509TrustManager的Hook方案

自定义TrustManager是Android中最常见的校验方式,核心方法是checkServerTrusted

Java.perform(function() { var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); // Hook系统TrustManager X509TrustManager.checkServerTrusted.implementation = function(chain, authType) { console.log("[+] Bypassing X509TrustManager verification"); return; // 直接跳过验证 }; // Hook自定义TrustManager Java.enumerateClassLoaders({ onMatch: function(loader) { try { var customManager = loader.loadClass('com.example.CustomTrustManager'); Java.use(customManager.getName()).checkServerTrusted.implementation = function() { console.log("[+] Bypassing custom TrustManager"); }; } catch(e) {} }, onComplete: function() {} }); });

应对策略:

  1. 全局Hook系统X509TrustManager
  2. 动态扫描自定义TrustManager实现
  3. 使用Objection的android sslpinning disable命令

4. CertificatePinner的Hook方案

CertificatePinner通过比对公钥指纹实现校验,需Hook其校验逻辑:

Java.perform(function() { var CertificatePinner = Java.use('okhttp3.CertificatePinner'); CertificatePinner.check.overload( 'java.lang.String', 'java.util.List' ).implementation = function(hostname, pins) { console.log(`[+] Bypassing CertificatePinner for ${hostname}`); return; // 跳过指纹校验 }; // 针对新版OkHttp的Hook CertificatePinner.check$okhttp.overload( 'java.lang.String', '[Ljava.security.cert.Certificate;' ).implementation = function() { console.log("[+] Bypassing OkHttp3.14+ CertificatePinner"); }; });

注意事项:

  1. OkHttp 3.x与4.x的API差异
  2. 多域名配置情况下的处理
  3. 备用指纹(fallback pins)的绕过

5. 综合防护的应对策略

当应用同时采用多种防护手段时,需要组合Hook方案:

  1. 层级化Hook顺序

    • 先处理CertificatePinner
    • 再处理自定义TrustManager
    • 最后处理网络框架层校验
  2. Objection自动化脚本

objection -g com.example.app explore -s "android sslpinning disable"
  1. 典型防护组合的Hook方案
防护组合需Hook的类/方法工具推荐
OkHttp + CertificatePinOkHttpClient.Builder, CertificatePinnerFrida + Objection
ApacheHttp + TrustManagerSSLSocketFactoryImpl, X509TrustManagerFrida独立脚本
双向认证KeyManagerFactory, ClientAuthType需导出客户端证书

6. 实战案例与排错指南

案例1:某金融App的复合校验

// Hook链式调用 Java.perform(function() { // 第一层:CertificatePinner var CertPinner = Java.use('okhttp3.CertificatePinner'); CertPinner.check.overload('java.lang.String', 'java.util.List').implementation = function() {}; // 第二层:自定义TrustManager Java.enumerateLoadedClasses({ onMatch: function(className) { if (className.includes("SecurityManager")) { var clazz = Java.use(className); if (clazz.checkServerTrusted) { clazz.checkServerTrusted.implementation = function() {}; } } }, onComplete: function() {} }); // 第三层:WebView校验 var WebViewClient = Java.use('android.webkit.WebViewClient'); WebViewClient.onReceivedSslError.implementation = function(view, handler, error) { handler.proceed(); // 忽略SSL错误 }; });

常见问题排查

  1. Hook不生效

    • 检查类名是否混淆(使用jadx分析)
    • 确认Hook时机(尽早注入)
    • 验证Frida版本兼容性
  2. 应用崩溃

    • 避免修改方法返回值类型
    • 保持原始参数传递
    • 使用try-catch包裹关键操作
  3. 检测Frida

    • 使用非常规端口(-l 参数)
    • 替换Frida-server文件名
    • 采用静态编译的注入工具

建议的测试流程:

  1. 使用Burp/Charles确认基础代理拦截
  2. 逐步启用各级Hook脚本
  3. 通过日志观察校验绕过情况
  4. 最后处理证书加密和签名校验

对于最新Android版本的适配要点:

  • Android 10+的证书存储位置变化
  • 非Root环境下使用frida-gadget注入
  • 应对证书透明化(CT)校验
  • 处理强化后的JNI保护机制

通过理解各层校验原理并编写针对性Hook脚本,可以构建比通用工具更精准的解决方案。实际测试中建议先静态分析确定防护方案,再动态验证Hook效果,最后形成自动化测试脚本。

http://www.jsqmd.com/news/1149938/

相关文章:

  • 别等9月!2026秋招提前批已开启,这些大厂测试岗正在悄悄招人
  • STM32F746ZG与TPIS1S1385构建高精度红外检测系统
  • Deepin升级工具架构解析:从登录弹窗到DNF集成的完整流程
  • Cuppa CMS 文件包含漏洞实战:POST 请求绕过与 /etc/shadow 读取(附 2 种 Payload)
  • AI面试平台数据库架构设计详解
  • 3款地震速度模型可视化工具对比:SU vs Madagascar vs Python 性能与效果实测
  • Burp Suite 2024.5 代理抓包实战:5步复现Web登录请求拦截与参数分析
  • 2026最新5款AI编程平替工具vibe coding深度实测
  • TS2007FC与PIC18F45K80在嵌入式音频系统的高效应用
  • PHP 文件包含漏洞实战:iwebsec 靶场 10 关核心利用手法与 3 类伪协议解析
  • Nacos <=2.2.0 JWT 默认密钥漏洞复现:3步构造有效Token接管后台
  • Burp Suite Turbo Intruder 并发测试:3个真实SRC案例复现与脚本分析
  • 软件License设计5大安全挑战:从虚拟机/Docker逃逸到Agent模拟攻击
  • Upload-Labs Pass-02/03 实战:Content-Type与黑名单绕过,2种方法成功率100%
  • NetBackup 10.1 外部CA配置后登录失败:5步排查与证书存储修复
  • Hutool-crypto 5.8.10 密钥管理:从内存硬编码到配置文件安全的3步演进
  • WebDAV 方法实战检测:OPTIONS/PUT/DELETE 等 8 种方法自动化探测与利用
  • Burp Suite 2024.6 与 5款开源插件对比评测:漏洞检出率提升40%实测
  • AOPR 7.21 实战:3种攻击模式破解Office 2019文档,成功率提升80%
  • 多模态Transformer实战:CLIP与BLIP-2模型在图文检索中的3种融合策略对比
  • C语言数组越界漏洞:从缓冲区溢出到密码验证绕过实战分析
  • 业务逻辑漏洞防御指南:基于墨者学院6个靶场案例的3层防护策略
  • 微信消息自动转发终极指南:3步实现跨群信息同步
  • 高校教务系统安全审计实战:基于新正方 8.0 的 5 个常见越权测试点与修复验证
  • Fastjson 1.2.83 安全升级实战:修复 CVE-2022-25845 的 3 种方法与兼容性验证
  • 如何高效遍历数值列表,筛选满足阈值条件的元素
  • XXE漏洞防御:PHP/Java/Python 3种语言5行代码修复方案对比
  • Office文档密码恢复工具对比:AOPR 7.21 vs Passper 4.0 功能与性能实测
  • 宝塔面板 7.9.8 目录权限与安全加固:10个关键目录的权限设置指南
  • iwebsec靶场 XXE漏洞实战:3种外部实体利用方式与Burp Collaborator盲注