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

Fiddler抓取APP端,HTTPS报错全解析及解决方案(一篇解决常见问题)

环境:雷电模拟器Android9系统

​ 你所遇到的fiddler中抓取HTTPS的问题可以分为三类:一类是你自己证书安装上逻辑错误,另一种是APP中使用了“证书固定”的手段。三类fiddler中生成证书时的参数过程。

1.Fiddler证书安装上的逻辑错误

  • 更新Options中的选项时,并为对fiddler进行重启。并且安装证书在重启之后

  • 未删除以前的证书残留(除非你是全新的环境)

  • android7以上的不支持用户安装凭证,需要手动进行安装。或直接生成为系统凭证

  • Android端的代理设置问题

上述前三种会导致:“提示证书安全有问题”的错误现象

最后一种会导致:“你设置完代理,连接不上网!”

1.1 为什么需要设置Options后,需要重启!

请添加图片描述

  • 在修改HTTPS中的选项后,重启。Fiddler在启动时,才会加载证书信任列表,重启Fiddler确保能够识别新的配置。

1.2 为什么要删除以前的证书残留

问题原因:

  • fiddler每次重新生成证书时,会常见新的公钥和私钥对。残留在系统的信任库中,可能会导致信任链冲突

  • 部分系统或应用会缓存证书链中的中间证书,残留的旧中间证书可能干扰新证书的验证流程

  • 操作系统(如 Windows)和浏览器(如 Chrome、Firefox)会在内存或磁盘中缓存证书信息。残留的旧证书可能导致应用错误地优先使用缓存而非新证书

  • 证书存储位置冲突
    Fiddler 证书默认安装在系统的 受信任根证书颁发机构 存储区。若旧证书未删除,新证书可能因名称重复而安装失败,或导致系统无法识别正确的证书。

正确的流程

  • 清除所有的证书凭证(包括手机端和电脑端的凭证)

  • 再进行证书的安装

    请添加图片描述

1.3 Android版本导致的证书安装问题

