Quipex

Untitled

Oct 11th, 2017
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.51 KB | None | 0 0
  1. #include "windows.h"
  2. #include "stdlib.h"
  3.  
  4. int main(void){
  5.     STARTUPINFO startinfo;
  6.     PROCESS_INFORMATION pi;
  7.     DEBUG_EVENT DBEvent;
  8.     CONTEXT context;
  9.     CONTEXT context1;
  10.  
  11.     LPCTSTR filepath    = "..\\win7.exe";
  12.     char ExitProc[]     = "Original process has been closed. Terminating.";
  13.     char AppName[]      = "ImageBase";
  14.     char AppName1[]     = "FS";
  15.     char Key_content[]  = "KEY";
  16.     char error_open[]   = "Create Process failed";
  17.     char stroka[20]     = { 0 };
  18.     char our_key[4]     = { 0 };
  19.     char bufer          = 0x02;
  20.     char byte_c         = 0x00;
  21.     char int3           = 0xCC;
  22.     char kol            = 0;
  23.  
  24.     /**< PLACING ALL THE PROC STARTUP INFO INTO STARTINFO */
  25.     GetStartupInfo( &startinfo );
  26.  
  27.  
  28.     /**< CREATING A PROC AND CHECKING IF FAILED */
  29.     if(!CreateProcess(filepath, NULL, NULL, NULL,
  30.                     0, DEBUG_PROCESS + DEBUG_ONLY_THIS_PROCESS,
  31.                     NULL, NULL, &startinfo, &pi)){
  32.  
  33.         MessageBoxA( 0, error_open, AppName, MB_OK );
  34.         return 1;
  35.     }
  36.  
  37.     while(1){
  38.         /**< CATCHING DEBUG EVENTS */
  39.         WaitForDebugEvent(&DBEvent, INFINITE);
  40.  
  41.         switch( DBEvent.dwDebugEventCode ){
  42.             /**< HANDLING PROC EXIT */
  43.             case EXIT_PROCESS_DEBUG_EVENT:
  44.                 MessageBoxA(0, ExitProc, AppName, MB_OK);
  45.                 ExitProcess(0);
  46.                 break;
  47.  
  48.             case CREATE_PROCESS_DEBUG_EVENT:
  49.                 /**< IMAGEBASE INTO DIALOG */
  50.                 itoa((int)DBEvent.u.CreateProcessInfo.lpBaseOfImage, stroka, 16);
  51.                 MessageBoxA( 0, stroka, AppName, MB_OK );
  52.  
  53.                 /**< CHANGING A RASHET BUTTON */
  54.                 ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess,(LPVOID)0x040103A, &bufer, 1, NULL );
  55.                 if(bufer==3){
  56.                     bufer=5;
  57.                     WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess,(LPVOID)0x040103A, &bufer, 1, NULL );
  58.                 }
  59.  
  60.                 /**< PLACING A BREAKPOINT */
  61.                 /*ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &byte_c, 1, NULL );
  62.                 WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &int3, 1, NULL );*/
  63.                 ReadProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &byte_c, 1, NULL );
  64.                 WriteProcessMemory( DBEvent.u.CreateProcessInfo.hProcess, (LPVOID)0x040110C, &int3, 1, NULL );
  65.                 break;
  66.  
  67.             case EXCEPTION_DEBUG_EVENT:
  68.                 if (DBEvent.u.Exception.ExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOINT) {
  69.                     if( kol==0 ){
  70.  
  71.                         /**< CONTEX_CONTROL
  72.                              regEbp dd ?
  73.                              regEip dd ?
  74.                              regCs dd ?
  75.                              regFlag dd ?
  76.                              regEsp dd ?
  77.                              regSs dd ?
  78.                         */
  79.                         //context.ContextFlags = CONTEXT_CONTROL;
  80.  
  81.                         /**< CONTEX_SEGMENTS
  82.                              regGs dd ?
  83.                              regFs dd ?
  84.                              regEs dd ?
  85.                              regDs dd ?
  86.                         */
  87.                         context1.ContextFlags = CONTEXT_SEGMENTS;
  88.  
  89.                         /**< (2) regFS INTO DIALOG */
  90.                         GetThreadContext(pi.hThread, &context1);
  91.                         itoa((int)context1.SegFs, stroka, 16);
  92.                         MessageBoxA(0, stroka, AppName1, MB_OK);
  93.  
  94.                         //WriteProcessMemory(pi.hProcess,(LPVOID)0x040110C, &byte_c, 1, NULL);
  95.                         WriteProcessMemory(pi.hProcess,(LPVOID)0x040110C, &byte_c, 1, NULL);
  96.  
  97.                         /**< KEY INTO A DIALOG */
  98.                         //ReadProcessMemory(pi.hProcess, (LPVOID)0x0403013, &our_key, 3, NULL);
  99.                         ReadProcessMemory(pi.hProcess, (LPVOID)0x0403013, &our_key, 3, NULL);
  100.                         itoa((int)our_key, stroka, 16);
  101.                         MessageBoxA(0, our_key, Key_content, MB_OK);
  102.                         //GetThreadContext(pi.hThread, &context);
  103.                     }
  104.                     /**< ITS AN EXCEPTION SO CONTINUE */
  105.                     ContinueDebugEvent( DBEvent.dwProcessId,DBEvent.dwThreadId, DBG_CONTINUE);
  106.                     continue;
  107.                 }
  108.         }
  109.         ContinueDebugEvent(DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);
  110.     }
  111.     CloseHandle(pi.hProcess);
  112.     CloseHandle(pi.hThread);
  113.     ExitProcess(0);
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment