0.前言

本文仅仅为介绍一个什么都不懂的萌新如何成功连接上一个Grasscutter服务器的教程,至于Grasscutter服务器地址或搭建教程,不在本文讨论范围。

1. 配置原神客户端

目前,Grasscutter对ios比较友好,国服客户端就可以。pc则需要切换到国际服务器,安卓比较困难,需要root什么的。故不编写安卓教程,有需求的同学可以自行研究。

以下是pc教程,ios用户可以直接跳到第2步

1.1 安装原神PLUS启动器

打开 github.com/DawnFz/Genshin.Launcher.Plus
根据readme.md的指引下载启动器

1.2 下载pkg转换文件

前往Plugins/Genshin.Launcher.Plus.SE.Plugin - Snap Genshin 资源中心,下载 GlobalFile.pkg

下载完成后将 GlobalFile.pkg 移到启动器目录下,注意需要与启动器exe 放在同级目录,如下图

1.3 执行客户端转换

按照如下图操作,日后需要转换为国服可以重复如上步骤还原国服

1.4 检验本阶段成果

确保启动器显示为 国际服务器,点击开始游戏

出现 hoyoverse Logo则代表切换国际服成功

2. mitm(中间人劫持)配置

2.1 下载并启动mitm

前往 mitmproxy官网下载

安装完成后,启动mitmproxy,可以看到如下界面

在windows设置里,修改代理为127.0.0.1:8080

浏览器打开mitm.it,显示如下网页表示代理成功

如果显示如下网页,则表示上述步骤中可能有哪里出了错

2.2 安装根证书

打开mitm.it 根据网页指引,下载对应的根证书,用于解密https流量

比如我是windows pc,就下载对应的p12根证书

双击下载好的证书,存储位置选择本地计算机

密码这一步可以直接跳过,

存储这一步需要留意,需要选择受信任的根证书颁发机构,这样才能解密所有https流量。

验证成果:

随便找一个https网站,比如叔叔的bilibili

如果颁发者是mitmproxy,代表根证书已经安装成功了

如果显示如下图,表示根证书没有安装成功

2.3 启动mitm劫持

开始本步骤之前,记得先关闭之前启动的所有mitm窗口,不然会提示8080端口被占用

在任意目录创建 proxy.pyproxy_config.py

proxy_config.py内容:

其中第5行的 example.com 需要替换为你的Grasscutter服务器域名

import os

# This can also be replaced with another IP address.
USE_SSL = True
REMOTE_HOST = "example.com"
REMOTE_PORT = 443

if os.getenv('MITM_REMOTE_HOST') != None:
    REMOTE_HOST = os.getenv('MITM_REMOTE_HOST')
if os.getenv('MITM_REMOTE_PORT') != None:
    REMOTE_PORT = int(os.getenv('MITM_REMOTE_PORT'))
if os.getenv('MITM_USE_SSL') != None:
    USE_SSL = bool(os.getenv('MITM_USE_SSL'))

print('MITM Remote Host: ' + REMOTE_HOST)
print('MITM Remote Port: ' + str(REMOTE_PORT))
print('MITM Use SSL ' + str(USE_SSL))

proxy.py内容:

其中 filter_rules 定义了需要劫持的原神游戏服务器域名,使用正则表达式匹配,将其劫持到我们上面的Grasscutter服务器

import re
from mitmproxy import http
from proxy_config import USE_SSL
from proxy_config import REMOTE_HOST
from proxy_config import REMOTE_PORT

class MlgmXyysd_Genshin_Impact_Proxy:
    filter_rules = [
        r"(.*?).mihoyo.com",
        r"(.*?).hoyoverse.com",
        r"^(?!autopatch)(.*?).yuanshen.com"
    ]

    def request(self, flow: http.HTTPFlow) -> None:
        # if flow.request.host in self.LIST_DOMAINS:
        for rule in self.filter_rules:
            if re.search(rule, flow.request.host):
                if USE_SSL:
                    flow.request.scheme = "https"
                else:
                    flow.request.scheme = "http"
                flow.request.host = REMOTE_HOST
                flow.request.port = REMOTE_PORT

addons = [
    MlgmXyysd_Genshin_Impact_Proxy()
]

确保两个py文件放在同一个目录

这时,我们需要一点小技巧来快速打开win10的终端运行mitm

按住键盘上的 Shift 时并点击右键,会出现一个 在此处打开Powershell窗口 的选项

敲入命令

mitmweb -s proxy.py

出现如下图表示运行成功

验证成果:打开任意一个mihoyo的域名,出现如下提示表示劫持成功

3.启动游戏

打开原神,输入账号,密码随便输,点击进入游戏(输入不存在的账号时,服务器会自己创建账号)

正常情况,显示个门

不正常情况1:
显示出一个滑块验证码,那肯定是mitm没有劫持成功(连接到genshin官方服务器登录是要滑块验证码的)。检查一下之前的步骤是不是漏了哪里

不正常情况2:
卡在登录成功后的检查更新中,我也曾经被这个情况困扰很久,最后发现貌似是原神的hk更新服务器被解析到一个198开头的不存在的ip(或许被污染了?),需要修改hosts强制指定到正确的ip,如下所示

211.97.90.13 autopatchhk.yuanshen.com

最后,祝各位玩的愉快

4. IOS也想玩游戏

如果你完成了pc上 mitm的搭建(也就是第二步mitm的所有配置),你可以让ios设备连接到pc的mitm代理实现ios玩Grasscutter服务器,或者如果你有quanX等也可以使用圈x进行劫持。

4.1 连接mitm代理

wifi设置里找到http代理设置

代理设置为手动,服务器为你的电脑的ip,端口为8080

4.2安装根证书

打开mitm.it,安装ios对应的证书

接着,安装描述文件

最后,设置 - 通用 - 关于本机 - 证书信任

把mitm证书的开关打开

现在,你可以运行ios国服游玩了,如无意外,国服会被直接劫持到国际服,开始享受你的割草机之旅吧~


代码萌新,热爱折腾,喜欢花草和养鱼