Hi,
hab hier folgendes Problem, will MessageBoxW hooken, allerdings wird scheinbar DllMain nicht mal ausgeführt.. da denke ich jetzt versteh ich das Hooken einmal, dann scheitere ich schon am erstellen einer DLL xD
Nach dem Injecten passiert einfach nichts o.0
Habs bei einem selbst erstellten Programm getestet, das in einem Endlosloop MessageBoxW aufruft.
Verwende VS2010.
Hab Win32 Project -> DLL ausgewählt (mit precompiled header).
Hab jetzt echt keine Ahnung an was es scheitert.
Bitte helft mir ^^
Danke im Voraus.
Hier wäre der Source:
hab hier folgendes Problem, will MessageBoxW hooken, allerdings wird scheinbar DllMain nicht mal ausgeführt.. da denke ich jetzt versteh ich das Hooken einmal, dann scheitere ich schon am erstellen einer DLL xD
Nach dem Injecten passiert einfach nichts o.0
Habs bei einem selbst erstellten Programm getestet, das in einem Endlosloop MessageBoxW aufruft.
Verwende VS2010.
Hab Win32 Project -> DLL ausgewählt (mit precompiled header).
Hab jetzt echt keine Ahnung an was es scheitert.
Bitte helft mir ^^
Danke im Voraus.
Hier wäre der Source:
Code:
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#define SIZE 6
typedef int (WINAPI *pMessageBoxW) (HWND, LPCWSTR, LPCWSTR, UINT);
int WINAPI MyMessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT);
void BeginRedirect(LPVOID);
pMessageBoxW pOrigMBAdress = NULL;
BYTE oldBytes[SIZE] = {0};
BYTE JMP[SIZE] = {0};
DWORD oldProtect, myProtect = PAGE_EXECUTE_READWRITE;
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
pOrigMBAdress = (pMessageBoxW) GetProcAddress(GetModuleHandle(L"user32.dll"), "MessageBoxW");
if(pOrigMBAdress != NULL)
{
BeginRedirect(MyMessageBoxW);
}else
{
OutputDebugString(L"Failed to get Procadress");
}
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
memcpy(pOrigMBAdress, oldBytes, SIZE);
break;
}
return TRUE;
}
void BeginRedirect(LPVOID newFunction)
{
OutputDebugString(L"Beginning Redirect");
BYTE tempJMP[SIZE] = {0xe9, 0x90, 0x90, 0x90, 0x90, 0xc3};
memcpy(JMP, tempJMP, SIZE);
DWORD JMPSize((DWORD) newFunction - (DWORD)pOrigMBAdress - 5);
VirtualProtect((LPVOID)pOrigMBAdress, SIZE, myProtect, &oldProtect);
memcpy(oldBytes, pOrigMBAdress, SIZE);
memcpy(&JMP[1], &JMPSize, 4);
memcpy(pOrigMBAdress, JMP, SIZE);
VirtualProtect((LPVOID)pOrigMBAdress, SIZE, oldProtect, NULL);
}
int WINAPI MyMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uiType)
{
OutputDebugString(L"Hook func called");
//Unhook
VirtualProtect((LPVOID)pOrigMBAdress, SIZE, myProtect, NULL);
memcpy(pOrigMBAdress, oldBytes, SIZE);
//TODO: Add code here
int retValue = MessageBoxW(hWnd, L"Hooked Messagebox", lpCaption, uiType);
memcpy(pOrigMBAdress, JMP, SIZE);
VirtualProtect((LPVOID)pOrigMBAdress, SIZE, oldProtect, NULL);
return retValue;
}