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

Project1

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

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

[复制链接]

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39670
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

跳转到指定楼层
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
星屑
37799
在线时间
5402 小时
注册时间
2006-11-10
帖子
6546
2
发表于 2018-6-29 15:49:51 | 只看该作者
一脸懵逼进来, 一脸懵逼出去

点评

对,完成之后,仅仅通过分享存档就可以让对方执行你写的代码。  发表于 2018-6-29 16:10
看起来很可怕的感觉, 通过修改存档, 然后读取这个存档就会对游戏本身产生破坏?  发表于 2018-6-29 15:58
用处也不大,就是个艺♂术效果  发表于 2018-6-29 15:51
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3121
在线时间
1534 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

3
发表于 2018-6-29 18:44:19 | 只看该作者
总而言之被触瞎

评分

参与人数 1+1 收起 理由
fux2 + 1 II能假装被触瞎我很高兴

查看全部评分

菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3614
在线时间
898 小时
注册时间
2017-10-30
帖子
347
4
发表于 2018-6-29 19:45:29 | 只看该作者
虽然看不懂,但是我已经被醋虾了。

点评

是时候寄出炸弹存档了  发表于 2018-6-29 19:53
啥都会,啥都不擅长
一个VA群:679174724 欢迎来玩
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7417
在线时间
947 小时
注册时间
2017-9-27
帖子
583
5
发表于 2018-6-29 21:37:53 | 只看该作者
所以玩游戏千万不要用别人的存档。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

6
发表于 2018-6-30 01:05:37 | 只看该作者
想起今天看到知乎上讲的图标炸弹了……
大概是类似的原理?
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39670
在线时间
7485 小时
注册时间
2009-7-6
帖子
13483

开拓者贵宾

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

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

使用道具 举报

Lv2.观梦者

梦石
0
星屑
659
在线时间
61 小时
注册时间
2017-9-28
帖子
11
8
发表于 2018-6-30 21:55:54 | 只看该作者
溢出攻击……服了
话说咱对着源码跑程序5分钟就开始烦了……就更别提汇编了……果然一旦爱好变成任务就立刻凉凉……

不过“修改存档”这攻击场景似乎有点苛刻哈,为啥要在存档里写字符串呢?

点评

不过rxdata里字符串倒是满天飞……“无敌版补丁”……  发表于 2018-7-1 16:33
其实我说的是“写游戏的人要从存档里读字符串出来”这个条件……毕竟谁闲的没事往存档里写字符串啊……  发表于 2018-7-1 16:30
并不苛刻吧……用ruby的话两三句就完成了,主要是字符串的内容。毕竟一般人不会想到一个游戏存档能让电脑收到攻击,要是有恶意的话植入病毒都行  发表于 2018-7-1 00:02
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1495
在线时间
1101 小时
注册时间
2015-7-4
帖子
1561

开拓者

9
发表于 2018-7-1 23:14:51 | 只看该作者
举报楼主太醋,我都瞎了,我这段字都是盲打的
根本不需要什么最后的落脚处,只需要不断前行就够了。只要脚步不停下来,道路就会在脚下不断延伸!
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4014
在线时间
5070 小时
注册时间
2012-1-15
帖子
4617

开拓者贵宾短篇七成年组亚军剧作品鉴家

10
发表于 2018-7-1 23:23:00 | 只看该作者
很久以前网游『仙境传说RO』的客户端里似乎也有一样的问题,玩家传一个特殊的bmp当作公会图标,就可以让所有看到该图标的玩家跳错退出游戏。而自己可以通过锁缓存的方式来不跳错,于是团战一夫当关万夫莫开……

点评

这【安】字真形象  发表于 2018-8-14 13:22

评分

参与人数 1+1 收起 理由
小吵闹的革命 + 1 敲锅盖

查看全部评分

若后退就皆成谎言。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 04:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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