AI DIGEST
AI 摘要
LIVE

这篇文章分享了一个针对MuDevs Season 21 Part 1-2和Part 2-3的许可证服务器模拟器,旨在实现完全兼容。 发布包包含MuDevLicenseEmulator v1.1.1、配套的Trust Client以及MuDevs PREMIUM S21服务端文件。 该模拟器未经过混淆,仅通过拦截通信并返回有效响应来绕过验证,不修改文件或注入代码。 使用时需编辑hosts文件,并确保客户端与服务端的CustomerName、IP地址及版本号等配置完全一致。 文章还提供了详细的安装指南,包括创建数据库、执行SQL脚本、配置ODBC以及正确的启动顺序。 此外,作者附带了一个用于读写main.devs文件的Python脚本,并计划未来公开源代码供社区改进。

MuDevs S21 1-2/2-3 License Server Emulator 奇迹s21破解版

Hello there,

Sharing with you a 100% compatible License Server for MuDevs Season 21 Part 1-2 and Part 2-3 (not sure).

Before anything else, I’d like to thank the different people who helped me throughout this research. Whether it was by sharing information, discussing ideas, or simply pointing me in the right direction, they all contributed in one way or another. I won’t mention anyone by name unless they explicitly ask me to.

What’s included in this release?​

  • MuDevLicenseEmulator v1.1.1 (latest version and probably my last release for this project).
  • Trust Client S21 Part 1-2.
  • MuDevs PREMIUM S21 Server.

MuDevLicenseEmulator v1.1.1​

The emulator is provided completely unpacked and unobfuscated. There are no protectors, packers, or anything hidden. I’d say almost anyone, especially with today’s AI tools, can inspect the code, understand how it works, and even create their own revisions. If it’s not too much to ask… please don’t remove my name from the credits.

I’ll also be publishing the source code on GitHub soon in case someone from the community wants to fork the project and continue maintaining or improving it. There isn’t much magic behind it—almost the entire project lives in a single source file. If is not that muc

I’d also like to make one thing very clear: this application does not modify files, inject code, install drivers, or perform any suspicious actions. Its only purpose is to intercept the license server communication and reply with a valid license response. If you’re unsure, feel free to inspect the source code and verify everything yourself. You still need to edit your host file.

ie

Code:
127.0.0.1 l1.mudevs.com
127.0.0.1 l2.mudevs.com
127.0.0.1 l3.mudevs.com

 

1785812874041 - MuDevs S21 1-2/2-3 License Server Emulator - RaGEZONE Forums

sha: a51537ce91260fd6ec718c6fa49386a95571725bd1fcad8ff4fc69e3c18c4620
user limit cap: 9999

MuDevsLicenseEmulator

Trust Client S21 Part 1-2​

A compatible client is included with this release.

At the moment, MuDevs still relies on the CustomerName value as part of its license validation. This means the CustomerName must match exactly on both the client and the server.

The included client already comes with a main.devs configured using CustomerName 511. All you need to do is change the server IP and configure the same CustomerName on your server.

As usual, the VersionSerial, and any other client settings must also match the server configuration.

If you generate a new main.devs file later, don’t forget to update the server configuration as well so both sides continue using the same values.

1785812987476 - MuDevs S21 1-2/2-3 License Server Emulator - RaGEZONE Forums

Client

Launcher
you need to use a laucnher.

source: unkwnown
Launcher

MuDevs PREMIUM S21​

The original MuDevs PREMIUM S21 server is included and is fully compatible with the License Emulator provided in this release.

1785813070502 - MuDevs S21 1-2/2-3 License Server Emulator - RaGEZONE Forums

 

1785813584230 - MuDevs S21 1-2/2-3 License Server Emulator - RaGEZONE Forums

Server
The server configuration is basically the same as any other mu server. You’ll only need to change a few IP addresses and not much else. There’s really nothing complicated about it.
With this configuration, I was able to connect and stay online for more than 6 hours without any issues. So far, I haven’t encountered any problems.
That said, there are probably better ways to configure it, so don’t treat these settings as the only or “correct” way to do it. Time will tell as more people test and refine the setup.

1785813979249 - MuDevs S21 1-2/2-3 License Server Emulator - RaGEZONE Forums

