[Frage] ExitProcess

09/21/2010 16:46 expo_botter#1
Hi,
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(__stdcallexit_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_tDetourFunc((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(srclenPAGE_READWRITE, &dwback);
    
memcpy(jmpsrclen); jmp += len;
    
jmp[0] = 0xE9;
    *(
DWORD*)(jmp+1) = (DWORD)(src+len jmp) - 5;
    
src[0] = 0xE9;
    *(
DWORD*)(src+1) = (DWORD)(dst src) - 5;
    
VirtualProtect(srclendwback, &dwback);
    return (
jmp-len);

09/25/2010 19:56 mydoom#2
Bist du da noch irgendwie weitergekommen? Das Thema interessiert mich ehrlich gesagt auch.
09/25/2010 20:07 ms​#3
Wenn du einfach nur die ersten 3 Bytes durch 0xC20400 (ret 4) ersetzst müsste ExitProcess auch übersprungen werden.
09/27/2010 17:45 tim66613#4
Quote:
Originally Posted by expo_botter View Post
Hi,
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.
Sicher, dass das HackShield auch ExitProcess() aufruft?
Gibt ja noch die Alternativen: TerminateThread(), NtTerminateProcess(), LdrShutdownProcess(), NtTerminateThread().

Kind Regards Tim