概述
玩了一段时间的逆向破解,对Windows上抓包有了一定的经验,在这里分享给大家
限制:
如果要抓包的对象,网络协议是tcp,那就只能用wireshark
了,此文方法不好使
原理
抓包大概分为两大类
- 嗅探
如wireshark
eCapture
,技术上比较底层一点,在驱动或者内核里,什么包都能抓到,一般来说无法修改 - 中间人
技术上在应用层,适用面窄一些,但是可以修改请求和响应
此文重点描述中间人
这种模式,因为门槛低,UI界面友好
中间人
先简单介绍一下中间人
原理
假设有一个游戏A
,游戏服务器B
原本的流量路径是A->B
中间人就是通过某种手段
,把这条路径变成 A->C->B
这里的C一般包含抓包软件,这样我们就能抓到所有的请求,看到发生了什么事情
根据某种手段
的不同,分为几类
- 代理模式
- 虚拟网卡
- hosts/dns
代理模式
有一些编程语言和框架,内部默认实现支持代理模式,如Java的 apache http client,我们可以通过修改环境变量来达到这个目的;
如果是手机,那么还可以在WiFi设置里填写
总而言之,要使用这种模式,需要应用
或者操作系统
支持
比如Windows就提供了这种设置入口,但是不一定有用,因为应用程序可以不理会Windows的这种标准
同理还有 charles 的 windows proxy
, IE
的全局代理
对于安卓手机或苹果手机,连上路由器wifi,或者电脑热点wifi(笔记本),再在手机上设置wifi代理
成功率也不是100%
流量的确会经过这个wifi,但是应用程序不一定认这个系统代理,程序员也可以手动关闭代理选项,如Java的OkHttp
虚拟网卡
代理模式,属于制定了一个标准,但是这个标准的执行,就听天由命了,完全看运气,目标程序可以遵循这个标准,也可以不遵循
所以就有了另外一个技术路线虚拟网卡
大概原理就是:不管你代码怎么写的,你想联网,肯定要通过物理硬件网卡才行,那么如果伪造一个网卡,那么目标程序的流量肯定100%经过这个网卡的,那么请求数据就肯定可以抓到了,这个就是虚拟网卡
- Windows上常见的就是
Clash for Windows
- 安卓手机上就比较多了,我喜欢用的是
postern
github
hosts/dns
现实世界中,目标程序访问互联网一般都是通过域名
而域名最后都会转为ip
来进行访问的
所以也可以在这个环节来操作,修改解析的ip
,让请求直接发到某个地方来抓包
基本步骤是:
- 修改hosts,或者设置自定义dns,让指定域名解析到自定义ip(一般来说都是自己电脑)
- 在自定义ip这台机器上,起一个服务,开启
80
端口(http
)和443
端口(Https
) - 这个服务其实自己就可以抓包了,但是没有找到开源成品,所以我是自己写了一个(记得处理证书问题),把接收到的流量再转到抓包软件上,如
Charles
- 不管是自己的服务还是抓包软件,现在能接收请求了,但是无法发出请求,因为dns变了,会死循环,所以需要借助
Dns Over Http
来修正这个问题,如果是charles
,可以通过设置External DNS Resolver
来解决
整体而言,这个方案很繁琐,比较绕,不太友好
不太建议使用
clash 实战
上面介绍了各种技术路线,这里用比较通用的虚拟网卡
路线,选一个场景,给大家演示一下
安装虚拟网卡
操作好之后,修改配置文件
这里贴一份我的配置,大家看着改
mixed-port: 7890
allow-lan: false
external-controller: 127.0.0.1:65360
secret: 462a5c83-xxx
proxies:
- name: Fiddler
type: socks5
server: 127.0.0.1
port: 1080
// charles 代理
- name: charles
type: socks5
server: 127.0.0.1
port: 8889
proxy-groups:
- name: Proxy
proxies:
- Fiddler
type: select
rules:
- PROCESS-NAME,Python.exe,DIRECT
- PROCESS-NAME,qbittorent.exe,DIRECT
- PROCESS-NAME,WeChatAppEx.exe,Fiddler
- PROCESS-NAME,WeChat.exe,Fiddler
- PROCESS-NAME,WeChatPlayer.exe,Fiddler
- PROCESS-NAME,WeChatBrowser.exe,Fiddler
// 进程名
- PROCESS-NAME,BloonsTD6.exe,charles
- MATCH,DIRECT
关键点就是
- 首先配置一个代理,
charles
,协议细节是socks://127.0.0.1:8889
- 新增规则,指定进程名
BloonsTD6.exe
的流量转到 代理charles
上
里面也有几个规则是针对微信小程序的,可以抓
羊了个羊
这种 🥰
charles
测试
接下来启动游戏试一下