Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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;
- }
Advertisement
Add Comment
Please, Sign In to add comment