关于手机App的Https抓包

标签: Technical Https | 发表时间:2019-05-31 16:14 | 作者:老王
出处:https://blog.huoding.com

我喜欢用 Mitmproxy 来处理手机 App 抓包之类的工作,本来用它来抓 Https 包是很容易的一件事,只要设置好代理,浏览 mitm.it 按提示安装证书即可,可是当 Android 版本升级到 7 以后,此方法就失效了,为什么呢?因为新版 Android 缺省情况下只信任系统级证书,而不再信任用户级证书,问题详细描述可以参考: 听说安卓微信 7.0 不能抓 https?

普通的解决方法有很多,比如说用低版本的 Android 手机,或者干脆换个苹果手机。不过那些治标不治本的方法并不是本文关注的重点,本文我们主要聊聊如何通过 root 来解决问题,但是 root 本身是有风险的,所以下面有请重量级嘉宾 网易 MuMu 闪亮登场!它是一个有 root 权限的全功能 Android 模拟器。

mumu

mumu

网易 MuMu 使用起来很简单,不过你需要注意实际抓包的时候,你需要设置模拟器的网络连接走相应的代理,设置的方法是找到对应的网络连接「长按」即可:

网络连接

网络连接

因为我是用 Mitmproxy 来抓包的,所以要安装的也是 Mitmproxy 的证书。下面看看如何把 Mitmproxy 证书安装到网易 MuMu 里,记得安装相关工具,以 Mac 操作系统为例:

shell> brew install mitmproxy
shell> brew install Caskroom/cask/android-platform-tools

安装好工具之后,别忘了启动网易 MuMu,然后通过 android-platform-tools 中的 adb 命令来连接它,只需要简单执行「adb shell」即可,如果遇到连不上的情况,可以参考 文档。连接成功后,你可以在「/system/etc/security/cacerts/」目录看到现有的系统级证书:

证书

证书

换句话说,我们只要把 Mitmproxy 证书安装到这里即可。不过这些证书的文件名都是啥意思,实际上他们就是证书文件的散列值,那 Mitmproxy 证书在哪?如何计算它的散列值?其实当我们安装好 Mitmproxy 的时候,相应的证书就已经保存在「~/.mitmproxy」目录里了,下面看看如何计算证书的散列值:

shell> openssl x509 \
    -subject_hash_old \
    -inform PEM \
    -in ~/.mitmproxy/mitmproxy-ca-cert.pem | head -1

c8750f0d

接下来我们把 Mitmproxy 证书推送到模拟器系统证书所在目录:

shell> adb push \
    ~/.mitmproxy/mitmproxy-ca-cert.pem \
    /system/etc/security/cacerts/c8750f0d.0

最后在模拟器「设置 / 安全 / 信任的凭据 / 系统」里就能看到 Mitmproxy 证书了:

系统证书

系统证书

通过 root 安装系统证书可以解决大部分 Https 抓包问题,为什么是大部分?还有哪些特殊情况不能处理?答案是「 SSL Pinning」,它是为了应对中间人攻击而出现的一种技术,简单点说,就是证书被打包到 App 里,每次请求都会验证证书一致性。如此一来,虽然我们可以安装系统级证书,但是当 App 验证证书一致性的时候就失败了,如何突破此限制呢?答案很简单,你不是要验证一致性么,我统统返回 OK 不就行了!

为了达到 hack 的目的,我们需要安装 XposedJustTrustMe,其中 Xposed 是一个 hack 框架,JustTrustMe 是一个插件。 安装过程并不复杂,唯一需要说明的是,在安装 Xposed 之前,最好在网易 MuMu 中关闭兼容模式,路径「设置 / 应用兼容性 / 兼容模式」。

Xposed

Xposed

JustTrustMe

JustTrustMe

如果你认认真真从头看到尾,那么恭喜你,关于手机 App 的 Https 抓包,你已经是专家了,最后你摸着自己的良心扪心自问一下:是不是应该给作者一个大大的红包!

相关 [手机 app https] 推荐:

关于手机App的Https抓包

