一、软件准备
1.PC端
游戏客户端 2.quickbms
3.RMAViewer 4.IqeBrowser 5.Noesis 6.3dsmax 网盘下载:https://pan.baidu.com/s/1jLoyZBfGlDnxGxTHJFdX7g 7mnf
流程:
*.npk -quickbms-> *.dat -RMAViewer-> *.iqe -IqeBrowser-> *.iqm -Noesis-> *.fbx -3dmax-> *.pmd -PmxEditor-> *.pmx
二、资源定位
163家的游戏,安装包都是npk封装、更新包嘛,,,搞不懂。
真够大的。。。
6个资源文件在 *\Netease\yxl 下,目标就是...
够多的。。。
三、准备解包
先把几个资源文件复制一份单独操作。。。
还是上winhex看看目标压缩制式
NXPK? 不是EXPK就好(没研究EXPK)
用quickbms和官方脚本 nxpk.bms
# NXPK npk (script 0.3.8)
# Demon Seals HD and others
# script for QuickBMS http://quickbms.aluigi.org
get EXT extension
math NAMES = -1
math EXISTS = 0
math NAMES_METHOD = 0
/*
# this format is totally useless because it's only a sequence of integers
string TMP p "%s_hash" EXT
open FDDE TMP 1 EXISTS
if EXISTS == 0
string TMP p "%s.hash" EXT
open FDDE TMP 1 EXISTS
endif
*/
if EXISTS == 0
open FDDE "hash" 1 EXISTS
endif
if EXISTS == 0
string TMP p "%s.info" EXT
open FDDE TMP 1 EXISTS
endif
if EXISTS != 0
comtype zlib_noerror
get TMP1 byte 1
get TMP2 byte 1
if TMP1 == 0x1f && TMP2 == 0x8b
comtype gzip
endif
get SIZE asize 1
clog MEMORY_FILE 0 SIZE SIZE 1
get SIZE asize MEMORY_FILE
for i = 0
savepos TMP MEMORY_FILE
if TMP >= SIZE
break
endif
get TMP line MEMORY_FILE
getvarchr TMP0 TMP 0
if NAMES >= 0
if TMP0 == 0x53 || TMP0 == 0x73 # "S" and "sS"
if TMP0 == 0x53 # "S'"
string TMP << 2
else
string TMP << 3
endif
string TMP - 1
if i & 1
strlen TMPSZ TMP
if TMPSZ != 32 || TMP & \
string TMP x TMP
string TMP b TMP
putvarchr TMP 32 0
endif
string TMP u TMP
string TMP p "_%s" TMP # LAME BUGFIX FOR QUICKBMS!!!
putarray 10 NAMES TMP
math NAMES + 1
else
putarray 11 NAMES TMP
endif
math i + 1
endif
else
if TMP0 == 'a'
math NAMES = 0 # skip the first string
endif
endif
next
else
string TMP p "%s.map" EXT
open FDDE TMP 1 EXISTS
if EXISTS != 0
math NAMES_METHOD = 1
get MAP_SIZE asize 1
for OFFSET = 0 != MAP_SIZE
get TMP line 1
string ELEMENTS S TMP NAME NAME_CRC ZSIZE ZCRC SIZE CRC OFFSET
putarray 10 NAMES NAME_CRC
putarray 11 NAMES NAME
math NAMES + 1
savepos OFFSET 1
next
endif
endif
/*
# debug
for x = 0 < NAMES
getarray HASH 10 x
getarray NAME 11 x
print "%HASH% %NAME%"
next x
*/
set KEY string ""
for x = 0 < 0x100
xmath TMP "x - 2"
putvarchr KEY x TMP
next x
idstring "NXPK"
get FILES long
get VER1 long
get VER2 long
get VER3 long
math MODE = 0
if VER1 >= 1 && VER3 > 1
math MODE = 1
endif
math INFO_SIZE = 0x1c
if MODE != 0
math INFO_SIZE = 0x28
endif
get OFFSET long
# if I used this work-around it means it was necessary in a sample, don't know what sample...
get NXPK_SIZE asize
if OFFSET u> NXPK_SIZE
xmath OFFSET "NXPK_SIZE - (FILES * INFO_SIZE)"
endif
goto OFFSET
for i = 0 < FILES
get NAME_CRC long
get OFFSET long
get ZSIZE long
get SIZE long
get ZCRC long
get CRC long
if MODE != 0
get DUMMY long
get DUMMY long
get FLAGS long
get DUMMY long
else
get FLAGS long
endif
xmath ZFLAGS "FLAGS & 0xffff"
xmath FLAGS "FLAGS >> 16"
if ZFLAGS == 2
comtype lz4
else # 0
comtype zlib
endif
set NAME string ""
if NAMES > 0
if NAMES_METHOD == 0
encryption md5 ""
log MEMORY_FILE OFFSET ZSIZE
encryption "" ""
string QUICKBMS_HEXHASH p "_%s" QUICKBMS_HEXHASH # LAME BUGFIX FOR QUICKBMS!!!
else
math QUICKBMS_HEXHASH = NAME_CRC
endif
for x = 0 < NAMES
getarray TMP 10 x
if TMP == QUICKBMS_HEXHASH
getarray NAME 11 x
putarray 10 x ""
math x = NAMES # break
endif
next x
endif
math FILENUM = 0
if FLAGS & 1
math TMP = 0x80
if TMP > ZSIZE
math TMP = ZSIZE
endif
encryption xor KEY "" 0 TMP
log MEMORY_FILE OFFSET TMP
encryption "" ""
math OFFSET + TMP
xmath TMP "ZSIZE - TMP"
append
log MEMORY_FILE OFFSET TMP
append
math OFFSET = 0
math FILENUM = -1
endif
if SIZE == ZSIZE
log NAME OFFSET SIZE FILENUM
else
clog NAME OFFSET ZSIZE SIZE FILENUM
endif
next i
启动quickbms.exe 然后选择nxpk.bms作为payload,然后再选择要解的文件和保存目录
然后自动就开始解了
除去头部偏移字节,解包进度到99%,解包已经完成,获得12661个文件
因为数据量比较大,这里仅对res1.npk拆解讲解。
四、文件说明
解包出来的文件有好几种类型,主要有如下几种
既然主要还是研究模型,那么打开RMAViewer File》Open Folder 载入我们的res1文件夹
选择列表内的文件可以进行浏览,上下键控制选择焦点,滚轮或QE控制远近,WSAD键控制视角,左键按住旋转模型
比如。。。
这里以茨木为例
选择Save IQE导出有骨骼的模型,然后在res1文件夹中筛选出iqe后缀
当然Save OBJ也是可以的。只不过就只有模型了。比如:
如果导出的iqe有问题或为了保险,可通过IQEFix.exe进行一次修复操作,直接将文件拉进exe即可
五、格式转换
iqe:以文本格式 存储的可带骨骼带贴图模型文件
iqm:以二进制 存储的可带骨骼带贴图模型文件
区别:二进制比文本格式更为通用,能被大多数模型软件读取,且压缩率更高体积更小。
启动IqeBrowser,吧我们的模型导入
切记目录必须为纯英文,否则文件可能打不开
选中要转换的模型 Ctrl+S保存 选择【*.iqm】
启动Noesis将刚刚转换的iqm导入,转换为fbx文件
六、查找贴图
启动3dsmax 导入fbx
查找对应的dds技巧是将res1与res2中的所有.dds整合到新建的文件夹
选择浏览视图为详细信息,以文件大小排序,剪切所有文件大小为1366KB的高清贴图
在3dmax中展UV图形,以此为根据,寻找目标dds文件
导入
七、总结
该文,该教材仅仅用作个人学习研究使用,请勿利用教材内容,进行有损目标软件公司利益的事情(包括但不限于版权纠纷,非法入侵纠纷)。本教程慨不负责
bilibili同步连接 https://www.bilibili.com/read/cv8274072
网易gis动画方面有头绪吗