半年前写的文章了,原本是发表在兔友论坛上的,还是在自己的blog上也保留一份吧。
图片有些不能显示,点我去看原帖 (不需要注册)
---------------------------------------------------------------------------------------------------------------------------------------------------------
用 CT2打开 rom后很容易发现文本是标准 JIS编码,粗看了下文本在根目录下的 msg/jpn下。字库也很容易找到,在 /font/jpn下,但是用 CT2无法看到。这里需要 ASM 了。
在存档处可以看到这里的文本显示是以 OAM 的形式存在的, OAM 可以理解是用 sprite 的方式,所以在第一个 OAM 那里 0x0660000 那里设断点: [06600000.. 06600004]! ,关于如何在 No$gba 里设置断点,请看 No$gba help 文档里的 Debugging 部分。
这里停下来:
可以看到最后停在 strr4,[r3,8h]。而 r3=0x040000D4。这里用到了 DMA4,关于 NDS的 DMA请看 gbatek: http://nocash.emubase.de/gbatek.htm 。
0x040000D4,存的是源地址,是 0x2273440
0x040000D8,是目标地址,可以看到上图右下角这个值下就是我们刚才设置的地址。
0x040000DC,是复制的字节数
可以去 0x2273440看到里面确实是可以直接显示(这里主要是为了区分前面无法直接显示)的字模了。这时候你可以 dump memory然后用 CT2看一下。这里说一下 No&gba里提供的 dump memory( Utility->Hexdump to File),但是这个 dump出的是 ASCII模式,所以需要自己写程序转换成二进制(这个很简单啦)。
TILE是 4bpp,然后直接用 8*8显示如下

本文详细记录了《龙珠2DS》游戏字库的破解过程,通过CT2和ASM分析,揭示了字库的JIS编码、OAM显示方式及DMA4复制原理。通过断点调试,找到了解密字库的关键代码,并解释了解密算法,包括r1&0x33和(r1&0xCC)>>2的操作,以及12*14的字模解密过程。
最低0.47元/天 解锁文章
2473

被折叠的 条评论
为什么被折叠?



