传输层[TCP 层]拦截和 TLS 解密, 使用 mitmproxy 分析 iOS 和 Android 的 HTTP(S)协议

2020-11-25 10:11:41 +08:00
 thisismr2

[继上一个帖子: https://v2ex.com/t/726090 可以分析所有 TCP&UDP 协议]

这个只能分析 HTTP(S)协议, 也不用在众多协议中过滤了, 原理有异曲同工之处, 对只需要分析 HTTP(S)协议的同学可以关注下.

传输层拦截和设置系统代理的方式有什么区别

这里有位此 app 已购买者, 可以看这个帖子的 https://v2ex.com/t/727609 的 10 楼, 11 楼

另外 ios 使用了 Network Extension(会出现 vpen 标识)并不意味着就是 TCP 层拦截. Network Extension 有网络层 API, 传输层 API, 应用层 API 比如可以只用 Network Extension 设置系统代理. 这就算是[应用层], 本质同设置系统代理一样. 另外如果接管所有流量, 就需要用[网络层 API]处理 IP 包, 再加工成[传输层]的 TCP/UDP 包, 最后再给[应用层] 两种方式,工作量完全不在一别,抓包类 app,良心好的开发者会在介绍了里说明是工作在哪一层

视频

同样在我的 youtube 频道录了一个视频

https://www.youtube.com/watch?v=puES_ayJkEo

注意

可以加上--rawtcp 参数, 视频中没有加 $ mitmproxy -m socks5 --rawtcp

也有一个 mitmweb 命令, 会启动图形界面

下载地址

iOS(>=14) https://apps.apple.com/us/app/id1528537342

Android (>=8) https://play.google.com/store/apps/details?id=com.txthinking.mitmproxy

兑换码

兑换码发放: 每 10 楼, 按 1-10 的随机数抽一次奖, 比如 1-10 楼抽一次, 11-20 抽一次, 21-30 抽一次... 抽的结果会在帖子内截图. 用 google 随机数生成器抽. 被抽到的可以选择需要 iOS 或 Android 端其中的一个兑换码

google 随机数生成器长这个样子 https://i.imgur.com/WLrgWLr.png https://i.loli.net/2020/11/17/OwyukCsVGrUx8Jq.png

获得兑换码的 Google Play 同学, 烦请给个好评(不强制)

与人方便, 自己方便

mitmproxy 的根证书安装的时候是访问 http://mitm.it 这个链接, 而这个链接在他们国外服务器, 所以可能很慢很慢很慢很慢, 多刷下试试 网络是个复杂的东西, 所以针对我写的网络工具, 我都会录视频, 但使用者仍然可能忽略某个细节导致某个步骤遇到小问题, 这时候如果你是已购买者, 我很愿意在 slack 回答你的一些问题, 请不要一气之下就给个差评(你看 iOS 就有个 Leigingban 同学给差评了, 就一句话: 完全不能工作). 另外如果你对 HTTP, HTTPS, TCP, TLS, MITM, mitmproxy, ROOT CA 这些概念不太熟, 也建议三思后再决定下载与否

https://docs.google.com/forms/d/e/1FAIpQLSdzMwPtDue3QoezXSKfhW88BXp57wkbDXnLaqokJqLeSWP9vQ/viewform

为了群组的质量, 使用了 slack 和申请机制.

谢谢大家

5375 次点击
所在节点    分享创造
149 条回复
cwyalpha
2020-11-25 10:18:41 +08:00
谢谢楼主,另外想问问有没有什么能解决 ssl pin 的方案
cwyalpha
2020-11-25 10:29:50 +08:00
另外问一下,这个和 ios 的 stream 有什么区别?不考虑 ssl pin 的话,会存在 stream 抓不到,这个能抓到的情况吗
thisismr2
2020-11-25 10:33:18 +08:00
@cwyalpha #1 Android 的话我会配合 xposed
thisismr2
2020-11-25 10:42:20 +08:00
@cwyalpha #2
我不了解 stream, 如果它是工作在应用层的话. 那么的确会有抓不到的情况.
而这里是工作在传输层(TCP 层), 所以自然都能抓到, 然后就是如果是 HTTPS, 会尝试 TLS 解密 (对于 TLS 的相关原理我就不打字了, 太多内容, 感兴趣的话大家可以搜下)
thisismr2
2020-11-25 11:02:48 +08:00
@cwyalpha 我简单写个数据包流向

[物理层] -> [网络层(就是 IPv4 或 IPv6 包)] -> [传输层(就是 TCP/UDP 包)] -> [应用层(HTTP 协议等)]

目前大部分抓包软件都工作在[应用层](上图中的最后一个环节), 比如通过让你手动设置系统代理 或 通过 iOS 的 NetworkExtension 和 Android 的 Builder 自动设置系统代理, 两种设置系统代理本质一样. 系统代理是一个尊重但不强制的东西. 所以自然就很多应用不尊重那么就抓不到了

而这个 app 是工作在[网络层](上图中的第二个环节), 什么意思呢, 即会接管所有的 IP 包(0.0.0.0/0), 然后加工成 TCP/UDP 包到传输层, 然后再将 TCP 包加工后给 mitmproxy, 同时将 UDP 包丢弃(因为 mitmproxy 不能分析 UDP)
MrWhite
2020-11-25 11:05:24 +08:00
上次没中,这次中个奖看看?
crab
2020-11-25 11:09:20 +08:00
iOS 上用 stream app 可以正常抓包。现在不知道什么原因用 Wireshark Helper 弄出来的代理直接导致 iOS 网络连不上了。
thisismr2
2020-11-25 11:12:26 +08:00
@crab 不要混着用啊, 各家的 app 设计原理都不一样的
crab
2020-11-25 11:18:50 +08:00
@thisismr2 没同时用。设置按你视频操作操作,iOS 上 vpn 图标也有,虽然 Wireshark 那边可以看到有 iOS 数据进来,但 iOS 上的网络请求没办法得到响应。
thisismr2
2020-11-25 11:24:44 +08:00
@crab 估计根证书没信任彻底吧
thisismr2
2020-11-25 11:27:37 +08:00
还有“但 iOS 上的网络请求没办法得到响应“ 可以展开, 比如访问 https://www.baidu.com 提示页面会出现错误, 错误描述是:xxx
gogo88
2020-11-25 11:28:11 +08:00
可以弃用其它抓包 App 了,厉害👍
qq2511296
2020-11-25 11:28:32 +08:00
试试 看看能中不
ben0629
2020-11-25 11:31:58 +08:00
上次没中,这次再来试试
NFC
2020-11-25 11:37:17 +08:00
感觉你这个更强大啊。
adminii
2020-11-25 11:44:25 +08:00
难道是抓包工具?拉低中奖率
VHacker1989
2020-11-25 11:52:29 +08:00
拿开源的项目来卖钱真的好吗
VHacker1989
2020-11-25 11:53:39 +08:00
稍微有点动手能力,整合一下开源工具都不会用这玩意
xiaocsl
2020-11-25 11:58:58 +08:00
抽一个...
thisismr2
2020-11-25 12:01:28 +08:00
@crab 还有, 你看下那个帖子最后一个 append 的内容

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728980

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX