小朋友上樓梯 (一) : 小朋友起飛了!兩步破解小朋友上樓梯之跳躍力限制
在對程式做破解前 , 第一個想的問題是要如何在維持一定的遊戲體驗之下 , 做出一個讓遊戲更有趣的破解 , 最後得出的結論就是 : 讓小朋友跳的更高應該會很有趣!
整個破解流程只需要基本的逆向能力 , 就如標題所說 , 只需兩步輕鬆破解
- 利用 cheat engine 找出程式碼中的哪個數值限制了小朋友的跳躍力
- 利用 ida 或 binary edit patch 掉這個數值
cheat engine : 有點像是一個記憶體的編輯器 , 開啟後可以指定一個 process , 並對 process 中的記憶體做搜尋以及修改
小朋友上樓梯 : 遊戲中人物會不斷移動 , 玩家能控制的只有彈跳力 , 彈跳力在集滿後會歸 0 , 跳到越高的地方能獲得的分數就越高
首先要做的是記憶體搜尋 , 可以做搜尋的有:
- 小朋友位置 ( 遞增或遞減搜尋 )
- 彈跳力 ( 遞增或遞減搜尋 )
- 目前所在階層 ( 特定值搜尋 )
- 紀錄 ( 特定值搜尋 )
一個執行檔在記憶體中由多個 PE module 組成 , 在 cheat engine 中可以選擇要對哪些 PE module 做掃描
在小朋友往左跑時做遞減搜尋 , 找到了與小朋友位置存在記憶體的位置 , 按 F6 可以搜索寫入該記憶體數值的指令
開啟 ida 透過指令位置搜索相關程式碼 , 發現大部份與位置控制相關程式碼都寫在 0x4067DA , 其中與跳躍力限制有關程式碼如下紅框所示 , mod 12 代表跳躍力累積到 12 時會重新回到 1
接下來只要透過 binary patch 的方式把 12 改成更大的數值就可以做出更強力的跳躍了!
其實很多單機小遊戲的破解思路都是如此 , 也可以透過外掛程式呼叫一些記憶體寫入的函數在執行過程中對記憶體做修改 ( open and write )