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

Project1

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

[胡扯] 通过修改游戏存档对游戏进行攻击,从Bitmap.new到shellcode

[复制链接]

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39932
在线时间
7499 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

跳转到指定楼层
1
发表于 2018-6-29 14:15:12 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
不知道之前大家有没有想过修改游戏存档就能拿到游戏内shellcode的可能,

最近在玩了一段时间mugen之后才考虑到这个问题,mugen中有大牛通过人物包文件的溢出来对mugen程序进攻击,执行人物包内定义的代码,如果换成RGSS,有没有可能呢。

研究了一天之后,咱这里发现了一个奇妙的溢出攻击点。

RUBY 代码复制
  1. Bitmap.new(超长文件名)


当文件名过长(超过260字节)时,RGSS程序(我用的XP做实验)会产生内存访问异常,并且异常地址位于
new出来的文件名内,这样一来,我们只要通过修改游戏存档中人物的character_name之类,能影响Bitmap参数的字符串就可以达到溢出的效果了。

溢出有了,那么攻击点是否存在呢?



经过调试之后,发现访问异常发生在rgss103j.dll+0x298D2,
简单分析之后,这里的逻辑大概是处理链式数据的地方,当最上面的edi为0时终止循环,且第一次edi不能为0(不在这个文件名内)


这里没有发现可以攻击的地方,所以先写入合理数据让程序继续运行。
如图,我们通过修改这个文件名内相应的位置(我这是读取文件内的字符串,要是直接放进脚本需要转成\xXX的格式)
就可以决定esi的值,使其终止处理(假装处理完毕)并继续执行。

由于此时堆栈被大量破坏,后面是一定不可能正常运行的,在ntdll的RltUnwind函数中再次发生访问异常,



而此时的ecx依然在文件名范围内,这样就拿到一个任意call,但由于文件名字符串在内存中的位置不固定,这里就肯定不能直接写文件名的内存地址。



翻一翻堆栈,不出所料附近依然有文件名内的内容,这样我们只要跳转到任何一个
非game.exe、内存起始地址小于ntdll区域的retn 0x4时
就可以让程序跑进这4个字节的代码区域,虽然只有4个字节,但是写个短跳就可以跳入大量可写字节范围内,不多赘述。

初步尝试:
RUBY 代码复制
  1. fux2 = File.open("str.txt","rb").read
  2. #p File.open(fux2){}
  3. Bitmap.new(fux2)


成功执行自定义代码。

想来写入存档也是没什么问题的,怕是又是全新的黑科技(x
要问有什么用的话,可能真的没用吧23333,就是好玩

“求大佬发一个XXX存档“
“来,这个给你”


什么?东西呢?没有东西,不满足伸手党,有兴趣看看,没兴趣笑笑

评分

参与人数 6+6 收起 理由
kirh_036 + 1 精品文章
oott123 + 1 塞糖
斜眼君 + 1
332682385 + 1
欧买歌 + 1
KB.Driver + 1 仿佛看到了汇编 不过学艺不精=_=|||.

查看全部评分

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

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39932
在线时间
7499 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

2
 楼主| 发表于 2018-6-30 08:34:41 | 显示全部楼层
KB.Driver 发表于 2018-6-30 01:05
想起今天看到知乎上讲的图标炸弹了……
大概是类似的原理?

这可说不准,没研究过不一定是同一种情况啦,不过利用修改输入数据进行攻击一般都是溢出攻击的一种辣。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39932
在线时间
7499 小时
注册时间
2009-7-6
帖子
13489

开拓者贵宾

3
 楼主| 发表于 2018-8-17 20:06:25 | 显示全部楼层
oott123 发表于 2018-8-17 18:57
听起来有道理,不过利用条件稍微有点苛刻呢……
RGSS 本身都是 ruby 跑的,(假设 ruby 解释器本身没有什么 ...


当然不能做到像mugen那么活,因为我也不知道怎么修复被破坏的那些堆栈。
所以执行完存档里塞的代码以后游戏必然挂掉。
主要的作用是仅仅传播存档就可以执行任意代码,那么做一些病毒才能做的事情也不是不可以的。
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-22 18:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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