在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Android手机应用开发 → 魔兽全图源码(黑衣人)

魔兽全图源码(黑衣人)

Android手机应用开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.01M
  • 下载次数:14
  • 浏览次数:331
  • 发布时间:2017-09-29
  • 实例类别:Android手机应用开发
  • 发 布 人:dcx013
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 源码 魔兽

实例介绍

【实例简介】魔兽全图源码
【实例截图】

【核心代码】魔兽全图的源码,小地图可见,自己测试能用,不能过检测,但是可以自己参考开发,用外挂的方式可以过检测.


#include "War3Class.h"
VOID War3::EnableDebugPriv()  
{  

    HANDLE hToken;  

    LUID sedebugnameValue;  

    TOKEN_PRIVILEGES tkp;  

    OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);  

    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue);  

    tkp.PrivilegeCount = 1;  

    tkp.Privileges[0].Luid = sedebugnameValue;  

    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  

    AdjustTokenPrivileges(hToken, false, &tkp, sizeof tkp, NULL, NULL);  

    CloseHandle(hToken);  

} 

War3::War3()
{
	VerSion=0;
	GameAddr=0,GameSize=0;
	StormAddr=0,StormSize=0;
	Hwnd_War3=0;
	Tid_War3=0;
	Handle_War3=0;
	Pid_War3=0;
	GameStateAddr=0;
    HeroNumAddr=0;
    PingMapAddr=0;
	LocalPlayerAddr=0;
}
BOOL War3::InitVariables()
{
    EnableDebugPriv();
    Hwnd_War3 = FindWindowA("Warcraft III",NULL);  
    if (Hwnd_War3==NULL)
    {   
		::MessageBox(NULL,L"获取魔兽窗口句柄失败",L"ERROR",0);
        return FALSE;     
    }  
    Tid_War3=GetWindowThreadProcessId(Hwnd_War3, &Pid_War3);  
    Handle_War3=OpenProcess(PROCESS_ALL_ACCESS, false,Pid_War3); 
	if(Handle_War3==NULL)
	{    
		::MessageBox(NULL,L"打开魔兽进程失败",L"ERROR",0);
        return FALSE;     
	}
	if(!ListProcessModules())
	{
		::MessageBox(NULL,L"枚举魔兽模块失败",L"ERROR",0);
        return FALSE;
	};
	if(!GetVersionAndInit(GameAddr))
	{
        ::MessageBox(NULL,L"获取魔兽版本错误",L"ERROR",0);
	};
	return TRUE;
}

BOOL War3::ListProcessModules()
{
  HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
  MODULEENTRY32 me32;
  hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, Pid_War3 );
  if( hModuleSnap == INVALID_HANDLE_VALUE )
  {
    return FALSE;
  }
  me32.dwSize = sizeof( MODULEENTRY32 );
  if( !Module32First( hModuleSnap, &me32 ) )
  {
    CloseHandle( hModuleSnap );  
    return FALSE;
  }
  do
  {
	 if(lstrcmpi(me32.szModule,L"game.dll")==0)
	{
		GameSize=me32.modBaseSize;
        GameAddr=(DWORD)me32.modBaseAddr;
	};
	 if(lstrcmpi(me32.szModule,L"storm.dll")==0)
	{

		StormSize=me32.modBaseSize;
        StormAddr=(DWORD)me32.modBaseAddr;
	}
  } while( Module32Next( hModuleSnap, &me32 ) );
  CloseHandle( hModuleSnap );
  if((GameAddr!=NULL)&&(StormAddr!=NULL))
	  return TRUE;
  return FALSE;
}


