[原创]ZEROMAP 魔兽争霸 和谐作弊器 120E
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])软件作者:暗夜盛装
啦啦~~~邪八的朋友好久不见~~
一键F10功能:
大地图迷雾清除
小地图迷雾清除
显示自己血条
显示敌人血条
显示敌方单位
查看所有单位属性
分辨幻像
显示隐形
功能基本是够用和常用...也就没和MAPHACK一样搞那么多选项.
[attach]11151[/attach]
以前我是用VB写软件的...但外挂几乎没接触过...写这东西整整化了我一个星期去了解游戏内存的运作方式...还粗略的了解了汇编,CE,W32asm.魔兽的封包验证机制...就两字强悍!!! 汗啊...写外挂原来不难..难的是找指针基址..
免费发布咯~~喜欢下去用~~
未来几天我会发布一些魔兽开发历程...让想做魔兽外挂的朋友少走弯路.
还有...我发现用修改游戏的方式修改软件...破解效果非常不错呢...以后不止用OD..CE也能用于破解哈哈~ [quote]以前我是用VB写软件的...但外挂几乎没接触过...写这东西整整化了我一个星期去了解游戏内存的运作方式...还粗略的了解了汇编,CE,W32asm.魔兽的封包验证机制...就两字强悍!!! 汗啊...写外挂原来不难..难的是找指针基址..[/quote]
楼主很厉害啊.:lol:
[quote]未来几天我会发布一些魔兽开发历程...让想做魔兽外挂的朋友少走弯路[/quote]
这个我比较关心对wow保护的破解. 一按f10就出错!!! 没用哦
我是用浩方 楼主是单机测试的吧
现在几乎所有对战平台都有内存检测的
你的工具过不了那个根本就实用价值
不过自己能做出来这个 还是很佩服楼主的 小弟写了个去除VS反MH的补丁
VS反MH就是检测魔兽内存中固定位置是否被修改,如果被修改就是用了MH,然后就结束掉魔兽的进程
所以,我的补丁HOOK了VS的TerminateProcess,让他不能结束魔兽的进程,就OK了。不过VS的log里面还是会显示你开了MH,但是别人是不知道的
我想最好的办法是ssdthook NtReadVirtualMemory,让他不能发现魔兽内存被改了。。 那浩方呢?
现在浩方反作弊能力比vs要强
HOOK TerminateProcess 是不行的
你可以看看ayssss做的MH
他那个最终版就过所有平台的 ays那个mh好像是file patch的。 跟传统意义上的mh不一样。 我晕 自从我运行了你的程序过后 机子经常跳出什么错误 魔兽玩到一半就自动退出了 晕 你是不是用了指针搞到了系统地址了 晕 被你害残了 要重装系统了 bypass 内存校验不难。。。Hook方法比较直接。。。说说间接的。。。
以前写的代码。。。现在贴上
调试原理很简单。CE挂起跟踪读取代码段的。代码地址
然后他会判断HASH是否是。错误的。你得到正确的HASH然后。修改跳转地址
或者直接返回正确的HASH都可以
现在是变成四次循环检测。所以你要挂钩。四个地址。。。code patch。。
直接Hook读取内存有点太暴力了。。现在都用调试寄存器,很少用code patch直接补丁了。。。过时的技术了[code]
#ifndef __ANTINP_WowZF__
#define __ANTINP_WowZF__
#include <stdio.h>
#include <windows.h>
DWORD dw_317C_WowZF = 0;
DWORD dw_3184_WowZF = 0x05D3814;
BYTE szBuf_WowZF[0x100] =
{
0x0C,0x38,0x5D,0x00,0x10,0x38,0x5D,0x00,0xD8,0x3C,0x5B,0x00,0xDC,0x3C,0x5B,0x00,
0xDC,0xBB,0x46,0x00,0xE0,0xBB,0x46,0x00,0xC0,0x4E,0x5B,0x00,0xC4,0x4E,0x5B,0x00,
0xE4,0x97,0x4E,0x00,0xE8,0x97,0x4E,0x00,0x48,0xC9,0x64,0x00,0x4C,0xC9,0x64,0x00,
0xC7,0x89,0x84,0xB5,0xA8,0xFE,0xFF,0xFF,0xA0,0x8B,0x8E,0x24,0x02,0x00,0x00,0x52,
0x51,0x52,0x68,0x44,0xB4,0x83,0x00,0x6A,0x55,0x8B,0xEC,0x83,0xEC,0x74,0x56,0x57,
0x70,0x53,0x56,0x33,0xF6,0x57,0x89,0x0D,0xF6,0x74,0x07,0x8B,0x55,0x0C,0x85,0xD2,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x3E,0x21,0x01,0xE0,0x3E,0x21,0x01
};
PVOID lp_31D0_WowZF = &szBuf_WowZF[0x30];
PVOID dw_31A0_WowZF = &szBuf_WowZF;
__declspec(naked)void AntiNP_WowZF()
{
__asm
{
sub esp, 0100h
pushad
push edx
push eax
call loc_Start
popad
add esp,0100h
mov eax,dw_317C_WowZF
mov dword ptr [ebp+esi*4-0158h], eax
mov edi,dw_3184_WowZF
jmp edi
loc_Start:
push ebp
mov ebp, esp
mov eax, dword ptr [ebp+0Ch]
xor edx, edx
add eax, -4
mov ecx, dw_31A0_WowZF
loc_1934:
cmp eax, dword ptr [ecx]
je short loc_1950
add ecx,4
inc edx
cmp ecx, lp_31D0_WowZF
jl short loc_1934
mov eax, dword ptr [ebp+8]
mov dw_317C_WowZF, eax
loc_194C:
pop ebp
retn 8
loc_1950:
push eax
mov eax, lp_31D0_WowZF
mov ecx,dword ptr [edx*4+eax]
pop eax
mov edx,ecx
mov dword ptr [ebp+0Ch], ecx
mov eax,ecx
and edx, 0FF00h
shl ecx,10h
or edx,ecx
xor ecx,ecx
mov ch, byte ptr [ebp+0eh]
shr eax,018h
shl edx, 8
or edx,ecx
and eax,0FFh
or edx,eax
mov dw_317C_WowZF, edx
jmp short loc_194C
}
}
#endif
[/code]上次硬盘浩劫所有数据全部丢失。对不起了大家没有新的代码贴了。。55~~
唉~我最心痛的就是我的H动画全没了~
[[i] 本帖最后由 Anskya 于 2008-3-24 13:44 编辑 [/i]] [code]
// 反自校验保护
#define ANTI_FIX1_WowMF 0x005948E0
#define ANTI_FIX2_WowMF 0x00594905
#define ANTI_FIX3_WowMF 0x00594926
#define ANTI_FIX4_WowMF 0x00594946
DWORD Reverse(DWORD dwInDWORD)
{
BYTE szBuffer[4];
DWORD dwResult;
szBuffer[0] = *(PBYTE)((DWORD)&dwInDWORD + 3);
szBuffer[1] = *(PBYTE)((DWORD)&dwInDWORD + 2);
szBuffer[2] = *(PBYTE)((DWORD)&dwInDWORD + 1);
szBuffer[3] = *(PBYTE)((DWORD)&dwInDWORD + 0);
dwResult = *(PDWORD)&szBuffer;
return dwResult;
}
// 反特征码-------------------校验指针,读取的原始代码,第几次验证
static DWORD WINAPI AntiFixRealCode(DWORD lpCodeHook, DWORD dwRealCode, int iPos)
{
DWORD dwCodeFixRealCode, dwRetRealCode;
dwCodeFixRealCode = (DWORD)lpCodeHook;
if (dwCodeFixRealCode == lpUserPassRealCode)
{
// 登录帐号,密码断点
dwRetRealCode = Reverse(dwszUserPassRealCode[iPos]);
}else if (dwCodeFixRealCode == lpUserInfoRealCode)
{
// 角色属性断点
dwRetRealCode = Reverse(dwszUserInfoRealCode[iPos]);
}else if (dwCodeFixRealCode == lpAntiFix1RealCode)
{
// 自校验代码1
dwRetRealCode = Reverse(dwszAntiFix1RealCode[iPos]);
}else if (dwCodeFixRealCode == lpAntiFix2RealCode)
{
// 自校验代码2
dwRetRealCode = Reverse(dwszAntiFix2RealCode[iPos]);
}else if (dwCodeFixRealCode == lpAntiFix3RealCode)
{
// 自校验代码3
dwRetRealCode = Reverse(dwszAntiFix3RealCode[iPos]);
}else if (dwCodeFixRealCode == lpAntiFix4RealCode)
{
// 自校验代码4
dwRetRealCode = Reverse(dwszAntiFix4RealCode[iPos]);
}else
{
// 非挂钩代码
dwRetRealCode = dwRealCode;
}
return dwRetRealCode;
}
// 反代码自校验1
static __declspec(naked)void AntiFix1HookWowMF()
{
__asm
{
pushad
pushfd
push 0
push edx
sub eax, 010h
push eax
call AntiFixRealCode
mov [esp + (6 * 4)], eax
popfd
popad
jmp [lpAntiFix1Ret_WowMF]
}
}
// 反代码自校验2
static __declspec(naked)void AntiFix2HookWowMF()
{
__asm
{
pushad
pushfd
push 1
push edx
sub eax, 010h
push eax
call AntiFixRealCode
mov [esp + (6 * 4)], eax
popfd
popad
jmp [lpAntiFix2Ret_WowMF]
}
}
// 反代码自校验3
static __declspec(naked)void AntiFix3HookWowMF()
{
__asm
{
pushad
pushfd
push 2
push edx
sub eax, 010h
push eax
call AntiFixRealCode
mov [esp + (6 * 4)], eax
popfd
popad
jmp [lpAntiFix3Ret_WowMF]
}
}
// 反代码自校验4
static __declspec(naked)void AntiFix4HookWowMF()
{
__asm
{
pushad
pushfd
push 3
push edx
sub eax, 010h
push eax
call AntiFixRealCode
mov [esp + (6 * 4)], eax
popfd
popad
jmp [lpAntiFix4Ret_WowMF]
}
}
//================================================================================================
// 保存原始代码地址和基址
static void SaveRealCode()
{
// 保存验证用户名密码断点
lpUserPassRealCode = UserPass_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszUserPassRealCode[0], (PVOID)lpUserPassRealCode, sizeof(DWORD) * 4);
// 保存角色属性断点
lpUserInfoRealCode = UserInfo_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszUserInfoRealCode[0], (PVOID)lpUserInfoRealCode, sizeof(DWORD) * 4);
// 保存自校验1断点
lpAntiFix1RealCode = ANTI_FIX1_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszAntiFix1RealCode[0], (PVOID)lpAntiFix1RealCode, sizeof(DWORD) * 4);
// 保存自校验2断点
lpAntiFix2RealCode = ANTI_FIX2_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszAntiFix2RealCode[0], (PVOID)lpAntiFix2RealCode, sizeof(DWORD) * 4);
// 保存自校验3断点
lpAntiFix3RealCode = ANTI_FIX3_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszAntiFix3RealCode[0], (PVOID)lpAntiFix3RealCode, sizeof(DWORD) * 4);
// 保存自校验4断点
lpAntiFix4RealCode = ANTI_FIX4_WowMF & 0x0FFFFFFF0;
memcpy((PVOID)&dwszAntiFix4RealCode[0], (PVOID)lpAntiFix4RealCode, sizeof(DWORD) * 4);
return;
}
[/code]
页:
[1]