相信很多老提督都知道 http://discord.cnnblike.com:3000/WSGun.pac
这个网址吧。只要用了这个网址,就可以修复大破立绘和船名称出错的问题。但是这其中的原理是什么,这个网址是否安全?那么我们就要扒开来看一看了。
代理式解锁正常立绘的一般方法
值得注意的是,有的地方第四点写的是“改不改回去随便”,这是一种错误的做法。如果没有改回去,在运行战舰少女时你的所有网路通信都会经过代理服务器。对于自己,不仅会降低游戏的网络连接速度,也会带来账号被盗的风险。对于代理服务器的提供者,这样产生了大量的流量,甚至导致服务器负载过高而不可用。
代理式解锁正常立绘的特殊方法
- 下载 release.zip
- 解压,双击
main.exe
- 用“一般方法”中1的方法,“高级选项——代理”设置为“手动”,服务器地址输入电脑的IP(确保电脑和手机在同一WIFI下)。端口为
9090
- 接下来的方法同上 3,4
“代理式”解锁正常立绘的源头
我们已经看到“代理式”解锁正常立绘需要一个神秘的网址,那么我们去掉域名前缀看看:
显然这是一个博客——应该是这个服务器主的。在博客底部,我发现了作者的邮箱。搜索这个邮箱,可以找到相关项目的介绍和 GitHub 链接。
程序解析
既然看到来自 GitHub,我对这个网址就八成放心了——为什么呢?
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 git 作为唯一的版本库格式进行托管,故名 GitHub 。GitHub 于 2008 年 4 月 10 日正式上线,除了 git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过 350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、Python 等。作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。(摘自百度百科)
也就是说,GitHub 上所有的软件的代码,都是开诚布公的,如果作者藏着什么恶意代码,是很容易被发现的!
打开GitHub链接,作者有两个项目:
- discord:在 iOS 上进行解锁正常立绘、登录 Android 服务器
- discord-lite:新版,iOS、Android;官服、渠道服务通用
作者写lite版的目的也写清楚了
(翻译:用 Go 语言全部重写,现在我们不必担心内存使用的问题,并且我们可以十分方便的把它在Windows和Linux操作系统上传播,不必担心邪恶的服务提供者之类的事)
程序代码很简单,略去了一些定义,直接解析核心代码。
稍有常识的人就知道,这是一个读取配置文件的代码(这么简单的程序居然还要配置文件?)大概就是寻找配置文件路径,读取,解析,done。
这是一个辅助函数,用于检测 URL 是否是需要进行代理用于解锁正常立绘。循环,正则匹配,就酱。
辅助函数,用于编译筛选器(筛选器是什么看配置文件解析一章)
主函数。这是重点。
前面是创建代理服务器。
然后是重头戏:筛选网络通信流量,篡改返回结果,达成解锁正常立绘目的。
在下面没有截图,主要是为 PAC 文件提供 HTTP 访问。
配置文件解析 & 游戏更新机制
该程序共有 3 个配置文件
时间关系我们直接看解锁正常立绘:
comment 和 port 的含义已经在上面了。下面解释modifiers(修改器):
- filter(筛选器):决定是否要篡改请求
- host: 主机名,是一个正则表达式,其实就是
version.jr.moefantasy.com
(官服)和version.channel.jr.moefantasy.com
(渠道服)。 - url: 去掉主机名的地址。这里是游戏进行检查更新的一个API。
- rules(规则):修改网络通信的规则
- hook:在什么时候修改(在获得服务器响应时)
- target:修改什么(舰R只要修改响应内容,少前既要修改响应头又要修改内容)
- pattern:原文
- replacement:修改后的文字
从上面的代码可以看出,游戏更新的地址是http://version.jr.moefantasy.com/index/checkVer
。打开这个地址,返回的是如下信息:
{
"ResUrlWu": "",
"ResUrl": "",
"ResVersion": "",
"version": {
"newVersionId": "2.0.0", //版本号
"hasNewVersion": 1, //是否有新版本(1=是,0=否,下同)
"isMandatory": 1, //是否强制更新
"downloadUrl": "", //下载地址
"DataVersion": null,
"ForceGz": null
},
"loginServer": "http:\/\/login.jianniang.com\/", //登录服务器地址
"hmLoginServer": "",
"useHmSdk": 0,
"inviteCode": "",
"canOmitPhone": 0,
"canFastRegister": 0,
"cheatsCheck": 0, //是否解锁正常立绘
"shipRenameCheck": 1, //是否允许修改船名
"snowing": 3,
"RealNameCheck": 1, //是否禁用动植物园
"OldRealNameCheck": 1,
"HeartBeatCheck": 0, //疑似新卫星?
"HbTime": 300,
"DataVersion": null,
"ForceGz": null,
"gameNotice": "",
"gameNoticeUrl": ""
}
我通过“注释”的方式将信息的含义标在了对应行的后面。
结论
事实上,解锁正常立绘和和谐的资源都在游戏资源服务器上存着,只是有一个开关被关掉了。只要在版本更新的时候把cheatsCheck
从 0 改为 1,就能解锁正常立绘了。