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

Project1

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

[已经过期] 如何反解析rvdata文件

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
跳转到指定楼层
1
发表于 2012-11-10 18:49:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
用普通的文本编辑器打开MapInfos.rvdata是乱码,发现网友们用load_data("Data/MapInfos.rvdata"),能解析出来数据,我想自己去实现这个load_data的过程,不知这load_data源码那里有?
请高手指点!!感谢!

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
2
发表于 2012-11-10 18:54:48 | 只看该作者
load_data(filename)
读取 filename 指定的数据文件,重建对象。

$data_actors = load_data("Data/Actors.rxdata")

这个函数基本上和 File.open(filename, "rb") { |f|
  obj = Marshal.load(f)
}

相同,但读取加密档案文件内部的文件时会有所不同。

翻翻Marshal吧
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
3
 楼主| 发表于 2012-11-10 21:07:12 | 只看该作者
沙漠点灰 发表于 2012-11-10 18:54
翻翻Marshal吧

了解了一下load_data是RGSS的内部函数,RGSS是基于RUBY 的游戏脚本语言,很想知道load_data的函数内部实现
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
4
发表于 2012-11-10 21:21:08 | 只看该作者
jgl2000 发表于 2012-11-10 21:07
了解了一下load_data是RGSS的内部函数,RGSS是基于RUBY 的游戏脚本语言,很想知道load_data的函数内部实 ...

根据F1说的
这个函数基本上和 File.open(filename, "rb") { |f|
   obj = Marshal.load(f)
}

相同,但读取加密档案文件内部的文件时会有所不同


所以估计:
在未加密时,使用 Marshal.load,在加密时,使用另一种方式读取,究竟是什么方法,这就不是我们能知道的了,算是机密吧,可能有人破解这种方式.

至于Marshal吗,翻翻Ruby源代码吧

评分

参与人数 1星屑 +66 收起 理由
hys111111 + 66 我很赞同

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
5
 楼主| 发表于 2012-11-10 23:24:13 | 只看该作者
  1.   # Loads the data file indicated by filename and restores the object.
  2.   #
  3.   #  $data_actors = load_data("Data/Actors.rvdata2")
  4.   #
  5.   # This function is essentially the same as:
  6.   #
  7.   #  File.open(filename, "rb") { |f|
  8.   #    obj = Marshal.load(f)
  9.   #  }
  10.   #
  11.   # However, it differs in that it can load files from within encrypted archives.

  12.   def load_data(filename)
  13.     File.open(filename, "rb") { |f|
  14.       obj = Marshal.load(f)
  15.     }
  16.   end
复制代码
的确如此,很感兴趣用什么方式加密的
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
6
 楼主| 发表于 2012-11-11 00:55:54 | 只看该作者
本帖最后由 jgl2000 于 2012-11-11 00:57 编辑
沙漠点灰 发表于 2012-11-10 21:21
根据F1说的


似乎是用这种方式加密的
  1. module PatchConfig
  2. Ext = '.rvdata'
  3.   Key = '0x$fD4^;'
  4.   Salt = %w(a b c d e f g h i j k l m n o p q r s t u v w x y z .
  5.             A B C D E F G H I J K L M N O P Q R S T U V W X Y Z /)
  6.   Folder = 'Patch'
  7.   Name = 'patch_data'
复制代码
比如这个文件:

加密后的MapInfos.rvdata

加密前的mapinfo.rb
  1. module RPG
  2.   class MapInfo
  3.     def initialize
  4.       @name = ""
  5.       @parent_id = 0
  6.       @order = 0
  7.       @expanded = false
  8.       @scroll_x = 0
  9.       @scroll_y = 0
  10.     end
  11.     attr_accessor :name
  12.     attr_accessor :parent_id
  13.     attr_accessor :order
  14.     attr_accessor :expanded
  15.     attr_accessor :scroll_x
  16.     attr_accessor :scroll_y
  17.   end
  18. end
复制代码
现在可以通过实验来猜出,如何加密的了。
参考:http://yeyinde.vndv.com/Patcher2.txt
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
7
 楼主| 发表于 2012-11-11 01:04:31 | 只看该作者
  1. data = ''
  2.     File.open('Test.002', 'rb') {|f| data = f.read}
  3.     name = "Patch_#{Time.now.strftime("%y_%m_%d")}" + Ext
  4.     time = Time.now.to_i
  5.     crc = Zlib.crc32(data)
  6.     gz = Zlib::GzipWriter.open(name)
  7.       gz.comment = generate_hash(crc, time)
  8.       gz.mtime = time
  9.       gz.orig_name = Name + '.tar'
  10.       gz.write(data)
  11.     gz.close
  12.     FileUtils.rm('Test.002')
  13. def generate_hash(crc, time)
  14.     salt = Salt[crc % Salt.size] + Salt[time % Salt.size]
  15.     return Key.crypt(salt)[2..-1]
  16.   end
复制代码
参考
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
8
 楼主| 发表于 2012-11-11 01:05:13 | 只看该作者
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
9
 楼主| 发表于 2012-11-11 01:05:43 | 只看该作者
参考这个 gist.github.com/51513
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
10
 楼主| 发表于 2012-11-12 21:53:56 | 只看该作者
似乎是对原有数据进行压缩,然后序列化字节存储
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 11:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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