dotadota2最新更新日志外挂来个能用的不客气

8252人阅读
魔兽编程(3)
好久木有研究DOTA了,整理篇小菜文章。
首先,我们要提升外挂本身程序权限,使其能够有权限修改war3游戏的内存。这个c++可以使用如下代码
void EnableDebugPriv()//提升程序自身权限
LUID sedebugnameV
TOKEN_PRIVILEGES
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME,&sedebugnameValue))
CloseHandle(hToken);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameV
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof tkp, NULL, NULL)) CloseHandle(hToken);
其次,有了权限以后,我们要找到war3.exe进程ID。并打开进程以供编辑修改内存,到达作弊目的。
获得进程ID:下面这个函数方法就是返回进程的,直接写进程名称,如:GetPIDForProcess(“war3.exe”),还可以用FindWindow的方法,反正能找到进程ID就可以了。
//HWND hwar3=::FindWindow(NULL,TEXT(&Warcraft III&));
//DWORD PID, TID;
//TID = ::GetWindowThreadProcessId (hwar3, &PID);
DWORD GetPIDForProcess(char* process)//获取进程ID
PROCESSENTRY32
lppe= {0};
targetPid=0;
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS ,0);
if (hSnapshot)
lppe.dwSize=sizeof(lppe);
working=Process32First(hSnapshot,&lppe);
while (working)
if(strcmp((const char *)lppe.szExeFile,process)==0)
targetPid=lppe.th32ProcessID;
}working=Process32Next(hSnapshot,&lppe);
CloseHandle( hSnapshot );
return targetP
注意:有的名称为War3.exe或war3.exe,用toolhelp32方式需要比较进程名字,这时是会区分大小写的。FindWindow则不用,窗口标题都是固定的Warcraft III。
进程ID已经找到,现在是不是直接打开修改内存作弊呢?不,还早呢。我们修改内存也不能乱来,你得先找到Game.dll判断游戏版本,对应修改,要不会把魔兽搞火了,突然跳出来,那你就崩溃了,后悔都来不及。有木有,有木有?开图导致游戏崩溃的老实交代一下。
下面的方法获取game.dll的基址和路径。GetDLLBase(“game.dll”,PID)直接返回的就是game.dll的基址,这个后面是需要用到的。定义一个全局变量TCHAR&&LastDLLPath[260],LastDLLPath返回的就是game.dll路径,。
DWORD GetDLLBase(char* DllName, DWORD tPid)
HANDLE snapM
MODULEENTRY32 me32;
if (tPid == 0) return 0;
snapMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, tPid);
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(snapMod, &me32))
if (strcmp(DllName,(const char *)me32.szModule) == 0)
strcpy(LastDLLPath ,me32.szExePath);//game.dll路径
CloseHandle(snapMod);
return (DWORD) me32.modBaseA
}while(Module32Next(snapMod,&me32));
CloseHandle(snapMod);
} 还有就是使用native api&ZwQueryVirtualMemory来获取gamedll的基址,这个有些麻烦不过还算是稍微底层些
typedef enum _MEMORY_INFORMATION_CLASS
MemoryBasicInformation,
MemoryWorkingSetList,
MemorySectionName,
MemoryBasicVlmInformation
} MEMORY_INFORMATION_CLASS;
typedef long (NTAPI * PF_ZwQueryVirtualMemory)
IN HANDLE ProcessHandle,
IN PVOID BaseAddress,
IN MEMORY_INFORMATION_CLASS MemoryInformationClass,
OUT PVOID MemoryInformation,
IN ULONG MemoryInformationLength,
OUT PULONG ReturnLength OPTIONAL
typedef struct _UNICODE_STRING
USHORT MaximumL
} UNICODE_STRING, *PUNICODE_STRING;
DWORD GetGameDLLAddr(HANDLE hWar3Handle,WCHAR * ModuleName)
DWORD startA
BYTE buffer[MAX_PATH*2+4];
MEMORY_BASIC_INFORMATION memBI;
PUNICODE_STRING secN
PF_ZwQueryVirtualMemory ZwQueryVirtualM
startAddr = 0x;
ZwQueryVirtualMemory = (PF_ZwQueryVirtualMemory)GetProcAddress(GetModuleHandleA(&ntdll&),&ZwQueryVirtualMemory&);
if(ZwQueryVirtualMemory(hWar3Handle,(PVOID)startAddr,MemoryBasicInformation,&memBI,sizeof(memBI),0 ) &= 0 &&
(memBI.Type == MEM_IMAGE))
if( ZwQueryVirtualMemory(hWar3Handle,(PVOID)startAddr,MemorySectionName,buffer,sizeof(buffer),0 ) &= 0 )
secName = (PUNICODE_STRING)
if(wcsicmp(ModuleName, wcsrchr(secName-&Buffer,'\\')+1) == 0)
return startA
// 递增基址,开始下一轮查询!
startAddr += 0x10000;
while( startAddr & 0x );
这里也需要注意的是game.dll的大小写或者名称,如有的平台为game124.dll。然后用下面两个方法获得版本。定义全局变量WC3VER&&g_War3Ver,enum WC3VER{_UN,_120E,_124B,_124E,_125B,_126B}。
void GetWar3Ver()
TCHAR FileVer[64];
ODV(TEXT(&%s&),LastDLLPath);
GetFileVer(LastDLLPath,FileVer,64);
ODV(TEXT(&%s&),FileVer);
if(lstrcmpi(FileVer,TEXT(&1, 20, 4, 6074&)) ==0)
g_War3Ver=_120E;
else if(lstrcmpi(FileVer,TEXT(&1, 24, 1, 6374&)) ==0)
g_War3Ver=_124B;
else if(lstrcmpi(FileVer,TEXT(&1, 24, 4, 6387&)) ==0)
g_War3Ver=_124E;
else if(lstrcmpi(FileVer,TEXT(&1, 25, 1, 6397&)) ==0)
g_War3Ver=_125B;
else if(lstrcmpi(FileVer,TEXT(&1, 26, 0, 6401&)) ==0)
g_War3Ver=_126B;
g_War3Ver=_UN;
GetFileVer(__in LPTSTR FileName, __out LPTSTR lpVersion, __in DWORD nSize)
SubBlock[64];
InfoSize = GetFileVersionInfoSize(FileName,NULL);
if(InfoSize==0) return 0;
TCHAR *InfoBuf = new TCHAR[InfoSize];
GetFileVersionInfo(FileName,0,InfoSize,InfoBuf);
unsigned int
cbTranslate = 0;
struct LANGANDCODEPAGE
WORD wCodeP
VerQueryValue(InfoBuf, TEXT(&\\VarFileInfo\\Translation&),
(LPVOID*)&lpTranslate,&cbTranslate);
// Read the file description for each language and code page.
wsprintf( SubBlock,
TEXT(&\\StringFileInfo\\%04x%04x\\FileVersion&),
lpTranslate[0].wLanguage,
lpTranslate[0].wCodePage);
void *lpBuffer=NULL;
unsigned int dwBytes=0;
VerQueryValue(InfoBuf, SubBlock, &lpBuffer, &dwBytes);
lstrcpyn(lpVersion,(LPTSTR)lpBuffer,nSize);
delete[] InfoB
return dwB
获得版本后就可以OpenProcess然后根据对应的版本来修改内存以实现我们想要的东东了。
switch(g_War3Ver)
case _120E:
//修改内存代码自己去找吧//大地图去除迷雾
PATCH(0x406B53,&\x90\x8B\x09&);
PATCH(0x2A0930,&\xD2&);
//野外显血
PATCH(0x166E5E,&\x90\x90\x90\x90\x90\x90\x90\x90&);
PATCH(0x16FE0A,&\x33\xC0\x90\x90&);
//视野外点选
PATCH(0x1BD5A7,&\x90\x90&);
PATCH(0x1BD5BB,&\xEB&);
//小地图显示单位
PATCH(0x1491A8, &\x00&);
case _124B:
//小地图显示单位
PATCH(0x361EAB,&\x90\x90\x39\x5E\x10\x90\x90\xB8\x00\x00\x00\x00\xEB\x07&);
case _124E:
//至于作弊代码你们是直接写,还是写成一个方法调用,随你们自己。
PATCH,这是定义的一个宏,#define&&PATCH(i,w)&&WriteProcessMemory(hopen,(LPVOID)(g_dwGameAddr+i),w,sizeof(w)-1,0);实现向目标进程某个地址写入数据。
这个宏在这里使用WriteProcessMemory,如果你使用DLL注入的话就要用
#define PATCH(i,w) memcpy((LPVOID)(g_dwGameAddr+i),w,sizeof(w)-1)。
最后补充一下根据上面的DWORD GetDLLBase(char* DllName, DWORD tPid)和DWORD GetPIDForProcess(char* process)可以获得War3.exe进程加载的所有模块,如果单机启动,是加载本地的game.dll。如果在平台上启动游戏,你会发现加载的是平台自带的game.dll。可以修改下GetDLLBase函数打印下加载模块的路径自己看下。
这时我通过本机跟11加载时的截图
另外还要注意下使用tlhelp32库的函数时最好程序使用ansi编码。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:300465次
积分:4279
积分:4279
排名:第5598名
原创:97篇
转载:14篇
评论:195条
(1)(1)(1)(1)(1)(2)(2)(1)(1)(1)(1)(1)(5)(2)(4)(9)(13)(12)(15)(28)(1)(8)&您的位置:
GH GarenaHack (dota外挂)
GH 免费版DotA外挂,它具有一切典型外挂功能,包括秒杀VS/HF平台,反封号,自动躲避技能,多方面功能。
游戏攻略(0)其他版本(0)
《GH GarenaHack (dota外挂)》游戏综述
GH 免费版DotA外挂,它具有一切典型外挂功能,包括秒杀VS/HF平台,反封号,自动躲避技能,
多方面功能。
I-详细功能介绍:
1-全图/Maphack,支持 1.20e至1.26 任意版本
2-主机外挂,可实现T人,能让指定玩家拥有设定的延迟,也可将玩家卡出游戏,以及将玩家mute等系列功能
3-可以查看敌方聊天记录,包括私聊等、从而实现偷窥 以及 获取敌方购买 小鸡/眼 相关消息
4-神符提示,每2分钟会根据 刷出点,符 给出不同颜色的消息以及小地图提示,此消息只有自己能够看到
5-镜头增强,可设置任意高度与低度
6-自动躲避技能,根据走位
7-自动躲避技能,根据物品
8-自动躲避技能,根据技能
9-MH增强,可看见敌方 船长 洪水,矮人狙击手 大炮,裂魂人 追踪等技能效果
10-Manabar,如同生命条方式,显示魔法值
11-GH具备Safeclick,代表你在游戏里点击任何单位/物品等【不在视野内】,不会从 Replay 被检测出来
12-MH检测,资源交换检测,在游戏中能够明确指出开图者,对本产品毫无影响
13-视野外的单位,将以特殊的颜色显示生命条
14-可查看所有玩家目前所点击的单位
15-显示所有 英雄/小鸡 所执行的路径线【小地图】
16-以数字方式显示 物品/技能 CD
17-血量可被 斧王的斩,死灵法师的大招 等技能秒杀情况下,目标模型将自动换色
18-可查看DotA积分榜一切信息,当前敌人大招CD剩余时间,复活时间 和 金钱数目
19-过VS/HF平台,以及在HF平台中反-10
20-主机可模仿游戏内玩家说话
所有功能可在游戏中,随时开启/关闭。
功能尚未完善,我们将继续增加更强大的功能!
II-自动根据走位躲避技能列表:
月之女祭司 【R】
仙女龙 【R】
屠夫 【T】
半人猛犸 【W】
变体精灵 【W】
剧毒术士 【E】
风行者 【R】
秀逗魔导师 【T】
受折磨的灵魂 【T】
船长 【E】
山岭巨人 【V】
兽王 【W】
蝙蝠骑士 【R】
【更多走位躲避性的技能,请敬请期待我们的更新】
III-自动根据物品躲避技能列表:
(洛萨之锋、跳刀、黑皇、分身斧等,并自动计算使用优先级。)
秀逗魔导师 - 大招 【G】
恶魔巫师 - 大招 【F】
复仇之魂 - 第一个技能 【C】
潮汐猎人 - 大招 【V】
撼地神牛 - 大招 【C】
沙王 - 第一个技能 【E】
骷髅王 - 第一个技能 【T】
娜迦海妖 - 第二个技能 【E】
半人猛犸 - 大招 【V】
剑圣 - 大招 【E】
月之骑士 - 大招 【E】
流浪剑客 第一个技能 【T】
裂魂人 - 第一个技能 【C】
树精卫士 - 大招 【R】
斧王 - 第一个技能 【E】
黑曜毁灭者 - 大招 【C】
幻影长矛手 - 第一个技能 【T】
虚空假面 - 大招 【C】
众神之王 - 第二个技能,大招 【G,W】
赏金猎人 - 第一个技能 【T】
剧毒术士 - 大招 【V】
矮人狙击手 - 大招 【T】
巫医 - 第一个技能 【C】
混沌骑士 - 第一个技能 【C】
【更多物品躲避性的技能,请敬请期待我们的更新】
IV-自动根据技能躲避技能列表:
V-使用说明:
把文件放入到魔兽根目录里并运行。
请使用以下账号登陆使用: 密码:55you
《GH GarenaHack (dota外挂)》游戏攻略
《GH GarenaHack (dota外挂)》其它版本下载
《GH GarenaHack (dota外挂)》下载地址
你可能还会喜欢
本类最新更新
最新推荐下载
&&&&类型:评分:6.9
别人正在下载...
如果你使用的是11平台,当运行1.24e魔兽后。进入操作界面的时候按...}

我要回帖

更多关于 dota2最新更新 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信