Also included as a little bonus is a script to read and write any main.devs file. It was the same tool I used throughout the research process.
If anyone feels like building a native Windows application around it, that would be awesome.

Python:
#!/usr/bin/env python3
from __future__ import annotations

import hashlib
import json
import sys
from pathlib import Path


XOR_KEY = 0xDA
SUB_KEY = 0x65
LATIN_TEXT_BYTES = {
    0xC1, 0xC3, 0xC7, 0xC9, 0xCD, 0xD1, 0xD3, 0xD5, 0xDA,
    0xE1, 0xE3, 0xE7, 0xE9, 0xED, 0xF1, 0xF3, 0xF5, 0xFA,
}


def decrypt(data: bytes) -> bytes:
    return bytes(
        ((value + (SUB_KEY ^ ((index >> 8) & 0xFF))) & 0xFF)
        ^ (XOR_KEY ^ (index & 0xFF))
        for index, value in enumerate(data)
    )


def encrypt(data: bytes) -> bytes:
    return bytes(
        (
            (value ^ (XOR_KEY ^ (index & 0xFF)))
            - (SUB_KEY ^ ((index >> 8) & 0xFF))
        )
        & 0xFF
        for index, value in enumerate(data)
    )


def fixed_string(data: bytes) -> str:
    return data.split(b"\0", 1)[0].decode("ascii", "replace")


def ascii_strings(data: bytes, minimum: int = 4) -> list[dict[str, object]]:
    results: list[dict[str, object]] = []
    start = None
    for index, value in enumerate(data + b"\0"):
        if 32 <= value <= 126 or value in LATIN_TEXT_BYTES:
            if start is None:
                start = index
        elif start is not None:
            if index - start >= minimum:
                results.append(
                    {
                        "offset": start,
                        "offset_hex": f"0x{start:08X}",
                        "encoding": "windows-1252",
                        "value": data[start:index].decode("windows-1252", "replace"),
                    }
                )
            start = None
    return results


def utf16le_strings(data: bytes, minimum: int = 4) -> list[dict[str, object]]:
    results: list[dict[str, object]] = []
    index = 0
    while index + 1 < len(data):
        start = index
        chars = []
        while index + 1 < len(data) and 32 <= data[index] <= 126 and data[index + 1] == 0:
            chars.append(chr(data[index]))
            index += 2
        if len(chars) >= minimum:
            results.append(
                {
                    "offset": start,
                    "offset_hex": f"0x{start:08X}",
                    "encoding": "utf-16le",
                    "value": "".join(chars),
                }
            )
        index = max(index + 1, start + 1)
    return results


source = Path(sys.argv[1])
output = Path(sys.argv[2])
output.mkdir(parents=True, exist_ok=True)

encrypted = source.read_bytes()
plain = decrypt(encrypted)
round_trip = encrypt(plain)

fields = {
    "launcher_type": plain[0],
    "customer_name": fixed_string(plain[1:33]),
    "ip": fixed_string(plain[33:65]),
    "port": int.from_bytes(plain[66:68], "little"),
    "version": fixed_string(plain[68:76]),
    "serial": fixed_string(plain[76:93]),
    "window_name": fixed_string(plain[380:412]),
    "screenshot_path": fixed_string(plain[412:462]),
    "client_name": fixed_string(plain[462:494]),
    "main_dll": fixed_string(plain[686:718]),
    "lang_mpr_password": fixed_string(plain[718:750]),
}

strings = ascii_strings(plain) + utf16le_strings(plain)
strings.sort(key=lambda item: (int(item["offset"]), str(item["encoding"])))

report = {
    "source": str(source),
    "size": len(encrypted),
    "encrypted_sha256": hashlib.sha256(encrypted).hexdigest(),
    "decrypted_sha256": hashlib.sha256(plain).hexdigest(),
    "round_trip_exact": round_trip == encrypted,
    "fields": fields,
    "string_count": len(strings),
    "strings": strings,
}

(output / "main.devs.decrypted.bin").write_bytes(plain)
(output / "main.devs.reencrypted.bin").write_bytes(round_trip)
(output / "main.devs.report.json").write_text(
    json.dumps(report, indent=2, ensure_ascii=True) + "\n", encoding="ascii"
)

with (output / "main.devs.strings.txt").open("w", encoding="utf-8") as handle:
    for item in strings:
        handle.write(f"{item['offset_hex']} [{item['encoding']}] {item['value']}\n")

