Project1
标题:
关于Script.rxdata中的Deflate算法
[打印本页]
作者:
熊猫
时间:
2011-2-16 01:13
标题:
关于Script.rxdata中的Deflate算法
本帖最后由 熊猫 于 2011-2-16 01:14 编辑
实验了N次,完全可以读scripts.rxdata结构了,相关数据也可以读出来。
最后一步就是对实质脚本内容进行解压缩,搜索了一下发现,很多帖子提到了这个Deflate。
http://rpg.blue/thread-139590-1-1.html
http://www.66rpg.com/htm/news343.htm
http://rpg.blue/thread-5279-1-1.html
通过看WIKI貌似也看出来这是ZIP的算法,可我就是解不开啊…………
我使用.NET开发,里面有一个DeflateStream,可是我解的时候提示“块的长度与它的补集不匹配”,暂且不管这个。我发现这个.NET的DeflateStream没有Level的设置,估计是不能用这个类。
我又找到了一个很强大的.NET专用库"ICSharpCode.SharpZipLib.dll",这里面东西好多好多,找到了一个叫Deflater的,有Level设置……还是解不开~
我不可能用RUBY的那个Zlib::Deflate.deflate(string, level),
我就是想知道.NET的话怎么解开这个。
还有大家有没有关于这个Deflate的更详细的内容,例如指定的算法名称,这里有很多算法例如GZIP、BZIP、ZIP……
传上来我所分析的Scripts.rxdata,还有一个从里面弄出来让我扒干净的被Deflated的数据文件,我想解压后这个就应该是我Main脚本的内容。(那个扩展名不用管,我瞎起的,主要是里面的数据)
Desktop.rar
(118.61 KB, 下载次数: 69)
2011-2-16 01:10 上传
点击文件名下载附件
还有Main脚本的实际内容:
#==============================================================================
# ■ Main
#------------------------------------------------------------------------------
# 各定义结束后、从这里开始实际处理。
#==============================================================================
begin
@a = load_data("Data/Scripts.rxdata")#.to_s
p @a
f = File.open("test2.txt","wb+")
f.write(@a.inspect)
f.close
# 准备过渡
# 设置系统默认字体
Font.default_name = (["黑体"])
Graphics.freeze
# 生成场景对像 (标题画面)
$scene = Scene_Title.new
# $scene 为有效的情况下调用 main 过程
while $scene != nil
$scene.main
end
# 淡入淡出
Graphics.transition(20)
rescue Errno::ENOENT
# 补充 Errno::ENOENT 以外错误
# 无法打开文件的情况下、显示信息后结束
filename = $!.message.sub("No such file or directory - ", "")
print("找不到文件 #{filename}。 ")
end
复制代码
请大家帮忙了,谢谢! dsu_plus_rewardpost_czw
作者:
苏小脉
时间:
2011-2-16 06:12
本帖最后由 苏小脉 于 2011-2-16 06:18 编辑
DEFLATE 是一种压缩算法;gzip 是一种软件或存档格式,多数情况下是指 GNU 的 gzip(此外还有各种 BSD 平台下的 gzip,实现不同),也可以指 gzip 专用的存档格式,这些都支持 DEFLATE 压缩;bzip2 支持 DEFLATE,但似乎也支持别的算法;zip 是存档文件格式,支持 DEFLATE。
要注意的是 Zlib 会对原始的 DEFLATE 数据进行封装,开头有一个数据头和数据尾,而这个头不是压缩算法的标准,而是 Zlib 的标准。gzip、bzip2 也有各自的标准,所以尽管压缩算法相同,最后的结果还是会有出入的,最多是 payload 一样。
.NET 的 DeflateStream 想必只是一个提供 DEFLATE 算法的类,没有针对某种存档格式的处理。同一个命名空间下还有个 GZipStream,想必就是针对 gzip 文件格式的了。Zlib 估计没包含在在官方的库中,但 Zlib 及其标准本身就是从一个库发展起来的,要解压 Zlib 压缩的数据,自然是用 Zlib 本身了。RM 调用的是 Ruby 的标准库中的 Zlib,底层用的也是 zlib 官方的库实现。直接把官网的实现拽过来,然后调用就行了嘛。
zlib 官网:
http://zlib.net/
提供源码和预编译的 DLL。
手册:
http://www.zlib.net/manual.html
另外:
DEFLATE 算法:
http://www.ietf.org/rfc/rfc1951.txt
不过由于 RFC 是 memo,所以语言比较正式,wikipedia 的这个可能更读者友好些:
http://en.wikipedia.org/wiki/DEFLATE
作者:
tamashii
时间:
2011-2-16 11:51
本帖最后由 tamashii 于 2011-2-16 11:51 编辑
.Net可以去ICSharpCode网站弄个ICSharpZIPLib
http://www.sharpdevelop.org
关于这个类库在网上有很多教程
作者:
熊猫
时间:
2011-2-16 21:48
回复
苏小脉
的帖子
谢了,那个Zlib果然是重点。
http://zlib.net/
中的那个zlib for .NET in C#
太好用了,我都没输入什么Level,直接用范例的Decompress函数就解开了。。。
本来没报什么希望,不过竟然看到输出文件就是脚本内容,激动。
decompressFile("E:\1.deflated", "E:\2.txt")
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1