C++ Little meme

  • Автор темы Автор темы n0entry
  • Дата начала Дата начала
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
12 Дек 2022
Сообщения
129
Реакции
31
Обзор

Функции, реализованные в ntdll:
1-Загрузка образов, управление кучей, поддержка некоторых пулов потоков
2-Различные функции, аналогичные функциям C runtime, например memset, sprintf
3-Системные вызовы

Особенности
Работает при запуске системы
Классический пример: autochk.exe
В формате PE для нативного процесса подсистема определяется как Native
Процесс smss.exe запускает нативные процессы, указанные в реестре по пути HKLM\System\CurrentControlSet\Control\Session Manager в ключе BootExecute
Наша программа должна находиться в каталоге System32

Пример кода


C++:
Expand Collapse Copy
#include <Windows.h>
#include <winternl.h>
#include <ntstatus.h>

extern "C" {
    NTSTATUS NTAPI NtTerminateProcess(
        _In_opt_ HANDLE ProcessHandle,
        _In_ NTSTATUS ExitStatus );
    NTSTATUS NTAPI NtDelayExecution( _In_ BOOLEAN Alertable, _In_opt_ PLARGE_INTEGER DelayInterval );
    NTSTATUS NTAPI NtDrawText( _In_ PUNICODE_STRING Text );
}

#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)

extern "C" void NTAPI NtProcessStartup( PPEB peb )
{
    PROCESS_BASIC_INFORMATION info;
    NtQueryInformationProcess( NtCurrentProcess( ), ProcessBasicInformation, &info, sizeof( info ), nullptr );

    UNICODE_STRING text;
    RtlInitUnicodeString( &text, L"Hello, yougame.biz!" );
    NtDrawText( &text );

    LARGE_INTEGER interval;
    interval.QuadPart = -10000 * 5000;
    NtDelayExecution( FALSE, &interval );

    NtTerminateProcess( NtCurrentProcess( ), 0 );
}

Параметры компиляции в Visual Studio

1) Отключить исключения C++
2) Отключить проверку безопасности
3) Библиотека времени выполнения /MT
4) Установить подсистему на Native
5) В качестве дополнительных зависимостей использовать ntdll.lib
6) Игнорировать все стандартные библиотеки (/NODEFAULTLIB)
7) Указать точку входа как NtProcessStartup

Результат

1746171610175.png
 
А есть ещё функции кроме NtDrawText?
 
Это будет работать только в том случае, если
Пожалуйста, авторизуйтесь для просмотра ссылки.
(M$ распространяют это как вордовский док по каким-то причинам) ещё не зарегистрирован? Или это перезаписывает ACPI таблицу?
 
  • Раздражает
Реакции: mj12
Это будет работать только в том случае, если
Пожалуйста, авторизуйтесь для просмотра ссылки.
(M$ распространяют это как вордовский док по каким-то причинам) ещё не зарегистрирован? Или это перезаписывает ACPI таблицу?
Это не связано с WPBT, нативный процесс не использует ACPI таблицы и их не перезаписывает
 
Последнее редактирование:
  • Мне нравится
Реакции: mj12
Это не связано с WPBT, нативный процесс не использует ACPI таблицы и их не перезаписывает
Я не говорю про процесс, который в анальных фазах инита ядра создаётся, я спрашиваю про поведение платформы в случае, если уже есть зарегистрированная WPBT таблица с бинарём, лежащим в реклейм мемори. Так-то фаза загрузки проходит через функи smss!SmpGetPlatformBinary -> nt!NtQuerySystemInformation (SYSTEM_INFORMATION_CLASS = 133) -> nt!ExpGetSystemPlatformBinary -> smss!SmpExecuteImage, параллельно создавая %systemroot%\System32\wppbin.exe, но я не припоминаю, чтобы там были чеки на реестр, а значит, оно может запускаться как-то по другому. Это и было интересно. Вопрос я истолковал, но лучше сам посмотрю.
 
Назад
Сверху Снизу