调用过程重点为 KernelBase->ntdll,kernelbase中做了数据的处理,函数名字为NtOpenProcess,ntdll中则选择服务号进入0环,我们可以逆向NtOpenProcess分析具体用了什么参数
在头文件<winternl.h>中包含了这两个结构体,当然CLIENT_ID这个结构体少了一个结构体指针
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES;
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;
typedef struct _CLIENT_ID {
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID;
第一步
把原本参数的PID写进CLIENT_ID结构体中
.text:0DCE9175 mov eax, [ebp+dwProcessId]
.text:0DCE9178 mov [ebp+ClientId.UniqueProcess], eax
第二步
如果bInheritHandle为0则最后计算后还是0,如果为其他数则置为1,并且填入ObjectAttributes中
text:0DCE917B mov eax, [ebp+bInheritHandle]
<
逆向分析:Windows系统进程打开过程中的NtOpenProcess函数细节

文章详细描述了如何通过逆向工程分析`NtOpenProcess`函数,该函数在`kernelbase`和`ntdll`模块中使用,涉及`OBJECT_ATTRIBUTES`和`CLIENT_ID`结构体,展示了调用过程中的关键参数设置和结构体传递。
最低0.47元/天 解锁文章
549

被折叠的 条评论
为什么被折叠?



