von Ihrem Freund brazili
Starcraft 2 Maphack
Code:
.486 .model flat, stdcall option casemap: none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\gdi32.inc include \masm32\include\debug.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\debug.lib include Tools.inc include Game.inc thread_Hotkeys proto :DWORD, :DWORD, :DWORD thread_Callback proto :DWORD, :DWORD, :DWORD thread_Hook proto .data szWindow db "StarCraft II", 0 .data? thread_HookID dd ? thread_HotkeysID dd ? .code DllEntryPoint proc hInstDLL:DWORD, lpReason:DWORD, lpReserved:DWORD ; This code is executed when our DLL is loaded. mov eax, lpReason .if (eax == DLL_PROCESS_ATTACH) ; Check that the game version is correct. mov eax, hook_Maphack_01 mov al, byte ptr [eax] mov bl, byte ptr [h01_Reset] .if (al != bl) ret .endif ; Set up the hooking thread. invoke CreateThread, NULL, 0, addr thread_Hook, 0, 0, addr thread_HookID .endif ret DllEntryPoint endp thread_Hotkeys proc nCode:DWORD, wParam:DWORD, lParam:DWORD ; Hotkey callback thread. push eax mov eax, lParam or eax, 00FFFFFFh .if (nCode == HC_ACTION && eax != 0C0FFFFFFh) .if (wParam == VK_F5) .if (mState == 00h) ; Change to full mode. invoke Tools_PatchMemory, hook_Maphack_01, addr h01_Reset, 6 invoke Tools_PatchMemory, hook_Maphack_02, addr h02_Full, 2 mov mState, 01h .elseif (mState == 01h) ; Change to shared vision mode. invoke Tools_PatchMemory, hook_Maphack_01, addr h01_Shared, 6 invoke Tools_PatchMemory, hook_Maphack_02, addr h02_Reset, 2 mov mState, 02h .elseif (mState == 02h) ; Change to enemy vision mode. invoke Tools_PatchMemory, hook_Maphack_01, addr h01_Enemy, 6 invoke Tools_PatchMemory, hook_Maphack_02, addr h02_Reset, 2 mov mState, 03h .elseif (mState == 03h) ; Turn off the maphack. invoke Tools_PatchMemory, hook_Maphack_01, addr h01_Reset, 6 invoke Tools_PatchMemory, hook_Maphack_02, addr h02_Reset, 2 mov mState, 00h .endif .endif .endif pop eax invoke CallNextHookEx, thread_HotkeysID, nCode, wParam, lParam ret thread_Hotkeys endp thread_Hook proc ; Hook setting thread. ; Show the ad. invoke MessageBox, NULL, CTEXT("CLOSE THIS WINDOW FIRST--Press F5 to activate after closing this window,/"), CTEXT("CLOSE THIS WINDOW TO ACTIVATE"), MB_OK ; Get the device context. invoke Tools_GetDeviceContext, addr szWindow ; Get the process ID. invoke FindWindow, 0, addr szWindow .if (eax == 0) invoke FindWindow, addr szWindow, 0 ;korean/taiwan client fix .endif invoke GetWindowThreadProcessId, eax, 0 .if (eax != 0) ; Set the hotkey hook. invoke SetWindowsHookEx, WH_KEYBOARD, addr thread_Hotkeys, NULL, eax ; Save our thread handle and sleep. mov thread_HotkeysID, eax invoke Sleep, -1 .endif thread_Hook endp End DllEntryPoint
Code:
Game_TextOut proto :DWORD, :DWORD, :DWORD, :DWORD .data ; Maphack state. mState db 00h ; Maphack hooks. hook_Maphack_01 dd 00A5C6D9h hook_Maphack_02 dd 00A5C6DFh ; Maphack data. h01_Shared db 0B3h, 02h, 90h, 90h, 90h, 90h h01_Enemy db 0B3h, 03h, 90h, 90h, 90h, 90h h01_Reset db 8Ah, 1Dh, 0Ch, 2Dh, 5Ah, 01h h02_Full db 0EBh, 09h h02_Reset db 3Ah, 1Dh .code Game_TextOut proc lpX:DWORD, lpY:DWORD, lpText:DWORD, lpLen:DWORD ; Displays text at specific coordinates in-game. pushad mov ebx, hdcDevice invoke TextOut, ebx, lpX, lpY, lpText, lpLen popad ret Game_TextOut endp
Code:
Tools_PatchMemory proto :DWORD, :DWORD, :DWORD Tools_SetHook proto :DWORD, :DWORD Tools_MoveString proto :DWORD, :DWORD Tools_GetDeviceContext proto :DWORD .data? hdcDevice dd ? hWindow dd ? .code Tools_PatchMemory proc lpOffset:DWORD, lpData:DWORD, lpLen:DWORD ; Patches specific memory locations of variable length. LOCAL lpOld:DWORD ; Give write permissions to the memory location. invoke VirtualProtect, lpOffset, lpLen, PAGE_EXECUTE_READWRITE, addr lpOld .if (eax != 0) ; Write our data and return to the old permissions. invoke RtlMoveMemory, lpOffset, lpData, lpLen invoke VirtualProtect, lpOffset, lpLen, lpOld, addr lpOld .endif ret Tools_PatchMemory endp Tools_SetHook proc lpFrom:DWORD, lpTo:DWORD ; Sets up a jump to our internal code. LOCAL lpJump:DWORD push ecx push ebx mov ecx, lpFrom mov ebx, lpTo add ecx, 05h sub ebx, ecx lea ecx, lpJump mov byte ptr [ecx], 0E9h mov dword ptr [ecx+1], ebx invoke Tools_PatchMemory, lpFrom, addr lpJump, 5 pop ebx pop ecx ret Tools_SetHook endp Tools_MoveString proc lpDest:DWORD, lpSource:DWORD ; Moves and terminates a string in memory. push ecx push ebx push edx mov ebx, lpDest mov ecx, lpSource .while (byte ptr [ecx] != 00h) mov dl, byte ptr [ecx] mov byte ptr [ebx], dl inc ecx inc ebx .endw mov byte ptr [ebx], 00h pop edx pop ebx pop ecx ret Tools_MoveString endp Tools_GetDeviceContext proc szWindow:DWORD ; Returns and stores a device context. push eax mov eax, szWindow invoke FindWindow, 0, eax invoke GetDC, eax mov hdcDevice, eax pop eax ret Tools_GetDeviceContext endp
How to compile:
\masm32\bin\ml /c /coff Maphack.asm
\masm32\bin\Link /SUBSYSTEM:WINDOWS /DLL Maphack.obj
with MASM32