本文章仅仅用于技术交流与探讨,请尊重版权,如内容侵犯到您的权益,请及时与我联系

首先感谢Azalea的这篇BlogMaimai 街机音游逆向! 里面的教程大多有效,但部分步骤现在已经有了更好的解决方案,又因为我在这条路上踩了太多坑,所以才有了这篇文章

需要准备的工具

  • 你需要解密的app原包文件(废话
  • fsdecrypt.exe
  • calculate_iv.py
  • RStudioPortable.exe

fsdecrypt.exe以及calculate_iv.py文件可前往SEGA Decryption Guide获取

出发咯\~

前期步骤与SEGA Decryption Guide内的Readme文件一致,在此仅作大致说明

首先你需要一个包含了AES key的Bin文件,嗯?没有那种东西?在这里或许能找到你想要的

如果你不知道应该下载哪一个Bin文件的话,或许可以从app文件的名称找到线索

随后用16进制编辑器打开你的Bin文件(这里用Sublime Text演示)可以从这里用16进制打开 随后换行写入EB 52 90 4E 54 46 53 20 20 20 20 00 10 01 00 00(如果你也使用Sublime Text的话,记得将大写字母转换为小写,并且使用英文输入法添加空格)并保存

在当前目录下打开cmd或者powershell窗口并执行下列指令

fsdecrypt <PCB CODE>.bin 0x200000 <path/to/app> <out.vhd>

其中 <PCB CODE>.bin应改为修改好的bin文件的文件名,<path/to/app> 应改为app文件完整路径<out.vhd>应改为你想要的输出的文件的名字。

请注意应该去掉前后的‘<>‘再执行 运行完毕后,你的目录下应该会出现类似于out.vhd的文件。

  • 随后转移到calculate_iv.py生成key 1

在这一步之前,请确保你的系统中有python环境。为了避免异常情况,你可以将该py文件删减至以下内容

import os
import glob

def byte_xor(ba1, ba2):
    return bytes([_a ^ _b for _a, _b in zip(ba1, ba2)])

print("You must decrypt the opt first using fstools and the OPT.bin\nPlace everything in the same directory\nONLY HAVE ONE VHD IN THE DIRECTORY AT A TIME")
cwd = os.getcwd()

with open(str(cwd) + "/exfat.bin", "rb") as f:
    exfat_HEADER = f.read(-1)
    print("exFAT Header = " + str(exfat_HEADER.hex()))

placeholder = glob.glob("*.vhd")
vhd = str(placeholder[0])
with open(str(cwd) + "/" + vhd, "rb") as f:
    key1 = f.read(16)
    print("key1 =" + str(key1.hex()))

随后运行(请保证py文件和vhd文件处于同一目录下)

python calculate_iv.py

然后你应该会看见key1的内容,将他复制下来,并打开Bin文件,替换掉你刚才写入的内容,并再次运行fsdecrypt的指令

至此,你将得到一个解密过后的VHD文件

注意注意~

至此,你可以切换至RStudio进行后续操作,你也同样可以使用Azalea Blog内的内容提取文件,但同样你也可以使用本Blog的教程在Windows环境下完成操作。

打开RStudio,点击左上角驱动器,选择打开镜像,并找到你的vhd文件打开 如果你的app文件是大版本更新的数据包,那么右侧应该为internal_0 找到internal_0.vhd文件并导出,随后再次打开internal_0.vhd文件,你就能看到游戏本体了,将它导出后,恭喜你,走遍了该区域哦 就完成了解包全流程了。

但如果你和我一样,打开后发现是internal_1.vhd的话,则需要你去找到当前版本的大版本app文件进行同样的解包操作。 比如,你当前操作的游戏版本为1.41,那么你就需要找到1.40的app文件,解密后得到internal_0.vhd文件,随后再在RStudio里面打开internal_1.vhd,并选择internal_0.vhd文件打开,你就能得到完整的文件了。

至于游戏的脱壳操作,还请移步至Maimai 街机音游逆向!进行更深入的研究。

opt文件我还没有实际操作过,等有机会再更新吧

最后修改:2024 年 07 月 13 日
如果觉得我的文章对你有用,请随意赞赏