//////////////1.20E 來自BZ
///////////////////////////////////////////////////大地圖去除迷霧
patch(0x406B53,"\x90\x8B\x09");
///////////////////////////////////////////////////大地圖顯示單位
patch(0x2A0930,"\xD2");
///////////////////////////////////////////////////大地圖顯示隱形
patch(0x17D4C2,"\x90\x90");
patch(0x17D4CC,"\xEB\x00\xEB\x00\x75\x30");
///////////////////////////////////////////////////////分辨幻影
patch(0x1ACFFC,"\x40\xC3");
///////////////////////////////////////////////////////顯示神符
patch(0x2A07C5,"\x49\x4B\x33\xDB\x33\xC9");
///////////////////////////////////////////////////小地圖去除迷霧
patch(0x147C53,"\xEC");
//////////////////////////////////////////////////////顯示單位
patch(0x1491A8, "\x00");
/////////////////////////////////////////////////////顯示隱形
patch(0x1494E0,"\x33\xC0\x0F\x85");
////////////////////////////////////////////////////敵方信號
patch(0x321CC4,"\x39\xC0\x0F\x85");
patch(0x321CD7,"\x39\xC0\x75");
//////////////////////////////////////////////////他人提示
patch(0x124DDD,"\x39\xC0\x0F\x85");
/////////////////////////////////////////////////顯示敵方頭像
patch(0x137BA5,"\xE7\x7D");
patch(0x137BAC,"\x85\xA3\x02\x00\x00\xEB\xCE\x90\x90\x90\x90");
//////////////////////////////////////////////////盟友頭像
patch(0x137BA5,"\xE7\x7D");
patch(0x137BB1,"\xEB\xCE\x90\x90\x90\x90");
//////////////////////////////////////////////數字顯攻速
patch(0x802E67,"\x32");
patch(0x13BA61,"\x90\xD9\x45\x08\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x802E64+GameAddr;
//在這裏請注意,爲什麼要使用一個tmp變量呢?
//Dll中的基址重定位是系統幫你改寫的,這裏我們也要考慮到 基址重定位 的問題
memcpy(LPVOID(GameAddr+0x13BA6C),&tmp,4);
patch(0x13BA70,"\x8D\x55\xA0\x6A\x7F\x52\xE8\x27\x7E\x25\x00\x83\xC4\x14\x6A\x7F\x8D\x45\xA0\x50");
/////////////////////////////////////////////數字顯移速
patch(0x802E67,"\x32");
patch(0x13C3F2,"\x90\xD9\x45\x08\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x802E64+GameAddr;
memcpy(LPVOID(GameAddr+0x13C3FD),&tmp,4);
patch(0x13C401,"\x8D\x55\x98\x6A\x7F\x52\xE8\x96\x74\x25\x00\x83\xC4\x14\x6A\x7F\x8D\x45\x98\x50");
//////////////////////////////////////////////資源面板
patch(0x13EF03,"\xEB");
/////////////////////////////////////////////允許交易
patch(0x127B3D,"\x40\xB8\x64");
//////////////////////////////////////////////顯示技能
patch(0x12DC1A,"\x33\xC0");
patch(0x12DC5A,"\x33\xC0");
patch(0x1BFABE,"\xEB");
patch(0x442CC0,"\x90\x40\x30\xC0\x90\x90");
patch(0x443375,"\x30\xC0");
patch(0x45A641,"\x90\x90\x33\xC0\x90\x90");
patch(0x45E79E,"\x90\x90");
patch(0x45E7A0,"\x33\xC0\x90\x90");
patch(0x466527,"\x90\x90");
patch(0x46B258,"\x90\x33\xC0\x90\x90\x90");
patch(0x4A11A0,"\x33\xC0");
patch(0x54C0BF,"\x90\x33\xC0\x90\x90\x90");
patch(0x5573FE,"\x90\x90\x90\x90\x90\x90");
patch(0x55E15C,"\x90\x90");
///////////////////////////////////////////////資源條
patch(0x150981,"\xEB\x02");
patch(0x1509FE,"\xEB\x02");
patch(0x151597,"\xEB\x02");
patch(0x151647,"\xEB\x02");
patch(0x151748,"\xEB\x02");
patch(0x1BED19,"\xEB\x02");
patch(0x314A9E,"\xEB\x02");
patch(0x21EAD4,"\xEB");
patch(0x21EAE8,"\x03");
/////////////////////////////////////////////////野外顯血
patch(0x166E5E,"\x90\x90\x90\x90\x90\x90\x90\x90");
patch(0x16FE0A,"\x33\xC0\x90\x90");
////////////////////////////////////////////////視野外點選
patch(0x1BD5A7,"\x90\x90");
patch(0x1BD5BB,"\xEB");
/////////////////////////////////////////////////無限取消
patch(0x23D60F,"\xEB");
patch(0x21EAD4,"\x03");
patch(0x21EAE8,"\x03");
//////////////////////////////////////////////////過-MH(藍寶石)
patch(0x2C5A7E,"\x90\x90");
/////////////////////////////////////////反-AH
patch(0x2C240C,"\x3C\x4C\x74\x04\xB0\xFF\xEB\x04\xB0\xB0\x90\x90");
patch(0x2D34ED,"\xE9\xB3\x00\x00\x00\x90");
////////////////////////////////////////////////////////////
1.24B
/////////////////////////////////////////////////////////////////////大地圖去除迷霧
patch(0x74D103,"\xC6\x04\x3E\x01\x90\x46");
///////////////////////////////////////////////////////大地圖顯示單位
patch(0x3A201D, "\xEB");
////////////////////////////////////////////////////////大地圖顯示隱形
patch(0x3622D1,"\x3B");
patch(0x3622D4,"\x85");
patch(0x39A45B,"\x90\x90\x90\x90\x90\x90");
patch(0x39A46E,"\x90\x90\x90\x90\x90\x90\x90\x90\x33\xC0\x40");
/////////////////////////////////////////////////////分辨幻影
patch(0x28351C,"\x40\xC3");
/////////////////////////////////////////////////////顯示神符
patch(0x4076CA,"\x90\x90");
patch(0x3A1F5B,"\xEB");
///////////////////////////////////////////////////////小地圖去除迷霧
patch(0x356FA5,"\x90\x90");
/////////////////////////////////////////////////////小地圖顯示單位
patch(0x361EAB,"\x90\x90\x39\x5E\x10\x90\x90\xB8\x00\x00\x00\x00\xEB\x07");
///////////////////////////////////////////////////////小地圖顯示隱形
patch(0x361EBC,"\x00");
//////////////////////////////////////////////////////敵方信號
patch(0x43F956,"\x3B");
patch(0x43F959,"\x85");
patch(0x43F969,"\x3B");
patch(0x43F96C,"\x85");
////////////////////////////////////////////////////////他人提示
patch(0x334529,"\x39\xC0\x0F\x85");
///////////////////////////////////////////////////////敵人頭像
patch(0x371640,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x85\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90");
/////////////////////////////////////////////////////盟友頭像
patch(0x371640,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x84\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90");
////////////////////////////////////////////////////////////數顯攻速
patch(0x87E9A3,"\x25\x30\x2E\x32\x66\x7C\x52\x00");
patch(0x87E9B0,"\x8D\x4C\x24\x18\xD9\x44\x24\x60\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x87E9A3+GameAddr;
memcpy(LPVOID(GameAddr+0x87E9BF),&tmp,4);
patch(0x87E9C3,"\x57\x51\xE8\xBC\xD2\xE6\xFF\x83\xC4\x14\x58\x57\x8D\x4C\x24\x18\xFF\xE0");
patch(0x339D34,"\xE8\x77\x4C\x54\x00");
//////////////////////////////////////////////////////////數顯移速
patch(0x87E9A3,"\x25\x30\x2E\x32\x66\x7C\x52\x00");
patch(0x87E9B0,"\x8D\x4C\x24\x18\xD9\x44\x24\x60\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x87E9A3+GameAddr;
memcpy(LPVOID(GameAddr+0x87E9BF),&tmp,4);
patch(0x87E9C3,"\x57\x51\xE8\xBC\xD2\xE6\xFF\x83\xC4\x14\x58\x57\x8D\x4C\x24\x18\xFF\xE0");
patch(0x339B94,"\xE8\x17\x4E\x54\x00");
//////////////////////////////////////////////////////資源面板
patch(0x3604CA,"\x90\x90");
///////////////////////////////////////////////////////允許交易
patch(0x34E822,"\xB8\xE0\x03\x00");
patch(0x34E827,"\x90");
patch(0x34E82A,"\xB8\x64\x90\x90");
patch(0x34E82F,"\x90");
//////////////////////////////////////////////////////查看技能
patch(0x28EC8E,"\xEB");
patch(0x20318C,"\x90\x90\x90\x90\x90\x90");
patch(0x34FD28,"\x90\x90");
patch(0x34FD66,"\x90\x90\x90\x90");
////////////////////////////////////////////////////////資源條
////////////////////////////////////////////////////////野外顯血
////////////////////////////////////////////////////////視野外點擊
patch(0x285C4C,"\x90\x90");
patch(0x285C62,"\xEB");
/////////////////////////////////////////////////////////////無限取消
patch(0x57B9FC,"\xEB");
patch(0x5B2CC7,"\x03");
patch(0x5B2CDB,"\x03");
////////////////////////////////////////////////////////過-MH
patch(0x3C8407,"\xEB\x11");
patch(0x3C8427,"\xEB\x11");
//////////////////////////////////////////////////////////反-AH
patch(0x3C6E1C,"\xB8\xFF\x00\x00\x00\xEB");
patch(0x3CC2F2,"\xEB");
///////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////大地圖去除迷霧
patch(0x74D1B9,"\xB2\x00\x90\x90\x90\x90");
////////////////////////////大地圖顯示單位
patch(0x39EBBC,"\x75");
patch(0x3A2030,"\x90\x90");
patch(0x3A20DB,"\x90\x90");
///////////////////////////////顯示隱形單位
patch(0x362391,"\x3B");
patch(0x362394,"\x85");
patch(0x39A51B,"\x90\x90\x90\x90\x90\x90");
patch(0x39A52E,"\x90\x90\x90\x90\x90\x90\x90\x90\x33\xC0\x40");
///////////////////////////////////////////////////分辨幻影
patch(0x28357C,"\x40\xC3");
/////////////////////////////////////////////////////顯示物品
patch(0x3A201B,"\xEB");
patch(0x40A864,"\x90\x90");
////////////////////////////////////////////小地圖 去除迷霧
patch(0x357065,"\x90\x90");
////////////////////////////////////////////小地圖顯示單位
patch(0x361F7C,"\x00");
/////////////////////////////////////////////小地圖顯示隱形
/////////////////////////////////////////////敵方信號
patch(0x43F9A6,"\x3B");
patch(0x43F9A9,"\x85");
patch(0x43F9B9,"\x3B");
patch(0x43F9BC,"\x85");
/////////////////////////////////////////////他人提示
patch(0x3345E9,"\x39\xC0\x0F\x85");
////////////////////////////////////////////////敵方頭像
patch(0x371700,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x85\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90");
/////////////////////////////////////盟友頭像
patch(0x371700,"\xE8\x3B\x28\x03\x00\x85\xC0\x0F\x84\x8F\x02\x00\x00\xEB\xC9\x90\x90\x90\x90");
////////////////////////////////////////////////////////////數顯攻速
patch(0x87EA63,"\x25\x30\x2E\x32\x66\x7C\x52\x00");
patch(0x87EA70,"\x8D\x4C\x24\x18\xD9\x44\x24\x60\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x87EA63+GameAddr;
memcpy(LPVOID(GameAddr+0x87EA7F),&tmp,4);
patch(0x87EA83,"\x57\x51\xE8\xBC\xD2\xE6\xFF\x83\xC4\x14\x58\x57\x8D\x4C\x24\x18\xFF\xE0");
patch(0x339DF4,"\xE8\x77\x4C\x54\x00");
//////////////////////////////////////////////////////////數顯移速
patch(0x87EA63,"\x25\x30\x2E\x32\x66\x7C\x52\x00");
patch(0x87EA70,"\x8D\x4C\x24\x18\xD9\x44\x24\x60\x83\xEC\x08\xDD\x1C\x24\x68");
DWORD tmp=0x87EA63+GameAddr;
memcpy(LPVOID(GameAddr+0x87EA7F),&tmp,4);
patch(0x87EA83,"\x57\x51\xE8\xBC\xD2\xE6\xFF\x83\xC4\x14\x58\x57\x8D\x4C\x24\x18\xFF\xE0");
patch(0x339C54,"\xE8\x17\x4E\x54\x00");
//////////////////////////////////////////////////////資源面板
patch(0x36058A,"\x90");
patch(0x36058B,"\x90");
/////////////////////////////////////////// 允許交易
patch(0x34E8E2,"\xB8\xC8\x00\x00");
patch(0x34E8E7,"\x90");
patch(0x34E8EA,"\xB8\x64\x00\x00");
patch(0x34E8EF,"\x90");
////////////////////////////////////////////////顯示技能
patch(0x2031EC,"\x90\x90\x90\x90\x90\x90");
patch(0x34FDE8,"\x90\x90");
/////////////////////////////////////////////////技能CD
patch(0x28ECFE,"\xEB");
patch(0x34FE26,"\x90\x90\x90\x90");
//////////////////////////////////////////////資源條
//////////////////////////////////////////////野外顯血
///////////////////////////////////////////////視野外點擊
patch(0x285CBC,"\x90\x90");
patch(0x285CD2,"\xEB");
//////////////////////////////////////////////////無限取消
patch(0x57BA7C,"\xEB");
patch(0x5B2D77,"\x03");
patch(0x5B2D8B,"\x03");
/////////////////////////////////////////////////////過-MH
patch(0x3C84C7,"\xEB\x11");
patch(0x3C84E7,"\xEB\x11");
////////////////////////////////////////////////////反-AH
patch(0x3C6EDC,"\xB8\xFF\x00\x00\x00\xEB");
patch(0x3CC3B2,"\xEB");
///////////////////////////////////////////////////////////
代碼中的patch是一個宏
#define patch(i,w) memcpy((LPVOID)(GameAddr+i),w,sizeof(w)-1)
其實,我把這些作弊代碼放在SPI的Dll裏面也就是大家看到的%APPDATA%\\HackDll.dll,這個Dll被war3.exe加載,進入了war3.exe的地址空間,而我們修改魔獸作弊主要就是修改game.dll中的內存,也是在war3.exe的地址空間,同一個進程內的修改內存,當然只要 MOV 指令就能實現了唄,高級語言的memcpy編譯成彙編以後就是 MOV 指令了...不過要記得先用 VirtualProtect 函數改變一下目標地址的保護屬性,PAGE_EXECUTE_READWRITE
如果你的作弊代碼是放在自己的EXE中,要修改war3.exe中的內存就是讀寫不同進程的地址空間了,方法很多,不過一般使用的是 WriteProcessMemory這個函數,所以你可以這樣定義你自己的patch。
#define patch(i,w) WriteProcessMemory(hOpenWC3,(LPVOID)(GameAddr+i),w,sizeof(w)-1,0)