Quipex icon

Untitled

Quipex | PRO | 10/11/17 08:35:04 PM UTC | 0 ⭐ | 371 👁️ | Never ⏰ | []
C |

4.51 KB

|

None

|

0 👍

/

0 👎

#include "windows.h"
#include "stdlib.h"
 
int main(void){
    STARTUPINFO startinfo;
    PROCESS_INFORMATION pi;
    DEBUG_EVENT DBEvent;
    CONTEXT context;
    CONTEXT context1;
 
    LPCTSTR filepath    = "..\\win7.exe";
    char ExitProc[]     = "Original process has been closed. Terminating.";
    char AppName[]      = "ImageBase";
    char AppName1[]     = "FS";
    char Key_content[]  = "KEY";
    char error_open[]   = "Create Process failed";
    char stroka[20]     = { 0 };
    char our_key[4]     = { 0 };
    char bufer          = 0x02;
    char byte_c         = 0x00;
    char int3           = 0xCC;
    char kol            = 0;
 
    /**< PLACING ALL THE PROC STARTUP INFO INTO STARTINFO */
    GetStartupInfo( &startinfo );
 
 
    /**< CREATING A PROC AND CHECKING IF FAILED */
    if(!CreateProcess(filepath, NULL, NULL, NULL,
                    0, DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS,
                    NULL, NULL, &startinfo, &pi)){
 
        MessageBoxA( 0, error_open, AppName, MB_OK );
        return 1;
    }
 
    while(1){
        /**< CATCHING DEBUG EVENTS */
        WaitForDebugEvent(&DBEvent, INFINITE);
 
        switch( DBEvent.dwDebugEventCode ){
            /**< HANDLING PROC EXIT */
            case EXIT_PROCESS_DEBUG_EVENT:
                MessageBoxA(0, ExitProc, AppName, MB_OK);
                ExitProcess(0);
                break;
 
            case CREATE_PROCESS_DEBUG_EVENT:
                /**< IMAGEBASE INTO DIALOG */
                itoa((int)DBEvent.u.CreateProcessInfo.lpBaseOfImage, stroka, 16);
                MessageBoxA( 0, stroka, AppName, MB_OK );
 
                /**< CHANGING A RASHET BUTTON */
                ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess,(LPVOID)0x040103A, &bufer, 1, NULL );
                if(bufer==3){
                    bufer=5;
                    WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess,(LPVOID)0x040103A, &bufer, 1, NULL );
                }
 
                /**< PLACING A BREAKPOINT */
                /*ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &byte_c, 1, NULL );
                WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &int3, 1, NULL );*/
                ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &byte_c, 1, NULL );
                WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &int3, 1, NULL );
                break;
 
            case EXCEPTION_DEBUG_EVENT:
                if (DBEvent.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT) {
                    if( kol==0 ){
 
                        /**< CONTEX_CONTROL
                             regEbp dd ?
                             regEip dd ?
                             regCs dd ?
                             regFlag dd ?
                             regEsp dd ?
                             regSs dd ?
                        */
                        //context.ContextFlags = CONTEXT_CONTROL;
 
                        /**< CONTEX_SEGMENTS
                             regGs dd ?
                             regFs dd ?
                             regEs dd ?
                             regDs dd ?
                        */
                        context1.ContextFlags = CONTEXT_SEGMENTS;
 
                        /**< (2) regFS INTO DIALOG */
                        GetThreadContext(pi.hThread, &context1);
                        itoa((int)context1.SegFs, stroka, 16);
                        MessageBoxA(0, stroka, AppName1, MB_OK);
 
                        //WriteProcessMemory(pi.hProcess,(LPVOID)0x040110C, &byte_c, 1, NULL);
                        WriteProcessMemory(pi.hProcess,(LPVOID)0x040110C, &byte_c, 1, NULL);
 
                        /**< KEY INTO A DIALOG */
                        //ReadProcessMemory(pi.hProcess, (LPVOID)0x0403013, &our_key, 3, NULL);
                        ReadProcessMemory(pi.hProcess, (LPVOID)0x0403013, &our_key, 3, NULL);
                        itoa((int)our_key, stroka, 16);
                        MessageBoxA(0, our_key, Key_content, MB_OK);
                        //GetThreadContext(pi.hThread, &context);
                    }
                    /**< ITS AN EXCEPTION SO CONTINUE */
                    ContinueDebugEvent( DBEvent.dwProcessId,DBEvent.dwThreadId, DBG_CONTINUE);
                    continue;
                }
        }
        ContinueDebugEvent(DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);
    }
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
    ExitProcess(0);
    return 0;
}

Comments