植物大戰僵屍這款游戲可以說是很多90后的回憶了,基本上只要是90后或多或少的都接觸過,而玩游戲與制作輔助是兩個概念,今天我將給大家分享一些游戲輔助方面的制作技巧,之所以使用植物大戰僵屍這款游戲是因為游戲簡單容易分析,且不需要考慮驅動保護版權等相應的問題,這里我會把我的分析思路分享出來,來供大家參考。
本次實驗目標是實現遠程種植,要實現這個功能我們就需要找到植物的種植Call,種植Call什么時候會觸發呢?當我們種植植物的時候必定會觸發種植Call,那么此時我們只要遍歷出植物的種植過程即可,通過CE我們找到拿起植物的關鍵代碼,我們可以猜測植物拿起來這個動作之后應該就是種植了,只要我們能夠找到控制拿起植物的代碼,那么距離種植Call應該不會太遠,先來說一下植物種植遍歷技巧,此處就不演示了。
打開游戲並開啟新關卡 -> 然后在CE中首次掃描 -> 掃描未知初始化數值
回到游戲 -> 拿起向日葵(不要種) -> CE搜索變動的數值 -> 回到游戲(不要動) -> 搜索未變動的數值
回到游戲 -> 放下向日葵(右鍵) -> 拿起豌豆射手 -> CE搜索變動的數值 -> 以此循環直到找到為止
通過使用上方查找技巧循環查找游戲數據,最后你可以看到如下圖所示的7個內存地址,這個內存地址的默認數值是4294967295,找到后直接將其加入到地址欄中。
為了提高查找精度縮小出錯的概率,我們手動拿起不同的植物,豌豆射手向日葵櫻桃炸彈,並觀察CE中兩個地址的變化,會發現地址欄中的兩個地址是從0、1、2有順序的變化的,如下圖當拿起櫻桃炸彈時這個值變為了2,而該植物的編號正是2
我們在037C07C4
這個內存地址上右鍵選擇,查找訪問地址,然后回到游戲手動種植一個豌豆射手,此時地址表中會出現兩條匯編指令,這兩條指令正是我們種植植物時所訪問的指令,我們直接記下這兩條指令所對應的地址00410AC1/004123AC
接着我們以同樣的方法,在037C07C8
這個內存地址上查找訪問代碼,然后再次回到游戲中種植一個植物,此時地址表中會出現三條匯編指令,由於我們並不知道到底哪一條指令附近存在種植Call,所以最穩妥的辦法就是直接記下這三條指令00410A91/0041239A/00488DE5
的內存地址,后期逐步分析。
上方我們一共找到了5條可疑的匯編指令,其實這里有一個排除技巧,因為這幾條指令都是在植物種植以后出現的,又因為種植植物這個動作肯定有參數的傳遞,而正常情況下參數的傳遞都會使用堆棧或寄存器傳遞,觀察上圖可發現Mov eax,[eax+28]
這條指令是將內存地址中的數據取出來賦值給寄存器,那么下一步很可能就是通過寄存器傳遞參數以作為Call的參數使用,而緊隨其后的Mov [ecx+28],eax
則是即將eax的值賦給一個內存地址,很明顯不會是調用Call之前的動作。
通過經驗排查,這五個地址中最有可能是種植Call的地址有兩個,分別是00410AC1
和00410A91
這兩個都是將數據從內存取出來並放入寄存器,下一步可能就是壓入堆棧並調用Call了,我們直接通過X64dbg定位到這兩處位置分別下好斷點。
然后回到游戲,並拿起一顆太陽花並種下,此時我們可發現X64dbg正好斷在了00410A91的位置,而緊隨其后的就是一個Call,我們直接單步F8跟隨並記下其壓入的參數,其中經過測試我已經備注好了關鍵位置。
最后,我們可以通過注入器遠程注入觀察效果,需要注意的是push ebp
里面的地址是動態地址,而針對這種動態地址的找法我在上一節逆向植物的相關內容中已經總結過了,此處就直接跳過吧。
上圖中我們可以通過給寄存器壓入不同的參數,從而實現任意位置的種植,由於這里是直接調用了種植Call並沒有經過原程序的判斷邏輯,因此種植並不會消耗任何的陽光,更不會存在冷卻周期這個概念,因為我們是直接調用的功能。
最后我們的任務是通過編程實現遠程注入,如下代碼我想不用我多解釋了吧,通過循環填充實現全屏爆炸。
void FullBlast()
{
DWORD addr = 0x0040D120;
for (int x = 0; x < 5; x++)
{
for (int y = 0; y < 9; y++)
{
__asm
{
pushad
mov esi, dword ptr ds:[0x006a9ec0]
mov esi, dword ptr ds:[esi + 0x768]
push 0xfffffff
push 0x2
mov eax, x
push y
push esi
call addr
popad
}
}
}
}
代碼編譯的時候必須選擇Release版本,Debug版本會插入檢測指令導致堆棧失衡,此代碼在Xp系統下會崩潰,只能在Win7或Win10上運行,此處我在Win10上測試效果如下,不過不推薦這樣玩,實在是沒意思了,感覺屏幕都在顫抖。
至此我們的植物大戰僵屍分析就到此結束了,其他的比如植物無敵,植物攻擊加速等,就留一個作業,大家開動腦筋看能不能自己實現,回顧前面所講的外掛制作技巧,你是否已經完全理解了呢?如果你能夠吃透這些基礎知識,那么相信你可以做出植物無敵,攻擊加速等其他變態功能,其實逆向就是一個思路的問題,大家要多去思考,多去嘗試,相信你會成功的!
原創作品:轉載請加出處,您添加出處,是我創作的動力!