BOOL War3::GetVersionAndInit(DWORD GameAddr)
{

					DWORD veraddr;
					veraddr = GameAddr   0x636F5D;
					unsigned char p124b[] ={0x80, 0xBE, 0xA8, 0x01}; 
					unsigned char p124e[] = {0x8B, 0x50, 0x3C, 0x3B};
					unsigned char p125b[] = {0x10, 0x75, 0x72, 0xC7};
					unsigned char  p126[] = { 0xb6, 0x89,0x7c, 0x73};

					if (0 == memcmp(p124b, (unsigned char*)veraddr, sizeof(p124b)))
					{
							Addr2Handle1=GameAddr 0x3A8AE0;
							Addr2Handle2=GameAddr 0x4317F0;
							PingMapAddr=GameAddr 0x3b50d0;
							UnitAddIndicatorAddr=GameAddr 0x3c7650;
							GetUnitNameAddr=GameAddr 0x3c63d0;
							CreateTextTagAddr=GameAddr 0x3bd000;
							DisplayGameTextAddr=GameAddr 0x3CC380;
							GetPlayerHandleAddr=GameAddr 0x3BC5B0;
							MakeStringAddr=GameAddr 0x012040;
							SetTextTagPosUnitAddr=GameAddr 0x3cc310;
							SetTextTagTextAddr=GameAddr 0x3bd050;
							Char2IndexAddr=GameAddr 0x3a0030;
							GetHandleTableAddr=GameAddr 0x44bd90;
							IndexTojStringAddr=GameAddr 0x45a100;
     						PingMiniMapAddr=GameAddr 0x3b50d0;
						VerSion=V124b;
						GameStateAddr=GameAddr 0xACC570;
						HeroNumAddr=GameAddr 0xACA954;
						LocalPlayerAddr=GameAddr 0XACD44C;
					
					}
					else if (0 == memcmp(p124e, (unsigned char*)veraddr, sizeof(p124e)))
					{					
						VerSion=V124e;
						GameStateAddr=GameAddr 0xACC570;
                        HeroNumAddr=GameAddr 0xACA954;
                        LocalPlayerAddr=GameAddr 0XACD44C;
							Addr2Handle1=GameAddr 0x3a8ba0;
							Addr2Handle2=GameAddr 0x4317C0;				
							PingMapAddr=GameAddr 0x3b5190;	
							UnitAddIndicatorAddr=GameAddr 0x3c7710;
							GetUnitNameAddr=GameAddr 0x3c6490;;
							CreateTextTagAddr=GameAddr 0x3bd0c0;;
							DisplayGameTextAddr=GameAddr 0x3CC440 ;
							GetPlayerHandleAddr=GameAddr 0x3BC670;
							MakeStringAddr=GameAddr 0x012040;
							SetTextTagPosUnitAddr=GameAddr 0x3cc3D0;
							SetTextTagTextAddr=GameAddr 0x3bd110;
							Char2IndexAddr=GameAddr   0x3A0130;
							GetHandleTableAddr= GameAddr   0x44BDF0;
							IndexTojStringAddr= GameAddr   0x45A170;
							PingMiniMapAddr=GameAddr 0x3b5190;
							
					}
					else
					{
						VerSion=0;
					}					
					if(VerSion==0)
					{
						return FALSE;
					}
              


					return TRUE;
}

