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

Frida绕过SSL Pinning (证书绑定)抓包;Frida注入;app无法抓包问题解决。

概念介绍:

SSL Pinning (证书绑定) 是什么意思?

通常,当应用程序(App、小程序等)通过 HTTPS 连接到服务器时,它会信任操作系统预装的根证书颁发机构(CA)列表。这意味着,只要服务器返回的证书是由这些受信任的 CA 之一签发的,应用程序就会认为连接是安全的。

然而,SSL Pinning 是一种增强安全性的机制。开发者在应用程序中硬编码了其服务器的特定证书(或其公钥哈希值)。当应用程序尝试建立 HTTPS 连接时,它不仅会检查服务器证书是否由受信任的 CA 签发,还会额外验证该证书是否与应用程序内部硬编码的证书完全匹配

为什么会有 SSL Pinning?

SSL Pinning 的主要目的是为了防止中间人攻击 (Man-in-the-Middle, MITM)。 像代理工具Burp Suite ,在拦截 HTTPS 流量时,会使用自己的 CA 证书来对流量进行解密和再加密。如果没有安装 Burp 的 CA 证书,手机会提示证书错误;即使安装了,由于应用程序只信任它自己“绑定”的证书,而不会信任 Burp 的证书,所以连接仍然会失败,从而阻止用代理工具抓取流量。

简单来说,SSL Pinning 就是 App 对它要连接的服务器的证书“认准了死理”,非这个证书不可,其他 CA 签发的它都不认,哪怕系统层面是信任的。

 

Frida 绕过 SSL Pinning 是什么意思?

Frida 是一个动态代码注入工具包。它允许你在运行时向应用程序的进程中注入 JavaScript 代码。这意味着你可以在应用程序运行的时候,修改它的行为、截获它的函数调用、甚至修改函数的返回值。

Frida 绕过 SSL Pinning 的核心思想就是:在应用程序执行 SSL 证书验证的关键代码点,通过注入 Frida 脚本来修改或跳过这个验证逻辑。这样,即使 App 原本会因为证书不匹配而拒绝连接,Frida 也能“欺骗”它,让它认为验证通过,从而允许 Burp 等代理工具正常拦截和解密 HTTPS 流量。

简单来说,Frida 就像一个“特工”,潜入到 App 内部,在 App 检查证书的时候,给它一个“假指令”,让它忽略证书不匹配的错误,从而让 Burp 的代理证书能够通过验证。

 

怎么做?(Frida 绕过 SSL Pinning 的大致步骤)

前提条件:

  1. 已 Root 的 Android 设备或越狱的 iOS 设备: Frida Server 需要在设备上运行,通常需要 Root/越狱权限。也可以使用已 Root 的 Android 模拟器。

  2. 安装 ADB (Android Debug Bridge) / SSH (iOS): 用于与设备通信和传输文件。

  3. 安装 Python 和 Frida 工具: 在你的电脑上安装 Python 的 fridafrida-tools 包。

    Bash
    pip install frida frida-tools
    
  4. 下载并运行 Frida Server:

    • 根据你的设备架构(ARM、ARM64 等)从 Frida GitHub Release 页面下载对应的 frida-server 文件。

    • frida-server 推送到设备上的一个可执行目录(例如 /data/local/tmp/)。

    • 在设备上通过 ADB shell 或 SSH 启动 frida-server(需要 Root 权限)。

    Bash
    # 将frida-server推送到设备
    adb push /path/to/frida-server /data/local/tmp/# 授予执行权限
    adb shell "chmod 755 /data/local/tmp/frida-server"# 启动frida-server (在单独的shell或后台中)
    adb shell "/data/local/tmp/frida-server &"
    
  5. Burp Suite 和证书: 确保 Burp Suite 已经配置好代理,并且它的 CA 证书已经安装到目标设备的用户信任证书存储区

