//////////////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)