幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 15852|回复: 24

[个人创意] [广告]想保护自己的游戏么?[2007.9.2更新]

[复制链接]

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
发表于 2006-7-18 01:10:23 | 显示全部楼层 |阅读模式
假如您早就对RMXP的破解有所耳闻……
假如您希望加密可以真正保护您的知识产权……
假如您不愿让浸透血汗的作品沦为他人解剖的样本……

那么,您还是放弃RMXP吧!!

啊呀呀,说错广告词了。应该是:
脚本漏洞修补程序为您服务=.=

所谓漏洞修补程序,一贯作风,就不详细解释原理,只说修补的部分。
修补了脚本事件执行时,没有过滤危险脚本的漏洞。

题外话:
看日期就知道,老早写的……之所以放,是因为先是《Aveyond》,然后是《契约之绊》
大家都被华丽的拆了,老实说拆的还真辛苦,动用了这么多工具,算是综合实力的体现伐?
我继续猜下,某些作品是不是怕拆了然后放出来会被拍死,所以没有放呢?
早就说过,既然都把商业游戏拆成那样了,就不能放过那点RMXP游戏么?
哈哈,还真是一个都不放过,这叫什么来着?

对了,一个都不能少!

拆的这么过瘾,怕也没空干别的了,最多做做demo,都是不值一拆的东西。
因为自己的东西没有加密的意义了,所以也剥夺别人的么?=.=
恶呵呵,那么偶不厚道的说下啊,有些人天天叫唤拆啊拆啊拆别人的,那么自己也别加密了。
等你有一天又想加密的时候,别忘记,你已经丧失了加密的权利。
衷心希望别出现这一天哦~~


