一直比较习惯命令行的工具, 所以一直在用 mitmproxy 抓包
通过设置系统代理的方式, 有些 APP 会无视系统代理(APP 开发人员一行代码就可以). 所以自然导致无法抓取那些不走系统代理的 APP
所以写了这个 client 配合 mitmproxy 使用, 原理不是设置系统代理. 而是从网卡级**系统 Transport 层(TCP)**接管流量然后给 mitmproxy, 所以也能抓那些跳过系统代理的 APP.
一直喜欢自己写的东西都使用都很简单. 一条命令一个按钮之类的. 但是大家都知道解密 TLS 需要安装根证书. 这个 iOS 和 Android 有很大差别, 而且不同的系统版本也有很大差别, 而且有时安装完 CA, 可能 APP 需要重启才生效. 很多细节吧. 所以如果没研究过的同学这个步骤可能大家需要 google 下.. 而且 Android 新版本好像还区分 User CA 和 System CA, 而安装为 System CA 需要 root, 抓包需求比较多的话还是建议大家单独准备个 root 了的开发机.
所以昨天录了一个视频放在 youtube 上了, (第一次弄录屏视频, 不太专业, 就是用自带的录屏软件录了就传上去了, 多担待):
https://www.youtube.com/watch?v=puES_ayJkEo
下面是 AppStore 和 Google Play 的链接, 分别都设了个$4.99 的价格, 没有内购(商店如果展示 App 含内购, 估计是我引入了内购 SDK 忘了移除了). 因为不可抗因素, 苹果说使用了一些技术不让在大陆区 AppStore 上架, 所以 iOS 同学需要非大陆 AppleID 下载
iOS(>=14) https://apps.apple.com/us/app/id1528537342
Android (>=8) https://play.google.com/store/apps/details?id=com.txthinking.mitmproxy
如果感觉这个应用能给你帮助的话, 这里针对 iOS 和 Android 分别准备了 20 个兑换码.
领取规则:
这里想请大家帮个忙. 刚申请了 Stripe 支付, 需要 20 笔交易, 来过他们判定规则, 所以我随便 fork 了个查看 IP 的 chrome 扩展(Apache Licence 2.0)加上了国家信息, 收费$1. 想用来攒够 20 笔交易.
https://chrome.google.com/webstore/detail/ipvbar/copjmgogifdfjkaenpallapiidcpkjbm
我收到支付信息后, 会往你的 Email 里发送两个兑换码: 一个 iOS 兑换码和一个 Android 兑换码. 共 20 个人吧. 如果有问题或没收到可以下面 @我.
(那个$1 是月订阅制, 如果你支付了, 建议不要那么快手动结束订阅, 可以在下一个扣费日的前几天停止订阅, 或者方便的话可以支付 2 刀后手动结束订阅 [是结束订阅, 可别申请退款哈], 因为不太了解 Stripe 的判定机制, 所以先谢谢大家)
刚看到stripe文档. 支持中国银联信用卡
1
thisismr2 OP 看来用 mitmproxy 抓包的同学还是不太多吧
|
2
xionger 2020-10-16 10:28:05 +08:00
大神又出新东西了, 可惜我不会用 mitmproxy. 偶尔会用下 Charles 抓包. 哈哈前端抓包需求不多
BTW(不过我用大神的 Brook) |
3
thisismr2 OP @xionger 不敢当. 嗯 Charles 设置系统代理方式. 是否使用系统代理 app 可以自己选择的. 忽略系统代理的就抓不到了.
(BTW) 能帮助到你就好 :) 另外 mimtproxy 有 web 界面好像, 前端可以试试呀 |
4
thisismr2 OP 收到一个提醒, 我要去发兑换码了. 嘻嘻
|
5
thisismr2 OP 邮箱 l 开头的同学, 兑换码已发送. (第一次生成 ios 和 android 兑换码, 如果我姿势不正确, 提醒我下哈)
|
6
xionger 2020-10-16 10:57:35 +08:00
我的邮箱 s 开头, 不过我给不给兑换码都行, 我还不会用 mitmproxy. 得空了研究下这个东西, 好像挺牛逼的.
不过 我发现就单说这个 chrome 扩展就很带劲啊, 值了 |
9
zjb861107 2020-10-16 11:33:16 +08:00
> 从网卡级**系统 Transport 层(TCP)**接管流量
这个是怎么工作的,iOS 允许任意 app 在后台接管流量么 |
10
thisismr2 OP @xionger stripe 的文档里 demo copy 过来的. 也可以说算是 stripe(文档里)自带的吧.
|
12
Biebe 2020-10-16 12:24:18 +08:00 via iPhone
不 root 可以抓只信任系统证书的 app 吗
|
13
yushiro 2020-10-16 12:51:52 +08:00 via iPhone
ios 上用 network extension 的 app 一堆吧~
|
14
thisismr2 OP @Biebe 这个应该是 android 系统级别的隔离. 原本 android 和 ios 一样, 安装一个 root ca 到系统里就行了. 系统就会当成一个 root ca. 后来 android 区分了两个 system ca store 和 user ca store
|
15
xionger 2020-10-16 13:09:22 +08:00
Android 开发的话 root 了应该啥都能干了
|
16
thisismr2 OP @Biebe 但不代表全部都不行. 总之感觉 root 后抓的踏实. android 的同事是专门用了一个老的 root 了的 Nexus6 当开发机和转包. 我平常是用 ios 抓.
|
17
thisismr2 OP @yushiro
Network Extension 有网络层 API, 传输层 API, 应用层 API 比如可以只用 Network Extension 设置系统代理(仍然会显示 V 批 N 标示). 这就算是[应用层], 本质同[设置 app]设置系统代理一样. 另外如果接管所有流量, 就需要用 [网络层 API] 处理 IP 包, 再加工成 [传输层]的 TCP/UDP 包, 最后再给[应用层] 抓包类 app, 良心好的开发者会在他们 app 介绍了里说明 是哪一层. 比如这个就说明了 https://i.loli.net/2020/10/16/tU7WfrBHeoPLIlT.png |
18
xionger 2020-10-16 13:38:02 +08:00
帮补图 ![img]( https://i.loli.net/2020/10/16/tU7WfrBHeoPLIlT.png)
|
19
thisismr2 OP 接 #17
谢谢 我还是补文字吧 “请务必阅读以下简介: Thor 并非万能,只工作在系统 HTTP 层: **不支持**非 HTTP 流量(TCP, UDP)及**不经过系统 HTTP 代理的流量**” |
20
yushiro 2020-10-16 14:24:39 +08:00 via iPhone
嗯,没注意过三个层面的 api 区别。
常用的几个留学软件也都支持 mitm,就是不解决 ssl pin ~ |
21
thisismr2 OP 邮箱 j 开头的 gmail 同学. 兑换码已发送.
|
22
xionger 2020-10-16 15:19:59 +08:00
$ mitmweb -m socks5
![image.png]( https://i.loli.net/2020/10/16/75zkwXmZhx1DStP.png) 学了下 mitmproxy, 发现有个 mitmweb 命令也可以, 有图形界面 但是 mitmweb 命令会输出很多东西, 超出我的理解能力范围了 @thisismr2 |
23
thisismr2 OP 我尽量系统的解释下抓包的各种情况.
## 首先是拦截流量, 两种情况 * 第一种是配置系统代理 这种方式呢通常是创建一个 http proxy, 然后配置到系统代理上, 如果 app 选择走系统代理(大部分会走, 但是 app 不走系统代理也是开发人员一行代码的事). 所以这种方式有一定的局限性. 不走的就是直连了. * 第二种是拦截所有 TCP 和 UDP 流量 这是 mitmproxy client 选择的方式, 这种方式的好处是所有流量都能够拦截, 开发人员无视系统代理也没用(因为不工作在系统代理那块). 这里拦截了所有的 TCP 和 UDP 流量(这里刻意排除了 DNS 流量)给 mitmproxy 坏处是 mitmproxy 只能处理 http 和 https 流量, 所以如果某个 app 走的私有 TCP 协议, 那么这部分流量 mitmproxy 就无法处理了, 可能 app 就显示无法连接之类的. 当然介于当前讨论的主题也是 HTTP 和 HTTPS 抓包, 可以理解. (这种情况如果 mitmproxy 后期可以将非 HTTP(S)协议的代理请求也正常处理哪怕不分析包 就更好了) ## 关于(SSL)TLS 和 单独对称加密的数据 解密 TLS 的原理就是中间人劫持, 所以需要那个根证书. TLS 又分单向和双向认证 单向认证: 通常 https 的网站啊接口什么的都是单向认证, 所以可以我们用根证书辅助来拦截, 可以正常解包. 双向认证: 也就是服务端会验证客户端的证书, 所以这种是无法解密的(不好理解, 可以理解下面要描述的情况) 单独对称加密: 可以理解为服务端和客户端约定一个密钥, 客户端将密钥编译进代码里. 这种情况, 只有你知道编译进代码里的密钥你才能解密. 所以根证书也是无能为力的. |
24
xionger 2020-10-16 16:24:32 +08:00
感谢感谢. 我也就抓抓同事的 RN 应用. 学习的道路任重而道远啊
|
25
zy445566 2020-10-16 16:29:55 +08:00
其实还可以修改开发的请求地址到代理服务请求抓包也挺方便的
https://github.com/zy445566/before-server |
26
zy445566 2020-10-16 16:30:49 +08:00
我公司已经用了一段时间的 before-server,效果还不错
|
27
xionger 2020-10-16 16:44:03 +08:00
楼上这完全不相干的东西. 这广告真恶心.
|
28
thisismr2 OP l 开头的 outlook 邮箱. 兑换码已发送.
|
29
thisismr2 OP **还有 16 对**
|
30
thisismr2 OP 如果没 append 发放完毕, 就代表还没发放完毕. 如果遇到边界情况导致不够会重新生成新的发放. 周末愉快.
|
31
playniuniu 2020-10-16 23:08:30 +08:00
老哥,付好了,pla 开头的 gmail 邮箱
|
32
playniuniu 2020-10-16 23:20:07 +08:00
@thisismr2 还有怎样才能取消订阅呢,没看到取消的按钮呢。到了一个月会自动取消吗?
|
33
thisismr2 OP @playniuniu 兑换码已发. (昨晚睡的早)
|
34
thisismr2 OP @playniuniu 我也第一次用这个支付方式. 怎么取消我得去搜搜, 搜到再回答
|
35
thisismr2 OP @playniuniu 好像在 stripe 发给你的邮件里?
|
36
playniuniu 2020-10-17 14:23:50 +08:00
@thisismr2 我看了一下邮件,里面只有收据,没有退订的按钮和链接
|
37
thisismr2 OP @playniuniu 好像还真是. 和 paypal 的逻辑不一样. 我研究下
|
38
thisismr2 OP |
39
fx0719 2020-10-17 16:09:42 +08:00 via iPhone
可惜手机还是 13
|
40
thisismr2 OP @playniuniu 给你发了邮件
|
42
coolzilj 2020-10-17 20:28:44 +08:00 via Android
想问为什么不直接用 mitmproxy 的 transparent mode,是这个比 -T 解决了更多的问题吗?
|
43
thisismr2 OP @coolzilj 其实目的是一样的. 其实就是 transparent, linux 和 bsd 和 mac 依赖的各不相同, iptables, doas, pf. 使用体验上. 如果对这几个工具非常熟还可以. 另外应该如果是 windows 应该就走不通了好像
|
45
thisismr2 OP 更正 #23 内容:
错误: “坏处是 mitmproxy 只能处理 http 和 https 流量, 所以如果某个 app 走的私有 TCP 协议, 那么这部分流量 mitmproxy 就无法处理了, 可能 app 就显示无法连接之类的. 当然介于当前讨论的主题也是 HTTP 和 HTTPS 抓包, 可以理解. (这种情况如果 mitmproxy 后期可以将非 HTTP(S)协议的代理请求也正常处理哪怕不分析包 就更好了)” 正确: mitmproxy 可以处理非 http 和 https 流量, 只需要加个 --rawtcp 即可 $ mitmproxy -m socks5 --rawtcp |
46
thisismr2 OP 目前 rawtcp 参数是 experimental 性质的
|
47
chenliang0571 2020-10-24 16:57:39 +08:00
名额满了?输入 CODE 之后直接显示"YOU ARE PRO"
|
48
FaiChou 2020-11-20 22:38:42 +08:00
|
49
FaiChou 2020-11-20 23:15:25 +08:00
请教个问题, 既然「 app 不走系统代理也是开发人员一行代码的事」那为什么很多的 app 都不这么做呢?
比如微博国际版, 很多第三方微博就直接拿微博国际版的接口用. 额, 举了个不好的例子, 因为即使设置了, 也可以在应用层之上抓包继续看到请求. 那继续讲个例子吧, 手机上使用 圈 x, 可以运行一些脚本, 来实现京东 /淘宝比价的功能, 我猜测是利用了 jd/淘宝内的某个 api 请求, 经过修改 hack, 达到目的. 圈 x/surge 这类的软件是作用的应用层网络的系统代理, 如果 jd/淘宝多写「一行」代码, 就可以避免这种问题. 而且配合 ssl-pinning 效果更佳吧? |
50
FaiChou 2020-11-20 23:16:12 +08:00
|
51
playniuniu 2021-01-04 13:57:35 +08:00
|
52
thisismr2 OP @playniuniu 已取消
|
53
ae86 320 天前
大佬 Google Play 的链接失效了
|
54
thisismr2 OP |