992 字
5 分钟
0 浏览
利用 dnSpy 或 ILSpy 获取某八个按键的音乐游戏国服的三个加密数值

前言#

上次发了一篇文章是 利用 UnityExplorer 获取某八个按键的音乐游戏国服的三个加密数值,但是这个方案需要你能够启动游戏,并且已经打好了MelonLoader,而本方案只需要一个 Assembly-CSharp.dll 即可,不需要启动游戏,缺点是需要脱壳。

正文#

1.下载并安装 dnSpy 或 ILSpy#

https://github.com/dnSpy/dnSpy/releases

https://github.com/icsharpcode/ILSpy/releases

下载上面任意一个即可,或者选一个你喜欢的或者电脑上有的,需要选择适合你系统的版本。

2.获取脱壳后的 Assembly-CSharp.unpack.dll#

众所周知 SEGA 的大部分游戏都有 HyperTech Crackproof 的壳,这意味着无法直接逆向工程,需要先脱壳。

如果你不希望脱壳,你可以直接使用 UnityExplorer 获取 AesKey,AesIV,ObfuscateParam。指路:利用 UnityExplorer 获取某八个按键的音乐游戏国服的三个加密数值

讲真想要脱这种壳真的不难,如果你有脱壳工具的话可以使用你自己的脱壳工具,或者使用一些在线工具比如 https://senbei.momokko.moe/。

将文件拖入里面之后点击 Unpack 按钮即可,得到的文件就是脱壳后的 Assembly-CSharp.unpack.dll。

3.进行逆向得到 AesKey,AesIV,ObfuscateParam(dnSpy)#

将 Assembly-CSharp.unpack.dll 拖入 dnSpy 中打开,随后在左侧列表依次展开 Assembly-CSharp -> Assembly-CSharp.dll -> Net -> CipherAES。

随后点击 CipherAES ,随后在右侧的窗口中找到 private static readonly string AesKey 和 private static readonly string AesIV ,这两个就是我们需要的AesKey和AesIV

大概是长这样

using System;
using System.Security.Cryptography;
using System.Text;
using MAI2.Util;
namespace Net
{
// Token: 0x02000233 RID: 563
internal class CipherAES : Singleton<CipherAES>
{
// Token: 0x06001681 RID: 5761 RVA: 0x0009474C File Offset: 0x0009474C
public static byte[] Encrypt(byte[] data)
{
byte[] result;
using (AesManaged aesManaged = new AesManaged())
{
// ...
}
return result;
}
// Token: 0x06001682 RID: 5762 RVA: 0x000947DC File Offset: 0x000947DC
public static byte[] Decrypt(byte[] encryptData)
{
byte[] result;
using (AesManaged aesManaged = new AesManaged())
{
// ...
}
return result;
}
// Token: 0x04000FA1 RID: 4001
private static readonly int BLOCK_SIZE = 128;
// Token: 0x04000FA2 RID: 4002
private static readonly int KEY_SIZE = 256;
// Token: 0x04000FA3 RID: 4003
private static readonly string AesKey = "************************";
// Token: 0x04000FA4 RID: 4004
private static readonly string AesIV = "************************";
}
}

这样就得到了 AesKey 和 AesIV。

如果不希望自己翻的话还是在左侧的列表中可以直接找到 AesIV @04000FA4 和 AesKey @04000FA3

AES Key:

Net.CipherAES
// Token: 0x04000FA3 RID: 4003
private static readonly string AesKey = "************************";

AES IV:

Net.CipherAES
// Token: 0x04000FA4 RID: 4004
private static readonly string AesIV = "************************";

ObfuscateParam:

Net.Packet.Packet
// Token: 0x040013D7 RID: 5079
protected static string ObfuscateParam = "********";

注意 ObfuscateParam 不在 Net -> CipherAES 中,需要切换到 Net -> Net.Packet -> Packet -> ObfuscateParam 中

4.进行逆向得到 AesKey,AesIV,ObfuscateParam(ILSpy)#

和上面的操作差不多,用 ILSpy 打开 Assembly-CSharp.unpack.dll ,随后在左侧列表依次展开 Assembly-CSharp.unpack (0.0.0.0,.NETFramework,v4.0) -> Net -> CipherAES,点击 CipherAES ,随后在右侧的窗口中找到 private static readonly string AesKey 和 private static readonly string AesIV ,这两个就是我们需要的AesKey和AesIV。

AES Key / IV:

Net.CipherAES
// Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
using System.Security.Cryptography;
using System.Text;
using MAI2.Util;
using Net;
internal class CipherAES : Singleton<CipherAES>
{
private static readonly int BLOCK_SIZE = 128;
private static readonly int KEY_SIZE = 256;
private static readonly string AesKey = "************************";
private static readonly string AesIV = "************************";
public static byte[] Encrypt(byte[] data)
{
// ...
}
public static byte[] Decrypt(byte[] encryptData)
{
// ...
}
}

ObfuscateParam:

Net.Packet.Packet
// Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
protected static string ObfuscateParam = "********";

注意 ObfuscateParam 不在 Net -> CipherAES 中,需要切换到 Net -> Net.Packet -> Packet -> ObfuscateParam 中

常见问题#

  1. Q:我在 dnSpy / ILSpy 中没有找到 AesKey AesIV 和 ObfuscateParam,这是为什么?

    A: 你可能没有找到正确的类,或者没有找到正确的字段。请检查一下你的类是否正确,或者检查一下你的字段是否正确。

  2. Q:为啥我看到的内容和你的不一样?

    A: 你可能选错了语言类型,在 dnSpy / ILSpy 中需要选择C#,不过其实都差不多只要你能找到 AesKey AesIV 和 ObfuscateParam 就可以了。

利用 dnSpy 或 ILSpy 获取某八个按键的音乐游戏国服的三个加密数值
https://blog.yufurry.cn/posts/00000024/
作者
蓝影Shadow
发布于
2026-09-23
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取