chaldea-center / chaldea

Chaldea - Yet Another Material Planner and Battle Simulator for Fate/Grand Order aka FGO
https://docs.chaldea.center
GNU Affero General Public License v3.0
317 stars 25 forks source link

[FEATURE]建议帮助文档的中间人抓包工具加上 mitmproxy #13

Closed vx13 closed 2 years ago

vx13 commented 2 years ago

推荐中间人抓包工具 mitmproxy 这款工具同样支持多平台,且支持运行自定义 python 脚本。

基于这个工具,我写了一个过滤 url + base64 解码的小脚本,直接把应答保存成 json 文件,可以稍微简化一下抓包操作。 https://gist.github.com/vx13/783bc4a43d148ae6c6bcf721218c2a60

narumi147 commented 2 years ago

是想要把mitmproxy的详细设置教程也加进去吗? 这些工具步骤其实都差不多,对于会的人用哪个工具都一样。但charles和fiddler有界面,对于新手比较容易上手?不过确实写好脚本的话这个可以少几步。 我会把mitmproxy放到介绍里,但应该不会写具体的喂饭教程,或者有兴趣的话帮忙写一篇😂

vx13 commented 2 years ago

fgo数据保存工具懒人包.zip 本来想写个喂饭教程,但自己实在是不擅长描述。 干脆添了些脚本,做了个面向“Windows + MuMu 模拟器 + 国服”的导数据懒人包。不过我找不到其他能帮忙测试的玩家,只在自己的机器上试过,不确定有没有什么问题。

narumi147 commented 2 years ago

再加上证书安装,对于mumu应该完整了差不多。

思考了下想把这方法扩展扩展,有点不好办,改host的方法是必须改fgo所在的操作系统(手机或模拟器)是吧?换个模拟器adb端口也不一样,也不支持手机,苦恼

vx13 commented 2 years ago

关于改 host ,主要是需要 root 。感觉一般的安卓手机应该也都支持 adb ,如何解锁 root 才是麻烦的地方。理论上来说,封装一个 dns 服务器就可以避免改 host ,不过这个容易影响玩家的网络。 关于证书,我试过用 adb push 证书上去,但偶然发现传错了证书文件也可以获取 json 。后来在我的机器上重装了几次 mumu ,都是不传证书也可以获取 json 。不清楚其他机器是不是也会这样。

narumi147 commented 2 years ago

现在大多数人已经不会选择root或越狱,这也是刚才说不支持手机的主要原因。

确认过mumu的证书列表里没有该证书是吗?不用证书也能解https这事让我大受震撼,明晚用这个软件试试去。 windows上有安装根证书吗?(按理说应该没关系)

vx13 commented 2 years ago

关于证书,模拟器重装了几次,还是能直接解 https 。我也怀疑是之前把证书存到某个未清理到的地方了。 不过,高版本的安卓就算装了证书也没有用。 mitmproxy 文档 里提到了几个修改安装包,使之支持系统代理,并取消证书绑定的工具,其中也有声称支持 ios 的。但考虑到 b 站的律师信,修改 apk 的手段风险太大。

写个 dns 欺骗,这样就不用改 hosts 了,手动改 dns 服务器即可。 fgo数据保存工具懒人包.zip

narumi147 commented 2 years ago

关于反代,因为没怎么解除过,有些问题希望请教一下,(为了支持更多的设备和服务器)

mitmproxy 如何反向代理多个host,或使用正则,国服的*.bilibiligame.net、日服的game.fate-go.jp等。或者能否反代全部请求?反正在request里有筛选。因为若仅反代1个host,只有该host才会被拦截?

另,我忘了第一遍在未安装证书下测试,安装又删除证书后即使没有证书也能抓得到,就离谱,无法理解。

测试了下其他url(均安装证书):

十分困惑,反代对目标请求有什么要求吗?

ps: 如果有需要贴代码,直接写在回复里,暂时不需要把压缩包传上来