具体绕过步骤:

  1. 识别目标 App 的包名/Bundle ID:

    • Android: 使用 frida-ps -U 命令列出所有运行的进程,找到目标 App 的包名(例如 com.example.app)。

    • iOS: 使用 frida-ps -Uai 列出已安装的 App,找到 Bundle ID(例如 com.apple.mobilesafari)。

  2. 获取 SSL Pinning Bypass 脚本:

    • 这是关键步骤。不要尝试自己从头写,非常复杂!!!。

    • 社区中有很多通用或针对特定库的 SSL Pinning 绕过脚本。最常用的是 Frida CodeShare 上的脚本。

    • 例如,一个非常流行的通用 Android SSL Pinning 绕过脚本是 universal-android-ssl-pinning-bypass-with-frida

    • 对于 iOS 也有类似的通用脚本,例如 ios13-pinning-bypassssl-kill-switch2 等。

  3. 使用 Frida 注入脚本并运行 App:

    获取目标 App 的包名/Bundle ID 和绕过脚本后,就可以执行 Frida 命令了。

    示例 (Android):
    Bash
    frida -U -f <包名> --no-pause --codeshare pcipolloni/universal-android-ssl-pinning-bypass-with-frida
    
    • -U:连接通过 USB 连接的设备。

    • -f <包名>:启动指定包名的 App。

    • --no-pause:App 启动后不暂停,直接运行。

    • --codeshare <作者/脚本名>:从 Frida CodeShare 下载并注入指定的脚本。

    示例 (iOS):
    Bash
    frida -U -f <Bundle ID> --no-pause --codeshare federicodotta/ios13-pinning-bypass
    

    或者,如果下载了 .js 脚本文件到本地进行注入,可以使用 -l 参数:

    Bash
    frida -U -f <包名/Bundle ID> --no-pause -l /path/to/your/bypass_script.js
    
  4. 验证抓包:

    • 在执行上述命令后,App 会启动(或重新启动)。

    • 此时,将手机的 Wi-Fi 代理设置指向你的 Burp Suite 监听地址和端口。

    • 尝试在 App 中进行网络操作。在 Burp Suite 的 "Proxy" -> "HTTP history" 中看到 App 的 HTTPS 流量,且能够正常解密。


 

注意事项:

  • 设备 Root/越狱: 这是最基本也是最重要的一步。

  • 脚本兼容性: 没有一个脚本是万能的。有些 App 可能使用了非常规的 SSL Pinning 实现,或者更新了代码,导致通用脚本失效。这时可能需要编写定制的 Frida 脚本。

  • App 反 Root/越狱检测: 有些 App 会检测设备是否 Root 或越狱,如果检测到,可能会拒绝运行或禁用某些功能。需要结合 Root 隐藏工具(如 MagiskHide)来绕过检测。

  • 网络安全配置 (Android): Android 7.0 及更高版本引入了 network_security_config.xml,允许开发者在应用层面配置网络安全策略,包括不信任用户安装的 CA 证书。Frida 脚本通常会 hook 相关的 API 来绕过这个限制。

  • 持久性: Frida 注入是运行时动态的,App 重启后需要重新注入。如果需要永久绕过,可能需要对 App 进行静态修改(反编译、打补丁、重打包)。

Frida 是一个非常强大的工具,但它的使用需要一定的技术和对移动安全的理解。希望大家可以一起交流学习~

如果思路上有帮助到你,辛苦点点赞哦~

大家的支持是我不断更新的动力!

http://www.dtcms.com/a/275972.html

相关文章:

  • Spring之【写一个简单的IOC容器EasySpring】
  • 2025年亚太杯(中文赛项)数学建模B题【疾病的预测与大数据分析】原创论文分享
  • UE5多人MOBA+GAS 19、创建升龙技能,以及带力的被动,为升龙技能添加冷却和消耗
  • 3. java 堆和 JVM 内存结构
  • YOLOv8
  • pytables模块安装
  • 【TOOL】ubuntu升级cmake版本
  • 单细胞分析教程 | (二)标准化、特征选择、降为、聚类及可视化
  • STM32用PWM驱动步进电机
  • 快捷跑通ultralytics下的yolo系列
  • 算法第三十一天:贪心算法part05(第八章)
  • 回溯算法-数据结构与算法
  • Pythone第二次作业
  • brpc 介绍与安装
  • Redis过期策略与内存淘汰机制面试笔记
  • 数据库连接池及其核心特点
  • AI编程下的需求规格文档的问题及新规范
  • ADSP-1802这颗ADI的最新DSP应该怎么做开发(一)
  • 【Redis实战】Widnows本地模拟Redis集群的2种方法
  • Syntax Error: TypeError: Cannot set properties of undefined (setting ‘parent‘)
  • Unity URP + XR 自定义 Skybox 在真机变黑问题全解析与解决方案(支持 Pico、Quest 等一体机)
  • Cookie、Session、Token 有什么区别?
  • Spring Boot 中使用 Lombok 进行依赖注入的示例
  • 【离线数仓项目】——电商域DWD层开发实战
  • 【C++ STL 库】解析stack、queue、priority_queue类
  • 中文多智能体金融交易决策框架-TradingAgents-CN
  • 本地安装ClaudeCode全攻略
  • 【Python】多线程详解:从基础概念到实战应用
  • 免费尝试claude code的安利,截至今天可用(7/12)
  • openGauss数据库管理实战指南——基本常用操作总结