Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 22:28

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



MessageBox Hook

Discussion on MessageBox Hook within the General Coding forum part of the Coders Den category.

Reply
 
Old   #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
SiZeXtreme is offline  
Old 08/13/2010, 16:47   #2
 
Madd Eye's Avatar
 
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
Madd Eye is offline  
Old 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 View Post
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.
ms​ is offline  
Old 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.
SiZeXtreme is offline  
Old 08/13/2010, 18:23   #5
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by SiZeXtreme View Post
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
Akorn is offline  
Old 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;
}
SiZeXtreme is offline  
Old 08/13/2010, 21:37   #7
 
elite*gold: 0
Join Date: Mar 2008
Posts: 747
Received Thanks: 245
Quote:
Originally Posted by SiZeXtreme View Post
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.
Akorn is offline  
Old 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.
SiZeXtreme is offline  
Old 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..
Mr0x90 is offline  
Old 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.
SiZeXtreme is offline  
Old 08/14/2010, 05:14   #11


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Übrigens kann das Programm auch MessageBoxW benutzen
MrSm!th is offline  
Old 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.
SiZeXtreme is offline  
Old 08/15/2010, 03:28   #13


 
MrSm!th's Avatar
 
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.
MrSm!th is offline  
Old 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.
SiZeXtreme is offline  
Old 08/15/2010, 21:58   #15


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Ich bin sicher, dass es damit gehen wird
MrSm!th is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.