求一个能够解包ps3psp游戏解包镜像中PKG文件的工具

pkg文件--一种简单的游戏资源打包格式 - CSDN博客
pkg文件--一种简单的游戏资源打包格式
.pkg文件的格式
[四字节] 固定的内容, 值不重要
[四字节] 文件数目(unsigned int)
[四字节] 文件名表 的偏移(unsigned int)
[四字节] 文件名表 的长度(字节数)(unsigned int)
中间一堆 各个文件的内容, 文件内容使用zlib压缩过
[两字节] 文件名长度
[文件名长度那么多字节] 文件名
[四字节] 固定的内容,值不重要
[四字节] 文件原长度
[四字节] 文件偏移
[四字节] 文件压缩后的长度
[两字节] 又一个文件名的长度
打包 PKGEncode.py
用法 python PKGEncode.py dirname pathname.pkg
import zlib, glob, os, sys, struct
filelist = []
class FileVisitor:
def __init__(self, startDir=os.curdir):
self.startDir = startDir
def run(self):
for dirname, subdirnames, filenames in os.walk(self.startDir, True):
for filename in filenames:
self.visit_file(os.path.join(dirname, filename))
def visit_file(self, pathname):
filelist.append({'filename':pathname, 'size':0, 'zlib_size':0, 'offset':0, 'relative_filename': pathname.replace(os.path.normpath(self.startDir)+os.sep, '')})
if __name__ == "__main__":
if len(sys.argv[1]) & 3:
print 'few parameter'
source_dirname = sys.argv[1]
out_filename = sys.argv[2]
FileVisitor(source_dirname).run()
total = len(filelist)
fp = file(out_filename + '~', 'wb')
fp.write('\x64\x00\x00\x00')
fp.write(struct.pack('I', len(filelist)))
fp.write(struct.pack('I', 0))
fp.write(struct.pack('I', 0))
offset = 16
for index in range(total):
item = filelist[index]
item['offset'] = offset
infile = file(item['filename'], 'rb')
text = infile.read()
infile.close()
item['size'] = len(text)
text = press(text)
item['zlib_size'] = len(text)
fp.write(text)
offset += item['zlib_size']
print u'已压缩文件 %d/%d' % (index+1, total)
filename_table_offset = offset
for index in range(total):
item = filelist[index]
fp.write(struct.pack('H', len(item['relative_filename'])))
fp.write(item['relative_filename'])
fp.write('\x01\x00\x00\x00')
fp.write(struct.pack('I', item['offset']))
fp.write(struct.pack('I', item['size']))
fp.write(struct.pack('I', item['zlib_size']))
offset += 2 + len(item['relative_filename']) + 16
print u'已输出路径 %d/%d' % (index+1, total)
filename_table_len = offset - filename_table_offset
fp.close()
fp = file(out_filename + '~', 'rb')
ret = file(out_filename, 'wb')
fp.read(16)
ret.write('\x64\x00\x00\x00')
ret.write(struct.pack('I', len(filelist)))
ret.write(struct.pack('I', filename_table_offset))
ret.write(struct.pack('I', filename_table_len))
copy_bytes = 16
total_bytes = offset
while True:
text = fp.read(2**20)
ret.write(text)
copy_bytes += len(text)
print u'最后的拷贝 %d%%' % (copy_bytes*100.0/total_bytes)
if not text:
fp.close()
ret.close()
os.remove(out_filename + '~')
解包 PKGDecode.py
用法 python PKGDecode.py pathname.pkg dirname
import sys, os, struct, zlib
if __name__ == "__main__":
if len(sys.argv) & 3:
print 'few argument'
pkgfilename = sys.argv[1]
outdirname = sys.argv[2]
pkgfile = file(pkgfilename, 'rb')
pkgfile.read(4)
filenums, = struct.unpack('I', pkgfile.read(4))
filename_table_offset, = struct.unpack('I', pkgfile.read(4))
filename_table_len, = struct.unpack('I', pkgfile.read(4))
pkgfile.seek(filename_table_offset)
for index in range(filenums):
name_len, = struct.unpack('H', pkgfile.read(2))
name = pkgfile.read(name_len)
pkgfile.read(4)
offset, = struct.unpack('I', pkgfile.read(4))
size, = struct.unpack('I', pkgfile.read(4))
zlib_size, = struct.unpack('I', pkgfile.read(4))
current_pos = pkgfile.tell()
pkgfile.seek(offset)
text = pkgfile.read(zlib_size)
text = zlib.decompress(text)
pkgfile.seek(current_pos)
outfilename = os.path.join(outdirname, os.path.join(os.path.splitext(os.path.basename(pkgfilename))[0], name))
print u'进度 [%d/%d]: ' %(index+1, filenums), os.path.join(os.path.splitext(os.path.basename(pkgfilename))[0], name)
if not os.path.exists(os.path.dirname(outfilename)):
os.makedirs(os.path.dirname(outfilename))
file(outfilename, 'wb').write(text)
感谢python各种库的方便
这两个程序也可以作为自己的压缩解压工具
本文已收录于以下专栏:
相关文章推荐
pkgutil命令
pkgutil --expand src_pkg target_dir
(例如:pkgutil test.pkg test,将当前目录的test.pkg解压到当前目录的te...
不同的操作系统都有专属于自己的软件安装包格式。如Ubuntu系统上的deb安装包,Windows系统上的msi安装包等。macOS系统使用pkg作为软件安装包格式。
大多数macOS上开发的程序...
自己测试后发现,如果不需要签名,内部使用的mac app,用默认的打包方法却是也是很快捷的说(Disk Utility)
在mac上开发我们经常会需要进行打包(package)来生成安装文件,很自然...
使用文本编辑工具保存时,必须将PKG文件编码保存为UNICODE,否则无法正常编译。
-------------------------------------------
;PKG文件头部信息-...
一个最简单GAL游戏资源文件黑盒分析(一)
一个最简单GAL游戏资源文件黑盒分析(二)
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Pkg文件解压工具(PkgView文件解包)v1.3绿色免费版下载__飞翔下载
单机游戏下载单机游戏下载基地
当前位置: →
→ Pkg文件解压工具(PkgView文件解包) v1.3绿色免费版
mac的压缩文件、ps3的文件都是PKG格式,要解压这些文件需要专业的解压工具,PkgView是一款绿色免费的Pkg文件解压工具,是专门针对SP3的解包工具,可以帮助用户快速解压文件,有需要的欢迎下载使用。使用方法1、下载压缩包解压文件2、运行PkgView.exe3、点击File--&Open打开你要解包的pkg文件4、鼠标右键点选你所要解压的文件,然后选择“Extract...”解包到你指定的位置注意事项这个只能解包,如果你想打包成pkg的话可以用TrueAncestor PKG Creator。版本更新v1.3增加了支持PSX / PSP包。添加Windows 7任务栏进步。&
安卓官方手机版
IOS官方手机版
Pkg文件解压工具(PkgView文件解包) v1.3绿色免费版
本类软件分类
装机必备软件PSP游戏镜像内的PKG用什么软件能解包? - 汉化交流 - 扑家吧
PSP游戏镜像内的PKG用什么软件能解包?
求解,谢谢
不懂,帮顶.....
用这个试试:
PSN.PKG.Decryptor.&.Extractor.v1.79-LMAN.rar(140309)
@ 这么爽快就给工具,不像老师风格呢。。。噗,莫非心情很好
@ 今天顺手搜到的,话说PKG在PSP里面很少见呢233,对不对我就不知道了
@ 谢谢,提示无效PKG了
@ 镜像里的pkg好多pkg解包都解不了,不知当初汉化组怎么破的
@ 用语言编程,只有这样了
我试过用pkgview解压过,不过解压出的东西很不全
@ 试试PS3 用的PKG VIEW
@ @ 试过了,还是不行,3DM DNR的《核心危机》1.34GB rip版,不知道是不是加密了,试过好几个PKG解包软件都打不开。
请先再回复,如果你还没有账号,请先。}

我要回帖

更多关于 游戏dat文件解包工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信