原生进程
前些日子看老雷的的软件调试卷二,提到了原生进程。厥后又看了某国际偕行的视频,学会了如何用vs编译一个Native Process。特此记录
概述
不依赖任何Windows子体系。
只会链接ntdll库
Ntdll里面实现的功能
- 镜像加载,堆管理器,一些线程池的支持
- 各种类似c运行时的函数,比如说memset,sprintf
- 体系调用
特点
运行在体系启动时
- 经典的例子:autochk.exe
- 原生进程的pe格式中,子体系界说为Native
smss.exe运行注册表HKLM\System\CurrentControlSet\Control\Session Manager键下BootExecute指定的原生进程
Demo
#include #include 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, Native World!"); NtDrawText(&text); LARGE_INTEGER interval; interval.QuadPart = -10000 * 5000; NtDelayExecution(FALSE, &interval); NtTerminateProcess(NtCurrentProcess(), 0);}vs编译选项
- 禁用c++异常
- 禁用安全查抄
- 运行时查抄为默认值
- 子体系设置为Native
- 附加依赖项设置为ntdll.lib
- 忽略所有默认库
运行效果
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |