设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4192|回复: 3
打印 上一主题 下一主题

[已经解决] 关于Script.rxdata中的Deflate算法

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
72
在线时间
673 小时
注册时间
2006-10-3
帖子
1795

开拓者

跳转到指定楼层
1
发表于 2011-2-16 01:13:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 熊猫 于 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)
还有Main脚本的实际内容:
  1. #==============================================================================
  2. # ■ Main
  3. #------------------------------------------------------------------------------
  4. #  各定义结束后、从这里开始实际处理。
  5. #==============================================================================

  6. begin
  7.   @a = load_data("Data/Scripts.rxdata")#.to_s
  8.   p @a
  9.   f = File.open("test2.txt","wb+")
  10.   f.write(@a.inspect)
  11.   f.close
  12.   # 准备过渡
  13.   # 设置系统默认字体
  14.   Font.default_name = (["黑体"])
  15.   Graphics.freeze
  16.   # 生成场景对像 (标题画面)
  17.   $scene = Scene_Title.new
  18.   # $scene 为有效的情况下调用 main 过程
  19.   while $scene != nil
  20.     $scene.main
  21.   end
  22.   # 淡入淡出
  23.   Graphics.transition(20)
  24. rescue Errno::ENOENT
  25.   # 补充 Errno::ENOENT 以外错误
  26.   # 无法打开文件的情况下、显示信息后结束
  27.   filename = $!.message.sub("No such file or directory - ", "")
  28.   print("找不到文件 #{filename}。 ")
  29. end
复制代码
请大家帮忙了,谢谢!
( ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็ ω ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้【看猫君玩,我也搞一只】)

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
2
发表于 2011-2-16 06:12:03 | 只看该作者
本帖最后由 苏小脉 于 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

点评

我确实用了MemoryStream,然后导进了DeflateStream…  发表于 2011-2-16 09:36
反证我是宁愿先用 C 把内存有关的操作抽象为本地库,然后再通过 C# 去调 = = GC 也是有 tradeoff 的……  发表于 2011-2-16 06:46
我记得这货要用MemoryStream读取数据,无比长  发表于 2011-2-16 06:23

评分

参与人数 1星屑 +150 收起 理由
熊猫 + 150 谢谢!

查看全部评分

[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
491
在线时间
339 小时
注册时间
2010-12-15
帖子
926

开拓者

3
发表于 2011-2-16 11:51:25 | 只看该作者
本帖最后由 tamashii 于 2011-2-16 11:51 编辑

.Net可以去ICSharpCode网站弄个ICSharpZIPLib
http://www.sharpdevelop.org
关于这个类库在网上有很多教程

评分

参与人数 1星屑 +100 收起 理由
熊猫 + 100 感谢解答,ICSharpCode很强大,不顾我不会.

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
72
在线时间
673 小时
注册时间
2006-10-3
帖子
1795

开拓者

4
 楼主| 发表于 2011-2-16 21:48:42 | 只看该作者
回复 苏小脉 的帖子

谢了,那个Zlib果然是重点。
http://zlib.net/中的那个zlib for .NET in C#
太好用了,我都没输入什么Level,直接用范例的Decompress函数就解开了。。。
本来没报什么希望,不过竟然看到输出文件就是脚本内容,激动。
decompressFile("E:\1.deflated", "E:\2.txt")
( ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็ ω ส้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้【看猫君玩,我也搞一只】)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-28 19:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表