Project1

标题: 怎么不加密也不会让别人打开工程 [打印本页]

作者: a1813647364    时间: 2015-7-11 22:15
标题: 怎么不加密也不会让别人打开工程
我最近玩了1款DNF单机版的游戏,我想试图打开那个工程,可是他那个游戏并没有加密啊,打开的时候显示读取角色失败!怎么才能让自己的游戏像DNF一样!
作者: kuerlulu    时间: 2015-7-11 22:24
把脚本中的读取数据库文件名和Data下对应文件名改掉 那么工程就无法读取 游戏仍能运行【然而你就不能编辑游戏了
作者: wolves    时间: 2015-7-12 04:40
加密方法有两种:
混淆文件名法
--game.exe程序默认有一个script.rxdata的脚本初始位置,可以通过重写game.exe.或更改game.ini来实现混淆脚本文件,
密钥加密法
--文件在电脑里都以二进制存储,也就是1和0组成的数据。我们把1和0进行一些有规律的运算,然后在rgssxxx.dll中将运算反过来算,得到真正的数据。

解密方法这里不做讨论。
rmxp打开一个工程首先要创建game.rpgorj文件,内容为rmxp版本,其次要有data文件夹,里面要有包括script.rxdata等必要数据,其中script.rxdata是脚本数据,如果你只希望查看脚本的话就把缺失的文件从新建的工程里拷贝过来。
有什么疑问请回复- -
作者: 正太君    时间: 2015-7-12 08:04
楼主的头像简直令聪聪忍不住梦遗...
作者: a1813647364    时间: 2015-7-12 16:48
kuerlulu 发表于 2015-7-11 19:24
把脚本中的读取数据库文件名和Data下对应文件名改掉 那么工程就无法读取 游戏仍能运行【然而你就不能编辑游 ...

{:2_276:}这两个都没听懂,你可不可以把第一个教程给我做个示范,截图教教我!
作者: a1813647364    时间: 2015-7-12 16:53
kuerlulu 发表于 2015-7-11 19:24
把脚本中的读取数据库文件名和Data下对应文件名改掉 那么工程就无法读取 游戏仍能运行【然而你就不能编辑游 ...

我试了试,游戏就不能正常运行了啊!
作者: galegade    时间: 2015-7-12 19:24
我在网上下了 热血海贼王的工程文件 覆盖上去 发现无法修改脚本和事件内容  无论怎么修改 保存后 游戏都无变化的  估计就是楼主说的情况  研究好久了
只发现一处         他得game启动程序有1M多 替换这个就启动不了  其他开放的解密游戏  下载出来的game只有64k
作者: wolves    时间: 2015-7-12 22:36
本帖最后由 wolves 于 2015-7-12 22:44 编辑

解释下rmxp的运行机制
rmxp的game.exe是个引导程序,用来调用那个什么rgssxxx.dll来逐条解释你写的脚本
你写的脚本编辑器里的东西存在一个script.rxdata文件里。
默认用rmxp打开工程首先要寻找script.rxdata

而游戏运行时则是game.exe找rgssxxx.dll,当然,game.exe是可以改的,也就是说可以读取不叫rgssxxx.dll的库,这就是所谓的混淆dll文件名

这个dll是用来运行脚本文件的,解释的方法是game.exe通过game.ini或者在内部设置的方法获取脚本文件位置并传递给dll,也就是说脚本文件也是可以改的。

我们常在网上下一些游戏,经常发现有"捆绑"一说
rmxp进行加密的一种手段就是捆绑
把data文件夹直接捆绑到game.exe上,关于解密手段这里不做过多解释。

rmxp读取工程先读脚本script.rxdata,失败会提示读取脚本文件失败
其次是数据库的一些文件,再然后是一些地图文件。
一般与默认工程的文件名一样,这样才能读取工程。

我们用伪码表示运行机制和读取机制:
运行:
  1. 脚本位置=game.exe设置的默认脚本位置
  2. 解释器dll=game.exe设置的默认dll位置
  3. 如果 game.ini存在
  4. game.exe读取game.ini
  5. 脚本位置=game.ini设置的默认脚本位置
  6. 解释器dll=game.ini设置的默认dll位置
  7. 结束如果
  8. 获取dll的一个函数
  9. 将脚本文件当做参数传进dll运行
  10. #注:其它脚本文件都是通过script中的脚本调用的
复制代码
从上面的代码可以看出,一个rmxp程序运行最基本的文件只有3个文件
game.exe script.rxdata game.ini

而rmxp读取机制:
  1. 开始查错
  2.     读取data下的script.rxdata
  3.     读取data下的xxx.rxdata#这里代指那些角色、地图之类的rxdata文件
  4. 如果检查到错误
  5.     输出找不到错误
  6. 结束如果
  7. 加载界面
  8. 查看资源
  9. #测试运行是把$debug变量设置为true了, 然后执行game.exe
复制代码
由上面的代码看出来rmxp读取需要的文件就很多了
要求data里的所有文件都是全的(是不是自己的无所谓),game.exe存在
而其它的,例如rgssxxx.dll则是不重要的。

所以,只要data文件夹不完整,rmxp就打不开,编辑不了工程。

作为捆绑的game.exe,data文件夹实际位置在game.exe里面,所以需要一步解密的过程。




然后说下你的问题
你的rmxp提示说读取角色数据失败,按照刚刚的顺序,说明你的script.rxdata是存在的并且可用的,所以如果缺少角色,那就从默认工程里拷贝个actors.rxdata放到data里
所谓的缺什么补什么,最后就能打开了。
作者: a1813647364    时间: 2015-7-13 09:10
galegade 发表于 2015-7-12 16:24
我在网上下了 热血海贼王的工程文件 覆盖上去 发现无法修改脚本和事件内容  无论怎么修改 保存后 游戏都无 ...

谢谢了!
作者: a1813647364    时间: 2015-7-13 09:19
a1813647364 发表于 2015-7-13 06:10
谢谢了!

那个wolves谢谢!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1