with (output / "main.devs.hex.txt").open("w", encoding="ascii") as handle:
    for offset in range(0, len(plain), 16):
        chunk = plain[offset:offset + 16]
        hex_bytes = " ".join(f"{value:02X}" for value in chunk)
        text = "".join(chr(value) if 32 <= value <= 126 else "." for value in chunk)
        handle.write(f"{offset:08X}  {hex_bytes:<47}  {text}\n")

print(json.dumps({key: value for key, value in report.items() if key != "strings"}, indent=2))

The goal has been accomplished.

I’d really like to see the community keep sharing and releasing new things whenever possible. This game was a big part of my teenage years, just like it was for many of you. I hope this release helps others learn, build new projects, and keep the community moving forward.

There’s still plenty to discover, improve, and share. Hopefully this is just another step that encourages more people to contribute.

Enjoy, and make good use of it.

rivotril_ out.

机翻

安装指南
下载资源
客户端
https://drive.google.com/file/d/1O1eQBb53QgqZVjJcXwBsF2HAYXGqVrHH/edit

服务端(MuServer)
https://www.transferxl.com/download/06j105VfrQs0YZ

登录启动器(Launcher)
https://mega.nz/file/xqpn1BiI#FtTl_CsV6kPTYVhjjHQZhVwkyW8RdIoExUMlsl59Whs

主程序编辑器(Main.devs Editor)
https://drive.google.com/file/d/1XOYYO5I2StJMwTq2OQ_hyHy3PsZ-5JzU/view

许可模拟器(License Emulator)
https://drive.google.com/file/d/1AQYtFSr6jJmKCuuZukXhHIhykA3xe7CG/view?usp=sharing


服务端(MuServer)安装步骤
1. 初始配置
打开服务端配置文件,修改以下参数:

  • 设置你服务器的 IP 地址
  • 客户名称(Customer Name)填写:511

重要提示:硬件 ID(Hardware ID)无需修改。

2. 创建数据库
在 SQL Server 中新建两个数据库:

  • MuOnline
  • BattleCore

3. 执行 SQL 脚本
进入服务端文件夹内的 DB 子目录,运行里面两套 SQL 脚本:

  • MuOnline 数据库专用脚本
  • BattleCore 数据库专用脚本

4. 配置 ODBC 数据源
启动服务前,创建全部所需的 ODBC 数据库连接。

5. 运行许可模拟器
打开任何服务端程序前,先启动 许可模拟器(License Emulator)。
模拟器启动完成后,再依次运行:
连接服务(ConnectServer)、数据服务(DataServer)、游戏服务(GameServer)以及其他配套程序。

建议:将许可模拟器加入开机自启,服务器开机后自动运行。
备注:许可模拟器会自动播放背景音乐,可按需关闭音效。


客户端配置步骤
1. 解压客户端
将客户端压缩包完整解压至使用目录。

2. 替换登录启动器
解压登录启动器压缩包,把全部文件复制到客户端根目录,如有同名文件直接覆盖。

3. 修改主程序配置文件

  • 打开主程序编辑器(Main.devs Editor)
  • 在客户端文件夹找到 main.dev 文件并用编辑器打开
  • 修改服务器 IP、端口、服务器名称等全部对应参数
  • 保存修改

 


完整启动流程

  • 运行许可模拟器
  • 启动所有服务端程序
  • 打开登录启动器
  • 进入游戏,测试服务器连接是否正常

 


快速操作清单

  • 下载全部所需文件
  • 配置服务器 IP,客户名称填 511
  • 创建 MuOnline、BattleCore 两个数据库
  • 执行对应 SQL 数据库脚本
  • 配置 ODBC 数据源
  • 启动许可模拟器
  • 开启整套游戏服务端
  • 解压游戏客户端
  • 将登录启动器文件覆盖至客户端目录
  • 使用编辑器修改main.dev配置
  • 打开启动器,进入游戏

转自老外的帖子https://forum.ragezone.com/threads/mudevs-s21-1-2-2-3-license-server-emulator.1269910/

下载地址

我用夸克网盘给你分享了「QJs21」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/~d4333aU2Ot~:/


© 版权声明
THE END
文章不错?点个赞呗
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容