В настоящее время я пытаюсь реализовать метод Process Evasion с именем Process Doppelgänging в Rust.
Я успешно создал транзакцию NTFS, процесс, я написал новый параметры в PEB процесса, но я не могу создать основной поток.
Когда я пытаюсь создать основной поток, моя программа cra sh.
Когда я использую NtCreateThreadEx
функция возвращает 0xC0000022 (STATUS_ACCESS_DENIED).
(я создал процесс с константой PROCESS_ALL_ACCESS
, и я работаю от имени администратора).
ntstatus = NtCreateThreadEx(
&mut thread,
THREAD_ALL_ACCESS,
null_mut(),
process,
transmute::<u64, *mut c_void>(va_entrypoint),
null_mut(),
0, 0, 0, 0,
null_mut()
);
И когда я использую CreateRemoteThreadEx
программа (моя программа не созданный процесс) cra sh с ошибкой 0xC0000005 (STATUS_ACCESS_VIOLATION).
let thread = CreateRemoteThreadEx(
process,
THREAD_ALL_ACCESS,
0,
transmute::<u64, *mut c_void>(va_entrypoint),
null_mut(),
0,
null_mut(), &mut id
);
Переменная va_entrypoint
равна ImageBaseAddress
от PEB созданного процесса + AddressOfEntryPoint
из опциональных заголовков PE-файла, который я загрузил в память.
Я проверил, работает ли процесс и работает ли он, но я могу распознать его только по PID
в tasklist.exe
выход, потому что У программы нет названия ...
Я думаю, это нормально, потому что я не создал основной поток, но я тоже не уверен.
Я вручную проверил адрес PEB, адрес базы данных и т. д. c ... С некоторыми инструментами анализа процессов и все в порядке.
Мне кажется, что я что-то упускаю, когда пытаюсь создать основной поток - когда я пытаюсь создать основной поток, процесс на самом деле умирает.