由于业务需要,抓了 PC 端几个游戏的登录接口调研流程。发现请求方法都是 Connect 和加密内容。 网上也查了相关资料,解释这种请求是隧道代理。
但我不清楚的是,这些 http/https 的 Connect 请求是 Charles 代理软件转换成的吗? 还是说就是客户端内部代码检测代理的实现的逻辑?
因为平常跟服务端对接大多情况都是用的 Get 和 Post 方法。这种方法基本没用过。
有没有懂的大佬们解释一下这种防抓包的机制是怎么实现的? 个人认为可能是用的 私有证书 或是 自签名证书,直接在开发时下发给客户端后请求携带的样子。(纯属猜测)
1
shibo501c 2023-03-02 23:01:15 +08:00 via Android
不光是 pc 端,现在大厂的 app 很多用 charles 抓请求也看不到了,很多是在 tcp 层自己做的 tls 加密,多 stream 复用,业务感觉发送的还是 http ,实际上被网络模块代理了。
|
2
lasuar 2023-03-02 23:03:00 +08:00
HTTP 请求也是加密的话说明内容本身就是加密的,在客户端解密;
HTTPS 请求抓包查看明文,需要在 charlers 安装根证书到系统并设置完全信任,然后 charlers 开启 ssl 代理,然后客户端设置代理为 charlers 代理地址,开始抓包。 |
3
XiaoXiaoMagician OP @lasuar 已经装了证书了,也信任了。而且不是 Connect 请求应该是不携带 Body 内容的,为什么他们都是携带加密内容的?
|
4
q1angch0u 2023-03-03 01:02:13 +08:00 via iPhone
app 本地启动一个 server ,称其为 tunServer ,用来接收 http/websocket 请求,并加密后发送到真正的服务端(realServer)。
所以目前的访问流程就是:app->(127.0.0.1:xxxxx)tunServer->realServer 。手机上设置中使用代理连接到 charles ,流程变成了 app->[charles]->(127.0.0.1:xxxxx)此处访问不到,所以大概率 app 是不能正常使用的吧?因为 app 发送的请求目的地址是 127.0.0.1:xxxxx ,但是 charles 本地并没有相对应的端口开放用以交换数据。 |
5
studyingss 2023-03-03 01:38:07 +08:00 via Android
还是学一下基础吧。。。
http CONNECT 方法只是用来连接到一个 http 代理服务器,连接上之后可以中转 tcp 流量。 CONNECT 只有第一个包 |
6
studyingss 2023-03-03 01:43:29 +08:00 via Android
会带,server 接到之后会去跟目的地址建立连接,如果成功就回 200 Connection Established 。
后面的数据都是纯 tcp 了,http 服务器只会做转发工作。看你的描述大概是认为每个请求都会带上 http connect 头。 至于防抓包什么更是毫无关系,connect 本质上只是一个 tcp 隧道,如果传输的数据用了加密那不经过这个 tunnel 看到的也是加密的。 |
7
lovelylain 2023-03-03 08:40:49 +08:00 via Android
@q1angch0u 京东 APP 是哪种情况?我升级到新版
|
8
lovelylain 2023-03-03 08:43:48 +08:00 via Android
@q1angch0u 京东 APP 是哪种情况?我升级到新版后,无论是手机本地跑的代理还是路由器上跑的代理,只要设置了代理,京东就不正常,还有一些银行 APP 会提示开了代理不让用,京东是无任何提示,用这几个 APP 前得切换 WiFi 或者 APN ,太麻烦了。
|
9
XiaoXiaoMagician OP @studyingss 那代理服务器这个是由客户端本地启动的,还是说指的就是代理软件?
|
10
XiaoXiaoMagician OP @q1angch0u 按你说的就是需要由客户端本地启动一个服务,用作代理服务?还有就是我目前即使开抓包软件抓,一样不影响游戏登录,还是能狗正常游玩的。抓的官服永劫无间。
|
12
q1angch0u 2023-03-03 10:55:09 +08:00 via iPhone
@XiaoXiaoMagician 不影响并且可以正常登录的话那就不是这种情况
|
13
shibo501c 2023-03-03 11:12:20 +08:00
@lasuar @XiaoXiaoMagician @jobmailcn @studyingss @q1angch0u 请教下,如果做一个这种网络加速的开源项目,会有人想用吗,比如提供 TCP 或者 QUIC 的通道,TLS 1.3 的握手,,然后集成到 js ,kotlin ,swift 的网络库里,可以选择发现请求延迟大于一定的情况下,开启请求的隧道,转给一个轻量级的中转服务,转给用户内网的服务。在做一个 UI 进行一些统计和 Debug 的功能。
|
14
shibo501c 2023-03-03 11:14:04 +08:00
我了解到的是大厂都有网关团队,有的叫做长连接服务,请求治理什么的,好像开源的不多。
|
15
studyingss 2023-03-03 12:04:40 +08:00 via Android 1
@shibo501c 没搞懂你想说什么。
如果是想要降低服务器负载并且让资源尽可能接近 client ,有个相似的东西叫做 CDN 。 你想开源什么我也没搞懂,如果你说的那个 tcp / quic 通道是延迟更低更快线路的话,是要花钱找运营商买的。然后再集成一下就叫做游戏加速器了。。。 如果你只是开源连接到代理的工具的话有个叫 netch 的东西。 集成到网络库又是什么。。。quic tls tcp 全部都是标准的东西,早就在库里了。 不存在不额外依赖中转服务器就可以直接提升网络质量的方法,如果有早就被放到标准协议里了,比方说多路复用确实有效,于是就有了 http/2 。kcp 能显著降低延迟所以一堆游戏都在用。 我的知识比较浅,确实是没看懂你想开源啥。 |
16
studyingss 2023-03-03 12:10:50 +08:00 via Android 1
@XiaoXiaoMagician 看你第一张截图不是游戏啊
看起来是设置了系统代理被浏览器识别到之后连接到 http 代理。这种请求是客户端主动发的,比如说你在软件设置里面设置了使用 http 代理 /使用系统代理同时系统设置了代理,就会发送这种 connect 请求。 至于游戏是什么情况我就不知道了。 |
17
shibo501c 2023-03-03 12:17:39 +08:00
@studyingss CDN 主要还是静态资源,主要是加速 RESTFul API ,优化弱网响应的速度,部署在海外也可以,很多工具都能代理请求哈,但是都是设备级别的,主要是针对 APP 或者 网站级别的。比如美团的做法 https://zhuanlan.zhihu.com/p/144449362
|
18
studyingss 2023-03-03 12:43:02 +08:00 via Android
@shibo501c 这个依然需要服务器来配合呀,client 和 server 都是美团自家的,想怎么弄怎么弄,比方说中间提到的 tcp 长连接,所有 http 请求使用二进制通过这条 tcp 连接发送,代理服务器需要做解析工作的呀。
排除掉他们给自己业务做的针对性优化,再考虑上通用性,最终结果是可能你发现自己重新发明了 http/2 或者 quic 。 如果你想在不更改 server 的情况下做优化,那就只有自己买一台服务器来做解码然后由服务器请求。 如果你想把上面文章提到的技术写成一个通用的库开源出来,那用户要使用就得先自己去买台服务器。 假设一个人非常非常牛逼,首先开发出了一个用户-›proxy 的工具,所有请求都通过一个连接发代理服务器所以可以复用连接,非常快,并且自带连接迁移,即使在移动场景下也可以保证连接稳定。 然后为了这台代理服务器能高速访问目的服务器,再让所有大厂都主动把资源放这台代理服务器。 然后它给这个东西取名,叫做 cloudflare warp ? 还是说我对你的想表达的东西的理解依然有偏差? |
19
shibo501c 2023-03-03 12:52:10 +08:00 1
@studyingss 感谢回复,你的理解没有偏差。我们内部在使用 http2 或者 quic 的时候,发现改造的成本比较大,最终是通过一个代理服务来做的,内部统计上看,p99 等长尾的数据确实改善明显。确实不够通用,而且还有排查问题更复杂的情况。不过目前看很多大厂都有在使用这种方式。肯定是要部署启动一个进程的,所以肯定是针对有自己机房和服务的团队。
|
20
vmuu 19 天前
我最近也老是遇到这个
|