作弊引擎gtutorial-i386:第壹關。
作弊引擎gtutorial-i386突破2級
作者延續了上壹關的變態風格,gtutorial第三關不修改遊戲依然無法通過(至少我不能!):左下角的白色小人是玩家,屏幕上的三只刺猬是移動的障礙物,玩家碰到就會死。遊戲提示是:將所有紅色平臺變成綠色開門。
整個遊戲有兩個難度:難度1。如果不修改遊戲,玩家無法從A平臺跳到B平臺,更別說地上的刺猬了,會影響遊戲的!難點二:開門的壹瞬間,三只刺猬飛到門口,擺出上門討債的架勢,堵住了門。玩家遇到刺猬就會通關失敗,玩家根本進不了門。
現在言歸正傳,說說怎麽過海關。受這篇文章創建壹個作弊表-坐標的啟發,我的想法是修改玩家的坐標,使其可以到達屏幕上的任何位置。因為有兩個難點,本文分為兩部分。
先說難度1。如何開門:在整個遊戲中,除了玩家可以上下移動(跳躍)之外,玩家和障礙物都可以水平移動,所以定位玩家的Y坐標比X坐標更容易。壹開始我在幾個較低的平臺上來回跳躍,改變和定位玩家的Y坐標,但是由於刺猬的影響,遊戲在Y坐標確定之前就結束了。
於是我重新審視了壹下這個遊戲:作者說所有平臺都要綠了才開門。我算了壹下,玩家腳下的地面上有12個平臺。作者有沒有可能在程序中設置壹個全局變量來記錄綠色平臺的數量?讓我們試壹試。遊戲開始時,地面已經變色,所以在CE的數值編輯框中輸入1。“掃描類型”選擇“精確值”;選擇“4字節”作為值類型,然後按“首次掃描”進行首次掃描。然後跳轉到平臺——掃描,重復幾次,立即定位到有顏色變化的平臺變量:
定位變量後,就簡單了。直接把變量值改成12就行了,屏幕右側的門會立刻打開,但同時遊戲後半段的劇情也會立刻開始(看反派的表情,分明就是WTF):
2.刺猬堵門後,因為沒有幹擾,搜索玩家的坐標反而變成了馬平川。先搜索x坐標,讓玩家回到屏幕左下角,在CE上點擊“新掃描”,將“掃描類型”設置為“未知初始值”,“值類型”設置為“浮點”,然後點擊“首次掃描”。
之後,控制玩家慢慢向右移動。每次移動-暫停時,在CE中將“掃描類型”設置為“增加值”並點擊“下壹次掃描”,重復幾次定位X坐標。最後,讀者會發現x坐標在[-1,1]範圍內變化:
有了存儲X坐標的變量的地址,估計存儲Y坐標的變量的地址壹定在附近。由於sizeof(float)=4,y坐標可能距離x坐標4個字節。我們需要從Cheat表中復制並粘貼x-coor項兩次。第壹次將“調整地址依據”的值設置為4(“調整地址依據”是指被復制項的地址相對於源項的偏移量),將CT表中新增項的描述設置為“y-coor(+4)”;第二次將“地址調整依據”的值設置為-4,並將CT表中新添加條目的描述設置為“y-coor(-4)”:
當然,剛剛添加的兩個CT項不壹定是Y坐標,其正確性需要通過上下跳動來驗證。在遊戲中按“P”鍵使遊戲暫定。我們在選手起跳時記錄原始數據,選手起跳後再次記錄數據,落地後第三次記錄數據。通過以上步驟,可以求出x坐標的地址+sizeof(float)= y坐標的地址。有了這兩個坐標變量,妳可以隨意改變玩家的位置,比如浮動(要達到浮動的效果,記得凍結X坐標和Y坐標這兩個變量),如下圖:
在這壹點上,通關不是問題。但是,總覺得少了點什麽。是的,沒有外掛!嗯,這個插件是做什麽的?好像整個遊戲中定位玩家坐標的過程是最復雜的,那就做個定位插件定位玩家坐標的基址吧~
首先定位訪問Y坐標的指令,在ct表中選擇y-coor項,右鍵單擊“找出這個地址寫的是什麽”。
回到遊戲中,移動玩家。這時CE的“以下操作碼寫入”窗口會列出修改Y坐標的指令和存儲玩家坐標的結構的基址(在Extra Info?"找到這個地址所需的指針值可能是01905980 "):
“額外信息”窗口顯示訪問坐標基址的指針存儲在edx中。好吧,讓我們寫壹個AA腳本,將edx寫入全局可訪問的內存。腳本如下:
激活腳本後,您需要在CE的CT表中創建壹個coorbase項-點擊“手動添加地址”,填寫“添加地址”窗口的內容:
Coorbase存儲指針,通過這些指針我們最終會分別訪問x/y坐標,所以我們要分別添加手頭的兩個地址,把這些項拖到Step3下面組成壹個組。右鍵單擊菜單“組配置”-“取消激活時隱藏子級”第3步:
選擇此選項的原因是coorbase是在Step3腳本中創建的。當這個腳本被禁用時,coorbase被釋放,從釋放的地址讀取玩家的坐標是不合理的,所以這樣處理。
這是最終CT表中的條目:
當妳再次進入這個關卡,應用這個腳本,馬上就可以得到玩家的坐標了~
原文鏈接:/thread-249551.htm
閱讀更多信息:
x加密-反調試-DumpDex-修復指令-重新打包
AOSP常見漏洞簡介
XCTF攻防世界反萌新坑第三題IgniteMe整理
Node.js原型汙染攻擊的分析與利用