標籤:

露米婭的遊戲修改小課堂~

咱今天比較閑,所以來誤人子弟啦~

來講一講如何用Cheat Engine與OllyDBG來修改簡單的小遊戲~

當然,這是只最初級的修改(露米婭比較笨qwq),不過,這也意味著非常地簡單易學~


今天露米婭下載了一個反潛小遊戲(WinDepth)來懷舊一下~

當年玩到這個遊戲的時候,咱還在上幼兒園……系統是win98,ghost系統自帶一個十個小遊戲的合集,其中就有這個潛艇的小遊戲。不過版本可能不同,因為我記得那個遊戲中的獎勵潛艇是金色的,而這個WinDepth中的獎勵潛艇是綠色圓形的。不過遊戲的模式還是一樣的,空格扔深水炸彈,左右移動。敵人(潛艇)的圖像與攻擊模式也是一樣的。

一頓操作之後……

玩得還不如當年呢……

所以咱就打開了罪惡的工具Cheat Engine……首先在CE中打開遊戲進程。

首先自然是要逆天改命,開始遊戲,用First Scan 搜索4(初始的生命值)。

故意死掉一次,再用Next Scan 搜索3。

這樣就直接搜索到生命值的地址啦,雙擊添加到列表中~大家可以直接修改內存,改成更大的值。不過,咱的目標不僅僅是這樣~咱想要修改遊戲~所以要用到調試器~

大家可以用CE自帶的調試器來修改,不過咱還是喜歡用OllyDBG來處理~

在OD中打開程序,F9運行,正常開始遊戲。

然後,在數據窗口中ctrl+g轉到0012E9BC(這是我們剛剛搜到的內存的地址)。

看到0012E9BC這個地址了嘛~在這裡下一個內存斷點(右鍵->斷點->內存寫入)

然後F9繼續運行遊戲,再死掉一次,就會發現斷點觸發,程序暫停了。

看指令窗口,我們抓到了寫入的指令~相信學過彙編的諸君都知道要怎麼做了吧~

什麼,沒學過彙編……那咱就解釋一下這些彙編指令~

地址為00402F00的指令是將內存移動到寄存器eax中

地址為00402F10的指令將eax減1

地址為00402F17的指令將減1後的值放回內存

也就是說,這三條指令完成了將生命-1的效果。

雙擊dec eax,改成inc eax(將eax加1)

之後刪除內存斷點(在0012E9BC上右鍵->斷點->刪除內存斷點),F9繼續程序~

再一次死掉之後,我們可以看到,生命值+1啦~

接下來,我們要保存成果。

在OD中右鍵->複製到可執行文件->所有修改,然後在新出現的窗口中右鍵->保存文件

我們就得到一個死了之後生命+1的版本啦~之後用這個保存的來玩就容易多啦~是不是很開心呢~

不過,有沒有其它的方法呢?

剛才,我們已經得到了內存地址,那麼,我們可以寫一個C語言程序。

#include<stdio.h>#include<windows.h>int main (void){ HWND handle = FindWindow( "WinDepth", // pointer to class name "WinDepth (Sleep)" // pointer to window name ); if(handle == NULL) return 0; DWORD pid; GetWindowThreadProcessId(handle, &pid); printf("PID: %d", pid); HANDLE process_handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); int num = 99999; WriteProcessMemory(process_handle, (void *)0x0012E9BC, &num, sizeof(num), NULL); getchar(); return 0;}

這個程序會通過窗口得到窗口的句柄,然後通過窗口句柄得到進程的PID,然後將進程的對應內存地址修改成99999。

為什麼窗口名是WinDepth (Sleep)?因為這個遊戲在窗口失去焦點之後,就會自動暫停,同時窗口名也會變成WinDepth (Sleep)這樣(真是貼心的設計^^)。

編譯之後,先開始遊戲,然後運行程序,就會看到……

生命變成99999啦~

用類似的方法,我們還可以修改關卡來達到跳關的效果,修改BOSS的初始血量來讓BOSS更容易擊敗(搜索的方式不太一樣,一開始要模糊搜索),大家可以去嘗試~


推薦閱讀:

4399遊戲盒怎麼賺奧比?
誰有《奧特曼兄弟聯手2無敵版》的遊戲攻略?
自以為是正義判官的你,可能在這款遊戲中不知不覺成了「網路暴民」:熒幕判官
如何看待匯源攜手jj比賽讓利消費者?
我的世界聯機盒子背景設定如何?

TAG:遊戲 |