利用cheat engine以及VC编写游戏修改器
cheat engine的介紹已經完畢了,下面就是怎么使用它的問題,這里寫一個稍微有意思一點的,也有實際用途的話題,就是來編寫自己的游戲修改器。
這篇文章參考了http://www.pediy.com/bbshtml/bbs7/pediy7-59.htm的內容,但是進行了一定的修改和自己的實驗,大家可以結合著一起看。
關于上面的鏈接我就不講什么了,主要介紹我的方法。
我使用的工具:
cheat engine
Visual studio 2005
目標:
紅色警戒2 繁體中文版(帶游俠網補丁)
?
下面就開始了,大家如果有這款游戲的話,也可以自己來試試,還是有點意思的。
使用cheat engine來輔助工作:
首先在開始工作之前,需要進行一定的準備。準備就是將游戲和cheat engine都打開,然后對于游戲,先新建一個遭遇戰,選擇一個“簡單的敵人”,這里是因為你需要時間去找地址,如果敵人很厲害,你還沒找到地址就掛了,那就沒得玩了,當然,這里找地址還是很快的。
注意點有幾點,在flash文件中我會注釋出來,這里簡單提一下:
在準備工作都做好之后,開始進行cheat engine的工作,大家具體看flash動畫:
修改器原理:
從上面的flash我們得到,00A1E0C4為最終我們找到的地址,而offset為24C。我們通過這個可以知道其指向的地址內存儲著我們需要的金錢數。而修改了這個金錢數,在游戲中我們也就修改成功。
代碼如下:
代碼?1?void?CGameRedAlertDlg::OnBnClickedButton1()?2?{
?3?????//修改內存
?4?????//now?we?get?the?right?memory?address.
?5?????void?*addrpoint?=?(void?*)0x00A1E0C4;
?6?????//then?get?a?new?pointer
?7?
?8?????unsigned?int?newMoney?=?900000;
?9?
10?????//And?we?should?give?moneyAddr?the?money?change.
11?????HANDLE?handle?=?CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
12?????PROCESSENTRY32*?info=new?PROCESSENTRY32;
13?????info->dwSize=sizeof(PROCESSENTRY32);
14?????BOOL?bret;
15?????DWORD?PID;
16?????HANDLE?hProcess=NULL;
17?
18?????unsigned?int?objMoney?=?0;
19?????unsigned?int?addrInt?=?0;
20?
21?????TCHAR?*procName?=?_T("game.tmp");
22?
23?????bret?=?Process32First(handle,info);
24?????while?(bret)
25?????{
26?????????//get?the?right?process.
27?????????TCHAR?*file?=?info->szExeFile;
28?????????TCHAR?*fileName;;
29?????????//全部轉換為小寫,然后再匹配其中是否有子字符串
30?????????_tcslwr_s(fileName=_tcsdup(file),?_tcslen(file)+1);
31?????????TCHAR?*pDest?=?_tcsstr(fileName,procName);
32?????????free(fileName);
33?????????if(pDest!=NULL)
34?????????{
35?????????????//found
36?????????????MessageBox(_T("find..."),_T("OK"));
37?????????????PID=info->th32ProcessID;
38?????????????hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
39?
40?????????????ReadProcessMemory(hProcess,addrpoint,&addrInt,4,NULL);
41?????????????void?*addr?=?(void?*)addrInt;
42?????????????int?offset?=?0x24c;
43?????????????int?*moneyAddr?=?(int?*)((char?*)addr?+?offset);
44?????????????ReadProcessMemory(hProcess,moneyAddr,&objMoney,4,NULL);
45?????????????Sleep(500);
46?????????????BOOL?bWrite?=?WriteProcessMemory(hProcess,moneyAddr,&newMoney,4,NULL);
47?
48?????????????if?(bWrite)
49?????????????{
50?????????????????MessageBox(_T("Write?success"),_T("Good"));
51?????????????}
52?????????????else
53?????????????{
54?????????????????MessageBox(_T("Write?Failed!"),_T("Failed"));
55?????????????}
56?
57?????????????break;
58?????????}
59?????????bret?=?Process32Next(handle,info);
60?
61?????????if(bret==FALSE)
62?????????????MessageBox(_T("Cannot?find?such?process"),_T("Error"));
63?????}
64?????if?(hProcess)
65?????{
66?????????CloseHandle(hProcess);
67?????}
68?}
69?
?
這里將金錢數修改為900000.
如何使用修改器:
簡單看一下修改器的截圖
?
可以看到很簡單,因為只是實驗,所以沒有去實現什么界面,將所有的代碼寫在按鈕的響應函數中。?
前提,啟動游戲,進入某一個遭遇戰中,等金錢數目跳到10000(當然,要看你開始資金是否是10000,我默認都是),然后就可以點擊Button1來修改金錢了。大家試試看吧。
?
后記:
其實這里僅僅是一個修改器的雛形,還有很多地方可以去完善,但是從技術學習的角度,應該算是足夠了。
?
PS:
關于編輯器的問題,不知道大家具體是怎么使用的。我原來使用CuteEditor,不過上傳完flash后,不知道如何使用,在TinyMCE中找到插入flash的地方,所以要切來切去,先用CuteEditor上傳,再用TinyMCE插入,同時TinyMCE似乎對代碼著色沒有CuteEditor好。
?
轉載于:https://www.cnblogs.com/cnyao/archive/2009/12/08/playonstudy3.html
總結
以上是生活随笔為你收集整理的利用cheat engine以及VC编写游戏修改器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript中的类实现
- 下一篇: Delphi的内存管理及内存泄露问题