查看: 6939|回复: 13

[讨论] 關於load_data的讀取問題

  [复制链接]
梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
回帖
30
发表于 2010-5-19 18:19:22 | 显示全部楼层 |阅读模式

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

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

×
假設我有一個檔案
它像存檔檔案一樣 有至少兩層以上的marshal字串儲存區
我想知道 如何用load_data實現讀取兩層以上字串?
因為我最近試著把該檔案在"製作遊戲安裝檔"過程時一起加密進去
不過我用File.open的方式 似乎因為有加密而讀不到、
也已經清楚只有load_data可以讀取加密過的檔案。
我參閱過說明書了
它只說:
  1. load_data(filename)
  2. 讀取 filename 指定的資料文件,重建目標。

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

  4. 這個函數基本上和 File.open(filename, "rb") { |f|
  5.   obj = Marshal.load(f)
  6. }

  7. 相同,但讀取加密檔案文件內部的文件時會有所不同。
复制代码
不過因為該檔案有兩層以上的字串儲存區
所以用load_data只能讀取到第一層

可是我想要讓它讀取兩層以上的字串
說明書卻不公開讀取的原碼

應該如何讓它讀取呢?

八云紫的式神<

梦石
0
星屑
844
在线时间
1260 小时
注册时间
2008-1-1
回帖
3890

烫烫烫

发表于 2010-5-23 06:37:49 | 显示全部楼层
有个比较麻烦的方法:用Marshal.load分别读出两层,分别写入文件,然后load_data
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复

使用道具 举报

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
回帖
30
 楼主| 发表于 2010-5-23 20:39:47 | 显示全部楼层
本帖最后由 土撥撥 于 2010-5-23 20:48 编辑

謝謝你的回答,
但是我的用意就是要讓他一次讀取整個檔案(加密檔裡面)
因為我把數據庫的檔案壓縮成5~6個檔案了,
如果再把它Marshal.load、分別寫入文件
就變得跟預設的數據庫儲存方式沒兩樣了....

是否能夠將load_data以某種方式重新定義一遍呢?
RGSS研究專員
回复

使用道具 举报

八云紫的式神<

梦石
0
星屑
844
在线时间
1260 小时
注册时间
2008-1-1
回帖
3890

烫烫烫

发表于 2010-5-23 20:47:21 | 显示全部楼层
不太好办嗯,加密档案的是用来加密的,EB自然不会公开其源码
不过加密本身就支持打包多文件了,为什么还要分别存N次,写进一个文件里
直接生成包含那些资料的加密档案不就好吗
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复

使用道具 举报

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
回帖
30
 楼主| 发表于 2010-5-23 20:50:01 | 显示全部楼层
本帖最后由 土撥撥 于 2010-5-23 21:10 编辑

不不不...我認為現在的加密已經沒用了(因為解密器的氾濫)

我想要先用Marshal的方式把壓縮的資料庫合併起來
(創意來自 http://rpg.blue/forum.php?mod=viewthread&tid=137212&extra=page%3D3  )、

再用一層加密(雖然一些人破解得了,但至少能防止另一部份的人)

兩層一起用
RGSS研究專員
回复

使用道具 举报

八云紫的式神<

梦石
0
星屑
844
在线时间
1260 小时
注册时间
2008-1-1
回帖
3890

烫烫烫

发表于 2010-5-27 18:46:31 | 显示全部楼层
如果你能知道加密算法,或者拿到了解密器的源码,那么你可以直接open那个文件然后解密
如果你没有解密算法,那还是应该视为那种加密是不可破解的
如果只是为了防解密器的话,随便改改数据结构,就算是简单的把那几个rxdata文件名替换一下,把素材随便找个算法压缩一下,就能唬住不少人了,没必要双加,因为你总得用个的scripts.rxdata或者rgssad来供game.exe调用,这个文件是可以直接看到脚本或者用解包器解密的,你的外层防备无用

评分

参与人数 1星屑 +500 收起 理由
「旅」 + 500 认可答案

查看全部评分

rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复

使用道具 举报

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
回帖
30
 楼主| 发表于 2010-5-28 21:46:33 | 显示全部楼层
好吧,那我就放棄了..
謝謝你@@
回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2010-6-16 14:10:54 | 显示全部楼层
重载一下 load_data,在原 load_data 读取到了第一层后再用你的解密算法扒开第二层不就好了吗?还是说我理解错了…… ><
回复

使用道具 举报

梦石
0
星屑
95
在线时间
18 小时
注册时间
2008-1-22
回帖
30
 楼主| 发表于 2010-6-20 17:08:57 | 显示全部楼层
回复 紫苏 的帖子


    可是我根本就不知道要怎麼重載啊- -
    根本不知道加密算法要怎麼反過來寫
回复

使用道具 举报

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
回帖
1912
发表于 2010-6-20 22:59:14 | 显示全部楼层
懵了,你不是说用 load_data 已经读取到第一层了吗,那剩下的第二层不就不是加密的,而只是 Marshal.dump 对象序列化后的字节流了吗?这样的话重定义 load_data,调用原来的 load_data,然后再 Marshal.load 一下不就 OK 了……
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部