ich wollte mal fragen ob es in irgendeiner Art und Weise möglich ist die Funktion ExitProcess in kernel32.dll zu überspringen. Nur leider bekomme ich das iwie nicht hin. Hier ist der Code für eine Konsole (eigentlich programmiere ich eine DLL, aber das testen dauert dort immer zu lange). Vielleicht kann mir ja jemand helfen. Der Sinn darin besteht ein Spiel offen zu lassen, obwohl ein Hackshield ExitProcess gecallt hat.
PHP Code:
#include <iostream>
#include <stdio.h>
#include <windows.h>
void *DetourFunc(BYTE *src, const BYTE *dst, const int len);
int __stdcall _hkexit(int Code);
typedef int(__stdcall* exit_t)(int);
exit_t pexit;
using namespace std;
int __stdcall hkexit(int Code)
{
MessageBox(0,"Exit wurde gecallt","",MB_OK);
return Code;
}
int main(){
DWORD ex = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");
pexit = (exit_t) DetourFunc((PBYTE)ex,(PBYTE)hkexit,5);
exit(0);
cout << "Exit wurde übersprungen" << endl;
cin.get();
}
void *DetourFunc(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp = (BYTE*)malloc(len+5);
DWORD dwback;
VirtualProtect(src, len, PAGE_READWRITE, &dwback);
memcpy(jmp, src, len); jmp += len;
jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
src[0] = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
VirtualProtect(src, len, dwback, &dwback);
return (jmp-len);
}






