跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

3DS Simple CIA Converter 小修改

软件截图

软件本身挺好用的,除了每次都要点几次确认按钮。

这个小修改让软件直接使用默认设定的目录以及路径。

下载

下载下来的是补丁文件,请使用 WinIPS(或同类软件) 打上 ips 补丁,或使用 x64dbg 打上 1337 补丁。


具体修改

一共修改了四个地方。

首先是“建立 ncchinfo.bin 文件”的选择目录对话框:

00599B67 | 89 55 FC | mov dword ptr ss:[ebp-4],edx
00599B6A | EB 3C    | jmp 3ds_simple_cia.599BA8
00599B6C | 90       | nop
00599B6D | 90       | nop
00599B6E | 90       | nop

因为软件默认提供了正确的 roms 目录,因此只需要把默认的目录传给程序就行。刚好此处缓冲区 [ebp-4] 为用户选择的目录,以及 edx 储存了当前的默认目录。

其次,是之后的 ncchinfo.bin 文件的选择。因为软件并没有拼接完整的路径出来,所以需要我们自己来拼。

00595844 | EB 0E          | jmp 3ds_simple_cia.00595854   |
00595846 | 90             | nop                           |
00595847 | 8B 45 A4       | mov eax,dword ptr ss:[ebp-5C] |
0059584A | E8 1D 9B F7 FF | call 3ds_simple_cia.50F36C    |
0059584F | 8B 45 A4       | mov eax,dword ptr ss:[ebp-5C] |
00595852 | 90             | nop                           |
00595853 | 90             | nop                           |
00595854 | 8D 45 90       | lea eax,dword ptr ss:[ebp-70] |
00595857 | BA 5C 5A 59 00 | mov edx,3ds_simple_cia.595A5C | 595A5C:L"\\ncchinfo.bin"
0059585C | E8 7B 2C E7 FF | call 3ds_simple_cia.4084DC    |
00595861 | EB 1A          | jmp 3ds_simple_cia.0059587D   |
00595863 | 90             | nop                           |
00595864 | 05 94 00 00 00 | add eax,94                    |
00595869 | BA B8 5A 59 00 | mov edx,3ds_simple_cia.595AB8 | 595AB8:L"bin"
0059586E | E8 05 22 E7 FF | call 3ds_simple_cia.407A78    |
00595873 | 8B 45 A4       | mov eax,dword ptr ss:[ebp-5C] |
00595876 | 90             | nop                           |
00595877 | 90             | nop                           |
00595878 | 90             | nop                           |
00595879 | 90             | nop                           |
0059587A | 90             | nop                           |
0059587B | 90             | nop                           |
0059587C | 90             | nop                           |
0059587D | 8D 45 90       | lea eax,dword ptr ss:[ebp-70] |
00595880 | BA CC 5A 59 00 | mov edx,3ds_simple_cia.595ACC | 595ACC:L"ncchinfo.bin"
00595885 | E8 52 2C E7 FF | call 3ds_simple_cia.4084DC    |
0059588A | EB 18          | jmp 3ds_simple_cia.005958A4   |
0059588C | 90             | nop                           |
0059588D | 8B 45 A4       | mov eax,dword ptr ss:[ebp-5C] |
00595890 | 8B 10          | mov edx,dword ptr ds:[eax]    |
00595892 | FF 52 54       | call dword ptr ds:[edx+54]    | get file path
00595895 | 84 C0          | test al,al                    |
00595897 | 74 16          | je 3ds_simple_cia.5958AF      |
00595899 | 8D 55 88       | lea edx,dword ptr ss:[ebp-78] |
0059589C | 8B 45 A4       | mov eax,dword ptr ss:[ebp-5C] |
0059589F | E8 A4 99 F7 FF | call 3ds_simple_cia.50F248    |
005958A4 | 8B 55 90       | mov edx,dword ptr ss:[ebp-70] | <- buffer 改了

其中 3ds_simple_cia.50F36C 是 Delphi 的字符串拼接函数,接口如下:

System::@UStrCat
eax = &dest
edx = src

然后顺便把原本的 Binary Files|*.bin|All Files (*.*)|*.* 改成了 \ncchinfo.bin,和程序当前路径拼接起来。

最后,就是“转换 3ds 到 cia”按钮的目录选择了,和第一次修改一样的改法:

00599943 | 90             | nop                           | Select Directory Dialog
00599944 | 89 D2          | mov edx,edx                   |
00599946 | 84 C0          | test al,al                    |
00599948 | 74 13          | je 3ds_simple_cia.59995D      |
0059994A | 8D 55 DC       | lea edx,dword ptr ss:[ebp-24] |
0059994D | 8B 45 F8       | mov eax,dword ptr ss:[ebp-8]  |
00599950 | E8 4F 70 F7 FF | call 3ds_simple_cia.5109A4    |
00599955 | 8B 45 EC       | mov eax,dword ptr ss:[ebp-14] | <- ebp-24 = roms directory

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区