help hook

04/04/2014 23:10 fenixelfenix#1
this is my code:
PHP Code:
#include<Windows.h>
#include<TlHelp32.h>
#include<iostream>

using namespace std;

DWORD getPid(LPWSTR procName);
int privileges();
static 
DWORD Stub_for_mgsbox();

int MyMessageBoxW(IN HWND hWndIN LPWSTR lpTextIN LPWSTR lpCaptionIN UINT uType)
{
        return 
true;
}

static 
DWORD Stub_for_mgsbox(){
    return 
0;
}


DWORD HookFunction(HANDLE ProcessLPVOID lpFunctionunsigned char *lpBackup)
{
    
DWORD dwAddr = (DWORD)::GetProcAddress(::GetModuleHandleA("user32.dll"), "MessageBoxW");
    
BYTE jmp[5] = { 0xE9,0x000x000x000x00 };

    
ReadProcessMemory(Process, (LPVOID)dwAddrlpBackup60);

    
DWORD dwCalc = ((DWORD)lpFunction dwAddr 5);

    
DWORD pPrevious 0;

    
VirtualProtectEx(Process,(void*)dwAddr6PAGE_EXECUTE_READWRITE, &pPrevious);

    
memcpy(&jmp[1], &dwCalc4);

    
WriteProcessMemory(Process, (LPVOID)dwAddrjmp60);

    
VirtualProtectEx(Process, (void*)dwAddr6pPrevious, &pPrevious);
    return 
dwAddr;
}
__declspec(nakedint RMesage(IN HWND hWndIN LPWSTR lpTextIN LPWSTR lpCaptionIN UINT uType)
{
    
__asm
    
{
        
ret 0x10
    
}
}
int main()
{
    
DWORD Pid getPid(L"test.exe");
    if (
Pid == 0) return 10;
    
HANDLE OpenProc OpenProcess(PROCESS_ALL_ACCESSfalsePid);
    if (
OpenProc == 0) return 20;
    
DWORD szHookFSize = (PBYTE)Stub_for_mgsbox - (PBYTE)RMesage;
    
LPVOID szHookFAddr VirtualAllocEx(OpenProc0szHookFSizeMEM_RESERVE MEM_COMMITPAGE_READWRITE);
    
WriteProcessMemory(OpenProcszHookFAddr, (void*)RMesageszHookFSize0);
    
BYTE hook[6];
    
HookFunction(OpenProcszHookFAddrhook);
    return 
ERROR_SUCCESS;
}

int privileges(){
    
HANDLE Token;
    
TOKEN_PRIVILEGES tp;
    if (
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, &Token))
    {
        
LookupPrivilegeValue(NULLSE_DEBUG_NAME, &tp.Privileges[0].Luid);
        
tp.PrivilegeCount 1;
        
tp.Privileges[0].Attributes SE_PRIVILEGE_ENABLED;
        if (
AdjustTokenPrivileges(Token0, &tpsizeof(tp), NULLNULL) == 0){
            return 
1;
        }
        else{
            return 
0
        }
    }
    return 
1;
}

DWORD getPid(LPWSTR procName){
    
HANDLE hsnap;
    
PROCESSENTRY32 pt;
    
hsnap CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0);
    
pt.dwSize sizeof(PROCESSENTRY32);
    do{
        if (!
lstrcmpW(pt.szExeFileprocName)){
            
DWORD pid pt.th32ProcessID;
            
CloseHandle(hsnap);
            return 
pid;
        }
    } while (
Process32Next(hsnap, &pt));
    
CloseHandle(hsnap);
    return 
0;

Why??, when i set click for call messagebox, this crash? :confused::confused:

[Only registered and activated users can see links. Click Here To Register...]