CreateRemoteThreadEx и NtCreateThreadEx завершаются ошибкой - PullRequest
0 голосов
/ 15 января 2020

В настоящее время я пытаюсь реализовать метод 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 ... С некоторыми инструментами анализа процессов и все в порядке.

Мне кажется, что я что-то упускаю, когда пытаюсь создать основной поток - когда я пытаюсь создать основной поток, процесс на самом деле умирает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...