3ds游戏解包操作教程
时间:2015-11-10 16:32:45 来源:k73电玩之家 作者:小四 热度: 1755 次
3ds游戏想要汉化,除了官方中文游戏以外,民间汉化组推出的游戏均要通过汉化才能完成,那么如何才能将3ds游戏rom进行解包,进而实现汉化呢?以下就教大家怎么把3ds rom解包后得到各种文件。
3ds游戏想要汉化,除了官方中文游戏以外,民间汉化组推出的游戏均要通过汉化才能完成,那么如何才能将3ds游戏rom进行解包,进而实现汉化呢?以下就教大家怎么把3ds rom解包后得到各种文件。
3ds游戏解包操作教程:k73传送门
3ds游戏汉化教程篇之打包操作:k73传送门
3ds游戏汉化教程之文本字库操作篇:k73传送门
随着3DS的破解,汉化3DS游戏变成了可能,不少汉化组也纷纷开坑,加入了3DS游戏的汉化工作。那么,随着这场声势浩大的汉化大潮滚滚而来,相信不少小伙伴们是不是和我一样,都非常想加入到汉化工作中,为自己的喜爱的游戏添上自己的一份力。但是苦于没人指导,没办法入门。
近日,dnasdw大神发布了一款3ds的ROM解包打包工具——3dstool。这款工具对之前的3DS工具进行了一个整合,让大家能够较为轻松的完成ROM提取打包在电脑上的操作。本文也将以3dstool工具的操作为基础,和大家聊聊ROM解包的流程。与其说是教程,更不如说是科普吧。还有,要重点提一下:汉化游戏和玩游戏完全是两件事,汉化是一项非常枯燥无聊的工作,没有耐心是坚持不下去的。所以呢,在开始看文章之前,不要抱着我马上就能学会汉化,然后多久就能汉化出游戏这样的心态进行学习和探索,而是把它当作闲暇之余的兴趣来培养,相信你会收获更多。最后,还是要感谢各个汉化组的辛勤工作,没有他们的努力,就没有3DS的汉化。
好的,废话说完了,我们开始进行ROM解包的过程吧。
首先我们需要准备一些工具,这些工具将在提取过程中帮助我们完成很多工作:
1.3dstool(dnasdw):v1.0.9
2.3DS_Multi_Decryptor(Relys):链接: http://pan.baidu.com/s/1pJ6DllL 密码: cjjs
3.Python 2.X
3.slot0x25KeyX.bin 链接: http://pan.baidu.com/s/1hq8Tsxu 密码: 4nxe
PS1.许多同学之前没使用过github,具体的资料可以百度,我简单介绍一下github就是开源软件的代码分享中心吧,用户可以把自己的代码放在github上供大家参考,也可以进行多人开发,版本控制等,非常方便。
PS2.若是有同学在使用3dstool工具时提示缺少LIBEAY32.dll的话,可以搜索dll文件,下载后放入系统盘/Windows/System32中即可。
打开了两个网页后怎么使用呢,点击右边的Download ZIP就可以把所有的内容打包下载了:
PS.3dstool更新后,3dstool.exe以及ignore.txt文件会放在release中,请直接在这下载:https://github.com/dnasdw/3dstool/releases
下载好两个工具,我们还需要准备需要解包的游戏ROM,在本文中,我会使用心游汉化组的逆转裁判5、多玩汉化组的俄罗斯方块、以及欧版游戏0940-开膛手杰克进行解包演示。
操作过程一:使用3DS生成xorpad文件
PS.若是手里没有4.5机器的同学,可以下载心游汉化组的逆转裁判5、多玩汉化组的俄罗斯方块,从操作过程二开始进行解包操作。
1.安装python,这样就可以使用.py编写的程序,例如接下来需要使用到的ctrKeyGen.py;
2.取出3DS_Multi_Decryptor-master文件夹下的ctrKeyGen.py,将我们的第一个ROM文件,cat-aajp.3ds(0940-开膛手杰克)拖到ctrKeyGen.py上面,会弹出一个命令窗口,一闪而过后,就会在3ds文件相同的目录下,生成ncchinfo.bin文件;
3.将3DS_Multi_Decryptor-master文件夹下的launcher.dat与第2步生成的ncchinfo.bin和slot0x25keyX.bin放到4.5版本、已破解3DS的SD卡中,并将3DS开机;
4.在3DS上依次操作“本体设置 - 其他设置 - 用户情报 - DS软件设置”,这时会进入命令窗口,选择第一项NCCH padgen,等待直到屏幕最下行出现Finished字样;(出现finished后,机器上按B回到主菜单,然后长按关机键关机吧)
5.读取SD卡,会发现多出了几个xorpad文件,这样,我们的xorpad文件就生成好了。
操作过程二:提取cci
准备好以下这些文件,我们就可以开始进行解包操作了:
1.3DS游戏的ROM文件;
2.各个xorpad文件(为了方便打字,我把前面的一串字符去掉)
3.3dstool工具(在3dstool-master\bin文件夹中)
首先,我们按住键盘上的SHIFT键,同时右击文件夹中空白处,点击在此处打开命令窗口。
开始进行解包操作了,先输入“MD cci”创建文件夹cci。
接着键入命令“3dstool -xvt0f cci cci\0.cxi cat-aajp.3ds --header cci\ncsdheader.bin”
我们可以发现提取出了一个cxi和ncsdheader.bin文件。
我们再来看看这句命令“3dstool -xvt0f cci cci\0.cxi cat-aajp.3ds --header cci\ncsdheader.bin”
“3dstool”大家都看得懂,就是调用3dstool.exe这个工具;
“--xvt0f cci cci\0.cxi cat-aajp.3ds”这句大家就可能不知道了,让我们打开3dstool文档来看看(见附录1):
“--xvt0f cci cci\0.cxi cat-aajp.3ds”中,-x是从目标文件提取,-v是显示信息,-t是文件类型,-0是第0分区的cxi文件,-f是目标文件,噢,参数是可以合并的,所以“-x -v -t -0 -f”与“-xvt0f”功能是一样的。那么这代码翻译过来就是:“从目标文件(cat-aajp.3ds)中提取位于cci文件第0分区的cxi文件,提取到cci文件夹中的0.cxi文件中”
“--header cci\ncsdheader.bin”是提取目标文件(cat-aajp.3ds)中的头文件,所以在完成代码后,我们得到了“0.cxi”和“ncsdheader.bin”两个文件。
细心的小伙伴可能已经发现了,在CMD中提示“INFO: partition 1(7) is not extract”,这句话指的是在cci文件中,还有第1分区的1.cfa和第7分区的7.cfa没有被提取出来,然后我们就需要改变命令中的参数重新提取这两个文件:“3dstool -xvt17f cci cci\1.cfa cci\7.cfa cat-aajp.3ds”:
好的,我们已经提取出所有的cci文件中的分区。那如果我提取的分区,在cci文件中不存在,会出现什么提示呢,我们再来额外进行一次测试:“3dstool -xvt01237f cci cci\0.cxi cci\1.cfa cci\2.cfa cci\3.cfa cci\7.cfa cat-aajp.3ds --header cci\ncsdheader.bin”:
我们看到,因为cci文件分区中没有这两个文件,不存在的分区是无法提取出来的,所以不用担心写错参数会提取出错误的数据,依次类推,我们可以得到cci文件中所有分区的文件了。
还有,如果我们在将代码后面的“--header cci\ncsdheader.bin”去掉,会发生什么呢:
软件非常机智的告诉我们ncsdheader头文件没有提取。
操作步骤三:提取cxi/cfa
得到了cxi文件,我们可以进行下一步的提取了。在这一步中,我们需要步骤一中提取的xorpad文件了。
首先依然是创建文件夹“MD cci\cxi0”:
接着键入以下命令“3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --plain cci\cxi0\plain.bin --exefs cci\cxi0\exefs.bin --romfs cci\cxi0\romfs.bin --exh-xor Main.exheader.xorpad --exefs-xor Main.exefs_norm.xorpad --romfs-xor Main.romfs.xorpad”:
成功提取出5个文件,我们再来仔细看看代码:“3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --plain cci\cxi0\plain.bin --exefs cci\cxi0\exefs.bin --romfs cci\cxi0\romfs.bin --exh-xor Main.exheader.xorpad --exefs-xor Main.exefs_norm.xorpad --romfs-xor Main.romfs.xorpad”
“-xvtf cxi cci\0.cxi”与上文类似,就是提取cxi文件;
“--header cci\cxi0\ncchheader.bin”、“--exh cci\cxi0\exh.bin”、“--plain cci\cxi0\plain.bin”、“-exefs cci\cxi0\exefs.bin”、“--romfs cci\cxi0\romfs.bin”这五段代码非常类似,都是这种:“前面是命令,后面是提取到哪个文件”的格式,都比较容易理解;
重要的是最后一段,在这一步有三段代码:“--exh-xor Main.exheader.xorpad”、“--exefs-xor Main.exefs_norm.xorpad”、“--romfs-xor Main.romfs.xorpad”分别使用了我们从3DS上提取出来的3个xorpad文件,若是没有这三段代码,那么提取出来的文件会是错误的。三段代码的格式也非常类似,空格前面是命令,空格后面是使用哪个xorpad文件,仔细看还会发现是对应的,“--exh-xor”命令使用的是从3DS中提取出的“Main.exheader.xorpad”,“0.cxi”使用的xorpad是以Main开头的,以此类推。
如果在这一步使用错误的key(如--key0)或者错误的xorpad提取出bin文件,那么在下一步,bin文件将会不可读,这也就是说,我们没办法省略3DS上提取xorpad文件的操作,每个ROM的xorpad都是不通用的。
提取完0.cxi的文件,我们接着来处理1.cfa文件以及7.cfa,其实处理方式大同小异,首先创建文件夹cfa1和cfa7,然后直接上代码:“3dstool -xvtf cfa cci\1.cfa --header cci\cfa1\ncchheader.bin --romfs cci\cfa1\romfs.bin --romfs-xor Manual.romfs.xorpad”与“3dstool -xvtf cfa cci\7.cfa --header cci\cfa7\ncchheader.bin --romfs cci\cfa7\romfs.bin --romfs-xor UpdateData.romfs.xorpad”:
1.cfa文件中是游戏手册内容,所以我们使用“Manual.romfs.xorpad”进行提取,7.cfa文件中是游戏更新档案,所以我们使用“UpdateData.romfs.xorpad”进行提取大家可以记一下。其余的cfa也同样使用各自的xorpad文件进行提取。
操作过程四:提取bin
让我们直接键入代码:“3dstool -xvtf romfs cci\cxi0\romfs.bin --romfs-dir cci\cxi0\romfs”
大家看,直接提取出了各种资源文件,这句代码也非常好理解:
“-xvtf romfs cci\cxi0\romfs.bin”提取romfs文件;
“--romfs-dir cci\cxi0\romfs”提取romfs并组成romfs文件的文件夹。
接下来exefs.bin文件也是使用同样的方法进行提取,但是这里请注意,exefs提取时,可能需要把“-xvtf”改为“-xvtfu”,因为在部分游戏中,exefs文件是使用反向LZ77压缩的(具体是否需要添加“-u”,需要查看exh中的标记信息,若是exh.bin的0000000dh位的值为1时,需要加“-u”,如图1),所以需要将代码改为“3dstool -xvtfu exefs cci\cxi0\exefs.bin --exefs-dir cci\cxi0\exefs”(如图2):
我们在这发现有提示,头文件没有提取出来,那么我们在代码后面加上一段“--header cci\cxi0\exefs\exefsheader.bin”:
“cfa1”文件夹中的romfs.bin文件也使用相同的方法进行提取:“3dstool -xvtf romfs cci\cfa1\romfs.bin --romfs-dir cci\cfa1\romfs”:
“cfa7”文件夹中的romfs.bin文件也使用相同的方法进行提取:“3dstool -xvtf romfs cci\cfa7\romfs.bin --romfs-dir cci\cfa7\romfs”:
好了,到此为之,所有的提取工作都完成了,我们得到了ROM中的资源文件。
正确代码汇总:
//提取出0.cxi、1.cfa、7.cfa、ncsdheader.bin四个文件
MD cci
3dstool -xvt017f cci cci\0.cxi cci\1.cfa cci\7.cfa cat-aajp.3ds --header cci\ncsdheader.bin
//提取出cxi0、cfa1、cfa7中的exefs、romfs资源包
MD cci\cxi0
3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --plain cci\cxi0\plain.bin --exefs cci\cxi0\exefs.bin --romfs cci\cxi0\romfs.bin --exh-xor Main.exheader.xorpad --exefs-xor Main.exefs_norm.xorpad --romfs-xor Main.romfs.xorpad
MD cci\cfa1
MD cci\cfa7
3dstool -xvtf cfa cci\1.cfa --header cci\cfa1\ncchheader.bin --romfs cci\cfa1\romfs.bin --romfs-xor Manual.romfs.xorpad
3dstool -xvtf cfa cci\7.cfa --header cci\cfa7\ncchheader.bin --romfs cci\cfa7\romfs.bin --romfs-xor UpdateData.romfs.xorpad
//提取exefs、romfs资源包中的资源
3dstool -xvtf romfs cci\cxi0\romfs.bin --romfs-dir cci\cxi0\romfs
3dstool -xvtfu exefs cci\cxi0\exefs.bin --exefs-dir cci\cxi0\exefs --header cci\cxi0\exefs\exefsheader.bin
3dstool -xvtf romfs cci\cfa1\romfs.bin --romfs-dir cci\cfa1\romfs
3dstool -xvtf romfs cci\cfa7\romfs.bin --romfs-dir cci\cfa7\romfs
操作演示:
接着,我使用另外两个ROM进行操作,与大家回顾一下操作过程:
俄罗斯方块(tetris-1008.3ds)与逆转裁判5(逆转裁判5本篇汉化版.3ds)都是已经由汉化组进行汉化后再打包的,经过测试,汉化组在打包过程中是使用--key0进行打包的,所以我们再进行解包操作的话,无需xorpad文件,直接使用--key0进行解包操作就可以了。
1.先输入“MD cci”创建文件夹cci。
2.键入命令“3dstool -xvt0f cci cci\0.cxi tetris-1008.3ds --header cci\ncsdheader.bin”
提取出一个cxi和ncsdheader.bin文件,而且没有其他分区未提取的提示。
3.创建文件夹“MD cci\cxi0”:
4.输入命令“3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --logo cci\cxi0\logo.bcma.lz --exefs cci\cxi0\exefs.bin --romfs cci\cxi0\romfs.bin --key0”
成功提取出5个文件。
我使用的是“--key0”进行提取,这是因为汉化组在汉化完成后,是使用“--key0”进行打包的;如果解包的是原版ROM,则需要使用xorpad文件进行提取(见上文案例)。
再次强调:如果在这一步使用错误的key或者错误的xorpad提取出bin文件,那么在下一步,bin文件将会不可读,这也就是说,我们没办法省略3DS上提取xorpad文件的操作,每个ROM的xorpad都是不通用的。
5.键入代码:“3dstool -xvtf romfs cci\cxi0\romfs.bin --romfs-dir cci\cxi0\romfs”
提取出了各种资源文件。
6.“3dstool -xvtfu exefs cci\cxi0\exefs.bin --exefs-dir cci\cxi0\exefs --header cci\cxi0\exefs\exefsheader.bin”:
嗯,提取资源文件完成。
第三次提取过程,我们再一起快速的重复一遍,拿逆转裁判5(逆转裁判5本篇汉化版.3ds)ROM作为例子,先准备好工具和ROM:
第一步-1:尝试提取cci“3dstool -xvt0f cci cci\0.cxi nzcp.3ds --header cci\ncsdheader.bin”
第一步-2:根据提示修改代码,增加1和7两个分区的提取“3dstool -xvt017f cci cci\0.cxi cci\1.cfa cci\7.cfa nzcp.3ds --header cci\ncsdheader.bin”
第二步:建立文件夹“MD cci\cxi0”提取cxi“3dstool -xvtf cxi cci\0.cxi --header cci\cxi0\ncchheader.bin --exh cci\cxi0\exh.bin --logo cci\cxi0\logo.bcma.lz --plain cci\cxi0\plain.bin --exefs cci\cxi0\exefs.bin --romfscci\cxi0\romfs.bin --key0”
(logo文件不存在,忽略)
第三步:提取romfs“3dstool -xvtf romfs cci\cxi0\romfs.bin --romfs-dir cci\cxi0\romfs”
第四步:提取exefs“3dstool -xvtfu exefs cci\cxi0\exefs.bin --header cci\cxi0\exefs\exefsheader.bin --exefs-dir cci\cxi0\exefs”
完成。
让我们来看看提取出的资源文件吧:
接下来的工作就是进行文本图片的导出,字库的破解等,在本文中就不进行讨论了,同时,期待有更多的汉化爱好者能够加入到我们中来,生命不止,汉化不息。哈哈。
SarvSarv
2014.12.7(12.10修改)
附录:
3dstool 1.0 by dnasdw
用法: 3dstool [选项...] [选项]...
选项:
功能:
-x, --extract 从目标文件提取
-c, --create 创建目标文件
-e, --encrypt 加密目标文件
-u, --uncompress
通过反向LZ77算法解压目标文件
-z, --compress
通过反向LZ77算法压缩目标文件
-r, --trim 缩减cci文件
-p, --pad 填充cci文件
--sample 查看例子
-h, --help 查看帮助
通用:
-t, --type [[card|cci|3ds]|[nand|exec|cxi]|[data|cfa]|exefs|romfs]
文件类型,可选的
-f, --file 目标文件,必需的
-v, --verbose 显示信息
cci/cxi/cfa/exefs:
提取/创建:
--header 目标文件的头文件
加密:
--key0 --key 00000000000000000000000000000000的缩写
--key 使用AES-CTR加密时的十六进制写法的key
--counter 使用AES-CTR加密时的十六进制写法的counter
--xor 使用异或加密时的异或数据文件
解压/压缩:
--compress-out
解压或压缩时的输出文件
cci:
提取/创建:
-0, --partition0
位于cci文件第0分区的cxi文件
-1, --partition1
位于cci文件第1分区的cfa文件
-2, --partition2
位于cci文件第2分区的cfa文件
-3, --partition3
位于cci文件第3分区的cfa文件
-4, --partition4
位于cci文件第4分区的cfa文件
-5, --partition5
位于cci文件第5分区的cfa文件
-6, --partition6
位于cci文件第6分区的cfa文件
-7, --partition7
位于cci文件第7分区的cfa文件
缩减:
--trim-after-partition
[0~7], 保留的最后分区号,可选的
cxi:
创建:
--not-update-exh-hash
--not-update-extendedheader-hash
不更新extendedheader的校验值
--not-update-exefs-hash
不更新exefs头部的校验值
--not-update-romfs-hash
不更新romfs头部的校验值
--not-pad 不追加填充数据
提取:
--exh
--extendedheader
cxi文件的extendedheader文件
--logo
--logoregion
cxi文件的logoregion文件
--plain
--plainregion
cxi文件的plainregion文件
--exefs cxi文件的exefs文件
加密:
--exh-xor
--extendedheader-xor
加密cxi文件的extendedheader部分用的异或数据文件
--exefs-xor
加密cxi文件的exefs部分用的异或数据文件
--exefs-top-xor
加密cxi文件的exefs第一段用的异或数据文件
cfa:
提取/创建:
--romfs cxi或cfa文件的romfs文件
encrypt:
--romfs-xor
加密cxi或cfa文件的romfs部分用的异或数据文件
exefs:
提取/创建:
--exefs-dir
组成exefs文件的文件夹
romfs:
提取/创建:
--romfs-dir
组成romfs文件的文件夹
热门新闻
我要评论 查看全部评论 (1)>>
k73玩家2016-04-04 22:41:32评论 (4) (1) 回复