您的位置:首页 > 其它

过新真三蓝宝石地图-MH命令工具

2010-08-05 11:18 239 查看
首先在这里说声抱歉,有很多的朋友给我留言都没有回复,有很长一段时间没上CSDN了,所以不好意思了大家……

再就是有很多朋友用了我写的延迟T人工具,出现很多的BUG,对于这个我也只能说声抱歉,由于那个工具是很久以前写的,当时处理得很潦草,BUG存在时难免的,由于那段时间主要精力放在毕业设计上,所以也就没怎么去完善(我记得发布后的第三天我就把文章删了),等我有时间再去完善...

----------------------------------------------------------------我是分割线--------------------------------------------------------

先说为什么一直不冒泡的我怎么陡然出现吧,这段时间为复习看书看得有点心烦,就想玩两盘魔兽,给自己的借口是放松(其实隔三差五的去游泳池看美女已经算是放松了),要放松肯定就玩没技术含量的游戏了,就完了几把真三蓝宝石(不要鄙视我,我只是为了放松...),第三把的时候主机打出了一个“-MH”,然后所有人都看到我开了图,当时那个囧啊,刚想丢几句话去解释的时候被主机T出了游戏,心里顿感不爽啊,于是乎就想写个小程序把“-MH”给破了,参考了lynn以前写的一篇文章

如何bypass某些地图的-MH
http://www.pleee.com/archives/221.html
原理Lynn说的差不多了,下面再简要说明一下...

要知道怎么过“-mh”命令,首先得知道地图的“-mh”做了些什么事情,从地图提取出war3map.j文件,搜索关键词“可能作弊”检测MH的触发器

function Trig_EagelAMH_Actions takes nothing returns nothing
call DisableTrigger(GetTriggeringTrigger())
call PolledWait(2.00)
call EnableTrigger(gg_trg_EagelSeekA)
call EnableTrigger(gg_trg_EagelSeekB)
call SetUserControlForceOff(bj_FORCE_ALL_PLAYERS)
call CreateNUnitsAtLoc(1,'hfoo',Player(15),udg_EagelAMHp,bj_UNIT_FACING)
set udg_EagelAMHu=bj_lastCreatedUnit
set bj_forLoopAIndex=1
set bj_forLoopAIndexEnd=12
loop
exitwhen bj_forLoopAIndex>bj_forLoopAIndexEnd
if(Trig_EagelAMH_Func007Func001C())then
call CreateFogModifierRadiusLocBJ(true,Player(-1+(bj_forLoopAIndex)),FOG_OF_WAR_VISIBLE,udg_EagelAMHp,512)
set udg_EagelAMHfog[bj_forLoopAIndex]=bj_lastCreatedFogModifier
call SelectUnitForPlayerSingle(udg_EagelAMHu,Player(-1+(bj_forLoopAIndex)))
call DestroyFogModifier(udg_EagelAMHfog[bj_forLoopAIndex])
endif
set bj_forLoopAIndex=bj_forLoopAIndex+1
endloop
call PolledWait(1.)
call RemoveUnit(udg_EagelAMHu)
call TriggerExecute(gg_trg_EagelPrint)
call SetUserControlForceOn(bj_FORCE_ALL_PLAYERS)
call DisableTrigger(gg_trg_EagelSeekA)
call DisableTrigger(gg_trg_EagelSeekB)
call EnableTrigger(GetTriggeringTrigger())
endfunction


创建一个单位,再选中单位是一般地图反MH的做法,Lynn的那篇文章说的也是这种,而新真三蓝宝石也是使用了这种种方法来检测MH,先调用CreateFogModifierRadiusLocBJ,创建一块迷雾,再该坐标创建一个单位(好像是个人族步兵),然后再让玩家选择该单位,反正我们的目的就是破坏这段代码的功能,最直接的就是让他不做事,直接retn(好像没什么技术含量,都是Lynn说过的...)...

下面给出关键C++代码

void CbypassDlg::OnBnClickedPatch()
{
// TODO: 在此添加控件通知处理程序代码
DWORD pid;
HWND hwar3=::FindWindow(L"Warcraft III",L"Warcraft III");
if(!hwar3)
{
MessageBox(L"can't find Warcraft III!");
return;
}
GetWindowThreadProcessId(hwar3, &pid);
HANDLE hopen = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
//	BYTE _data1[]= {0x33,0xC0,0xE9,0x96,0x01,0x00,0x00,0x90,0x90,0x90,0x90,0x90};//改写CreateFogModifierRadiusLoc 函数入口处的代码
BYTE _data2[]= {0x33,0xC0,0xE9,0xFC,0x00,0x00,0x00,0x90,0x90,0x90,0x90,0x90};//改写SelectUnit函数入口处的代码
//CreateFogModifierRadiusLoc 函数入口处 地址为0x6F2B3170
//SelectUnit函数入口处 地址为 0x6F2C59A0
//	if(!WriteProcessMemory(hopen,(LPVOID)(0x6F2B3170), &_data1,12, NULL) || !WriteProcessMemory(hopen,(LPVOID)(0x6F2C59A0), &_data2,12, NULL))
if(!WriteProcessMemory(hopen,(LPVOID)(0x6F2C59A0), &_data2,12, NULL))
{
MessageBox(L"patch error!");
return;
}
else
MessageBox(L"success!");
}


在上面的代码里可以看到我注释掉了修改CreateFogModifierRadiusLoc 函数入口处的部分,因为这样做是不行的,也就是说任何创建单位,创建物品之类的函数,如果retn掉的话,魔兽就会出现数据同步错误而掉线,所以只能修改操作函数,而不能修改影响魔兽数据的函数(在这里曾经犯过错误= =!)...

void CbypassDlg::OnBnClickedRecovery()
{
// 恢复函数
DWORD pid;
HWND hwar3=::FindWindow(L"Warcraft III",L"Warcraft III");
if(!hwar3)
{
MessageBox(L"can't find Warcraft III!");
return;
}
GetWindowThreadProcessId(hwar3, &pid);
HANDLE hopen = OpenProcess(PROCESS_ALL_ACCESS, false, pid);
//	BYTE _data1[]= {0x55,0x8B,0xEC,0x83,0xEC,0x3C,0x8B,0x0D,0xBC,0x22,0x87,0x6F};
BYTE _data2[]= {0x55,0x8B,0xEC,0x83,0xEC,0x08,0x8B,0x0D,0xBC,0x22,0x87,0x6F};
//	if(!WriteProcessMemory(hopen,(LPVOID)(0x6F2B3170), &_data1,12, NULL) || !WriteProcessMemory(hopen,(LPVOID)(0x6F2C59A0), &_data2,12, NULL))
if(!WriteProcessMemory(hopen,(LPVOID)(0x6F2C59A0), &_data2,12, NULL))
{
MessageBox(L"recovery error!");
return;
}
else
MessageBox(L"success!");
}


============================================还是分割线===========================

相信已经说的够清楚了,程序源代码也没必要给出了,有上面两处关键代码就足够了

下载链接:

Breeze.rar

http://www.brsbox.com/filebox/down/fc/b61f68663fe638fae831e5336b247baa

===============================================================================

CSDN上传附件以后审核要一段时间...请等待...

说明:

该程序只针对魔兽1.20E且只针对新真三蓝宝石地图的-MH命令...

方法已经给出,要过其他地图只需依葫芦画瓢...

都不知道VS对战平台的程序员在干什么,我用VS3.0正式版试了,此工具能正常运行...真不知道他们反外挂在哪里反??!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: