CE教程第九关——处理共用代码
題目
步驟 9: 注入++: (密碼=31337157)
這一步將會解釋如何處理游戲中的共用代碼, 這種代碼是通用在除了自己以外的其他同類型對像上
常常你在修改游戲的時候, 你找到了一個單位的健康, 或是你自己角色的健康, 你會發現一種情況:
如果你把健康相關代碼移除的話,其結果是你的角色無敵, 但你的敵人也無敵了。 在這種情況下, 你必須想辦法區分自己與敵人。 有時候很簡單,
你只要檢查最前面的4個字節(函數指針表), 它通常指向一個獨一無二的地址, 代表著游戲玩家角色,而有的時候它是一個團體號碼,
或者也可能是一個指針, 它指向另一個指針, 該址針又指向下一個指針,搞不好還指向下下一個指針,
最后指向一個玩家名字。總之完全取決于游戲的復雜度, 以及你的運氣
最簡單的方法是以"找出是什么改寫了這個地址"去找出游戲代碼,然后使用"分析(新/舊)數據/結構"的功能去比較兩種結構。(你的單位和敵人的單位)然后看看是不是可以找到一個區分兩者的方法。
當你找到如何區分你和電腦單位的方法后,你可以注入一段自動匯編腳本來檢查狀態,然后看是要運行游戲的代碼還是要做其他的修改。(例如一擊必殺)
另外, 你還可以用這個方法去創建一般所說的"字節數組"的字串, 它可以用來搜尋并產生一份所有你的單位或是敵人單位的列表 在這個教程中,
我已經實現了你將會玩到的最驚人的游戲. 這個游戲有4個玩家。2個屬于你的陣容, 另外兩個屬于電腦方。 你的任務是找到改寫健康的代碼,
并且修改以至于你可以獲得勝利,但"絕不能"使用鎖定HP的方法. 完成修改以后, 請按 “重新啟動游戲并自動執行” 來測試你的修改是否正確
提示1: 健康是一個單浮點數 提示2: 解法不只一種
這關要掌握一種新的分析方法:分析結構體。
游戲有4個角色,玩家12是我方,34是敵方。雙方共用扣血代碼,也就是說不能簡單地刪除扣血的代碼,這樣雙方都無敵。
解法
首先,隨便找到一個玩家的血量地址,然后找到扣血的代碼,需要注意的是血量存儲類型是單浮點,如果不知道這個信息,可以用未知類型,未知初始值,數值減小等選項搜索。
找到扣血代碼后,右鍵,選擇“找出指令訪問的地址”
然后讓4個玩家都扣血,這樣就會找到4個地址。
全選,然后選擇“打開選中地址的分析數據”,一路確認。
這樣就找到了4名玩家的結構體
可以看到 +04 是血量,+15 是玩家名,還有其他的信息意義不明。到這里我們可以判斷玩家名來區別處理,不過更簡單的方法是使用 +10 的偏移數據,不難猜測,這個是隊伍編號。只需要讓隊伍1的玩家不掉血就行了。
回到反匯編窗口,選擇自動匯編。
先選擇CT表框架
然后選擇代碼注入
我的改法是如果是隊伍1則血量設置為5000,然后原來的代碼還是要執行的。最后分配到CT表,啟用后發現鎖血5000了。成功!
總結
以上是生活随笔為你收集整理的CE教程第九关——处理共用代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20165301 预备作业二:学习基础和
- 下一篇: CMOS版图课程第七讲--可靠性设计,视