3ds游戲解包操作教程
時間:2015-11-10 16:32:45 來源:k73電玩之家 作者:小四 熱度: 1751 次
3ds游戲想要漢化,除了官方中文游戲以外,民間漢化組推出的游戲均要通過漢化才能完成,那么如何才能將3ds游戲rom進行解包,進而實現(xiàn)漢化呢?以下就教大家怎么把3ds rom解包后得到各種文件。
3ds游戲想要漢化,除了官方中文游戲以外,民間漢化組推出的游戲均要通過漢化才能完成,那么如何才能將3ds游戲rom進行解包,進而實現(xiàn)漢化呢?以下就教大家怎么把3ds rom解包后得到各種文件。
3ds游戲解包操作教程:k73傳送門
3ds游戲漢化教程篇之打包操作:k73傳送門
3ds游戲漢化教程之文本字庫操作篇:k73傳送門
隨著3DS的破解,漢化3DS游戲變成了可能,不少漢化組也紛紛開坑,加入了3DS游戲的漢化工作。那么,隨著這場聲勢浩大的漢化大潮滾滾而來,相信不少小伙伴們是不是和我一樣,都非常想加入到漢化工作中,為自己的喜愛的游戲添上自己的一份力。但是苦于沒人指導(dǎo),沒辦法入門。
近日,dnasdw大神發(fā)布了一款3ds的ROM解包打包工具——3dstool。這款工具對之前的3DS工具進行了一個整合,讓大家能夠較為輕松的完成ROM提取打包在電腦上的操作。本文也將以3dstool工具的操作為基礎(chǔ),和大家聊聊ROM解包的流程。與其說是教程,更不如說是科普吧。還有,要重點提一下:漢化游戲和玩游戲完全是兩件事,漢化是一項非??菰餆o聊的工作,沒有耐心是堅持不下去的。所以呢,在開始看文章之前,不要抱著我馬上就能學(xué)會漢化,然后多久就能漢化出游戲這樣的心態(tài)進行學(xué)習(xí)和探索,而是把它當(dāng)作閑暇之余的興趣來培養(yǎng),相信你會收獲更多。最后,還是要感謝各個漢化組的辛勤工作,沒有他們的努力,就沒有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.許多同學(xué)之前沒使用過github,具體的資料可以百度,我簡單介紹一下github就是開源軟件的代碼分享中心吧,用戶可以把自己的代碼放在github上供大家參考,也可以進行多人開發(fā),版本控制等,非常方便。
PS2.若是有同學(xué)在使用3dstool工具時提示缺少LIBEAY32.dll的話,可以搜索dll文件,下載后放入系統(tǒng)盤/Windows/System32中即可。
打開了兩個網(wǎng)頁后怎么使用呢,點擊右邊的Download ZIP就可以把所有的內(nèi)容打包下載了:
PS.3dstool更新后,3dstool.exe以及ignore.txt文件會放在release中,請直接在這下載:https://github.com/dnasdw/3dstool/releases
下載好兩個工具,我們還需要準備需要解包的游戲ROM,在本文中,我會使用心游漢化組的逆轉(zhuǎn)裁判5、多玩漢化組的俄羅斯方塊、以及歐版游戲0940-開膛手杰克進行解包演示。
操作過程一:使用3DS生成xorpad文件
PS.若是手里沒有4.5機器的同學(xué),可以下載心游漢化組的逆轉(zhuǎn)裁判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上依次操作“本體設(shè)置 - 其他設(shè)置 - 用戶情報 - DS軟件設(shè)置”,這時會進入命令窗口,選擇第一項NCCH padgen,等待直到屏幕最下行出現(xiàn)Finished字樣;(出現(xiàn)finished后,機器上按B回到主菜單,然后長按關(guān)機鍵關(guān)機吧)
5.讀取SD卡,會發(fā)現(xiàn)多出了幾個xorpad文件,這樣,我們的xorpad文件就生成好了。
操作過程二:提取cci
準備好以下這些文件,我們就可以開始進行解包操作了:
1.3DS游戲的ROM文件;
2.各個xorpad文件(為了方便打字,我把前面的一串字符去掉)
3.3dstool工具(在3dstool-master\bin文件夾中)
首先,我們按住鍵盤上的SHIFT鍵,同時右擊文件夾中空白處,點擊在此處打開命令窗口。
開始進行解包操作了,先輸入“MD cci”創(chuàng)建文件夾cci。
接著鍵入命令“3dstool -xvt0f cci cci\0.cxi cat-aajp.3ds --header cci\ncsdheader.bin”
我們可以發(fā)現(xiàn)提取出了一個cxi和ncsdheader.bin文件。
我們再來看看這句命令“3dstool -xvt0f cci cci\0.cxi cat-aajp.3ds --header cci\ncsdheader.bin”
“3dstool”大家都看得懂,就是調(diào)用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分區(qū)的cxi文件,-f是目標文件,噢,參數(shù)是可以合并的,所以“-x -v -t -0 -f”與“-xvt0f”功能是一樣的。那么這代碼翻譯過來就是:“從目標文件(cat-aajp.3ds)中提取位于cci文件第0分區(qū)的cxi文件,提取到cci文件夾中的0.cxi文件中”
“--header cci\ncsdheader.bin”是提取目標文件(cat-aajp.3ds)中的頭文件,所以在完成代碼后,我們得到了“0.cxi”和“ncsdheader.bin”兩個文件。
細心的小伙伴可能已經(jīng)發(fā)現(xiàn)了,在CMD中提示“INFO: partition 1(7) is not extract”,這句話指的是在cci文件中,還有第1分區(qū)的1.cfa和第7分區(qū)的7.cfa沒有被提取出來,然后我們就需要改變命令中的參數(shù)重新提取這兩個文件:“3dstool -xvt17f cci cci\1.cfa cci\7.cfa cat-aajp.3ds”:
好的,我們已經(jīng)提取出所有的cci文件中的分區(qū)。那如果我提取的分區(qū),在cci文件中不存在,會出現(xiàn)什么提示呢,我們再來額外進行一次測試:“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文件分區(qū)中沒有這兩個文件,不存在的分區(qū)是無法提取出來的,所以不用擔(dān)心寫錯參數(shù)會提取出錯誤的數(shù)據(jù),依次類推,我們可以得到cci文件中所有分區(qū)的文件了。
還有,如果我們在將代碼后面的“--header cci\ncsdheader.bin”去掉,會發(fā)生什么呢:
軟件非常機智的告訴我們ncsdheader頭文件沒有提取。
操作步驟三:提取cxi/cfa
得到了cxi文件,我們可以進行下一步的提取了。在這一步中,我們需要步驟一中提取的xorpad文件了。
首先依然是創(chuàng)建文件夾“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文件,仔細看還會發(fā)現(xiàn)是對應(yīng)的,“--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,其實處理方式大同小異,首先創(chuàng)建文件夾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文件中是游戲手冊內(nèi)容,所以我們使用“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):
我們在這發(fā)現(xiàn)有提示,頭文件沒有提取出來,那么我們在代碼后面加上一段“--header cci\cxi0\exefs\exefsheader.bin”:
“cfa1”文件夾中的romfs.bin文件也使用相同的方法進行提取:“3dstool -xvtf romfs cci\cfa1\romfs.bin --romfs-dir cci\cfa1\romfs”:
“cfa7”文件夾中的romfs.bin文件也使用相同的方法進行提?。?ldquo;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)與逆轉(zhuǎn)裁判5(逆轉(zhuǎn)裁判5本篇漢化版.3ds)都是已經(jīng)由漢化組進行漢化后再打包的,經(jīng)過測試,漢化組在打包過程中是使用--key0進行打包的,所以我們再進行解包操作的話,無需xorpad文件,直接使用--key0進行解包操作就可以了。
1.先輸入“MD cci”創(chuàng)建文件夾cci。
2.鍵入命令“3dstool -xvt0f cci cci\0.cxi tetris-1008.3ds --header cci\ncsdheader.bin”
提取出一個cxi和ncsdheader.bin文件,而且沒有其他分區(qū)未提取的提示。
3.創(chuàng)建文件夾“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文件進行提取(見上文案例)。
再次強調(diào):如果在這一步使用錯誤的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”:
嗯,提取資源文件完成。
第三次提取過程,我們再一起快速的重復(fù)一遍,拿逆轉(zhuǎn)裁判5(逆轉(zhuǎn)裁判5本篇漢化版.3ds)ROM作為例子,先準備好工具和ROM:
第一步-1:嘗試提取cci“3dstool -xvt0f cci cci\0.cxi nzcp.3ds --header cci\ncsdheader.bin”
第一步-2:根據(jù)提示修改代碼,增加1和7兩個分區(qū)的提取“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”
完成。
讓我們來看看提取出的資源文件吧:
接下來的工作就是進行文本圖片的導(dǎo)出,字庫的破解等,在本文中就不進行討論了,同時,期待有更多的漢化愛好者能夠加入到我們中來,生命不止,漢化不息。哈哈。
SarvSarv
2014.12.7(12.10修改)
附錄:
3dstool 1.0 by dnasdw
用法: 3dstool [選項...] [選項]...
選項:
功能:
-x, --extract 從目標文件提取
-c, --create 創(chuàng)建目標文件
-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:
提取/創(chuàng)建:
--header 目標文件的頭文件
加密:
--key0 --key 00000000000000000000000000000000的縮寫
--key 使用AES-CTR加密時的十六進制寫法的key
--counter 使用AES-CTR加密時的十六進制寫法的counter
--xor 使用異或加密時的異或數(shù)據(jù)文件
解壓/壓縮:
--compress-out
解壓或壓縮時的輸出文件
cci:
提取/創(chuàng)建:
-0, --partition0
位于cci文件第0分區(qū)的cxi文件
-1, --partition1
位于cci文件第1分區(qū)的cfa文件
-2, --partition2
位于cci文件第2分區(qū)的cfa文件
-3, --partition3
位于cci文件第3分區(qū)的cfa文件
-4, --partition4
位于cci文件第4分區(qū)的cfa文件
-5, --partition5
位于cci文件第5分區(qū)的cfa文件
-6, --partition6
位于cci文件第6分區(qū)的cfa文件
-7, --partition7
位于cci文件第7分區(qū)的cfa文件
縮減:
--trim-after-partition
[0~7], 保留的最后分區(qū)號,可選的
cxi:
創(chuàng)建:
--not-update-exh-hash
--not-update-extendedheader-hash
不更新extendedheader的校驗值
--not-update-exefs-hash
不更新exefs頭部的校驗值
--not-update-romfs-hash
不更新romfs頭部的校驗值
--not-pad 不追加填充數(shù)據(jù)
提取:
--exh
--extendedheader
cxi文件的extendedheader文件
--logo
--logoregion
cxi文件的logoregion文件
--plain
--plainregion
cxi文件的plainregion文件
--exefs cxi文件的exefs文件
加密:
--exh-xor
--extendedheader-xor
加密cxi文件的extendedheader部分用的異或數(shù)據(jù)文件
--exefs-xor
加密cxi文件的exefs部分用的異或數(shù)據(jù)文件
--exefs-top-xor
加密cxi文件的exefs第一段用的異或數(shù)據(jù)文件
cfa:
提取/創(chuàng)建:
--romfs cxi或cfa文件的romfs文件
encrypt:
--romfs-xor
加密cxi或cfa文件的romfs部分用的異或數(shù)據(jù)文件
exefs:
提取/創(chuàng)建:
--exefs-dir
組成exefs文件的文件夾
romfs:
提取/創(chuàng)建:
--romfs-dir
組成romfs文件的文件夾
熱門新聞
我要評論 查看全部評論 (1)>>
k73玩家2016-04-04 22:41:32評論 (4) (1) 回復(fù)