这个脚本没有经过严格的测试,但是基本保证可以防御三流拆卸工,不妨试试看。
经3E的提醒,继续更新……
经柳之一提醒,发现依旧有漏洞,再次可耻更新。不过……请别对这个脚本太认真,关键是下面的存档更新脚本。
经さくら提醒,的确还有好多情况没有考虑进去,于是7.18下午更新了一次……
转载请注明本贴URL并保持脚本的完整性
  1. #==============================================================================
  2. # ☆★☆ Eval Checker ☆★☆
  3. #------------------------------------------------------------------------------
  4. # - FantasyDR
  5. #------------------------------------------------------------------------------
  6. # MSN: [email]FantasyDR_SJL@hotmail.com[/email]
  7. #------------------------------------------------------------------------------
  8. # - 2007.9.2
  9. # - 改正了一些错误的判断条件……可能会导致误判。
  10. # - 2007.9.1
  11. # 添加了新的过滤词汇,感谢柳之一的提醒。
  12. # 这个脚本功能有限,心理效用大于实际效用。
  13. # 我就聊胜于无的继续更新下吧~
  14. # - 2006.7.18
  15. # 更新了脚本过滤不严格的漏洞。-.-|||
  16. # 感谢さくら的提醒。大家一起来完善吧~
  17. # - 2006.3.6
  18. # 第一版
  19. #------------------------------------------------------------------------------
  20. # 运行脚本事件之前检测是否含有恶意代码
  21. #==============================================================================
  22. #==============================================================================
  23. # ■ Eval Checker
  24. #------------------------------------------------------------------------------
  25. # 语法检测的类,使用HASH表来存检查结果
  26. #==============================================================================
  27. class Eval_Checker
  28.   attr_accessor :alarm # 出现错误是否报告
  29.   #--------------------------------------------------------------------------
  30.   # ● 初始化对像
  31.   #--------------------------------------------------------------------------
  32.   def initialize
  33.     @code_hash = {}
  34.     @alarm = true
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 检测代码
  38.   #--------------------------------------------------------------------------
  39.   def test(code)
  40.     if !code.is_a?(String)
  41.       return true
  42.     elsif @code_hash[code] != nil
  43.       result = @code_hash[code]
  44.     else
  45.       result = true
  46.       # 禁止alias重命名
  47.       if code[/[\W]*alias[\W]/] != nil
  48.         result = false
  49.       # 禁止require加载文件
  50.       elsif code[/[\W]*require[\s]*[^\w\[]/] != nil
  51.         result = false
  52.       # 禁止打印
  53.       elsif code[/[\W]*[pP][\s]*[^\w\[]/] != nil
  54.         result = false
  55.       # 禁止打印
  56.       elsif code[/[\W]*print[\W]/] != nil
  57.         result = false
  58.       # 禁止Marshal模块
  59.       elsif code[/[\W]*Marshal[\s]*[^\w\[]/] != nil
  60.         result = false
  61.       # 禁止save_data方法
  62.       elsif code[/[\W]*save_data[\s]*[^\w\[]/] != nil
  63.         result = false
  64.       # 禁止load_data方法
  65.       elsif code[/[\W]*load_data[\s]*[^\w\[]/] != nil
  66.         result = false
  67.       # 禁止load方法
  68.       elsif code[/[\W]*load[\s]*[^\w\[]/] != nil
  69.         result = false
  70.       # 禁止调用API
  71.       elsif code[/[\W]*Win32API[\s]*[^\w\[]/] != nil
  72.         result = false
  73.       # 禁止调用文件方法
  74.       elsif code[/[\W]*File[\s]*[^\w\[]/] != nil
  75.         result = false
  76.       # 禁止使用eval
  77.       elsif code[/[\W]*eval[\W]/] != nil
  78.         result = false
  79.       end
  80.       @code_hash[code] = result
  81.     end
  82.     if !result and @alarm
  83.       print("=====非法脚本=====\n",code)
  84.     end
  85.     return result
  86.   end
  87. end
  88. # 实例化一个全局Checker
  89. $FDR_EC = Eval_Checker.new
  90. #==============================================================================
  91. # ■ Game_Character
  92. #==============================================================================
  93. class Game_Character
  94.   alias :fdr_EC_Game_Character_move_type_custom :move_type_custom
  95.   #--------------------------------------------------------------------------
  96.   # ● 移动类型 : 自定义
  97.   #--------------------------------------------------------------------------
  98.   def move_type_custom
  99.     i = @move_route_index
  100.     while i < @move_route.list.size
  101.       command = @move_route.list[i]
  102.       # 脚本
  103.       if command.code == 45 and !$FDR_EC.test(command.parameters[0])
  104.         @move_route_index += 1
  105.         return
  106.       end
  107.       i += 1
  108.     end
  109.     return fdr_EC_Game_Character_move_type_custom
  110.   end
  111. end
  112. #==============================================================================
  113. # ■ Interpreter
  114. #==============================================================================
  115. class Interpreter
  116.   alias :fdr_EC_Interpreter_command_111 :command_111
  117.   alias :fdr_EC_Interpreter_command_355 :command_355
  118.   #--------------------------------------------------------------------------
  119.   # ● 条件分支
  120.   #--------------------------------------------------------------------------
  121.   def command_111
  122.     # 脚本
  123.     if @parameters[0] == 12 and !$FDR_EC.test(@parameters[1])
  124.       return command_skip
  125.     end
  126.     return fdr_EC_Interpreter_command_111
  127.   end
  128.   
  129.   #--------------------------------------------------------------------------
  130.   # ● 脚本
  131.   #--------------------------------------------------------------------------
  132.   def command_355
  133.     i = @index
  134.     while i < @list.size
  135.       return true unless $FDR_EC.test(@list[i].parameters[0])
  136.       break unless @list[i].code == 655 or @list[i].code == 355
  137.       i += 1
  138.     end
  139.     return fdr_EC_Interpreter_command_355
  140.   end
  141. end
复制代码

二楼是存档自定义的脚本……包含存档校验。

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
 楼主| 发表于 2006-7-18 01:11:55 | 显示全部楼层
做成通用版本了……有兴趣的可以实验一下,保险起见可以和顶楼的脚本一起使用。
仅仅做存档自定义,根本无法避免恶意存档修改。所以再次重申自己的观点,许多日方的RM游戏自定义存档不是因为防范漏洞,不过是游戏内容需要而已。因为那边没有人这样拆……我们则不同,还是加上存档的校验比较保险。

脚本功能为:生成自定义的压缩存档,存档包含合法性校验,校验同密钥相关。
在main之前加入即可,防止存档恶意修改,不合法存档不予读取。
注意,请在使用前先把密钥更改为自己的值,不要使用默认的1234567
转载请注明本贴URL并保持脚本的完整性
  1. #==============================================================================
  2. # ☆★☆ Custom Save☆★☆
  3. #------------------------------------------------------------------------------
  4. # - FantasyDR
  5. #------------------------------------------------------------------------------
  6. # MSN: [email]FantasyDR_SJL@hotmail.com[/email]
  7. #------------------------------------------------------------------------------
  8. # - 2006.7.18
  9. #------------------------------------------------------------------------------
  10. # 自定义存档数据排列顺序并校验存档
  11. #==============================================================================
  12. #==============================================================================
  13. # ■ Scene_File
  14. #------------------------------------------------------------------------------
  15. #  存档画面及读档画面的超级类。
  16. #==============================================================================
  17. class Scene_File
  18.   #--------------------------------------------------------------------------
  19.   # ● 存档密钥,请定义成自己的密钥
  20.   #    密钥不同的存档将无法被读取
  21.   #--------------------------------------------------------------------------
  22.   SAVE_KEY = 1234567
  23.   #--------------------------------------------------------------------------
  24.   # ● 存档号码最大值
  25.   #    默认0~3共4个存档,如果需要大于4个存档,需要改动窗口类。
  26.   #    这里不提供大于4个存档的窗口排布,如果有需要请自己定义。
  27.   #--------------------------------------------------------------------------
  28.   SAVE_MAX = 3
  29.   #--------------------------------------------------------------------------
  30.   # ● 初始化对像
  31.   #     help_text : 帮助窗口显示的字符串
  32.   #--------------------------------------------------------------------------
  33.   def initialize(help_text,type = "档案",save_max = SAVE_MAX)
  34.     @help_text = help_text
  35.     @save_max = save_max
  36.     @type = type
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 主处理
  40.   #--------------------------------------------------------------------------
  41.   def main
  42.    
  43.     # 生成存档选择
  44.     save_list = []
  45.     for i in 1..@save_max+1
  46.       save_list.push(@type+i.to_s)
  47.     end   
  48.     # 生成帮助窗口
  49.     @help_window = Window_Help.new
  50.     @help_window.set_text(@help_text)  
  51.     # 生成存档文件查
  52.     @savefile_windows = []
  53.     for i in 0..@save_max
  54.       @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  55.     end
  56.     # 选择最后操作的文件
  57.     @file_index = $game_temp.last_file_index
  58.     @savefile_windows[@file_index].selected = true
  59.     # 执行过渡
  60.     Graphics.transition
  61.     # 主循环
  62.     loop do
  63.       # 刷新游戏画面
  64.       Graphics.update
  65.       # 刷新输入信息
  66.       Input.update
  67.       # 刷新画面
  68.       update
  69.       # 如果画面被切换的话就中断循环
  70.       if $scene != self
  71.         break
  72.       end
  73.     end
  74.     # 准备过渡
  75.     Graphics.freeze
  76.     # 释放窗口
  77.     @help_window.dispose
  78.     for i in @savefile_windows
  79.       i.dispose
  80.     end
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 刷新画面
  84.   #--------------------------------------------------------------------------
  85.   def update
  86.     # 刷新窗口
  87.     @help_window.update
  88.     for i in @savefile_windows
  89.       i.update
  90.     end
  91.     # 按下 C 键的情况下
  92.     if Input.trigger?(Input::C)
  93.       # 调用过程 on_decision (定义继承目标)
  94.       on_decision(make_filename(@file_index))
  95.       $game_temp.last_file_index = @file_index
  96.       return
  97.     end
  98.     # 按下 B 键的情况下
  99.     if Input.trigger?(Input::B)
  100.       # 调用过程 on_cancel (定义继承目标)
  101.       on_cancel
  102.       return
  103.     end
  104.     # 按下方向键下的情况下
  105.     if Input.repeat?(Input::DOWN)
  106.       # 方向键下的按下状态不是重复的情况下、
  107.       # 并且光标的位置在 3 以前的情况下
  108.       if Input.trigger?(Input::DOWN) or @file_index < 3
  109.         # 演奏光标 SE
  110.         $game_system.se_play($data_system.cursor_se)
  111.         # 光标向下移动
  112.         @savefile_windows[@file_index].selected = false
  113.         @file_index = (@file_index + 1) % 4
  114.         @savefile_windows[@file_index].selected = true
  115.         return
  116.       end
  117.     end
  118.     # 按下方向键上的情况下
  119.     if Input.repeat?(Input::UP)
  120.       # 方向键上的按下状态不是重复的情况下、
  121.       # 并且光标的位置在 0 以后的情况下
  122.       if Input.trigger?(Input::UP) or @file_index > 0
  123.         # 演奏光标 SE
  124.         $game_system.se_play($data_system.cursor_se)
  125.         # 光标向上移动
  126.         @savefile_windows[@file_index].selected = false
  127.         @file_index = (@file_index + 3) % 4
  128.         @savefile_windows[@file_index].selected = true
  129.         return
  130.       end
  131.     end
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 生成文件名
  135.   #     file_index : 文件名的索引 (0~3)
  136.   #--------------------------------------------------------------------------
  137.   def make_filename(file_index)
  138.     return "Save#{file_index + 1}.rxdata"
  139.   end
  140. end
  141. #==============================================================================
  142. # ■ Scene_Load
  143. #------------------------------------------------------------------------------
  144. #  处理读档画面的类。
  145. #==============================================================================
  146. class Scene_Load < Scene_File
  147.   #--------------------------------------------------------------------------
  148.   # ● 初始化对像
  149.   #--------------------------------------------------------------------------
  150.   def initialize(save_max = SAVE_MAX)
  151.     # 再生成临时对像
  152.     $game_temp = Game_Temp.new
  153.     # 选择存档时间最新的文件
  154.     $game_temp.last_file_index = 0
  155.     latest_time = Time.at(0)
  156.     for i in 0..save_max
  157.       filename = make_filename(i)
  158.       if FileTest.exist?(filename)
  159.         begin
  160.           file = Zlib::GzipReader.open(filename)
  161.         rescue
  162.           next
  163.         end
  164.         if file.mtime > latest_time
  165.           latest_time = file.mtime
  166.           $game_temp.last_file_index = i
  167.         end
  168.         file.close
  169.       end
  170.     end
  171.     super("要载入哪个文件?","读取",save_max)
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 确定时的处理
  175.   #--------------------------------------------------------------------------
  176.   def on_decision(filename)
  177.     # 文件不存在的情况下
  178.     unless FileTest.exist?(filename)
  179.       # 演奏冻结 SE
  180.       $game_system.se_play($data_system.buzzer_se)
  181.       return
  182.     end
  183.     # 演奏读档 SE
  184.     $game_system.se_play($data_system.load_se)
  185.     # 写入存档数据
  186.     begin
  187.       file = Zlib::GzipReader.open(filename)
  188.       read_save_data(file)
  189.     rescue
  190.       # 演奏冻结 SE
  191.       $game_system.se_play($data_system.buzzer_se)
  192.       return
  193.     end
  194.     file.close
  195.     # 还原 BGM、BGS
  196.     $game_system.bgm_play($game_system.playing_bgm)
  197.     $game_system.bgs_play($game_system.playing_bgs)
  198.     # 刷新地图 (执行并行事件)
  199.     $game_map.update
  200.     # 切换到地图画面
  201.     $scene = Scene_Map.new
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 取消时的处理
  205.   #--------------------------------------------------------------------------
  206.   def on_cancel
  207.     # 演奏取消 SE
  208.     $game_system.se_play($data_system.cancel_se)
  209.     # 切换到标题画面
  210.     $scene = Scene_Title.new
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 读取存档数据
  214.   #     file : 读取用文件对像 (已经打开)
  215.   #--------------------------------------------------------------------------
  216.   def read_save_data(file)
  217.     # 读取描绘存档文件用的角色数据
  218.     characters = Marshal.load(file)
  219.     # 读取测量游戏时间用画面计数
  220.     Graphics.frame_count = Marshal.load(file)
  221.     # 读取校验
  222.     crcs = Marshal.load(file)
  223.     # 读取文档字串
  224.     strings = Marshal.load(file)
  225.     # 校验检测
  226.     key = SAVE_KEY
  227.     strings.each_index do |i|
  228.       key = Zlib.crc32(strings[i],key)
  229.       unless crcs[i] == key
  230.         file.close
  231.         raise "file check error"
  232.         return
  233.       end
  234.     end
  235.     # 读取各种游戏对像
  236.     $game_system = Marshal.load(Zlib::Inflate.inflate(strings[0]))
  237.     $game_variables = Marshal.load(Zlib::Inflate.inflate(strings[1]))
  238.     $game_self_switches = Marshal.load(Zlib::Inflate.inflate(strings[2]))
  239.     $game_switches = Marshal.load(Zlib::Inflate.inflate(strings[3]))
  240.     $game_troop = Marshal.load(Zlib::Inflate.inflate(strings[4]))
  241.     $game_map = Marshal.load(Zlib::Inflate.inflate(strings[5]))
  242.     $game_player = Marshal.load(Zlib::Inflate.inflate(strings[6]))
  243.     $game_screen = Marshal.load(Zlib::Inflate.inflate(strings[7]))
  244.     $game_actors = Marshal.load(Zlib::Inflate.inflate(strings[8]))
  245.     $game_party = Marshal.load(Zlib::Inflate.inflate(strings[9]))
  246.    
  247.     # 魔法编号与保存时有差异的情况下
  248.     # (加入编辑器的编辑过的数据)
  249.     if $game_system.magic_number != $data_system.magic_number
  250.       # 重新装载地图
  251.       $game_map.setup($game_map.map_id)
  252.       $game_player.center($game_player.x, $game_player.y)
  253.     end
  254.     # 刷新同伴成员
  255.     $game_party.refresh
  256.   end
  257. end
  258. #==============================================================================
  259. # 自定义存档菜单
  260. #==============================================================================
  261. #==============================================================================
  262. # ■ Scene_Save
  263. #------------------------------------------------------------------------------
  264. #  处理存档画面的类。
  265. #==============================================================================
  266. class Scene_Save < Scene_File
  267.   #--------------------------------------------------------------------------
  268.   # ● 初始化对像
  269.   #--------------------------------------------------------------------------
  270.   def initialize(save_max = SAVE_MAX)
  271.     super("要保存到这个文件吗?","存入",save_max)
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 确定时的处理
  275.   #--------------------------------------------------------------------------
  276.   def on_decision(filename)
  277.     # 演奏存档 SE
  278.     $game_system.se_play($data_system.save_se)
  279.     # 写入存档数据
  280.     file = Zlib::GzipWriter.open(filename,9)
  281.     write_save_data(file)
  282.     file.close
  283.     # 如果被事件调用
  284.     if $game_temp.save_calling
  285.       # 清除存档调用标志
  286.       $game_temp.save_calling = false
  287.       # 切换到地图画面
  288.       $scene = Scene_Map.new
  289.       return
  290.     end
  291.     # 切换到菜单画面
  292.     $scene = Scene_Menu.new(5)
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 取消时的处理
  296.   #--------------------------------------------------------------------------
  297.   def on_cancel
  298.     # 演奏取消 SE
  299.     $game_system.se_play($data_system.cancel_se)
  300.     # 如果被事件调用
  301.     if $game_temp.save_calling
  302.       # 清除存档调用标志
  303.       $game_temp.save_calling = false
  304.       # 切换到地图画面
  305.       $scene = Scene_Map.new
  306.       return
  307.     end
  308.     # 切换到菜单画面
  309.     $scene = Scene_Menu.new(5)
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 写入存档数据
  313.   #     file : 写入用文件对像 (已经打开)
  314.   #--------------------------------------------------------------------------
  315.   def write_save_data(file)   
  316.     # 生成描绘存档文件用的角色图形
  317.     characters = []
  318.     for i in 0...$game_party.actors.size
  319.       actor = $game_party.actors[i]
  320.       characters.push([actor.character_name, actor.character_hue,actor.id])
  321.     end
  322.    
  323.     strings = []
  324.    
  325.     # 写入描绘存档文件用的角色数据
  326.     Marshal.dump(characters,file)
  327.     # 写入测量游戏时间用画面计数
  328.     Marshal.dump(Graphics.frame_count,file)
  329.     # 增加 1 次存档次数
  330.     $game_system.save_count += 1
  331.     # 保存魔法编号
  332.     # (将编辑器保存的值以随机值替换)
  333.     $game_system.magic_number = $data_system.magic_number
  334.    
  335.     # 写入各种游戏对像
  336.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_system)))
  337.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_variables)))
  338.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_self_switches)))
  339.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_switches)))
  340.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_troop)))
  341.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_map)))
  342.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_player)))
  343.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_screen)))
  344.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_actors)))
  345.     strings.push(Zlib::Deflate.deflate(Marshal.dump($game_party)))
  346.    
  347.     # 计算校验值
  348.     crcs = []
  349.     key = SAVE_KEY
  350.     strings.each do |i|
  351.       key = Zlib.crc32(i,key)
  352.       crcs.push(key)
  353.     end
  354.     Marshal.dump(crcs,file)
  355.     Marshal.dump(strings,file)
  356.   end
  357. end
  358. #==============================================================================
  359. # ■ Window_SaveFile
  360. #------------------------------------------------------------------------------
  361. #  显示存档以及读档画面、保存文件的窗口。
  362. #==============================================================================
  363. class Window_SaveFile < Window_Base
  364.   #--------------------------------------------------------------------------
  365.   # ● 初始化对像
  366.   #     file_index : 存档文件的索引 (0~n)
  367.   #     filename   : 文件名
  368.   #--------------------------------------------------------------------------
  369.   def initialize(file_index, filename,viewport=nil)
  370.     super(0, 64 + file_index % 4 * 104, 640, 104)
  371.     self.contents = Bitmap.new(width - 32, height - 32)
  372.    
  373.     @file_index = file_index
  374.     @filename = "Save#{@file_index + 1}.rxdata"
  375.     @time_stamp = Time.at(0)
  376.     @file_exist = FileTest.exist?(@filename)
  377.    
  378.     if @file_exist
  379.       begin
  380.         file = Zlib::GzipReader.open(filename)
  381.         @time_stamp = file.mtime
  382.         @characters = Marshal.load(file)
  383.         @frame_count = Marshal.load(file)
  384.         @total_sec = @frame_count / Graphics.frame_rate
  385.         file.close
  386.       rescue
  387.         @file_exist = false
  388.       end
  389.     end
  390.    
  391.     self.refresh
  392.     @selected = false
  393.   end
  394. end
