SDGB从解包到运行
本教程适用于将 SDGB 解包并在你的 windows 电脑及手台上游玩
文章中内容大部分由作者在尝试SDGB解包时于互联网搜集整理得到,苦于网络上大部分教程落时,且较为混乱,故作此教程。 特别注明:大部分资源非本人制作,仅进行转载。
在开始之前
你需要知道的:
app分类:
app按名字对应了不同版本的游戏
* SDEZ: maimai でらっくす (日服)* SDGB: 舞萌 DX (国服)* SDGA: maimai DX (国际服)
一些更新 app 需要依赖本体 app 才能获取内容,所以在开始前请确保 app 文件齐全。本教程不提供 app 及 opt,如有需要请自行寻找。
.APP 解包
vhd提取
[ ]内的部分表示可选项,如果没有直接忽略即可。
首先创建一个文件夹用作解包和运行的文件夹(下文称为 /workdir ),将 .APP 文件以及 unsegaREBORN.exe 复制到其中。
在该目录下打开cmd/powershell,输入下面的命令后看见 Internal VHD extraction completed successfully 或 Child internal VHD identified, finalizing process. 即为解包完成。
unsegaREBORN.exe <appname0></appname0>.app [<appname1></appname1>.app]现在你的文件目录应该是这样的:
workdir/├──<appname0></appname0>/│ ├── contents│ └── internal_0.vhd├── [<appname1></appname1>]/│ └── [internal_1.vhd]├── <appname0></appname0>.app├── <appname0></appname0>.ntfs├── [<appname1></appname1>.app]├── [<appname1></appname1>.ntfs]└── unsegaREBORN.exe文件提取
首先在 /workdir下或其他地方新建一个文件夹(下称 /game)用于存放游戏文件。
-
单 vhd 将/contents下所有内容移动到 /game。没有 /contents ?如果没有 /contents 文件夹出现,说明 .APP 并非本体app而是升级app,需自行寻找本体。 -
多 vhd需要将子盘(internal_1.vhd)连接到父盘(internal_0.vhd)才能获取完整内容。-
安装 Hyper-V按 Win + R 输入:optionalfeatures 后回车。在弹出的 Windows 功能 窗口里,找到 Hyper-V,确保下面两项都勾选:Hyper-V 平台Hyper-V 管理工具
安装完成后重启电脑。
-
链接vhd按 Win + R 输入:virtmgmt.msc 后回车。在右侧的 操作(Actions) 面板中,点击 编辑磁盘(Edit Disk…) 。在弹出的向导中,选择 internal_1.vhd (注意是子盘)。选择重新连接父盘 internal_0.vhd。
-
提取内容双击打开 internal_1.vhd 会出现一个新磁盘,将其中的文件全部拷贝到 /game 下。
-
现在我们拥有了强大的
unsegareborn,故不再需要如此繁琐的过程
便捷解包
将你的.app和.opt文件全部用 unsegareborn 打开即可。
这将在你的工作目录下生成一个以你 app 包名命名的文件夹。
运行游戏
Segatools
显然我们并没有官机硬件,因此需要 Segatools 来提供硬件模拟和游戏加载器。请自行下载 segatools.zip 并解压,只需保留 mai2.zip,将 mai2.zip 解压到 /game/Package 下。
amdaemon 脱壳
大部分 SEGA 系游戏启动时必须经过 amdaemon.exe,但 amdaemon.exe 带有的壳会阻止 Segatools 调用它,所以必须先把 amdaemon.exe 脱壳。
-
在/workdir打开终端, 输入git clone https://gitdab.com/SEGA/sega.git -
复制/game/amdaemon.exe到/workdir/sega/tools/Crackproof/DecryptCrackproofExe64下。 -
接着输入cd ./sega/tools/Crackproof/DecryptCrackproofExe64DecryptCrackproofExe64.exe amdaemon.exe出现Write to .\amdaemon.unpack.exe即为脱壳成功 -
脱壳后的程序为/workdir/sega/tools/Crackproof/DecryptCrackproofExe64/amdaemon.unpack.exe,复制其到/game/Package,删除原amdaemon.exe,将复制过去的amdaemon.unpack.exe重命名为amdaemon.exe。
现在这种脱壳方式已经无效了,我们采用新的方式
XenonUnpack这里本文作者没能找到 XenonUnpack 的原作者,故引用了他人的下载渠道。
- 我们用 XenonUnpack.exe 打开 amdaemon.exe,等待生成 amdaemon.unpack.exe
- 删除原
amdaemon.exe,将amdaemon.unpack.exe复制到/game/package,并重命名为amdaemon.exe。
odd.sys
目前还有一些文件有壳,但是不需要脱出,可以使用 odd.sys 作辅助解密的内核模块。脱壳其他文件非常麻烦且没有必要,带壳运行显然更为高效。
解压得到 odd.sys 后,放入 /game/Package 下即可。稍后的启动脚本里会包含 odd.sys 的安装与卸载。
MelonLoader
原生的游戏程序需要打 Mod 才能实现在普通电脑上运行以及连接私服等操作,而 MelonLoader 正是 Unity 游戏的 Mod 加载器。
MelonLoader 可通过 MaiChartManager 直接安装。
只需打开 Microsoft Store 搜索即可直接安装 MaiChatManager。
按如下操作安装 MelonLoader :
- 点击 选择游戏目录,选择
/game/Package后点击启动,会弹出提示。 - 关掉提示,点击
Mod 管理,直接点击安装 MelonLoader 即可。
AquaMai
AquaMai 是开源 Mod,它不仅实现了游戏启动所需要的修补还提供了很多有用的功能。
由于 AquaMai 由于种种原因,对于 SDGB 的支持已经不是很好,故本文作者基于 AquaMai 自制了 AquaMai-for-SDGB
- 将
AquaMai-for-SDGBclone 至本地,进行编译 - 将
AquaMai.dll复制进/game/package/Mods - 将
AquaMai.toml复制进/game/package - 关闭 MaiChartManager 窗口重启,观察到
A000加载出曲目即为成功安装。 - 点击
资源目录管理 --> 导入,选择解压出的更新包文件夹添加更新包
启动脚本
在 /game/Package 文件夹下新建 start.bat,右键修改,将下方启动脚本填入并保存:
@echo off%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exitchcp 936 > nulsetlocal EnableDelayedExpansioncd /d "%~dp0"
echo [INFO] 正在启动。
sc query odd > nulif !errorlevel! == 1060 ( echo [INFO] odd.sys 未安装,正在进行安装... copy "%~dp0\odd.sys" "%SystemRoot%\System32\drivers\odd.sys" > nul sc create odd binPath=System32\drivers\odd.sys type=kernel > nul if !errorlevel! == 0 ( echo [INFO] odd.sys 安装成功。 ) else ( echo [ERROR] odd.sys 安装失败,请检查权限或手动安装。 echo [ERROR] 游戏将无法正常运行。 pause exit /b 1 ))
echo [INFO] odd.sys 已安装,正在尝试启动。sc start odd > nulset result=!errorlevel!if !result! == 1056 ( echo [INFO] odd.sys 服务已经启动。) else ( if !result! == 0 ( echo [INFO] odd.sys 服务启动成功。 ) else ( echo [ERROR] odd.sys 服务启动失败,请检查权限或手动启动。 echo [ERROR] 游戏将无法正常运行。 pause exit /b 1 ))
echo [INFO] 正在启动 amdaemon.exe。start /min inject -d -k mai2hook.dll amdaemon.exe -f -c config_common.json config_server.json config_client.json
echo [INFO] 游戏进程已启动。Sinmai.exe -silent-crashes
echo [INFO] 正在关闭 amdaemon.exe。taskkill /f /im amdaemon.exe > nul
echo [INFO] 正在关闭 odd.sys 服务。sc stop odd > nulsc delete odd > nuldel "%SystemRoot%\System32\drivers\odd.sys" > nulset result=!errorlevel!if !result! == 0 ( echo [INFO] odd.sys 服务已停止。) else ( echo [ERROR] odd.sys 服务停止失败,请手动停止服务。)
echo [INFO] 进程已结束。pauseexit /b 0双击 start.bat ,若看见 Sinmai 的窗口弹出,则已完成。
可能会出现双击后一闪而过且 Sinmai 窗口未出现,你是不是用的 win11?如果是的话,将上述的文件中开头终端提权的命令删除,然后右键以管理员身份运行。
运行配置
ICF
游戏需要一个 ICF 文件用于查找每次更新包的信息。通常完整的理科里会含有一个 icf 文件,只需稍作修改便可以正常使用:
-
下载
icf-reader。 -
在
/game/Package下创建文件夹/amfs、/option、/appdata,将.icf文件重命名为ICF1(没有后缀)后,和icf-reader一起复制到/game/Package/amfs。 -
在
/game/Package/amfs下打开终端,输入:icf-reader.exe decode ICF1 ICF.json得到 json 格式的 ICF 数据。
-
打开
ICF.json编辑,按照获取的更新包依次填入:-
"type": "Option",通常是 Option,无需修改。
-
option_id: K114,按照获取的更新包名称填入,更新包名称格式为首项为大写字符,后三位为数字。
-
datetime: 2114-05-14T19:19:10,更新包时间。
-
is_prerelease: false
一般为 false
-
-
完成后保存
-
生成新的 ICF1:
icf-reader.exe encode ICF.json ICF1
segatools.ini
SEGATOOLS 详细配置:
本站只提供运行必须的参数和解释, 如果需要更多参数以及详细解释请参考此处。
[aime]enable=1AimeGen=1
;如果使用MuNet私服[DNS]default=play.mumur.netaimedb=aime.mumur.net
[KeyChip]; 请一定要填写这个; 获取方式 https://portal.mumur.netEnable=1ID=AXXX-XXXXXXXXXXX; 请按获取的app填写GameID=SXXX
; 以下配置一般不需要手动修改[vfs]amfs=amfsoption=optionappdata=appdata
[netenv]enable=1
[io4]enable=1test=0x38service=0x39coin=0x30
[button]enable=1
[gpio]dipsw1=1mai2.ini
这是用于指定 segatools 模拟硬件的配置文件。在 /game/Package 下新建该文件,复制下方填入保存即可。
[AM]Target = 0DummyLED = 1DummyChime = 1DummyTouchPanel = 1IgnoreError = 1DummyCodeCamera=1DummyPhotoCamera=1
QrCameraId=0
[Sound]Sound8Ch=0
[Debug]Debug=1AllOpen=0AllChara=0AllCollection=0MaxTrack=0SinglePlayerType=1Aquamai.toml
这是用于控制 Aquamai 的配置文件,原本需要自行修改,但是现在可以通过 MaiChartManager 操作。
如果上方操作无误,那么此时点击 Mod 管理 即可看见所有的可选项。
最后
声明
出于法律角度考量,本教程不会提供连接官服方法,只提供连接私服的方式。
如果你迫切的想要知道官服连接的相关方式以作为学习用途,请参考本博客另一篇文章《数据上传失败,无法反映本次游玩成绩》中服务器校验相关部分。