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

Project1

 找回密码
 注册会员
搜索
查看: 2329|回复: 10
打印 上一主题 下一主题

[RMVA发布] RMVA修复$stdin.gets

[复制链接]

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42387
在线时间
7601 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

跳转到指定楼层
1
发表于 2017-5-10 21:33:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
理论上VA任何版本通用,可以自行魔改到STDIN.gets上,修改最下面一段就可以

RUBY 代码复制
  1. #by Fux2 20170510 21:47:15
  2. #转载请说明出处
  3. class String
  4.  
  5.   def byte_length
  6.     ret = 0
  7.     self.each_byte{ret+=1}
  8.     ret
  9.   end
  10.  
  11.   def address
  12.     [self].pack("p").unpack("L")[0]
  13.   end
  14.  
  15. end
  16.  
  17. module Fux2
  18.   module Win32Tools
  19.  
  20.     ReadProcessMemory = Win32API.new('kernel32','ReadProcessMemory','llpll','l')
  21.     WriteProcessMemory = Win32API.new('kernel32','WriteProcessMemory','llpll','l')
  22.     VirtualProtect = Win32API.new('kernel32','VirtualProtect','lllp','l')
  23.     GetModuleHandle = Win32API.new('kernel32','GetModuleHandle','p','l')
  24.     GetProcAddress = Win32API.new('kernel32','GetProcAddress','lp','l')
  25.     GetCurrentProcess = Win32API.new('kernel32','GetCurrentProcess','v','l')
  26.  
  27.     module_function
  28.     def readmem(addr,buf,len)
  29.       ReadProcessMemory.call(@@hProc,addr,buf,len,0)
  30.     end
  31.  
  32.     def writemem(addr,buf,len)
  33.       WriteProcessMemory.call(@@hProc,addr,buf,len,0)
  34.     end
  35.  
  36.     def unprotect(addr,len)
  37.       VirtualProtect.call(addr,len,0x40,"\0"*4)
  38.     end
  39.  
  40.     def getmodule(name)
  41.       GetModuleHandle.call(name)
  42.     end
  43.  
  44.     def getaddr(dll,name)
  45.       GetProcAddress.call(dll,name)
  46.     end
  47.  
  48.     def init
  49.       @@hProc = GetCurrentProcess.call
  50.       raise "cannot open process" if @@hProc==0
  51.     end
  52.     init
  53.  
  54.   end
  55.   class ReadFileHooker
  56.  
  57.     include Win32Tools
  58.  
  59.     HookCode = ([0xC7,0x44,0x24,0x0C,0x12,0x05,0x00,0x00]+[0]*6).pack("C*")
  60.  
  61.     def SetHookOn
  62.       cad = @code_address
  63.       cal = @code_length
  64.  
  65.       hook_addr = cad-@proc-5
  66.       Win32Tools.writemem(cad+cal-6,@origin_code_readfile,6)
  67.       Win32Tools.writemem(@proc,[0xE9,hook_addr,0x90].pack("ClC"),6)
  68.     end
  69.  
  70.     def SetHookOff
  71.       return unless @origin_code_readfile
  72.       Win32Tools.writemem(@proc,@origin_code_readfile,6)
  73.     end
  74.  
  75.     def initialize
  76.       dll = Win32Tools.getmodule("kernel32")
  77.       @proc = Win32Tools.getaddr(dll,"ReadFile")
  78.       @code_address = HookCode.address
  79.       @code_length = HookCode.byte_length
  80.       @origin_code_readfile = "\0"*6
  81.       Win32Tools.readmem(@proc,@origin_code_readfile,6)
  82.       unprotect(@code_address,@code_length)
  83.     end
  84.  
  85.   end
  86. end
  87.  
  88. class << $stdin
  89.   def hack
  90.     @tool = Fux2::ReadFileHooker.new
  91.     alias _gets gets
  92.     def gets
  93.       @tool.SetHookOn
  94.       ret = _gets
  95.       @tool.SetHookOff
  96.       return ret
  97.     end
  98.   end
  99. end
  100.  
  101. $stdin.hack

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 醋虾

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托

Lv3.寻梦者

梦石
0
星屑
1185
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

2
发表于 2017-6-8 11:39:45 | 只看该作者
好久没上6R了,不知道RM系列现在是个啥情况。我都怀疑VA是否有调用$stdin.gets的需要,我记得各种输入都是RGSS自己魔改的吧?

点评

难得见到DeathKing前辈www  发表于 2017-6-15 22:17

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42387
在线时间
7601 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

3
 楼主| 发表于 2017-6-8 11:51:48 | 只看该作者
DeathKing 发表于 2017-6-8 11:39
好久没上6R了,不知道RM系列现在是个啥情况。我都怀疑VA是否有调用$stdin.gets的需要,我记得各种输入都是R ...


有gets这么方便的函数,干啥要自己去造轮子
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
58 小时
注册时间
2012-9-24
帖子
6
4
发表于 2017-7-30 20:41:25 | 只看该作者
表示无法运行出错

点评

具体错误提示呢  发表于 2017-7-30 23:01
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4481
在线时间
1053 小时
注册时间
2013-3-28
帖子
390

开拓者

5
发表于 2017-7-30 22:42:14 | 只看该作者
这个脚本怎么用的啊
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42387
在线时间
7601 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

6
 楼主| 发表于 2017-7-30 23:02:30 | 只看该作者

插入后生效,$stdin.gets修复,标题写的很明确了呀。

点评

可我很想知道嘛,查又查不到  发表于 2017-7-31 10:39
不知道的话没必要使用这个脚本辣。  发表于 2017-7-31 00:08
$stdin.gets是什么  发表于 2017-7-30 23:22
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-22 01:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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