/////////////////////////////////////////////////////////////////
VOID War3::DisplayGameTextFunc(
	wchar_t pszContent[],
	float offxpercent,	
	float offypercent	
	)	
{
	char *pszHello;
	int iTextLen = WideCharToMultiByte(CP_UTF8, 0, pszContent, -1, NULL, 0, NULL, NULL);
	pszHello = new char[iTextLen 1];
	memset(pszHello, 0x00, sizeof(char)*(iTextLen 1));
	WideCharToMultiByte(CP_UTF8, 0, pszContent, -1, pszHello, iTextLen, NULL, NULL);
	static float rx;
	static float ry;
	rx = offxpercent;
	ry = offypercent;
	int wcstr = MakeString(pszHello);
	DWORD hplayer = GetPlayerHandleFunc(GetLocalPlayerFunc());
	DWORD tempcall=DisplayGameTextAddr;
	__asm
	{
		pushad
		PUSH wcstr;
		LEA EBX, ry;
		PUSH EBX;
		LEA EBX, rx;
		PUSH EBX;
		PUSH hplayer;
		CALL tempcall;
		ADD ESP, 16;
		popad
	}
}
//////////////////////////////////////////////////////////////////////////
DWORD War3::GetLocalPlayerFunc()
{
	WORD rt;
	DWORD temp=LocalPlayerAddr;
	__asm
	{
		MOV EBX, temp;
		MOV EAX, DWORD PTR DS:[EBX];
		TEST EAX, EAX;
		JE err;
		MOV EAX, DWORD PTR DS:[EAX 0x28];
		MOV rt, AX;
	}
	return (DWORD)rt;

err:
	return 0xF;
}
////////////////////////////////////////////////////
UINT War3::GetPlayerHandleFunc(int indexPlayer)
{
	UINT hPlayer;

	if (indexPlayer < 0)
		indexPlayer = GetLocalPlayerFunc();

	if (indexPlayer > 12)
		indexPlayer = 12;
	DWORD tempcall=GetPlayerHandleAddr;
	__asm
	{
		pushad;
		push indexPlayer;
		call tempcall;
		mov hPlayer,eax;
		pop eax;
		popad;
	}
	return hPlayer;
}
///////////////////////////////////////////////////////////
UINT __cdecl War3::MakeString(char* psz)
{
	static DWORD _datas[3];
	static DWORD* pjstr = &_datas[0];

	UINT jstr;
DWORD tempcall;
     tempcall=MakeStringAddr;
	__asm
	{

		mov ecx, pjstr;
		push psz;
		call tempcall;
		mov jstr, eax;
		pop eax;
	}

	return jstr;
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
DWORD War3::GetHeroAddrPFunc()
{
	  DWORD HeroAddrPoint=0;
	  memcpy(&HeroAddrPoint,(LPCVOID)(StormAddr HeroAddrPointOffsetStorm),4);


	  if(*(DWORD*)(HeroAddrPoint 0x88)!=0x18)
                return 0;

	  HeroAddrPoint=HeroAddrPoint 0x98;
	  
		

	  //特别注意,这里返回值可能为0;

	  return HeroAddrPoint;
}

VOID War3::UnitAddIndicator(DWORD hUnit,int r,int g,int b,int alpha)
{
	DWORD tempcall=(DWORD)UnitAddIndicatorAddr;
	__asm
	{
		pushad
		push alpha
		push b
		push g
		push r
		push hUnit
		call tempcall
		add esp,0x14
		popad
	}

};

DWORD War3::AddrToHandle(DWORD Addr)
{
   DWORD m=LocalPlayerAddr,call1=Addr2Handle1,call2=Addr2Handle2,hand;
	_asm
	{
		pushad
		mov esi,Addr
		mov ecx,m
		mov ecx,[ecx]
        call call1
		push 0
		push esi
		mov ecx,eax
		call call2
		mov hand,eax
		popad
	}
	return hand;
};

////

VOID War3::SetTextTagPosUnit(DWORD text, DWORD hunit,float height)

{

        static float rheight;

        rheight = height;

DWORD tempcall=SetTextTagPosUnitAddr;

        __asm

        {
			    mov eax,eax

                pushad

                lea ebx, rheight

                push ebx

                push hunit

                push text

                call tempcall

                add esp, 12

                popad;

        }

}

DWORD War3::CreateTextTagFunc()
{
	DWORD rt;
	DWORD tempcall=(DWORD)CreateTextTagAddr;
	__asm
	{
	  mov ebx,ebx
      pushad
	  call tempcall
      mov rt,eax
	  popad
	}
	return rt;
};

VOID War3::SetTextTagText(DWORD htt,DWORD jstr,float height)
{
	DWORD tempcall=SetTextTagTextAddr;
	float *tempush=&height;
	__asm
	{
		 mov ecx,ecx
         pushad
		 push tempush
		 push jstr
		 push htt
		 call tempcall
		 add esp,0xc
		 popad
	}
};

DWORD War3::GetUnitNameFunc(DWORD hunit)
{
      DWORD tempcall=GetUnitNameAddr,rt;
	  __asm
	  {
		  pushad
		  push hunit
		  call tempcall
		  mov rt,eax
		  add esp,4
		  popad
	  }
	  return rt;
}


        

LONG War3::Char2Index(LPSTR pStr)
{
        char * temp = pStr;
        DWORD tempcall=Char2IndexAddr,rt;
        DWORD inf;
        memcpy(&inf,(LPVOID)LocalPlayerAddr,4);
        _asm
		{
		mov edx,edx
        mov ecx,inf;
        push temp;
        call tempcall;
        mov rt,eax;
        }
        return rt;
}

HANDLE War3::GetHandleTable()
{
        HANDLE rt;
        DWORD tempcall=GetHandleTableAddr,inf=LocalPlayerAddr;
        memcpy(&inf,(LPVOID)inf,4);
        _asm
		{
			    mov esp,esp
                mov ecx, inf;
                mov ecx, [ecx 8]
                call tempcall;
                mov rt,eax;
        }
        return rt;
}

LONG War3::IndexTojString(DWORD Index)
{
        HANDLE ht = GetHandleTable();
        DWORD tempcall=IndexTojStringAddr;
        LONG rt = 0;
        if(ht == 0 || Index== 0) 
			return rt;
        _asm
		{
			    mov al,al
                push Index;
                mov ecx,ht;
                call tempcall;
                mov rt,eax;
        }
        return rt;
}

CHAR * War3::jStringToChar(LONG jStr)
{
  int val1;
  int result;

  val1 = *(DWORD *)(jStr   8);
  if ( val1 )
    result = *(DWORD *)(val1   28);
  else
    result = 0;
  return (char*)result;
}

HWND War3::GetHwndWar3()
{
	return Hwnd_War3;
};
DWORD War3::GetHeroNumAddr()
{
	return HeroNumAddr;
};
DWORD War3::GetGameStateAddr()
{
	return GameStateAddr;
};




VOID War3::PingMiniMap(float x,float y)
{

	float *px=&x;
	float *py=&y;
	float PingTime=0.5;
	float *ptime=&PingTime;
DWORD	tempcall=(DWORD)PingMiniMapAddr;
   _asm
   {
	   push ptime
		mov eax,eax
	   push py
	   push px
	   mov eax,eax
	   call tempcall
	   add esp,0xc
   }

}

DWORD War3::GetVerSion()
{
	return VerSion;
};

标签: 源码 魔兽

实例下载地址

魔兽全图源码(黑衣人)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警