Пользователь
- Статус
- Оффлайн
- Регистрация
- 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
Пример кода
Параметры компиляции в Visual Studio
1) Отключить исключения C++
2) Отключить проверку безопасности
3) Библиотека времени выполнения /MT
4) Установить подсистему на Native
5) В качестве дополнительных зависимостей использовать ntdll.lib
6) Игнорировать все стандартные библиотеки (/NODEFAULTLIB)
7) Указать точку входа как NtProcessStartup
Результат
Функции, реализованные в ntdll:
1-Загрузка образов, управление кучей, поддержка некоторых пулов потоков
2-Различные функции, аналогичные функциям C runtime, например memset, sprintf
3-Системные вызовы
Особенности
Работает при запуске системы
Классический пример: autochk.exe
В формате PE для нативного процесса подсистема определяется как Native
Процесс smss.exe запускает нативные процессы, указанные в реестре по пути HKLM\System\CurrentControlSet\Control\Session Manager в ключе BootExecute
Наша программа должна находиться в каталоге System32
Пример кода
C++:
#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
Результат