复制代码

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
 楼主| 发表于 2006-7-18 08:45:00 | 显示全部楼层
另,贴一个奇妙的PM
加密保护方法,申请转载

临时帐号,不用回复了,如果不允许转载请在我论坛PM我。
此外你也放心,幻森这里的游戏我是不会动的。怎么说,至少也得有值得我动的地方吧。至少幻森目前游戏区情况——你自己看好啦。

1、还好我并不在意脚本的转载,否则得去注册帐号知会人家:“嗯呐,同意转载”。唉,不说就是“是”!寒……算了,不研究这种事情,我赶快补充个说明,随便转了=.=

2、PM本不该放出来,不过我一直不厚道丫:)
之所以放出来是提醒一下广大RM游戏爱好者,您的游戏被解剖其实是一种无上的荣誉,这是您的游戏价值的体现。您的游戏支离破碎的尸体,其实是RM拆卸集团给您的最高褒奖。一定要心安理得的接受这个残酷而浪漫的现实~~爱你就要吃掉你,螳螂的爱情观啊^_^就好像游戏被盗版也是无上的光荣,那是因为你的游戏已经被盗版商肯定,已经有资格成为用来给他骗钱的东西了!就好像被QJ也是无上的光荣,那说明您的个人魅力已经达到了一定档次,否则为啥QJ你不QJ别人呢~?

