|
You last visited: Today at 22:28
Advertisement
MessageBox Hook
Discussion on MessageBox Hook within the General Coding forum part of the Coders Den category.
08/13/2010, 16:06
|
#1
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
MessageBox Hook
Hallo Leute,
ich hab versucht die MessageBoxA Funktion in user32.dll zu hooken, klappt an und für sich schon ganz gut. Ich hab ein Programm gefunden, dass alle 10 Sek. eine MessageBox aufmacht. Nun ist es so wenn ich meine DLL in das Programm injecte, wird die erste MessageBox mit meinen Text geändert, die nachfolgenden aber nicht mehr. Eventuell könnte mir jemand bei meinem kleinen Problem helfen.
Code:
#include <Windows.h>
#include <stdio.h>
#include "Hook.h"
int WINAPI hook_MessageBox(HWND hWnd, char* lpText, char* lpCaption, UINT uType);
DWORD MessageBoxaddr=0;
BYTE backupMS[6];
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:{
DisableThreadLibraryCalls(hModule);
MessageBoxaddr = HookFunction("user32.dll", "MessageBoxA", hook_MessageBox, backupMS);
return true;
}break;
case DLL_THREAD_ATTACH:break;
case DLL_THREAD_DETACH:break;
case DLL_PROCESS_DETACH:{
if (MessageBoxaddr) WriteProcessMemory((HANDLE) -1, (void*)MessageBoxaddr, backupMS, 6, 0);
}break;
}
return TRUE;
}
int WINAPI hook_MessageBox(HWND hWnd, char* lpText, char* lpCaption, UINT uType){
WriteProcessMemory((HANDLE)-1, (void*)MessageBoxaddr, backupMS, 6, 0);
return MessageBoxA(hWnd, "Hook is working!", "Info", uType);
}
Lg SiZeXtreme
|
|
|
08/13/2010, 16:47
|
#2
|
elite*gold: 260
Join Date: Apr 2010
Posts: 229
Received Thanks: 142
|
ICh geh etz mal davon aus das bei
Code:
MessageBoxaddr = HookFunction("user32.dll", "MessageBoxA", hook_MessageBox, backupMS);
Der zweite Parameter für den MessagebBox Namen steht
dann die frage ist es immer der selbe name?
Wenn Nein dann muss du wohl noch eine kleine Funktion einbauen
|
|
|
08/13/2010, 16:55
|
#3
|
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
|
Quote:
Originally Posted by SiZeXtreme
Code:
int WINAPI hook_MessageBox(HWND hWnd, char* lpText, char* lpCaption, UINT uType){
[COLOR="Red"][B]WriteProcessMemory((HANDLE)-1, (void*)MessageBoxaddr, backupMS, 6, 0);[/B][/COLOR]
return MessageBoxA(hWnd, "Hook is working!", "Info", uType);
}
|
Liegt daran, dass du in der Zeile den Hook wieder entfernst.
|
|
|
08/13/2010, 18:18
|
#4
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Wenn ich aber die Zeile entferne, crasht das Programm wenn es die MessageBox aufruft. Ich war selber verwundert, dass es nicht einfach mit return MessageBoxA... funktioniert.
|
|
|
08/13/2010, 18:23
|
#5
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Quote:
Originally Posted by SiZeXtreme
Wenn ich aber die Zeile entferne, crasht das Programm wenn es die MessageBox aufruft. Ich war selber verwundert, dass es nicht einfach mit return MessageBoxA... funktioniert.
|
Du darfst auch nicht in deiner eigenen "hook_MessageBox" funktion MessageBoxA aufrufen den die hast du ja gehookt, dan landest du ja jedesmal wieder am anfahng der "hook_MessageBox" funktion solange bis der Stack überläuft und das pogramm abstürzt, stattdessen musst du die Trampolin funktion aufrufen
|
|
|
08/13/2010, 20:53
|
#6
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Das ist die HookFunction, die ich benutze. Wie komme ich jetzt auf die Trampolin-Funktion?
Code:
#include <windows.h>
#include <stdio.h>
DWORD HookFunction(const char *Dll, const char *FuncName, void *Function, unsigned char *backup){
DWORD addr = (DWORD)GetProcAddress(GetModuleHandle(Dll), FuncName);
BYTE jmp[6] = {0xE9,0x00, 0x00, 0x00, 0x00,0xC3};
ReadProcessMemory((HANDLE)-1, (void*)addr, backup, 6, 0);
DWORD calc = ((DWORD)Function - addr - 5);
memcpy(&jmp[1], &calc, 4);
WriteProcessMemory((HANDLE) -1, (void*)addr, jmp, 6, 0);
return addr;
}
|
|
|
08/13/2010, 21:37
|
#7
|
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
|
Quote:
Originally Posted by SiZeXtreme
Das ist die HookFunction, die ich benutze. Wie komme ich jetzt auf die Trampolin-Funktion?
Code:
#include <windows.h>
#include <stdio.h>
DWORD HookFunction(const char *Dll, const char *FuncName, void *Function, unsigned char *backup){
DWORD addr = (DWORD)GetProcAddress(GetModuleHandle(Dll), FuncName);
BYTE jmp[6] = {0xE9,0x00, 0x00, 0x00, 0x00,0xC3};
ReadProcessMemory((HANDLE)-1, (void*)addr, backup, 6, 0);
DWORD calc = ((DWORD)Function - addr - 5);
memcpy(&jmp[1], &calc, 4);
WriteProcessMemory((HANDLE) -1, (void*)addr, jmp, 6, 0);
return addr;
}
|
Hast du das selbst gemacht?
Erstmal vorweg wen du eine dll injectierst kannst du in der dll memcpy anstatt Read/WriteProcessMomory benutzen.
Du Scheinst garkeine trampoline funktion zu erstellen. Du sicherst zwar die Bytes die du für den Jump überschreibst, allerdings nicht in einer trampolin funktion sondern wohl nur um den hook zu endhooken.
|
|
|
08/13/2010, 21:56
|
#8
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Ich hab die Funktion aus einem Tutorial, da wird nur CreateWindowExA und ChangeDisplaySettingsA gehooked. Wollt halt nur mal probieren, ob ich auf Grund dieses Tutorials MessageBoxA hooken kann, was auch schon ein bisschen funktioniert.
|
|
|
08/13/2010, 23:06
|
#9
|
elite*gold: 0
Join Date: Aug 2010
Posts: 80
Received Thanks: 307
|
übrigens:
LoadLibrary ruft sowieso GetModuleHandle auf, von daher sollte man in solchen fällen eher LoadLibrary benutzen..
|
|
|
08/13/2010, 23:21
|
#10
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Ich werds mal ändern, ändert zwar nicht sehr viel, aber trozdem danke.
|
|
|
08/14/2010, 05:14
|
#11
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Übrigens kann das Programm auch MessageBoxW benutzen
|
|
|
08/14/2010, 13:41
|
#12
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Die MessageBox wird ja 1 mal geändert, also wird auch MessageBoxA verwendet. Das Problem liegt nur an der nicht vorhanden Trampolin-Funktion.
|
|
|
08/15/2010, 03:28
|
#13
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Ich empfehle dir, MS Detours 1.5 zu nutzen.
Geschmäcker mögen sich unterscheiden, aber MS Detours ist so programmiert, dass es nicht nur komfortabel, sondern auch sicher ist.
Es wäre mal einen Versuch wert.
|
|
|
08/15/2010, 21:48
|
#14
|
elite*gold: 0
Join Date: Aug 2010
Posts: 11
Received Thanks: 0
|
Ich werd es mal mit der MS Detours 1.5 versuchen, wäre aber immer noch dankbar, wenn jemand das Problem mit der Trampolin-Funktion fixen könnte.
|
|
|
08/15/2010, 21:58
|
#15
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Ich bin sicher, dass es damit gehen wird
|
|
|
 |
