露米婭的遊戲修改小課堂~
咱今天比較閑,所以來誤人子弟啦~
來講一講如何用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:遊戲 |