LOADING

加载过慢请开启缓存 浏览器默认开启

记一次某八按键音游的逆向

起因

兄弟炒币赚了大钱,买了ADX放家里

由于兄弟几个都很变态(当然不包括我),就想到是不是可以买个郊狼回来玩玩

当然不是电那种奇怪的地方(),只是电大腿之类的

我的提议就是,Miss一次电一次

开始

逆向基于的版本是DX-1.56

也就是Prism Plus

当然了,游戏文件我是不会提供的(不过这玩意已经满天飞了吧)

因为我没接触过Unity逆向,第一想法是用Frida去hook,当然是可以的

但是我的游戏是打过mod的,也就是AquaMai

既然现成的Mod我们去看看他的实现思路不是更好

说白了AquaMai的方法就是用MelonLoader注入他的Dll,看代码很容易得知他用的是HarmonyPatch这个框架

一搜不得了,这就是给Unity专用的,而且用起来简单的不得了

确定好框架就可以开始逆向了

很显然,我们需要知道Miss判定的函数,然后Hook他 当执行Miss函数的时候进行某些行为(比如WebSocket给那玩意开电)

众所周知,这游戏是Unity写的,它的核心逻辑都在Assembly-CSharp.dll里面

把这个Dll丢进dnSpy里面

我这里假设你的Assembly-CSharp.dll已经脱壳了

应该吧?不会有人动态解密跑这个吧 不然还hook个蛋

 2025-06-08 215638.png

我一看 类名全都没混淆 简直是天堂

这就是Unity的魅力吗()

首先想法肯定是搜Miss

 2025-06-08 220033.png

有点多啊

全词匹配看看

 2025-06-08 220157.png

这次少了很多

我们看到左边有个Note.Judge

是他吗,点进去看看

 2025-06-09 015538.png

不难发现这是一个枚举?Miss的时候=0分吗

对着他的调用一顿分析

看到有一堆东西调用了这个枚举

挨个进去看他们在相互调用

 2025-06-09 020037.png

一个个进去看,都没找到当miss了调用的逻辑在哪里

我猜这可能是个将判定的时间转换成最终判定的方法,这个枚举就是给转换用的

那不几把是我们要的,尽管可以继续分析 但这样对一个没有混淆的Dll有点太麻烦了

我们接着看Miss的关键词

我们看到有一个NoteJudge.Judgebox里面的玩意

 2025-06-09 020601.png

一看这个枚举调用可多了

 2025-06-09 020829.png

前面的那堆是Debug类的,应该不是我们需要的

我认为我们要找的东西应该是在NoteMananger之类的东西里面

然后我在这堆调用中一眼相中了我的目标

 2025-06-09 021159.png

这里很显然是一个switch语句通过判断Note的类型来赋予对应的DX分

他在Manager类里,和我想得差不多

而且Miss了DX分就是不加的,我觉得没毛病

那就试试吧,理论来说我们当然可以直接反编译这个Dll重新编译

但那样显然不咋健康,侵入性太强了

那反正我们都有Mod,写一个Dll不是更好?

赶紧去看看MelonLoader的文档

哇它里面还内置了HarmonyPatch

无敌了

核心实现就是以下的代码了

[HarmonyPatch(typeof(JudgeResultSt), nameof(JudgeResultSt.UpdateScore))]
    public static class UpdateScorePatch
    {
        static void Postfix(ref JudgeResultSt __instance)
        {
            // 如果 DX分为0,视为 Miss
            if (__instance.Deluxe == 0)
            {
                /// 在后台线程发请求,防止主线程卡顿
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    MelonLogger.Msg("检测到 Miss,发送电击请求...");
                    MissDetected();
                });
               
            }
        }
    }

效果如下

雷电法王
IMG_8724_20250609-023014_.PNG

这里用了多线程,把MissDeteced这个函数换成你需要执行的东西就好

编译了放进Mods文件夹,没啥毛病就收工了

具体详细用WebSocket调用郊狼的代码稍后写完我应该会丢到Github

应该不会有人用到这玩意吧 不要吧

结尾

下次试试mu3的逆向

chusan不是Unity 那个缓一缓

我还记得因为和某人争论chusan是不是Unity还吵过