Project1

标题: 防修改器策略之一 [打印本页]

作者: end55rpg    时间: 2014-1-23 00:31
标题: 防修改器策略之一
本帖最后由 end55rpg 于 2014-1-23 17:50 编辑

10行的代码实现两个功能 防变速
不过应该是防菜鸟的。
RUBY 代码复制
  1. Thread.new{ loop{tt=Time.now
  2. t=Graphics.frame_rate/10;sleep t
  3. exit unless (-0.5..0.5)===Time.now-t-tt}}

由于失去焦点后取时间间隔变得异常大,而且
由于线程的sleep在RM失去焦点后仍然运作,所以和取Time一样,于是没采用sleep当time,而用信用机制,下面是正确率很高的代码:
RUBY 代码复制
  1. #防修改器变速   byEnd55rpg
  2. module Graphics
  3.   Update = method("update")
  4.   @t=Time.now
  5.   @crash=0
  6.   @cnsd=0
  7.   def self.update(*arg)
  8.     if @cnsd == Graphics.frame_rate
  9.       unless (1..1.1)===(Time.now-@t)
  10.         @crash += 100 if Time.now-@t < 10
  11.       end
  12.       if @crash > 200
  13.         exit
  14.       end
  15.       @t=Time.now
  16.       @cnsd=0
  17.     else
  18.       @crash-=2 if @crash >= 2
  19.       @cnsd+=1
  20.     end
  21.     Update.call(*arg)
  22.   end
  23. end


测试后,基本可以使用,在几秒内会结束使用变速的游戏
求讨论可行性与实际性


防止修改内存代码较复杂。。。。待讨论
作者: 赛露休斯    时间: 2014-1-23 22:40
防修改内存,只要显示的值和实际值不同就可以了
比如画面显示值是HP100,HP实际值50,到-50时才判定死亡
作者: end55rpg    时间: 2014-1-24 15:25
赛露休斯 发表于 2014-1-23 22:40
防修改内存,只要显示的值和实际值不同就可以了
比如画面显示值是HP100,HP实际值50,到-50时才判定死亡 ...

但是你这种做法是修改来让数据找不到
而修改器也是从为了找到方面进化的
比如模糊查询就能破解你这种办法
所以防止力度不太强

我觉得该从检测被修改方面设防
而且你那个也不好写通用代码,无法弄成直接可用的脚本,要对指定数据处理
所以我说写出来很麻烦
作者: 赛露休斯    时间: 2014-1-24 19:54
end55rpg 发表于 2014-1-24 15:25
但是你这种做法是修改来让数据找不到
而修改器也是从为了找到方面进化的
比如模糊查询就能破解你这种办法 ...

感觉从根本上设防很难,还是要从那些被经常改的值入手
可以做修改检查,比如定义一个专门负责监视金钱数的变量,他的值始终保持和金钱的关联(比如始终是 金钱*3+4),在每一笔增减金钱时他也跟着计算,如果有人内存修改了金钱,显然没有经过增减金钱的方法而直接内存修改,变量就能检查到不同了
作者: Sion    时间: 2014-1-24 20:32
本帖最后由 Sion 于 2014-1-24 20:34 编辑

修改器这种玩家自己用来降低游戏性的东西,直接无视就行。
作者: Mr丶木头    时间: 2014-1-24 22:53
Sion 发表于 2014-1-24 20:32
修改器这种玩家自己用来降低游戏性的东西,直接无视就行。

不过我觉得这种技术还是值得我们研究的{:2_273:}
作者: chd114    时间: 2014-1-25 00:12
直接把能力废除是最好的选择= =
作者: a386881    时间: 2014-1-25 23:29
只要把默认的(*2+1)改成[(*6+7)/8]不就妥了。。。
作者: end55rpg    时间: 2014-1-26 10:50
a386881 发表于 2014-1-25 23:29
只要把默认的(*2+1)改成[(*6+7)/8]不就妥了。。。

貌似可以用模糊查出来,然后再搜一个,搜出来的两个数和实际现实的两个解一次方程组就可以找出加密匙吧
作者: a386881    时间: 2014-1-26 12:48
end55rpg 发表于 2014-1-26 10:50
貌似可以用模糊查出来,然后再搜一个,搜出来的两个数和实际现实的两个解一次方程组就可以找出加密匙吧 ...

……好麻烦啊……要是真的用实时检测被修改的话,占用的内存可能会相当可怕。
说真的,比起研究防作弊,研究一下防破解对游戏更重要。貌似没有几个RPG游戏是有防作弊的,依然卖的很好。
即使你防止了作弊,但是人家拆了你的包,照样作弊 :( 所以防破解才是最重要的。
比较好的防破解方法是在加密你的游戏之前往Graphics文件夹里扔几个强力点的病毒(喂!太坏了!)
还是一打开文件夹自动运行的那种。
另,要是防内存修改的话比较麻烦,但是防止存档修改还是好办的。
按下存档的时候,用脚本把金钱经某种加密运算后存进某个变量,把每个变量经某种加密运算后存在另一个空变量里(就是弄个两三份加密副本)。物品也弄。
读取存档的时候逐个对金钱、变量、物品加密变量运算,与物品、金钱、变量进行比对,若不符合,则删除所有存档,跳错弹出,同时用生成TXT语句在目录下生成.bat的病毒,并运行之。
……我是不是太坏了……
作者: 1003492579    时间: 2014-3-15 13:27
我现在正在使用外接dll进行全局进程钩子,对修改器进行直接灭杀(有必要还能价格删除存档什么的)
这个方法不错,实际占用内存不是很大(2G内存大概占用2%左右)
主要的问题是要知道修改器的名称,而且我不会用ruby的函数………………
作者: Im剑侠客    时间: 2014-3-15 23:13
chd114 发表于 2014-1-25 00:12  直接把能力废除是最好的选择= =

我想说的是,制作一个游戏不是给那些要修改的人玩的。响当当地制作,必会遇到响当当的玩家的。




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