narumi147 commented 2 years ago

https://docs.chaldea.center/zh/import_https/mitmproxy.html

可能越改越烂了,流程图插件还不支持vuepress2,暂时没加进去。

narumi147 commented 2 years ago

Any idea?

SekiBetu commented 2 years ago

image 请问这里的虚拟网关是怎么测出来的,我用的雷电模拟器不在列表上

SekiBetu commented 2 years ago

charles和fiddler目前我都抓不到那个特定域名的数据,只有教程里的mtimproxy可以抓,并且只有mumu模拟器可以,我雷电不行,charles一直是unknown,fiddler根本不显示那个域名,但是其他https的都抓到了,大概是因为HPKP?

narumi147 commented 2 years ago

@SekiBetu 很多人能直接抓到按理说没有证书验证,毕竟bgo安装包都是一样的,很是疑惑为什么有部分人抓不到 至于网关,截图几个是百度的,你可以在模拟器的设置-WiFi-高级里查看本机ip,网关大概率就是把ip最后一位改成2。另吐槽蓝叠5发现根本没地方给你看或改WiFi设置 实在不行可以试试proxifier强制代理也行,这个就比较通用了,所以我当初为什么不写proxifier的教程呢

SekiBetu commented 2 years ago

image image image image 没啥反应,难道网关不是.2(证书也装了,隔壁Mumu可以立刻抓到)

SekiBetu commented 2 years ago

image image image 这是fiddler加上我安卓11系统装了fiddler证书的的手机抓到的,根本没出现line1-s2,而且最接近的line3-s2也只是个头文件,并没有response body,是空的,所以我很好奇上面这个python脚本做了啥能抓到这个包,我用mitmproxy官方版本,不用上面的脚本,直接抓也是一样抓不到

narumi147 commented 2 years ago

line1-s2具体哪个域名在前一步的某个请求里应该是有返回给客户端的,我不确定不同地区是否一样。当前在你截图里确实没看到符合条件的请求。 另mitmproxy都是官方的没有区别,默认是不代理的,你需要手动指定代理到mitmproxy。脚本是做了伪造DNS服务器把域名解析到mitmproxy上去实现的

SekiBetu commented 2 years ago

我自己抓确实咋抓都抓不到,就等着伸手要饭了,上面这脚本挺好的

narumi147 commented 2 years ago

@SekiBetu at discord 里讨论下哈?

vx13 commented 2 years ago

不好意思,最近工作比较忙,回复迟了些。

mitmproxy 如何反向代理多个host,或使用正则,国服的*.bilibiligame.net、日服的game.fate-go.jp等。或者能否反代全部请求?反正在request里有筛选。因为若仅反代1个host,只有该host才会被拦截?

参考mitmproxy 文档,这里介绍了五种工作模式,其中的反向代理是引导流量“to a single server”,所以原始设计上是不能同时代理多个网站的。 不过,示例代码里有一个据称能用反向代理支持多个网站的插件脚本(未验证其可用性)。该脚本也许值得参考一下。 该脚本的注释中提到,代理多个网站时,一般是用“透明代理”模式。不过那个要改路由表,更加麻烦。

十分困惑,反代对目标请求有什么要求吗?

这个我也不清楚,怀疑是不同资源的请求实现方式不同,有些请求做了额外的验证,能抵御中间人攻击。

narumi147 commented 2 years ago

那个脚本当时也查阅了,但最后还是没弄明白:joy: 网络这一块我属实是整不明白了,先凑合过日子吧,反正也没多少人用

SekiBetu commented 2 years ago

新版客户端用不了了

narumi147 commented 2 years ago

@SekiBetu 路线从line1切换到line3,mitmproxy可以抓mumu模拟器(Android6)的没问题。 用雷电模拟器(Android7)试了下,IP 172.16.1.15/网关172.16.1.2,没抓到。drony正常抓到。

另,不同设备试了几次,有部分仍旧使用line1.