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

Project1

 找回密码
 注册会员
搜索
查看: 5279|回复: 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
不接受对其他插件维护的委托

Lv3.寻梦者

梦石
0
星屑
1934
在线时间
403 小时
注册时间
2015-8-30
帖子
395
17
发表于 2018-8-22 22:06:40 | 只看该作者
想起来@柳之一 的Bitmap的Marshal支持脚本,印象中里面重写了marshal_load方法
我们把进行攻击需要的语句放在marshal_load方法里面,然后把经过改造的对象扔到rxdata里面,这样玩家读取的时候就会执行攻击语句,从而受到攻击
没测试过,或许可以
小仙女一枚~
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

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

开拓者贵宾

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


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

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2981
在线时间
333 小时
注册时间
2012-2-9
帖子
313

烫烫烫开拓者

15
发表于 2018-8-17 18:57:30 | 只看该作者
听起来有道理,不过利用条件稍微有点苛刻呢……
RGSS 本身都是 ruby 跑的,(假设 ruby 解释器本身没有什么问题)利用点也就为数不多 RM 自己用 C 实现的部分,感觉能玩的也不太多的样子……
前端,非专业;不懂法律,完全业余。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

世界坑化协会

梦石
0
星屑
7710
在线时间
1558 小时
注册时间
2007-3-13
帖子
5541

极短23参与极短21参与开拓者贵宾第一届化妆舞会最佳服饰奖

14
发表于 2018-8-14 13:27:01 | 只看该作者
那么再来一份:通过读取存档对游戏进行修复。

点评

ε=ε=(ノ≧∇≦)ノ厉害了!想起某主机游戏出厂没有更新机制,结果靠下载溢出完成了更新。  发表于 2018-8-24 11:42
你的肩膀上有肩周炎~♪  秒懂  ☚   \没有
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2111
在线时间
950 小时
注册时间
2015-7-16
帖子
767

开拓者

13
发表于 2018-8-14 11:33:09 | 只看该作者
這就叫技術宅毀天滅地嗎?
[神性领域扩张:扩张神性领域]
说了等于没说.
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

12
发表于 2018-7-6 18:36:51 | 只看该作者
那前两天传出来的微信支付漏洞也是类似的原理吗?
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1774
在线时间
950 小时
注册时间
2012-7-5
帖子
245
11
发表于 2018-7-1 23:29:55 | 只看该作者
说得好我很听话每次都用比如sprintf_s之类的

黄鸡叔叔醋瞎啦
tan(pi/2)
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (管理员)

砂上描绘的愿想

梦石
15
星屑
4035
在线时间
5071 小时
注册时间
2012-1-15
帖子
4618

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

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

点评

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

评分

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

查看全部评分

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

使用道具 举报

Lv3.寻梦者

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

开拓者

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

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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