|
Similar Threads
|
MessageBox packet? o.o
02/23/2010 - CO2 Private Server - 1 Replies
I think I saw a server back sometime when after X logins a messagebox appeared that you`re banned for 1 hour. Is there a packet for this, or was this in an other game? XD
|
Messagebox zu Programmstart
02/21/2010 - AutoIt - 3 Replies
Hoi EPvP..
da ich ewig nix mit autoIT gemacht hab, wollte ich heute "schnell" ein paar Vorgänge automatisieren..wollte dann gern beim Start-UP nen kleines Pop-Up ham, dass sagt wie was gelegt ist..doch leider mag autoIT nicht so ganz mitspielen..hab leider druch nen fdisk meine alten Übungen verloren und kanns nimmer nachschauen :(..wäre top, wenn mir jemand helfen könnte :)
MsgBox (0,"EI",& @CRLF & & @CRLF &
"This is a just a alpha-version..there might be bugs !"& @CRLF &
"1 -...
|
[win32 api] Variable in MessageBox
10/15/2009 - General Coding - 13 Replies
geht:
#include <windows.h>
int WINAPI WinMain( HINSTANCE, HINSTANCE, PSTR, int )
{
MessageBox(NULL,L"Text", L"Titel",MB_OK);
return 0;
}
|
Hook
03/27/2008 - General Coding - 8 Replies
Hey,
Ich versuche jetzt schon seid ein paar stunden einen hook zum laufen zu bekommen. Leider crasht das programm direkt wenn es dort ankommt.
hier der assembler code:
.code:0052CD87 loc_52CD87: ; CODE XREF: sub_52CD70+10j
.code:0052CD87 mov ecx,
.code:0052CD8A mov edx,
.code:0052CD8D mov , edx
|
All times are GMT +1. The time now is 22:28.
|
|