- - 火丁笔记
我喜欢用 Mitmproxy 来处理手机 App 抓包之类的工作,本来用它来抓 Https 包是很容易的一件事,只要设置好代理,浏览 mitm.it 按提示安装证书即可,可是当 Android 版本升级到 7 以后,此方法就失效了,为什么呢. 因为新版 Android 缺省情况下只信任系统级证书,而不再信任用户级证书,问题详细描述可以参考: 听说安卓微信 7.0 不能抓 https?.

手机抓包HTTPS

- -
之前也介绍过 Charles 抓包神器,详细可以看这篇文章: 抓包神器. 这个神器主要是解决在开发过程中快速定位异常,到底是界面展示 Bug 还是接口数据异常. 这样借助这个神器,基本上在开发过程中就能解决很多问题了. 学会手机抓包也能解决开发中很多问题,不仅如此,还能解锁去广告、白嫖 VIP 等骚操作.

Android dlib人脸识别 dlib-android-app: Android app to demo dlib-android(https://github.com/tzutalin/dlib-android). Use the prebuilt shared-lib built from dlib-android

- -

测试手机客户端HTTPS 你应该知道的事

- - CSDN博客移动开发推荐文章
手机客户端使用HTTPS注意点. HTTPS的主要思想是在不安全的网络上创建一安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的保护. HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(意即“我信任证书颁发机构告诉我应该信任的”). 因此,一个到某网站的HTTPS连接可被信任,需要满足下面的条件:.

创意手机APP汇总

- ArBing - 月光博客
  在知乎上有人讨论“如果由你来创意一个手机app,它是什么样的”,网友有很多有意思的想法,因为对移动互联网这一块很感兴趣,所以把网友们的想法汇总一下,一来通过整理的过程想想app实现的可能性和实现后的潜力,二来抛砖引玉,希望能引发网友更多的思考. 分析提取照片中人物的衣着,列出每项价格及其相关服装对比,支持在线购买.

https协议

- - 互联网 - ITeye博客
SSL 协议的握手过程   .       为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议. SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密. 这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容,公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.

Go和HTTPS

- - Tony Bai
近期在构思一个产品,考虑到安全性的原因,可能需要使用到 HTTPS协议以及双向数字证书校验. 之前只是粗浅接触过HTTP( 使用Golang开 发微信系列). 对HTTPS的了解则始于那次 自行搭建ngrok服务,在那个过程中照猫画虎地为服务端生成了一些私钥和证书,虽然结果是好 的:ngrok服务成功搭建起来了,但对HTTPS、数字证书等的基本原理并未求甚解.

Google https被屏蔽

- - 月光博客
  根据Google透明度报告 显示,从上周(5月27日)开始,Google的部分服务开始被屏蔽,其中最主要的是HTTPS搜索服务和Google登录服务,所有版本的Google都受到影响,包括Google.hk和Google.com等.   此次屏蔽的方法主要屏蔽Google部分IP地址的443端口,包括google.com.hk,accounts.google.com的部分IP的443端口被封,导致部分中国用户无法访问Google搜索和Gmail,由于Google的IP地址非常多,而被屏蔽的只是其中部分IP,因此只有部分用户受到了影响.

HTTPS的二三事

- - 细语呢喃
前几篇博文都是有关HTTPS的东西,有人可能会问,什么是HTTPS. 因此,本文主要来解答这些疑惑. Alice和Bob是情人,他们每周都要写信. Alice 写好后,送到邮局,邮局通过若干个快递员到Bob,Bob回信过程类似. 这是可以看成的简单的http的传输. 有一天,Alice觉得,要是写的信中途被人拆开了呢.

HTTPS劫持研究

- - FreeBuf互联网安全新媒体平台
这篇文章描述了我们对哈萨克斯坦政府实施的电信级HTTPS劫持的分析. 哈萨克斯坦政府最近开始使用一个假的根证书颁发机构,对包括Facebook,Twitter和Google等网站在内的HTTPS连接进行中间人(MitM)攻击,在此文中,我们给出了还在进行中的研究的初步结果,以及哈萨克劫持系统中新的技术细节.