写在前面:最近在玩 RPG 游戏,想拆一个 Game.rgss3a 包,在网上找了很久的拆包方法,感觉写的比较凌乱,我来给大家整理一下吧。不过我本人的技术能力也很差,不确定说的是不是对的,就当是给大家提供几个方法,大家都自己试一下吧
先说 Game.rgss3a 是什么。我有个收集 RPG 游戏 CG 的习惯,但是对游戏画面截图,肯定会对画质有影响,我还是愿意追求一下原图。所以我玩完游戏后会从游戏文件里找 CG。CG 图一般都会打包成其他格式,不直接对玩家开放。以前我遇到的大多是 .rpgmvp
格式的文件,这次遇到的是 .rgss3a
文件,以前的方法就不好使了。
-
谷歌到了一个网站,但是不太好用,不仅速度慢,而且不能用。不过也可能是我这里的问题,大家可以再自己尝试一下。https://www.ezyzip.com/convert-rgss3a-to-zip.html# -
我在 http://www.winwin7.com/soft/7843.html 网站下载了一个解包软件,发现是可用的。效果图:
从这种所谓的软件网站下载软件是有风险的,但是我没找到这个软件的原发布地址,故只能冒着中病毒的风险从这里下载。 -
https://tieba.baidu.com/p/6700522560 介绍了一种解非标准包的方法,但是里面所谓的
sck2pack.py
文件 没有说清楚,这里我找到了,分享给大家 https://gist.github.com/dogtopus/a9eee9e9f513d4975ea5cac252d406cc
#!/usr/bin/env python3
import sys
import struct
if __name__ == '__main__':
if len(sys.argv) < 2:
print('Usage:', sys.argv[0], '<fux2packedrgss3a>')
sys.exit(1)
hdr = struct.Struct('<8sI')
with open(sys.argv[1], 'rb+') as f:
header = hdr.unpack_from(f.read(12))
if header[0] != b'Fux2Pack':
print('No fuxxed pack to fsck. Stop')
sys.exit(1)
# Old and good number theory
metadata_key = ((header[1] - 3) * 0x38E38E39) & 0xffffffff
print(hex(header[1]), '->', hex(metadata_key))
f.seek(0)
f.write(hdr.pack(b'RGSSAD\x00\x03', metadata_key))
print('Fscked. Good luck.')
- 后来发现,已经有作者把
sck2pack.py
集成进新的工具里了,作者博客见:https://usaginya.lofter.com/post/1d56d69b_1ca96789b 。使用该作者发布的工具也可以拆包。(不过该作者的工具会引起 windows安全中心报毒,谨慎使用)
2023年1月19日星期四