3、我真的很想知道,拆卸工们以后会不会出加密游戏呢?拭目以待~~=.=

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

2

主题

134

帖子

1016

积分

⑥精研

积分
1016
发表于 2006-7-18 08:52:21 | 显示全部楼层
谢谢~
下边这两种语句是不是也可以执行呢?
Marshal . dump
save_data\\t ""
回复 支持 反对

使用道具 举报

91

主题

3188

帖子

83986万

积分

荣誉群

传说中的Bunny大神~!

积分
839861514
QQ
发表于 2006-7-18 09:00:08 | 显示全部楼层
引用第2楼FantasyDR2006-07-18 08:45发表的“”:
另,贴一个奇妙的PM


1、还好我并不在意脚本的转载,否则得去注册帐号知会人家:“嗯呐,同意转载”。唉,不说就是“是”!寒……算了,不研究这种事情,我赶快补充个说明,随便转了=.=

.......

[s:7]  [s:7]  [s:7] [屏蔽][s:7]  [s:7]  [s:7]

我的游戏是不加密的,用不到这么高科技的东西,不过还是顶一个。 [s:7]
其他所有的Bunny神都素我的部下XD~ 小教程范例收集 Orz感谢邪恶萝卜联盟!!!(原因自己去猜)
回复 支持 反对

