From 48bed3d6f142084f6ce59c44bfac0159cd830739 Mon Sep 17 00:00:00 2001 From: Toni Spets Date: Sun, 12 Dec 2010 15:17:25 +0200 Subject: [PATCH] More StarCraft and generic support, fix mhack permissions --- main.c | 21 +++++++++++++++++---- mouse.c | 7 ++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/main.c b/main.c index 9e4b5b6..b828393 100644 --- a/main.c +++ b/main.c @@ -327,6 +327,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_MBUTTONDBLCLK: case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: + case WM_NCLBUTTONDOWN: + case WM_NCRBUTTONDOWN: + case WM_NCLBUTTONUP: + case WM_NCRBUTTONUP: + case WM_NCMBUTTONDOWN: + case WM_NCMBUTTONUP: + case WM_NCMBUTTONDBLCLK: + case WM_NCLBUTTONDBLCLK: + case WM_NCRBUTTONDBLCLK: if(ddraw->mhack) { if(!ddraw->locked) @@ -340,10 +349,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case 2024: /* this somehow allows RA edwin to work, investigate */ return ddraw->WndProc(hWnd, uMsg, wParam, lParam); - /* for StartCraft and general support */ + /* for StarCraft and general support */ case WM_MOUSEMOVE: - fake_GetCursorPos(&pt); - return ddraw->WndProc(hWnd, uMsg, wParam, MAKELPARAM(pt.x, pt.y)); + case WM_NCMOUSEMOVE: + if(ddraw->mhack) + { + fake_GetCursorPos(&pt); + return ddraw->WndProc(hWnd, uMsg, wParam, MAKELPARAM(pt.x, pt.y)); + } + return ddraw->WndProc(hWnd, uMsg, wParam, lParam); } return DefWindowProc(hWnd, uMsg, wParam, lParam); @@ -386,7 +400,6 @@ HRESULT __stdcall ddraw_SetCooperativeLevel(IDirectDrawImpl *This, HWND hWnd, DW } GetWindowText(This->hWnd, (LPTSTR)&This->title, sizeof(This->title)); - printf("wintitle: %s\n", This->title); return DD_OK; } diff --git a/mouse.c b/mouse.c index 1a83df0..87007b9 100644 --- a/mouse.c +++ b/mouse.c @@ -126,8 +126,6 @@ void hack_iat(struct hack *hck) int i; char buf[32]; struct hook *hk; - DWORD tmp; - HANDLE hProcess; DWORD dwWritten; IMAGE_DOS_HEADER dos_hdr; IMAGE_NT_HEADERS nt_hdr; @@ -135,10 +133,8 @@ void hack_iat(struct hack *hck) IMAGE_THUNK_DATA thunk; PDWORD ptmp; - GetWindowThreadProcessId(ddraw->hWnd, &tmp); - HMODULE base = GetModuleHandle(NULL); - hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, tmp); + HANDLE hProcess = GetCurrentProcess(); ReadProcessMemory(hProcess, (void *)base, &dos_hdr, sizeof(IMAGE_DOS_HEADER), &dwWritten); ReadProcessMemory(hProcess, (void *)base+dos_hdr.e_lfanew, &nt_hdr, sizeof(IMAGE_NT_HEADERS), &dwWritten); @@ -167,6 +163,7 @@ void hack_iat(struct hack *hck) thunk.u1.Function = (DWORD)hk->func; thunk.u1.Ordinal = (DWORD)hk->func; thunk.u1.AddressOfData = (DWORD)hk->func; + VirtualProtectEx(hProcess, (void *)base+dir->FirstThunk+(sizeof(IMAGE_THUNK_DATA) * i), sizeof(IMAGE_THUNK_DATA), PAGE_EXECUTE_READWRITE, &dwWritten); WriteProcessMemory(hProcess, (void *)base+dir->FirstThunk+(sizeof(IMAGE_THUNK_DATA) * i), &thunk, sizeof(IMAGE_THUNK_DATA), &dwWritten); mouse_active = TRUE; }