App抓包问题总结及相关解决方案

文章目录

  • App抓包问题总结及相关解决方案
    • 前言
    • 1 抓包工具的选择
    • 2 常见问题解决
      • 2.1 App正常运行,但是抓包工具中没有对应的请求记录
        • 2.1.1 非HTTP/HTTPS协议进行网络通信
        • 2.1.2 无代理模式
      • 2.2 App部分正常运行或不能正常运行,抓包工具中对应的请求记录标记为失败,且报网络错误
      • 2.3 App不能正常运行,报请求失败或网络错误
        • 2.3.1 单向认证(SSL pinning)
        • 2.3.2 双向认证
    • 3 总结

前言

本文主要用于介绍我们在常规App抓包过程中遇到的各种问题以及解决方案

1 抓包工具的选择

现阶段关于App抓包使用的较多的软件有以下两个:

  • Fiddler

    下载地址

    使用教程

  • Charles

    下载地址

    使用教程

2 常见问题解决

在App抓包过程中常见有以下几类问题:

1.App正常运行,但是抓包工具中没有对应的请求记录
2.App部分正常运行或不能正常运行,抓包工具中对应的请求记录标记为失败,且报网络错误
3.App不能正常运行,报请求失败或网络错误

下面来对这些问题进行一一解决。

2.1 App正常运行,但是抓包工具中没有对应的请求记录

这个问题有两种可能性:

1、该App不使用传统Http/https协议进行网络通信,而使用一些底层协议或自定义协议进行网络通信,因此抓不到包,目前常见的有QUIC和Spdy协议。
2、App运行于无代理模式,因此我们的抓包代理抓不到数据包。

2.1.1 非HTTP/HTTPS协议进行网络通信

分析

我们常规抓包工具的原理是设置一个代理服务,然后手机里的http这类底层库主动识别到了系统代理的变化,然后主动去连接的代理服务器,后面的请求都会直接发往代理服务器。但是在非HTTP/HTTPS协议场景下,其会无视系统代理的设置。

解决方案

目前遇到这种情况,一般是使用App自带属性,我们关闭其相关底层协议的功能,让其强行走Http/Https协议进行网络通信。

参考:https://bbs.pediy.com/thread-267274.htm

2.1.2 无代理模式

分析

在App开发过程中,开发人员通过配置,让当前App运行于无代理模式,常见的Okhttp设置代码如下:

在无代理模式下任何请求都不会走代理,而我们的抓包软件原理又是通过设置代理来对数据请求进行抓取的,因此不能够在抓包软件上看到对应的请求记录。

解决方案
现阶段我们用的较多的是通过安装Drony应用来解决这一问题
Drony下载地址
使用也非常简单,方法如下:

1、打开Drony,并右滑至SETTING标签页,选择Networks,点击当前在用的wifi名,进入Network details设置页
2、点击Proxy type,选择manual(手动)
3、点击Hostname,输入当前电脑的局域网IP,比如192.168.1.123
4、点击Port,输入抓包软件的端口号,比如8888
5、点击Filter default value,选择Direct all
6、点击Rules,进入Rules详情页,点击右上角的加号,进入Add filter rule,action选择Local proxy chain,Application选择需要抓包的应用,然后保存,返回主页
7、左滑到LOG标签页,点击底部到OFF按钮,启用Drony,同时确保Drony进程在后台不会被杀掉

2.2 App部分正常运行或不能正常运行,抓包工具中对应的请求记录标记为失败,且报网络错误

问题分析

这一问题多在安卓7.0及以上版本手机抓Https包时出现,这主要是因为手机安卓7.0及以上版本我们抓包软件安装在手机上的证书不被系统层面所信任

解决方案

解决方法也比较简单,只需要把抓包软件安装在手机的证书从用户层面提升到系统层面即可,相关教程如下:

https://blog.csdn.net/weixin_43900244/article/details/111909176

2.3 App不能正常运行,报请求失败或网络错误

这个问题在对如今主流App分析中都会遇到,主要也是出现在对Https请求进行抓取的过程中,多是由于Https证书校验不通过所导致的。这里与上一点可能会有重叠的情况,因此如果出现该情况首要就是把系统级证书装好。下面先对Https证书校验进行一个简单的介绍。

Https请求介绍

首先看一下Https请求的建立过程:


看完这个图,整理一下逻辑:

单向认证: 核心在于客户端要对服务端证书进行校验,客户端使用服务端公钥加密通讯密钥,该通讯密钥用于后续的数据来往。