使用道具 举报

50

主题

994

帖子

6699

积分

管理员

爱干啥干啥!

Rank: 9Rank: 9Rank: 9

积分
6699
 楼主| 发表于 2006-7-18 09:12:10 | 显示全部楼层
引用第3楼さくら2006-07-18 08:52发表的“”:
谢谢~
下边这两种语句是不是也可以执行呢?
Marshal . dump
save_datat ""

这两种语句已经算在不可执行的部分了。
如果你的游戏需要执行这两种语句……那么着重放在存档校验部分吧。

“放下屠刀,立地成佛” 故应先杀生,然后再成佛。

(\\_/) (-_-) ()+() this is bunny priest.
回复 支持 反对

使用道具 举报

2

主题

134

帖子

1016

积分

⑥精研

积分
1016
发表于 2006-7-18 09:25:21 | 显示全部楼层
看成Marshal\\.了 >_<
后边的.不要比较好吧
save_data\\t和save_data\\n好像没有考虑哦
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2006-7-18 09:42:03 | 显示全部楼层
[s:7] 厚道物,顶一个。
我还是响应第一个广告词好了…… [s:5]
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

79

主题

617

帖子

6150

积分

⑦老手

暗夜下可怜人

积分
6150
发表于 2006-7-18 10:01:58 | 显示全部楼层
没说的,不支持扒衣裳。
希望破灭是因为发现真实,宁可背负罪孽也要维护爱我之人,永远的娜乌西卡!!!!!!
回复 支持 反对

使用道具 举报

91

主题

3188

帖子

83986万

积分

荣誉群

传说中的Bunny大神~!

积分
839861514
QQ
发表于 2006-7-18 10:19:48 | 显示全部楼层
加精了,嘎嘎。。。 [s:4]
其他所有的Bunny神都素我的部下XD~ 小教程范例收集 Orz感谢邪恶萝卜联盟!!!(原因自己去猜)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 05:53 , Processed in 0.028111 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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