一个配合 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 的判定机制, 所以先谢谢大家)

5322 次点击
所在节点    推广
54 条回复
thisismr2
2020-10-17 16:43:28 +08:00
@fx0719 升下嘛, 反正早晚得升
coolzilj
2020-10-17 20:28:44 +08:00
想问为什么不直接用 mitmproxy 的 transparent mode,是这个比 -T 解决了更多的问题吗?
thisismr2
2020-10-17 21:45:44 +08:00
@coolzilj 其实目的是一样的. 其实就是 transparent, linux 和 bsd 和 mac 依赖的各不相同, iptables, doas, pf. 使用体验上. 如果对这几个工具非常熟还可以. 另外应该如果是 windows 应该就走不通了好像
coolzilj
2020-10-17 23:30:37 +08:00
@thisismr2 了解,谢谢
thisismr2
2020-10-19 11:30:37 +08:00
更正 #23 内容:

错误:
“坏处是 mitmproxy 只能处理 http 和 https 流量, 所以如果某个 app 走的私有 TCP 协议, 那么这部分流量 mitmproxy 就无法处理了, 可能 app 就显示无法连接之类的. 当然介于当前讨论的主题也是 HTTP 和 HTTPS 抓包, 可以理解. (这种情况如果 mitmproxy 后期可以将非 HTTP(S)协议的代理请求也正常处理哪怕不分析包 就更好了)”

正确:
mitmproxy 可以处理非 http 和 https 流量, 只需要加个 --rawtcp 即可
$ mitmproxy -m socks5 --rawtcp
thisismr2
2020-10-19 11:33:46 +08:00
目前 rawtcp 参数是 experimental 性质的
chenliang0571
2020-10-24 16:57:39 +08:00
名额满了?输入 CODE 之后直接显示"YOU ARE PRO"
FaiChou
2020-11-20 22:38:42 +08:00
FaiChou
2020-11-20 23:15:25 +08:00
请教个问题, 既然「 app 不走系统代理也是开发人员一行代码的事」那为什么很多的 app 都不这么做呢?
比如微博国际版, 很多第三方微博就直接拿微博国际版的接口用. 额, 举了个不好的例子, 因为即使设置了, 也可以在应用层之上抓包继续看到请求.

那继续讲个例子吧, 手机上使用 圈 x, 可以运行一些脚本, 来实现京东 /淘宝比价的功能, 我猜测是利用了 jd/淘宝内的某个 api 请求, 经过修改 hack, 达到目的. 圈 x/surge 这类的软件是作用的应用层网络的系统代理, 如果 jd/淘宝多写「一行」代码, 就可以避免这种问题. 而且配合 ssl-pinning 效果更佳吧?
FaiChou
2020-11-20 23:16:12 +08:00
playniuniu
2021-01-04 13:57:35 +08:00
@thisismr2 能帮我在确认一下订阅是否已经取消了?

我这边上个月 17 号还是收到了订阅账单,没有取消
thisismr2
2021-02-23 15:03:32 +08:00
@playniuniu 已取消
ae86
171 天前
大佬 Google Play 的链接失效了
thisismr2
147 天前

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

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

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

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

© 2021 V2EX