1.3.1Android7.0+的系统限制

  • 问题原因:

    • Android7.0+以上的默认仅信任系统证书,而不再自动信任用户手动安装的证书

    • 对于许多应用(targetSdkVersion≥24的应用)默认忽略用户证书,导致HTTPS抓包失败

  • 解决方案

    • 方法1:修改应用代码(仅限调试版本)

      • 在应用的AndroidManifest.xml中配置android:networkSecurityConfig,允许信任用户证书

        <network-security-config><base-config><trust-anchors><certificates src="system" /><certificates src="user" /> <!-- 允许用户证书 --></trust-anchors></base-config>
        </network-security-config
        
    • 方法2:降级系统或应用

      • 将测试设备的 Android 系统降级到 7.0 以下,或使用旧版本应用(targetSdkVersion < 24)。
    • 方法3:Root设备并安装为系统证书电脑端

      将 Fiddler 证书转换为系统证书(需 Root

      1. 将证书文件(如 FiddlerRoot.cer)重命名为 hash.0(使用 OpenSSL 生成哈希值)。

        # 第一步将其转化为pem格式
        openssl x509 -inform DER -in C:\Users\20504\Desktop\FiddlerRoot.cer -out C:\Users\20504\Desktop\FiddlerRoot.pem# 第二部,查看哈希值并命名文件
        openssl x509 -inform PEM -subject_hash_old -in C:\Users\c-book\Desktop\FiddlerRoot.pem
        
      2. 复制到 /system/etc/security/cacerts/ 目录。

        adb root  # 启动root
        adb remount  # 文件挂载
        adb push bbHBF_rPA.0 /system/etc/security/cacerts/   # 拉到指定目录 ,注意自己的文件地址
        
      3. 修改文件权限为 644

        adb shell chmod 644 system/etc/security/cacerts/bbHBF_rPA.0
        
    • 方法4: 手动安装证书Android端

      1. 在浏览器中输入http://ip:8888点击下载以【FiddlerRoot.crt格式的证书

        • ip是你本机中局域网地址,并不是公网ip

          # 可以通过windows 中ipconfig命令查询
          ipconfig
          
        • port:8888,是在fiddler中配置的连接端口
          请添加图片描述

      2. 点击进行安装即可----这一步是安装用户凭证此时已经是hash.0的格式了

      3. 将用户凭证转换成系统凭证【具有root权限的系统,或相似的功能

        用户凭证存放地址/data/mis/user/0/carcerts-added

        系统凭证存放地址/system/etc/security/cacerts/

        注意:可以通过MT管理器或其他具有root权限的文件管理工具,进行移动,将用户凭证移动系统凭证存放,应该也可以使用adb命令进行移动吧,我没有测试!

1.3.2证书的格式问题

  • 证书的格式
    • pem
    • cer :fiddler在windwos系统中,生成的是cer
    • crt :我们通过http:ip:prot,下载的格式crt

注意:1.3.1章节中,已经给正确的处理流程,本章节只进行格式之间的对比讲解

编码可读性跨平台包含内容
PEMBase64✔️证书/私钥/链
CERDER✔️仅证书
CRTPEM/DER混合✔️证书/链

假如我们将.cer进行安装,可能会出现证书编码异常的问题【可能,也可能出现正常的情况。自行测试】导致证书没办法进行解析。 由于cer并不存在证书链缺乏中间证书,也可能导致android验证失败

2.Fiddler证书生成的参数问题

以上内容正确处理的情况,还是出现安全证书出现的问题。请尝试以下方法!

修改注册表项 ReverseProxyForPort 并设置为 Fiddler 的监听端口(如 8888)的核心原理是强制 Fiddler 正确配置反向代理端口,从而解决因代理端口与证书绑定不匹配导致的 HTTPS 抓包异常问题。

问题原因:

  • 默认情况下,fiddler通过监控端口(8888)接受客户端的请求

  • 当Fiddler作为方向代理时,它需要将请求转发到目标服务器的实际端口(443或80)但某些情况下,端口转发逻辑可能未正确绑定到证书生成机制

正确流程:

  1. 运行命令行,打开注册表信息

    请添加图片描述

  2. 找到注册表信息

    • 路径可以参考:计算机\HKEY_CURRENT_USER\Software\Microsoft\Fiddler2
  3. 添加一个ReverseProxyForPort值为8888

  4. 然后按照证书安装的路径重新安装一遍

效果:

  • 强制Fiddler在生成动态证书时,将端口信息包含在SAN上
  • 确保客户端验证证书时,检测到端口与证书声明的端口一致
  • 解决因端口不匹配导致的ERR_CERT_COMMON_NAME_INVALID 或类似错误。

3.APP中SSL Pinning技术

现象:即使你已经正确的安装好了证书,且能够抓取的手机端中浏览器的HTTPS,你也可能会遇到某些APP中无法进行联网的情况,或者只能抓取某个App中http的情况,你是无法抓取HTTPS协议的。

问题原因:

  • SSL Pinning
    • 部分应用可能采用更严格的证书检验逻辑,如使用非标准网络库(如OkHttp3、Conscrypt)或原生代码(Native Code)实现证书绑定强制APP仅信任特定的证书
    • 导致Fiddler作为中间攻击者,即使你具有Fiddler的证书,APP也会拒绝信任,导致抓包失败

解决方法:

  • 绕过SSL Pinning(使用工具Lsposed+JustTrustME 需要安装面具

  • 修改SSL Pinning的逻辑

  • 使用全局代理

3.1 绕过SSL Pinning的方法

​ JustTrustMe工具,绕过证书固定的方法,它是针对Android的Xposed模块(或通过Magisk模块实现),通过修改系统的SSL/TLS 验证逻辑,强制APP 信任用户安装的证书,从而绕过APP自身的证书固定机制

3.1.1 JustTrustme的核心作用

  1. Hook SSL 验证逻辑
    拦截 Android 系统中关键的 SSL 验证类(如 TrustManagerImplOkHttpX509TrustManager 等),强制让 App 信任所有证书,包括用户安装的抓包证书。
  2. 覆盖常见网络库的验证
    支持多种网络库(如 OkHttpRetrofitApache HttpClient 等),确保不同技术栈的 App 都能被绕过证书固定。

3.1.2 局限性

  • 依赖 Root 和 Xposed 环境

    • Android 设备需解锁 Bootloader、Root,并安装 Xposed 框架或 Magisk(通过 LSPosed 模块加载)。
    • 部分新版本 Android 系统(如 Android 13+)可能兼容性较差。
  • 无法绕过所有证书固定

    • 如果App使用标准证书固定(如Native代码实现、自定义加密库),可能需要其他的工具(Frida)辅助

    • **优化策略:**可以添加多个类似的功能:SSLUnpinningTrustMeAlread

  • 安全风险

    • 强制信任所有证书会降低设备安全性,仅建议在测试环境使用

3.1.3 增加绕过 SSL Pinning的方法

  • Frida:一个动态代码插桩框架,通过注入JavaScript 或 Python 脚本到目标进程中,实现对运行时行为的监控和修改。

    • 进程注入:通过frida-server在设备中运行,与客户端PC通信,将代码注入目标应用进程
    • 动态Hook:劫持目标函数调用,拦截参数、返回值或修改逻辑。Hook网络库的证书验证方法,强制信任中间人证书
  • Objection基于Frida的集成工具,封装了常见的逆向任务,通过命令行提供“无代码”操作体验

    • 自动化Hook:预置脚本覆盖了主流网络库(Android的TrustManagerImpl,iOS的NSURLSession),通过Android sslpinning disable等命令一键禁用证书绑定

    • 内存漫游:支持快速搜搜哦内存中的类、方法、实例,并直接调用或修改

    • 环境模拟:模拟越狱/root环境,绕过应用对设备状态的检测

  • 典型操作流程

    • 环境配置

      • 安装Frida Server到设备并启动
      • 通过objection -g <包名> explore 注入目标应用。
    • 绕过 SSL Pinning

      • 执行 android sslpinning disableios sslpinning disable,Objection 自动 Hook 常见校验函数(如 TrustManager
    • 动态调试:(内存数据分析,可选)

      • 使用 android hooking watch class_method 监控方法调用参数和返回值910。
      • 通过 memory dump 导出内存数据进行分析
  • 处理复杂的SSL Pinning

    • 非标准网络库:若应用使用自定义网络库或 Native 代码(如 OpenSSL),需手动编写 Frida 脚本 Hook 底层函数(如 SSL_CTX_set_cert_verify_callback
    • 双向认证(mTLS):需提取客户端证书并配置到抓包工具(如 Charles)
      • HTTPS协议本身是支持双向认真的,既除了客户端对服务器证书进行验证外,服务器也可以要求客户端提供自己的证书信息并对其进行验证,在APP上,HTTPS双向认真的方案也可以防止中间人劫持,但这种双向认证开销较大,且安全性与”ssl pinning”一致,因此目前大多数APP都采用SSL Pinning这种方案

3.2 修改SSL Pinning的固定逻辑【逆向基础】

通过修改 **libsscronet.so**中的函数逻辑,实现SSl Pinning的绕过方法

  • libsscronet.so是Chromium网络库的一部分,用于处理网络请求,包括SSL/TLS。

  • .so 文件是动态链接库,包含编译后的机器码。通过逆向工具(如 IDA Pro、Ghidra)可分析其函数逻辑,并直接修改二进制指令以绕过证书验证

3.2.1 文件存放的位置

  • 在APK包中,我们可以拉到电脑端上的桌面以解压工具,进行打开可以查看APP结构
  • 路径
    • 一般在Lib下的armebo-v72 (32位架构)/arm64-v8a(64位架构)

3.2.2 修改逻辑的步骤

  • 反编译APK:使用 apktool 解压 APK,提取 libsscronet.so

    apktool d target.apk -o output_dir
    
  • 使用IDA Pro/Ghidra 分析

    • 加载 libsscronet.so 到逆向工具中,分析关键函数:
      • 证书验证函数:如 ssl_crypto_x509_session_verify_cert_chain(Chromium 中验证证书链的核心函数)。
      • SSL 初始化函数:如 SSL_CTX_set_cert_verify_callback(设置证书验证回调)。
    • 搜索特征字符串:例如 pinning failurecertificate verify failed,快速定位错误提示逻辑。
  • 修改逻辑:目标:通过修改二进制指令强制跳过证书。(自行分析)

    • 使用IDA的Patch 功能:直接修改二进制指令,生成新的.so文件
    • 注意:随着App迭代的升级,相对应的逻辑结构也会自动的更新,这东西具有时效性。
  • 重新打包与测试

    • 替换修改后的.so文件:将修改后的 libsscronet.so 放回 APK 的对应架构目录中

    • 重打包并签名

      apktool b output_dir -o modified.apk
      jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your.keystore modified.apk alias_name
      
    • 安装测试:安装修改后的 APK,使用抓包工具(如 Fiddler)验证 HTTPS 请求是否可捕获。

3.2.3 替代方案

  • 动态 Hook(推荐)
    使用 Frida 直接 Hook libsscronet.so 中的证书验证函数,无需修改二进制文件。例如:

    // Frida 脚本示例(Hook SSL 验证函数)
    Interceptor.attach(Module.findExportByName("libsscronet.so", "ssl_crypto_x509_session_verify_cert_chain"), {onLeave: function(retval) {retval.replace(0x1); // 强制返回验证成功}
    });
    
  • 优点:无需反编译、适配多架构,适合加固或混淆的 App。

4.Drony流量转发

【软件不进行介绍了】:原理应该是在手机上设置一个代理,将APP的所有请求都转发到抓包工具上【强行使APP走代理】,这样就可以抓取HTTPS请求了。

教程可以去搜索,最近帮助复习就不进行讲解了。

相关文章:

  • 混淆矩阵(Confusion Matrix);归一化混淆矩阵(Confusion Matrix Normalized)
  • 《AI大模型应知应会100篇》【精华】第40篇:长文本处理技巧:克服大模型的上下文长度限制
  • 制作一款打飞机游戏33:碰撞体编辑
  • 推荐系统实验指标置信度:p值核心原理与工程应用指南
  • 李录谈卖出股票的时机:价值投资的动态决策框架
  • centos6.7安装完python3 找不到python3命令
  • DES与AES算法深度解析:原理、流程与实现细节
  • 【Yolo精读+实践+魔改系列】Yolov2论文超详细精讲(翻译+笔记)
  • 深度学习·经典模型·SwinTransformer
  • C语言教程(二十三):C 语言强制类型转换详解
  • C++核心编程 1.2 程序运行后
  • 【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (上篇)(⭐️⭐️⭐️ 重点章节!!!)
  • 什么是缓冲区溢出?NGINX是如何防止缓冲区溢出攻击的?
  • LangChain4j +DeepSeek大模型应用开发——5 持久化聊天记忆 Persistence
  • Linux 命名管道+日志
  • 微信小程序开发,购物商城实现
  • 阿里通义Qwen3:双引擎混合推理,119语言破局全球AI竞赛
  • Golang 并发编程
  • 厚铜PCB钻孔工艺全解析:从参数设置到孔壁质量的关键控制点
  • Sql刷题日志(day7)
  • 全文丨中华人民共和国民营经济促进法
  • 新片|《我仍在此》定档5月,《新·驯龙高手》同步北美上映
  • 15世纪以来中国文化如何向欧洲传播?《东学西传文献集成初编》发布
  • 三位成功女性,如何应对失败
  • 挤占学生伙食费、公务考察到景区旅游……青岛通报5起违规典型问题
  • 国家卫健委:工作相关肌肉骨骼疾病、精神和行为障碍成职业健康新挑战