Hey,
ich versuche derzeit die Argumente einer Funktion von einem Spiel zu bekommen mithilfe eines MS Detours.
Also wenn ich z.B die MessageBoxW Funktion detouren möchte, mache ich es folgendermaßen:
Was auch soweit funktioniert, doch jetzt möchte ich eine Funktion detouren die keinen Rückgabewert hat (void) und davon die Parameter bekommen.
Hier ein Ausschnitt aus OllyDbg von der Funktion:
[Only registered and activated users can see links. Click Here To Register...]
Die 6 Argumente die hier im Disassembly abgebildet sind versuche ich zu bekommen:
Arg1: DWORD
Arg2: DWORD
Arg3: float
Arg4: float
Arg5: float
Arg6: bool (default arg = true)
Und IDA:
[Only registered and activated users can see links. Click Here To Register...]
Mit einem Mid-Function Detour bekomme ich z.B die Werte die im ECX oder EAX Register stehen ohne Probleme zurück, doch mir wäre es lieber mit einem Funktionspointer, anstatt das ganze Inline-Assembler-Gefrickel :D
Ich vermute, dass das ein __thiscall ist, also eine Member-Funktion... doch wie würde jetzt hier der Funktionspointer aussehen?
MfG _asm
ich versuche derzeit die Argumente einer Funktion von einem Spiel zu bekommen mithilfe eines MS Detours.
Also wenn ich z.B die MessageBoxW Funktion detouren möchte, mache ich es folgendermaßen:
Code:
#include <windows.h>
#include <detours.h>
#pragma comment(lib, "detours.lib")
typedef int (WINAPI *MessageBoxType) (HWND, LPCTSTR, LPCTSTR, UINT);
MessageBoxType MessageBox_orig = nullptr;
int WINAPI MessageBoxDetour(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
lpText = L"Text Parameter hooked";
lpCaption = L"Caption Parameter hooked";
return MessageBox_orig(hWnd, lpText, lpCaption, uType);
}
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD fdwReason, LPVOID lpReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox_orig = (MessageBoxType)DetourFunction((PBYTE)MessageBoxW, (PBYTE)MessageBoxDetour);
break;
}
return TRUE;
}
Hier ein Ausschnitt aus OllyDbg von der Funktion:
[Only registered and activated users can see links. Click Here To Register...]
Die 6 Argumente die hier im Disassembly abgebildet sind versuche ich zu bekommen:
Arg1: DWORD
Arg2: DWORD
Arg3: float
Arg4: float
Arg5: float
Arg6: bool (default arg = true)
Und IDA:
[Only registered and activated users can see links. Click Here To Register...]
Mit einem Mid-Function Detour bekomme ich z.B die Werte die im ECX oder EAX Register stehen ohne Probleme zurück, doch mir wäre es lieber mit einem Funktionspointer, anstatt das ganze Inline-Assembler-Gefrickel :D
Ich vermute, dass das ein __thiscall ist, also eine Member-Funktion... doch wie würde jetzt hier der Funktionspointer aussehen?
MfG _asm