Discuz! Board

 找回密碼
 立即註冊
搜索
熱搜: 活動 交友 discuz
查看: 827|回復: 0
打印 上一主題 下一主題

實現電子遊戲ACE(Arbitrary Code Execution)的具體原理是什麼?

[複製鏈接]

2604

主題

2604

帖子

7866

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
7866
跳轉到指定樓層
樓主
發表於 2023-8-25 14:06:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
正好昨天看了《超等马里奥世界》(SMW)的一個肆意代码履行 TAS 直接通關乃至玩小遊戲,献上道理。下面是 AGDQ2014 上的演示视治療神經性耳鳴,频,現場演示是用 Raspberry Pi 输入 SFC 真機完成的

起首 SMW 可以操纵 bug(彷佛是吃到存放的物品的同時耀西吐舌頭?)去刷肆意 id 的物體(Sprite),在某些环境下可以刷编號為 0xFA 的物體。SMW 刷物體的時辰會按照物體的 ID 履行一段代汽車補漆筆,码,而 0xFA 的代码位於……显存……(地點是 $0322)

因而便可以操纵操作给显存中填入特定的数值(固然為了填充這個数值做了不少操作)。接着刷一個 0xFA,CPU 起頭测驗考试履行显存中的数据,而以前把持的成果是把它填上了 4C 18 42,即 JMP $4218,這個跳轉會跳轉到……手柄對應的内存。(超任利用 MMIO,读手柄状况就是读取内存。)

因而紧接下来你便可以用手柄来直接输入代码了。

恶魔城月下這款遊戲我没玩過,看了一下视频感受道理很類似(若是不合错误请指出)

應當是:物品栏缓冲區溢出

然後物品栏的内存数据四周又正好有函数指针或一些關頭数据指针(好比下個舆圖数据指针)

简略来讲,比方:

物品栏有20個位置占用内存0-19位置,一共20 byte,起頭地點為0x10,然後接下来1 byte是玩家遭到進犯的危险计较的函数指针,位於0x24,随着4 byte當前舆圖的4個標的目的門通往的下一個舆圖的指针.

若是能找到一些bug讓物品放到物品栏外,好比卡bug把物品卡到第21個空地,那末現實上物品栏接下来的1 byte位置上的函数指针的地點被溢出改写為了该物品的数据.或是肆意其他bug或法子能改写位於0x24的数据(但這個進程中心可能會很繁杂).

若是你無煙煎烤鍋,成心找一個物品它的数据正好是0x10(好比正好是生命复兴水甚麼的)卡進去,這時辰的你事前已往物品栏里塞了一些精心機關的物品序列,其對應的数据是可履行的代码,好比正好是直接改写遊戲状况到通關.這一個物品序列的数据位於0x10.最後你去挨一下打,遊戲挪用位於0x24的函数指针,但是它已被溢出的物品改写為了0x10,好~直接跳轉到0x10履行特地機關通關函数,遊戲通關了.

這里有Pokemon Yellow物品栏溢出Arbitrary code execution的POC(proof of concept)可以参考一下:
回復

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

Archiver|手機版|小黑屋|血飲娛樂城遊戲裝備交易平台  

滅鼠公司, 團體制服, 設備檢驗, 堆高機, 全球旅遊 牙醫, 室內裝潢, 台中搬家, 邱大睿, 團體制服, 汽車借款, YKS沙發, 歐冠盃, 財神娛樂城, 捕魚機遊戲, 運彩單場運動彩台灣運動彩券首頁場中投注時間表台灣運彩足球賠率場中投注3a娛樂城, 歐冠杯決賽, 歐冠盃投注, 歐冠盃決賽,

GMT+8, 2024-12-22 21:47 , Processed in 0.280942 second(s), 4 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表