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

Project1

 找回密码
 注册会员
搜索
查看: 5628|回复: 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
星屑
50
在线时间
13 小时
注册时间
2012-11-10
帖子
9
12
 楼主| 发表于 2012-11-15 15:32:19 | 只看该作者
zhangbanxian 发表于 2012-11-13 08:42
- -b这个不是默认加密方法,只是一个用户自定义的打包系统(因为原版加密会增加体积),想了解加密方法谷 ...

很感谢你的指点
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
11
发表于 2012-11-13 08:42:27 | 只看该作者
jgl2000 发表于 2012-11-11 01:04
参考

- -b这个不是默认加密方法,只是一个用户自定义的打包系统(因为原版加密会增加体积),想了解加密方法谷歌rgssad,如果说非加密模式的rxdata话是不加密也不压缩的只是序列化而已(只有scripts.rxdata有一层zlib压缩)...
好歹当年也当过大魔王过,orz
回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

使用道具 举报

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
8
 楼主| 发表于 2012-11-11 01:05:13 | 只看该作者
回复 支持 反对

使用道具 举报

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
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
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
复制代码
的确如此,很感兴趣用什么方式加密的
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-2 11:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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