本文章仅仅用于技术交流与探讨,请尊重版权,如内容侵犯到您的权益,请及时与我联系
首先感谢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演示) 随后换行写入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文件打开 找到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文件我还没有实际操作过,等有机会再更新吧
1 条评论
收到!