Warcraft III / рдбреЛрдЯрд╛

рд╢реБрдн рджреЛрдкрд╣рд░ рдзреЛрдЦрд╛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдиреЗ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реА рд╣реИред рдЗрд╕рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ: тАЬрдпрджрд┐ рдЖрдк рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдФрд░ рдЬреЛрдЦрд┐рдо рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред тАЭ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ / рдкреНрд░рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ "рдордЫрд▓реА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдХрд╛рд░реНрдп рдХрд╛ рдкреВрд░рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЙрди рдкрддреЛрдВ / рдСрдлрд╕реЗрдЯреНрд╕ рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдореЛрд░реА рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдмрджрд▓рдирд╛ рд╣реИред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
ArtMoney / TSearch - рдореВрд▓реНрдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
ollydbg - рдкрддреЗ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд░ред
рд╡реАрдбрд┐рдпреЛ рджреЗрдЦреЗрдВ:



рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ:
1) рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдо рдЙрд╕ рдЧреЗрдо рдХреА рдореЗрдореЛрд░реА рдореЗрдВ рдкрддрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЭрдВрдбрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ рдЬреЛ рдпреВрдирд┐рдЯ рдХреЛ рджрд┐рдЦрд╛рдиреЗ / рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
2) рдЕрдЧрд▓рд╛, рдбреАрдмрдЧрд░ рдореЗрдВ, рд╣рдо рдЗрд╕ рдкрддреЗ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдХреЙрд▓ рдкрд░ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рд▓рдЧрд╛рддреЗ рд╣реИрдВред рд╣рдо рд╡рд╣рд╛рдВ рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рд╣реБрдЖ рдерд╛ред рдПрдХ рдорд╛рдЗрдХреНрд░реЛ рдХреНрд░реИрд╢ рдмрдирд╛рдПрдБред рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ (рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) - рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдореЛрд░реА рдореЗрдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдзреЛрдЦрд╛ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ - 6F3A1563 66: B9 0F00ред
66: B9 0F00 рдпрд╣ рд╣рдорд╛рд░рд╛ рдореИрдЬрд┐рдХ рдмрд╛рдЗрдЯ рд╣реИ, рдЗрдиреНрд╣реЗрдВ 0x66 0xB9 0x0F 0x00 рд▓рд┐рдЦреЗрдВ ред рдФрд░ рдПрдХ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде 6F3A1563 рдореЗрдВ рд▓рд┐рдЦреЗрдВ ред

рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛ рд╣реИрдВрдбрд▓ рдФрд░ рд╕реЗрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдЦреЛрдЬреЗрдВред

LPSTR gameWindowTitle = "Warcraft III"; HWND hWnd=::FindWindow(NULL, gameWindowTitle); if (hWnd != NULL) { HANDLE currentProccess = GetCurrentProcess(); HANDLE token; BOOL retValue = OpenProcessToken(currentProccess, 40, &token); LUID luid; LPSTR debugPrivilege = "SeDebugPrivilege"; retValue = LookupPrivilegeValue(NULL, debugPrivilege, &luid); TOKEN_PRIVILEGES newState, preState; DWORD returnLength; newState.PrivilegeCount = 1; newState.Privileges[0].Luid = luid; newState.Privileges[0].Attributes = 2; retValue = AdjustTokenPrivileges(token, FALSE, &newState, 28, &preState, &returnLength); DWORD PID; DWORD TID = ::GetWindowThreadProcessId(hWnd, &PID); openedProccess = OpenProcess( PROCESS_ALL_ACCESS | PROCESS_TERMINATE | PROCESS_VM_OPERATION | PROCESS_VM_READ| PROCESS_VM_WRITE, FALSE, PID); ... } 


рдЕрдЧрд▓рд╛, рдЖрдк рдореЗрдореЛрд░реА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 DWORD data = 0x66; WriteProcessMemory(openedProccess, (LPVOID)(6F3A1563), &data, 1, 0); data = 0xB9; WriteProcessMemory(openedProccess, (LPVOID)(6F3A1564), &data, 1, 0); data = 0x0F; WriteProcessMemory(openedProccess, (LPVOID)(6F3A1565), &data, 1, 0); data = 0x00; WriteProcessMemory(openedProccess, (LPVOID)(6F3A1566), &data, 1, 0); 


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк Game.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкрддреЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдмрд┐рдирд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдпрджрд┐ рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЛ рдЧреЗрдо рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдкрддрд╛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛

 DWORD GetModuleBase(HANDLE hProc, LPSTR sModuleName) { HMODULE hMods[8]; DWORD cbNeeded; unsigned int i; if(EnumProcessModules(hProc, hMods, sizeof(hMods), &cbNeeded)) { for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ ) { TCHAR szModName[MAX_PATH]; if ( GetModuleBaseName(hProc, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) { if(strstr(szModName, sModuleName)) { return (DWORD)hMods[i]; } _tprintf( TEXT("\t%s (0x%08X)\n"), szModName, hMods[i] ); } } } return 0x00; } bool WriteData(DWORD address, DWORD data) { return WriteProcessMemory(openedProccess, (LPVOID)(gameOffset + address), &data, 1, 0); } ... LPSTR gameLibraryName = "Game.dll"; gameOffset = GetModuleBase(openedProccess, gameLibraryName); ... 


рд╡рд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред

Source: https://habr.com/ru/post/In144453/


All Articles