双向验证: 核心在于客户端要对服务端证书进行校验,且服务端也要对客户端证书进行校验,客户端使用服务端公钥加密通讯密钥,服务端使用客户端公钥加密所选的对称加密方法,使其更为安全。

上面所写的单向认证和双向认证都会导致App不能正常运行,报请求失败或网络错误的问题,下面首先来说一下单向认证。

2.3.1 单向认证(SSL pinning)

上面介绍到,单向认证其本质就是客户端存在对服务端证书的校验逻辑,而关于单向认证的具体实现又分为以下两种情况:

  • 证书锁定(Certificate Pinning)

    需要在客户端代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此客户端与服务端(例如API网关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,缺点是证书续期后需要重新内置到APP中

  • 公钥锁定(Public Key Pinning)

    提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性。制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题,一般推荐这种做法。

解决单向认证主要有以下两种方法:

找到证书校验的代码逻辑,对相关校验代码逻辑进行覆盖或者修改(非root)

关于如何找到证书校验的代码逻辑,大概有两种方法:

  • 使用logcat查看相关报错日志追踪
  • 反编译APP对APP进行关键字全局搜索如:checkServerTrusted、verify等。

对于相关校验代码逻辑的覆盖或修改,大概有两种方法:

  • 反编译App修改其源代码(一般为smali代码),修改完毕重打包运行(但是可能会存在App打包证书校验问题导致App无法运行)
  • 使用Xposed对关键方法进行拦截修改

Xposed框架+JustTrustMe 绕过(root)

Xposed(Xposed安装)

Xposed框架是一款开源框架,其功能是可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed 就好比是 Google 模块化手机的主体,只是一个框架的存在,在添加其他功能模块(Modules)之前,发挥不了什么作用,但是没了它也不行。也正因为如此,Xposed 具有比较高的可定制化程度。Moto X 用户可定制手机的外观、壁纸、开机动画等,Xposed 则允许用户自选模块对手机功能进行自定义扩充。

JustTrustMe(JustTrustMe模块下载)

JustTrustMe 一个用来禁用、绕过 SSL 证书检查的基于 Xposed 模块。简单来说,JustTrustMe 是将 APK 中所有用于校验 SSL 证书的 API 都进行了 Hook,从而绕过证书检查。``

关于SSL pinning最后补充一下,目前大部分APP的校验都放在Java层,但是现在有少数校验放在Native层校验的,这种情况下需要去进行so文件的动态调试来查找出校验的方法,然后进行方法拦截修改或者直接修改ARM代码,因此遇到Native层做SSL pinning的解决起来会十分麻烦!有兴趣可以去了解下flutter的证书校验。

2.3.2 双向认证

关于双向认证主要卡住的地方是服务端校验客户端证书出现问题,解决方案有两个思路:

1、查找.p12证书文件以及相关的证书密码, 然后把该证书安装到抓包工具中即可。
2、App运行时如果使用到双向认证则必定有打开打开证书的过程,打开证书会调用相关的方法,我们直接hook这些方法拿到证书并且保存到我们的本地文件中,然后安装到抓包工具中即可。

将证书文件装入抓包工具

1、找到client.p12文件

对于client.p12文件,我们直接解压Apk文件,然后在assets文件夹中直接拿就可以了

2、找证书密码

对于证书密码查找,一般是直接使用jadx等工具查看Apk源码,然后全局搜索client.p12、PKCS12、client.cer等等关于证书验证的关键字,然后查看这些关键字的调用情况,找到加载证书时用到的密码。

3、使用.p12证书文件和上一步找到的密码将证书安装到抓包工具中

证书Dump

主要是通过hook KeyStore来获取相关证书,hook可以使用xposed也可以使用frida

详情可以参考http://91fans.com.cn/post/socialsignone/

3 总结

最后总结一下,在抓包过程中会遇到很多奇奇怪怪的问题,上面罗列的可能只是比较典型的几种情况,现在大的趋势是基于UDP来自定义通信协议,以后抓包只会更难。

参考文章:
https://www.cnblogs.com/woaixuexi9999/p/9247705.html
https://www.cnblogs.com/hongyankuang/p/9961284.html
https://bbs.pediy.com/thread-267274.htm
https://blog.csdn.net/weixin_43900244/article/details/111909176
https://www.cr173.com/soft/170920.html
https://www.jianshu.com/p/ada10d2976f2
http://91fans.com.cn/post/socialsignone/

手机APP抓包问题总结及相关解决方案相关推荐

  1. (实战项目一)手机App抓包爬虫

    手机App抓包爬虫 1. items.py class DouyuspiderItem(scrapy.Item):name = scrapy.Field()# 存储照片的名字imagesUrls = ...

  2. 常用工具(一)——安卓手机app抓包burpsuite

    手机app抓包 工具:burpsuite 前提条件 1.保证手机与电脑在同一个无线局域网下 2.找到手机网络位置>打开详情>打开代理选择手动>主机名设为电脑IP(如图) 3.burp ...

  3. 使用Fiddler对手机APP抓包详细教程

    使用Fiddler对手机APP抓包详细教程 在实现用Fiddler对手机APP抓包过程中遇到了两个很棘手的问题,一个是设置代理后手机就上不了网,在手机上下载证书一直提示下载失败,第二个就是在fiddl ...

  4. Fiddler 网页采集抓包利器__手机app抓包

    用curl技术开发了一个微信文章聚合类产品,把抓取到的数据转换成json格式,并在android端调用json数据接口加以显示: 基于weiphp做了一个掌上头条插件,也是用的网页采集技术:和一个创业 ...

  5. 爬虫之手机APP抓包教程-亲测HTTP和HTTPS均可实现

    当下很多网站都有做自己的APP端产品,一个优秀的爬虫工程师,必须能够绕过难爬取点而取捷径,这是皆大欢喜的.但是在网上收罗和查阅了无数文档和资料,本人亲测无数次,均不能正常获取HTTPS数据,究其原因是 ...

  6. 使用Fiddler实现手机APP抓包

    手机上无法直接查看网络请求数据,需要使用抓包工具.Fiddler是一个免费的web调试代理,可以用它实现记录.查看和调试手机终端和远程服务器之间的http/https通信. fiddler没有手机客户 ...

  7. 在电脑上实现手机app抓包

    首先下载一个手机模拟器 个人推荐 逍遥安卓这个模拟器 下载手机抓包工具packet capture 下载地址 https://pan.baidu.com/s/1GUl2XfGzLx-CgcS4rskd ...

  8. charles抓app包教程_charles关于手机APP抓包

    这里相比其他抓包软件来说要简单的多了,具体步骤如下: 1 使手机和电脑在一个局域网内,不一定非要是一个ip段,只要是同一个漏油器下就可以了,比如电脑连接的有线网ip为192.168.16.12,然后手 ...

  9. 使用Fiddler对手机App抓包

    一.Fiddler配置 1.配置fiddler允许监听到https:(fiddler默认只抓取http格式的) 点击Tools>Options 选择HTTPS栏,勾选Capture HTTPS ...

最新文章

  1. 也谈ORACLE备份与恢复
  2. 搜狐被SEC列入“预摘牌名单”!回应:不打算提出异议
  3. Linux设备驱动模型之platform(平台)总线详解
  4. 为VS2010添加背景图
  5. SQL中char、varchar、nvarchar的区别
  6. linux 下PCIE控制器设备树 学习
  7. Oracle控制文件日志文件数据文件迁移
  8. VMware安装win10:需win10虚拟机专用镜像,不是真机装系统的ISO镜像
  9. linux 中文 文件名乱码,中文文件名乱码问题
  10. Oracle 查询重复字段
  11. vios support for power
  12. UE-战斗无止境的复刻
  13. 网络基础知识:10M、50M、100M宽带下载速率一般是多少?—Vecloud微云
  14. efi模式装linux双系统,超详细!Win10(UEFI启动模式)安装Ubuntu18.04双系统
  15. 专知 2019/4/24(图像填充方法大全)
  16. 分布式系统和分布式数据库系统(介绍篇)
  17. SpringBoot国际化配置
  18. spring boot 设置默认主页
  19. 立法禁食猫狗肉属本末倒置
  20. PoweShell Win_desktop install wsl

热门文章

  1. 外星人计算机组装配置方案,最好的电脑配置_2020年最强最牛的笔记本配置与组装电脑方案...
  2. DC-DC升压和降压电路电感参数选择详解
  3. 真的必须要在主线程更新UI吗?
  4. HTML制作宣传片,怎么制作视频宣传片 视频宣传片制作软件 照片制作成宣传视频,并添加相关文字说明...
  5. Vue 自定义消息通知组件
  6. 深度学习配置环境全攻略
  7. 手机相册怎么拼图?快来和我学习新方法
  8. nagios分布式监控中心服务器迁移(使用nsca)
  9. Excel解析easyexcel工具类
  10. bzoj1022 约翰的游戏 反SG-博弈