第一步就是用CE查内存啦,配合魔兽窗口化工具大概需要二十分钟

1.20E     :0x0045CB8C

1.24E     :Game.dll+0x0AE8450

1.21       :War3.exe+5CB8C

1.26       :Game.dll+AD15F0

其他版本:Game.dll+ABDFE0

//由进程名获取进程ID,【出自百度空间,具体出处无法考证】

DWORD   GetProcessIdFromName(LPCTSTR  name)   

{     

PROCESSENTRY32   pe;   

DWORD   id   =   0;   

HANDLE   hSnapshot   =  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);   

pe.dwSize   =   sizeof(PROCESSENTRY32);   

if(   !Process32First(hSnapshot,&pe)   )   

return   0;   

do   

{   

pe.dwSize   =   sizeof(PROCESSENTRY32);   

if(   Process32Next(hSnapshot,&pe)==FALSE   )   

break;   

if(strcmp(pe.szExeFile,name)   ==   0)   

{   

id   =   pe.th32ProcessID;   

break;   

}   

}   while(1);   

CloseHandle(hSnapshot);   

return   id;   

}  

//枚举进程模块,查找Game.dll基址,【出自MSDN】

DWORD ListProcessModules( DWORD dwPID ) 

HANDLE hModuleSnap = INVALID_HANDLE_VALUE; 

MODULEENTRY32 me32; 

//  Take a snapshot of all modules in the specified process. 

hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwPID ); 

if( hModuleSnap == INVALID_HANDLE_VALUE ) 

//printError( "CreateToolhelp32Snapshot (of modules)" ); 

return( FALSE ); 

//  Set the size of the structure before using it. 

me32.dwSize = sizeof( MODULEENTRY32 ); 

//  Retrieve information about the first module, 

//  and exit if unsuccessful 

if( !Module32First( hModuleSnap, &me32 ) ) 

//printError( "Module32First" );  // Show cause of failure 

CloseHandle( hModuleSnap );     // Must clean up the snapshot object! 

return( FALSE ); 

//  Now walk the module list of the process, 

//  and display information about each module 

CString name;

do 

name=me32.szModule;

if (name=="Game.dll")

{

CloseHandle( hModuleSnap ); 

return (DWORD) me32.modBaseAddr;

}

} while( Module32Next( hModuleSnap, &me32 ) ); 

//  Do not forget to clean up the snapshot object. 

CloseHandle( hModuleSnap ); 

return( 0 ); 

//读取对应内存

int isInput()

{

int IsInput;

DWORD dwProcID;

//提高权限

HANDLE hToken;

HWND _hWnd=::FindWindow(NULL,"Warcraft III");

::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);

LUID uID;

::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&uID);

TOKEN_PRIVILEGES tp;

tp.PrivilegeCount=1;

tp.Privileges[0].Luid=uID;

tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;

::AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);

::CloseHandle(hToken); 

//打开进程

::GetWindowThreadProcessId(_hWnd, &dwProcID);

HANDLE hProc = ::OpenProcess(PROCESS_VM_READ|PROCESS_VM_WRITE, FALSE, dwProcID);

HWND hd=FindWindow(NULL,"WarIIIKey 1.3");

//1.20E

if (IsDlgButtonChecked(hd,IDC_120E))

{

int b=::ReadProcessMemory(hProc, (LPVOID)0x0045CB8C, (LPVOID)&IsInput,4, NULL);

::CloseHandle(hProc);hProc=NULL;

return IsInput;

}

//1.24E

if (IsDlgButtonChecked(hd,IDC_124E))

{

int b=::ReadProcessMemory(hProc, (LPVOID)(hModule+0x0AE8450), (LPVOID)&IsInput,4, NULL);

::CloseHandle(hProc);hProc=NULL;

return IsInput;

}

//1.26

if (IsDlgButtonChecked(hd,IDC_126))

{

//DWORD hModule=ListProcessModules(GetProcessIdFromName("War3.exe"));

int b=::ReadProcessMemory(hProc, (LPVOID)(hModule+0xAD15F0), (LPVOID)&IsInput,4, NULL);

::CloseHandle(hProc);hProc=NULL;

return IsInput;

}else{

//DWORD hModule=ListProcessModules(GetProcessIdFromName("War3.exe"));

int b=::ReadProcessMemory(hProc, (LPVOID)(hModule+0xABDFE0), (LPVOID)&IsInput,4, NULL);

::CloseHandle(hProc);hProc=NULL;

return IsInput;

}

::CloseHandle(hProc);hProc=NULL;

return IsInput;

}