发新话题
打印

[原创]ZEROMAP 魔兽争霸 和谐作弊器 120E

[原创]ZEROMAP 魔兽争霸 和谐作弊器 120E

信息来源:邪恶八进制信息安全团队(www.eviloctal.com
软件作者:暗夜盛装

啦啦~~~邪八的朋友好久不见~~

一键F10功能:
大地图迷雾清除
小地图迷雾清除
显示自己血条
显示敌人血条
显示敌方单位
查看所有单位属性
分辨幻像
显示隐形

功能基本是够用和常用...也就没和MAPHACK一样搞那么多选项.

以前我是用VB写软件的...但外挂几乎没接触过...写这东西整整化了我一个星期去了解游戏内存的运作方式...还粗略的了解了汇编,CE,W32asm.魔兽的封包验证机制...就两字强悍!!!  汗啊...写外挂原来不难..难的是找指针基址..

免费发布咯~~喜欢下去用~~

未来几天我会发布一些魔兽开发历程...让想做魔兽外挂的朋友少走弯路.

还有...我发现用修改游戏的方式修改软件...破解效果非常不错呢...以后不止用OD..CE也能用于破解哈哈~

附件

ZeroMap.rar (267.63 KB)

2008-3-13 13:40, 下载次数: 938

www.chinanethack.com - 零号

TOP

引用:
以前我是用VB写软件的...但外挂几乎没接触过...写这东西整整化了我一个星期去了解游戏内存的运作方式...还粗略的了解了汇编,CE,W32asm.魔兽的封包验证机制...就两字强悍!!!  汗啊...写外挂原来不难..难的是找指针基址..
楼主很厉害啊.
引用:
未来几天我会发布一些魔兽开发历程...让想做魔兽外挂的朋友少走弯路
这个我比较关心对wow保护的破解.
阿尔卑斯与八宝糖还有冷苹果

TOP

一按f10就出错!!!  没用哦

我是用浩方

TOP

楼主是单机测试的吧

现在几乎所有对战平台都有内存检测的
你的工具过不了那个根本就实用价值

不过自己能做出来这个 还是很佩服楼主的

TOP

小弟写了个去除VS反MH的补丁
   VS反MH就是检测魔兽内存中固定位置是否被修改,如果被修改就是用了MH,然后就结束掉魔兽的进程
   所以,我的补丁HOOK了VS的TerminateProcess,让他不能结束魔兽的进程,就OK了。不过VS的log里面还是会显示你开了MH,但是别人是不知道的
 我想最好的办法是ssdthook NtReadVirtualMemory,让他不能发现魔兽内存被改了。。
SO AGAIN!

TOP

那浩方呢?
现在浩方反作弊能力比vs要强
HOOK TerminateProcess 是不行的

你可以看看ayssss做的MH
他那个最终版就过所有平台的

TOP

ays那个mh好像是file patch的。  跟传统意义上的mh不一样。
EST的头像都引人遐想

TOP

我晕  自从我运行了你的程序过后 机子经常跳出什么错误 魔兽玩到一半就自动退出了 晕 你是不是用了指针搞到了系统地址了  晕  被你害残了  要重装系统了

TOP

bypass 内存校验不难。。。Hook方法比较直接。。。说说间接的。。。
以前写的代码。。。现在贴上
调试原理很简单。CE挂起跟踪读取代码段的。代码地址
然后他会判断HASH是否是。错误的。你得到正确的HASH然后。修改跳转地址
或者直接返回正确的HASH都可以
现在是变成四次循环检测。所以你要挂钩。四个地址。。。code patch。。
直接Hook读取内存有点太暴力了。。现在都用调试寄存器,很少用code patch直接补丁了。。。过时的技术了
复制内容到剪贴板
代码:
#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
上次硬盘浩劫所有数据全部丢失。对不起了大家没有新的代码贴了。。55~~
唉~我最心痛的就是我的H动画全没了~

[ 本帖最后由 Anskya 于 2008-3-24 13:44 编辑 ]

TOP

复制内容到剪贴板
代码:
//        反自校验保护
#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;       
}

TOP

发新话题