Update 2023-11-30 Maimai Reversing.md

This commit is contained in:
Azalea
2023-11-30 00:03:39 -08:00
committed by GitHub
parent c31586ed0d
commit 3c75a1d278
+5 -7
View File
@@ -1,12 +1,10 @@
---
title: Maimai BUDDiES 逆向!
title: Maimai 街机音游逆向!
subtitle: 从拆包到脱壳到魔改遇到的各种坑
tags: [ctf]
---
不久之前某位朋友拿到了最新最热的 maimai DX BUDDiES 1.40 .app 镜像,然后和ta一起折腾了几天拆包脱壳之后终于成功启动了!在这里简单写一下解包过程和学到的事情,作为记录也作为一个教程吧,希望之后尝试解包的人不需要踩同样的坑了。
![[./Assets/2023-11-30 Maimai 逆向/2023-11-30 08-44.png]]
不久之前某位朋友拿到了最新最热的 maimai DX 某版本的 .app 镜像,然后和ta一起折腾了几天拆包脱壳之后终于成功启动了!在这里简单写一下解包过程和学到的事情,作为记录也作为一个教程吧,希望之后尝试解包的人不需要踩同样的坑了。
## 0x1 解压 .app 包
@@ -21,7 +19,7 @@ sudo mount /dev/nbd0 /mnt
# /mnt 里面应该有 internal_{N}.vhd
```
下面分别是两层 VHD 的文件头和 file 信息,`conectix` 开头的是第二层,`eb5290 NTFS` 开头的是第一层:
下面分别是两层 VHD 的文件头和 file 信息,`conectix` 开头的是第二层,`eb5290 NTFS` 开头的是第一层(以下用旧版中二节奏举例)
![[./Assets/2023-11-30 Maimai 逆向/2023-11-30 10-04.png]]
@@ -56,7 +54,7 @@ qemu-nbd 加载了第一层之后连 fdisk 都是懵的,即使是这样乱来
接下来有点没有头绪,到处查查也没有查到有用信息,有一个 [iatrepair](https://github.com/rakisaionji/iatrepair) 仓库的脱壳思路是开一个 QEMU 有 2GB 内存的 VM 里面跑游戏,等游戏加载完之后把整个系统的内存 dump 出来再解包分析... 感觉这个方法好灵车,而且这个加密也会检测系统是不是 VM。
接下来去群里问了问,群友给我了一份街机系统上会有的 [odd.sys](https://drive.google.com/file/d/1J2M-9qiTt3C6Gz4lv8VdajpEZ03fXgcu/view?usp=sharing) 驱动,用 OSRLoader 加载进系统就可以启动游戏了,虽然是黑屏而且不能正常启动 amdaemon。原本以为解密代码在驱动里面,所以先用 IDA Pro 打开驱动看看能不能提取出来,但是发现似乎只有一些 hashing 的 PID 验证和字符串处理,返回一个处理过的字符串,这样看来这个驱动应该是让用户进程上传识别信息来生成真正解密密钥的工具。
接下来去群里问了问,群友给我了一份街机系统上会有的 odd.sys 驱动,用 OSRLoader 加载进系统就可以启动游戏了,虽然是黑屏而且不能正常启动 amdaemon。原本以为解密代码在驱动里面,所以先用 IDA Pro 打开驱动看看能不能提取出来,但是发现似乎只有一些 hashing 的 PID 验证和字符串处理,返回一个处理过的字符串,这样看来这个驱动应该是让用户进程上传识别信息来生成真正解密密钥的工具。
![[./Assets/2023-11-30 Maimai 逆向/2023-11-30 12-36.png]]
@@ -70,7 +68,7 @@ qemu-nbd 加载了第一层之后连 fdisk 都是懵的,即使是这样乱来
![[./Assets/2023-11-30 Maimai 逆向/2023-11-30 12-59.png]]
所以我在 CE 内存视图里面搜这段文字的 Hex 值 49006E00...6C00 然后就找到了!正好只有一个匹配结果。然后记录一下最左边的地址,打开内存区域视图找到这个地址小的最后一块内存区域,右键把整个区域存下来,然后用 hexed.it 打开把 CE 的文件头去掉(截到 DLL 文件头 "MZ" 那里)再把文件尾补到整 32 位,保存改名成 DLL 就可以了!
所以我在 CE 内存视图里面搜这段文字然后就找到了!正好只有一个匹配结果。然后记录一下最左边的地址,打开内存区域视图找到这个地址所属的区域,右键把整个区域存下来,然后用 hexed.it 打开把 CE 的文件头去掉(截到 DLL 文件头那里)再把文件尾补到整 32 位,保存改名成 DLL 就可以了!
![[./Assets/2023-11-30 Maimai 逆向/2023-11-30 13-02.png]]