一个配合 mitmproxy 的 iOS 和 Android 端 HTTP&HTTPS 抓包 APP(非设置系统代理方式)

2020-10-16 09:58:06 +08:00
 thisismr2

系统代理方式和虚拟网卡方式

一直比较习惯命令行的工具, 所以一直在用 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

  1. 安装扩展后
  2. 点击图标
  3. 呈现出来 popup 后(不确定接口速度如何), 点击 Pro
  4. 输入 Email, 获取验证码后, 输入验证码(可能在垃圾箱)
  5. 支付$1 (不确定 Stripe 支付是不是支持大陆信用卡?)

我收到支付信息后, 会往你的 Email 里发送两个兑换码: 一个 iOS 兑换码和一个 Android 兑换码. 共 20 个人吧. 如果有问题或没收到可以下面 @我.

(那个$1 是月订阅制, 如果你支付了, 建议不要那么快手动结束订阅, 可以在下一个扣费日的前几天停止订阅, 或者方便的话可以支付 2 刀后手动结束订阅 [是结束订阅, 可别申请退款哈], 因为不太了解 Stripe 的判定机制, 所以先谢谢大家)

5716 次点击
所在节点    推广
54 条回复
thisismr2
2020-10-16 10:22:26 +08:00
看来用 mitmproxy 抓包的同学还是不太多吧
xionger
2020-10-16 10:28:05 +08:00
大神又出新东西了, 可惜我不会用 mitmproxy. 偶尔会用下 Charles 抓包. 哈哈前端抓包需求不多

BTW(不过我用大神的 Brook)
thisismr2
2020-10-16 10:37:54 +08:00
@xionger 不敢当. 嗯 Charles 设置系统代理方式. 是否使用系统代理 app 可以自己选择的. 忽略系统代理的就抓不到了.

(BTW) 能帮助到你就好 :)

另外 mimtproxy 有 web 界面好像, 前端可以试试呀
thisismr2
2020-10-16 10:41:45 +08:00
收到一个提醒, 我要去发兑换码了. 嘻嘻
thisismr2
2020-10-16 10:46:52 +08:00
邮箱 l 开头的同学, 兑换码已发送. (第一次生成 ios 和 android 兑换码, 如果我姿势不正确, 提醒我下哈)
xionger
2020-10-16 10:57:35 +08:00
我的邮箱 s 开头, 不过我给不给兑换码都行, 我还不会用 mitmproxy. 得空了研究下这个东西, 好像挺牛逼的.
不过 我发现就单说这个 chrome 扩展就很带劲啊, 值了
thisismr2
2020-10-16 11:10:35 +08:00
@xionger 已发. 就 20 个. 一个萝卜一个坑

:) 都是写完自己用过一段时间的工具
xionger
2020-10-16 11:27:10 +08:00
@thisismr2 问下, 那个 stripe 页面是自带的吗, 那么简洁
zjb861107
2020-10-16 11:33:16 +08:00
> 从网卡级**系统 Transport 层(TCP)**接管流量

这个是怎么工作的,iOS 允许任意 app 在后台接管流量么
thisismr2
2020-10-16 11:33:24 +08:00
@xionger stripe 的文档里 demo copy 过来的. 也可以说算是 stripe(文档里)自带的吧.
thisismr2
2020-10-16 11:39:36 +08:00
@zjb861107 可以的. 需要用到 Network Extension 里的 API
Biebe
2020-10-16 12:24:18 +08:00
不 root 可以抓只信任系统证书的 app 吗
yushiro
2020-10-16 12:51:52 +08:00
ios 上用 network extension 的 app 一堆吧~
thisismr2
2020-10-16 12:57:43 +08:00
@Biebe 这个应该是 android 系统级别的隔离. 原本 android 和 ios 一样, 安装一个 root ca 到系统里就行了. 系统就会当成一个 root ca. 后来 android 区分了两个 system ca store 和 user ca store
xionger
2020-10-16 13:09:22 +08:00
Android 开发的话 root 了应该啥都能干了
thisismr2
2020-10-16 13:15:15 +08:00
@Biebe 但不代表全部都不行. 总之感觉 root 后抓的踏实. android 的同事是专门用了一个老的 root 了的 Nexus6 当开发机和转包. 我平常是用 ios 抓.
thisismr2
2020-10-16 13:34:05 +08:00
@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
xionger
2020-10-16 13:38:02 +08:00
thisismr2
2020-10-16 13:50:24 +08:00
接 #17

谢谢
我还是补文字吧
“请务必阅读以下简介:
Thor 并非万能,只工作在系统 HTTP 层: **不支持**非 HTTP 流量(TCP, UDP)及**不经过系统 HTTP 代理的流量**”
yushiro
2020-10-16 14:24:39 +08:00
嗯,没注意过三个层面的 api 区别。
常用的几个留学软件也都支持 mitm,就是不解决 ssl pin ~

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

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

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

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

© 2021 V2EX