2016-4-28 17:30 /
本文起于拆包image.bin,然后继而拆了voice.bin. 最后一发不可收拾拆了cnut,以及拆了PDG加密的PSP_GAME\INSDIR\SOUND.bin。这样全部的对话是wav格式,全部背景音乐与效果音乐是wav格式,全部的立绘与背景图片是png格式,字体是bmp格式,脚本是lua的改进版本squirrel脚本解包成了txt格式。


4/28/2016

应该很多大神都是能拆出来的,毕竟都是汉化的作品。然而我等萌新找了两个多月无果,只能自己动手丰衣足食了。本文关注的焦点是iso解压后,里面那个image.bin如何拆包。

思路:
1.7z可以直接打开文件,但是解压出来只有一张正常的GIM图片
2.分析二进制格式,如下片段反复出现

0003f7f0h: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ;
0003f800h: 1F 8B 08 08 08 62 61 4B 02 03 55 4E 5F 32 5F 38 ; .?..baK..UN_2_8
0003f810h: 5F 32 30 32 2E 47 49 4D 00 EC 5C CF 6F DC 46 96 ; _202.GIM.靄蟧蹻?


可以看到1F 8B 08 08是个开始标志,offset 0x0a处开始有一个不定长的GIM文件名。

工具:
这是个很简单的工具,按照上面的思路相信很多巨巨都是随手敲两下就解决了。
解压出来4622个GIM文件,转成4925张PNG图片。
盘.百度.com/s/1mi4G8OC

直接要立绘资源?天神吧有资源。


更新4/30/2016
1.首先是解包iso
这个不论用什么解压工具或者虚拟光驱。我们需要PSP_GAME\USRDIR目录下面的image.bin、scenario.bin、sysimage.bin、system.bin、voice.bin这5个文件。主要资源都在这里。
其中PSP的OP动画之类的在PSP_GAME\USRDIR\Movie下面,这里面13个pmf文件就是视频。至于如何播放与这个本文不涉及。详情请自行百度。

2.解包
下载 盘.百度.com/s/1mi4G8OC 里面的tenshi_unpack_v0.2.rar,将天神乱漫PSP的ISO解压出来的PSP_GAME\USRDIR目录下面的image.bin、scenario.bin、sysimage.bin、system.bin、voice.bin放入本目录,然后运行tenshi_unpack.exe。等待窗口完成。

3.详情
out目录即是png立绘资源。共有9547个文件,其中png图片有4925张。
voice_out目录是语音资源全部可播放。28353个wav文件。要找若叶语音,苏芳语音这个目录去找。
system_out这个目录最好玩。共有42个文件,其中FONT11.bmp是字体文件,FONT11R.bmp是特殊符号文件。另外还有很多cnut文件。
sysimage_out是一些日期图案,黑板上的爱心等。已转png格式。共有864个文件。其中563张png图片,11个psb文件。
scenario_out还不知是啥,共有326个文件,主要是cnut文件。


更新二4/30/2016
现在版本v0.3已经可以成功反编译了cnut文件,使用带源码的DamianXVI's squirrel decompiler即可。下载方式同上。

目前有一个bug,暂时没有好办法解决。就是解包system_out\SCENEPLAYER.CNUT时会弹出一个错误窗口,关闭就好,拆包会继续下去的。虽然可以屏蔽这个问题,但是这样一点都没有逆向system_out\SCENEPLAYER.CNUT。

详情:
out目录即是png立绘资源。共有9547个文件,其中png图片有4925张。
voice_out目录是语音资源全部可播放。28353个wav文件。要找若叶语音,苏芳语音这个目录去找。
scenario_out脚本文件,共有651个文件,主要是cnut文件,已全部转成txt格式的nut脚本文件。对话就在里面。不过编码是比较奇怪编码。谁能告诉我 `page = "\x0082V\x008c~\x0082P\x0082W\x008c\x0080" `这种样式的是什么?
sysimage_out是一些日期图案,黑板上的爱心等。已转png格式。共有864个文件。其中563张png图片,11个psb文件。
system_out这个目录最好玩。共有76个文件,其中FONT11.bmp是字体文件,FONT11R.bmp是特殊符号文件。另外还有很多cnut文件。脚本文件全部反编译为txt格式的nut文件,共有34个txt文件。但是SCENEPLAYER.CNUT会引起一个错误,出现错误时忽略就好。


使用的三方工具
7z
gimtools
DamianXVI's squirrel decompiler



一个反编译出来的cnut片段

        {
                l = 18,
                i = [
                        {
                                xpos = "240",
                                index = 801,
                                level = 2,
                                name = "\x0090_\x0097l",
                                tagname = "char",
                                image = {
                                        offx = 192,
                                        width = 780,
                                        sNo = 1,
                                        height = 500,
                                        offy = -4,
                                        res = 133.33333
                                },
                                disp = 1
                        },
                        {
                                xpos = 0,
                                ypos = 0,
                                tagname = "stage",
                                image = {
                                        sNo = 0,
                                        resx = 92.252251
                                },
                                disp = 4
                        },
                        {
                                cameray = "-9",
                                camerazoom = "110",
                                tagname = "env",
                                camerax = "175"
                        }
                ],
                tagname = "sp"
        },
        {
                text = "\x0083\x00b5\x0083\x00b6\x0083\x00bf\x0083\x00c0\x0083\x00c1\x0083\x00c2\x0083\x00c3\x0083\x00c4\x0083\x00c5\x0081C\x0083\x00a0\x0083\x00c6\x0083\x00c7\x0083\x00c8\x0083\x00a7\x0083\x00a8\x0083\x00b2\x0083\x00c9\x0083\x00ca\x0083\x00aa\x0081B",
                name = "",
                tagname = "ch"
        },



另外一个片段,谁能告诉我下面这个page是什么编码??!

        {
                l = 2,
                c = 26,
                page = "\x0082X\x008c~\x0082P\x0082V\x008c\x0080",
                label = "*0917",
                i = [],
                tagname = "sp"
        },
        {
                keepvoice = null,
                tagname = "init"
        },
        {
                exp = "f.day_white=\"0917\"",
                tagname = "eval"
        },



更新三5/1/2016
现在支持PSP_GAME\INSDIR下面的全部bin文件包解压了。使用方法是将bin文件拷入本目录运行tenshi_unpack.exe。重点是PSP_GAME\INSDIR\SOUND.bin这个文件。是各种背景音乐。

PSP_GAME\INSDIR\SOUND.bin解包出来452个文件。其中wav文件451个。其中包括若叶场景的一些bgm。




Tags: 游戏
#1 - 2016-4-30 07:16
(noblesse oblige)
scenario是剧本的意思,大概是剧本文字之类吧?
#1-1 - 2016-4-30 16:09
喵天飞
据我猜测很大可能是 Squirrel脚本引擎 生成的cnut文件。