喵赛克 PC 版 DLC 实现方法分析

机缘巧合下来摸黑产(不


嘛,人家总是要恰饭的。这篇文章也是笔记向的;所以相关的文件是不可能会发的,步骤也不会讲的很详细。

清明节假期的时候舍友在 Steam 看到了喵赛克出了 PC 版,作为音游爱好者第一时间就在她的电脑购买了游戏并作为礼物送给我。然而玩的时候发现诡异的手感实在有些不能接受,(或许是我本身就不太适应键盘上玩这种 osu Mania 模式一样的游戏) 就连谱面都是之前早就玩过的。 因为自己冲动走了礼物渠道肯定也是退款无门。当然这样说其实也有些过分,对比 iOS 端这里的乞丐版还是有不少谱面是 iOS 端所没有的。
于是和室友吐槽后马上开始研究怎么样去掉内购来平衡心态的事(大雾

在真的反编译前,首先当然是在网上找了移动端游戏的破解的思路,毕竟我不是很懂x86汇编的;这方面研究的人挺多的…找资料没有那么困难。如果用 Unity 反编译来当关键词搜索很大概率会看到 Mono 这个文件夹,但其实所有线索都直接指向 MUSYNX\MUSYNX_Data\Managed 这里,要动手脚的地方是在assembly_csharp.dll 这个文件中的,找到后直接 dnSpy 打开即可。

左边的窗体中可以看到这些方法名,如果你来开发这个游戏会把内购认证放在什么名字下呢

最后参考了很多资料,在 UserMemory 方法下找到 HasApurchaseld() 类 ,修改IL指令分别为 ldc.i4.1 和 ret,这样所有的内购就都属于你了;当然也可以直接右键然后编辑类,直接输入 return ture; 然后再编译,效果是一致的。

唔,ldc.i4.1 代表的是在内存堆栈中新建一个 int32 类型的值并赋初值1,ret就是返回这个值,如果是1的话就 ture 了。

然后再找到 HasApurchaseld() 类 ,做和上面一样的事情使其return ture; 就好了

最后,文件——保存模块,就好了。

使用 nginx 进行端口转发

这个应该是很简单的东西了,不过在此之前我对端口转发,反向代理之类的名词都还没什么概念呢,虽然心里有着各式各样的需求但完全不知道怎么样实现,通过最近一段时间的学习至少可以知道这些网络技术是用来解决什么样的问题的了(x

所以说什么地方才会用得到端口转发呢?大概就是在同一个 IP 上面运行了两个服务的时候吧…这样说有些难以理解。我就举个我真实情况下的例子吧:

在上面的文章里,我把路由器和 VPS 连接在了一起,但是每每想要访问路由器的 SSH 时候都得先登录进去 VPS 的 SHH,输入 root@10.0.1.2 才能继续访问路由器的 SSH,非常不方便了,如果想要直接访问到路由器的 SSH,就需要设置端口转发了。

这里端口转发使用强大的 nginx 来完成:安装和配置流程如下

apt update #更新软件源
apt install nginx #安装 nginx
nginx -t #检查一下配置文件( nginx.conf )的路径在哪

对配置文件进行编辑,添加下面的内容
stream{ }表示转发 TCP Stream,proxy_pass表示被转发的地址和端口,上面的例子中路由器的 IP 地址是 10.0.1.2,所以下面就这样填写,这样属于路由器22端口的服务就被转发到了 VPS 上的 2222 端口了。

stream {
server {
listen 2222;
proxy_pass 10.0.1.2:22;
}
}

修改后保存,然后使用
nginx -t #检查一下配置文件( nginx.conf )的语法格式是否合格
没有问题后重启 nginx,配置就生效了。

whereis nginx #确定 nginx 的位置
./nginx -s reload #重新启动 nginx