内核实现修改进程PID以及易语言调用【转载BeaFeng】
开发环境Win10 X64/Visual Studio 2019/WDK 10.0 SDK 10.0.19041.0/易语言5.9
概述
首先我们需要了解的是EPROCESS结构体,每个Windows进程在0环都有一个对应的结构体,这个结构体包含了进程所有重要的信息以及相关结构的指针,不难猜出进程ID也是保存在此结构体中,由于EPROCESS结构位于系统地址空间,所以访问这个结构我们需要有Ring0权限,在Winbbg中 使用dt _EPROCESS查看EPROCESS结构体的信息。
我尽量的做了注释以及每一个步骤都详细的讲解,认真看完相信你们能有所收获。
分析结构
使用Windbg查看EPROCESS的结构体如下
对EPROCESS结构体中的重要成员进行说明
01) +0x000 Header : _DISPATCHER_HEADER //“可等待”对象,比如Mutex互斥体、Event事件等(WaitForSingleObject)
02) +0x018 DirectoryTableBase : Uint4B //页目录表的基址
03) +0x020 LdtDescriptor : _KGDTENTRY
+0x028 Int21Descriptor : _KIDTENTRY //历史遗留,16位Windows 段选择子不够 每个进程都有一个LDT表,Int21Descriptor 是 DOS下要用的
04) +0x038 KernelTime : Uint4B
+0x03c UserTime : Uint4B //统计信息 记录了一个进程在内核模式/用户模式下所花的时间
05) +0x05c Affinity : Uint4B //规定进程里面的所有线程能在哪些个CPU上跑,第i位为1表示能在第i个核上运行。Xp是4个字节共32位,所以最多32核 Windows64位就64核。当设置运行的CPU不存在时进程无法运行。64位的操作系统将不适用。
06) +0x062 BasePriority : Char //基础优先级或最低优先级 该进程中的所有线程最起码的优先
07) +0x070 CreateTime : _LARGE_INTEGER
+0x078 ExitTime : _LARGE_INTEGER//进程的创建/退出时间
08) +0x084 UniqueProcessId : Ptr32 Void //进程的编号(就是在任务管理器中的PID)
09) +0x088 ActiveProcessLinks : _LIST_ENTRY//双向链表,将所有的活动进程都连接在一起,构成了一个链表,进程结构体们彼此拴着各自的腰。而PsActiveProcessHead符号指向全局链表头。
获取UniqueProcessId偏移
上述很明显能看出来UniqueProcessId就是我们需要的进程ID,UniqueProcessId=EPROCESS+0x084,但是如果直接这么写进去 那就会遇到一个比较头疼的问题,因为每一个系统版本可能EPROCESS结构成员的偏移可能都不一样,所以我们需要想办法去定位这个偏移,打开IDA Pro拖进去ntoskrnl.exe内核文件:
接下来会用得到一个函数:PsGetProcessId
微软的解释是 例程返回与指定进程关联的进程标识符(进程 ID)
果然Win10的PID偏移是不一样的,我们可以看到48 8B 81 40 04 00 00 mov rax,,说明进程PID的是由rcx第一个参数+440来的,参数就是EPROCESS指针
我们仔细观察他的字节可以发现48 8B 81[操作码]+偏移,也就是说我们得到PsGetProcessId的地址,设定为变量apiaddr,apiaddr+3就是我们需要的UniqueProcessId偏移
RtlInitUnicodeString(&routineName, L"PsGetProcessId");
apiaddr = MmGetSystemRoutineAddress(&routineName);
UNIQUEPROCESSID_OFFSET = *(PDWORD)(apiaddr + 3);
轻松拿到我们的偏移UNIQUEPROCESSID_OFFSET,接下来就开始我们的操作。
修改进程PID
PsLookupProcessByProcessId(ProcessId, &eProcess);//先取进程EPROCESS结构
ProcessPid = Get64bitValue((PULONG64)((ULONG64)eProcess + UNIQUEPROCESSID_OFFSET)); //保存原来的进程PID
Set64bitValue((PULONG64)((ULONG64)eProcess + UNIQUEPROCESSID_OFFSET), (ULONG64)SETULONGPID);//写入新的PID值,SETULONGPID变量为我们要修改的新PID值
最后用IO通讯用易语言调用,详细代码如下
功能测试:Win7 X64
功能测试:Win10 X64
总结
Win7和Win10均无异常,而且不触发PatchGuard,Win11以前测试过也是没有毛病的
最后提一杯,PID改成0可以达到隐藏进程的效果,而且不会蓝屏,有兴趣的伙伴可以自己深入研究一下,请不要用于非法用途,仅限学习
内核实现修改进程PID以及易语言调用【转载BeaFeng】
探秘Windows进程的神秘面纱,今天我们聚焦EPROCESS结构体的奇妙世界。它犹如一扇通往进程内部的魔法之门,藏有PID的奥秘。在Win10与Visual Studio的舞台上,携手易语言,我们得以一窥不为人知的后台秘密。BeaFeng的智慧火种,点亮了权限之旅,让我们跟随注释的指引,揭开PID的神秘面纱,开启一段创意满满的编程探险。🔍🔮🚀[本文内容由人工智能清华智谱 - ChatGLM辅助生成,仅供参考]
内核实现修改进程PID以及易语言调用【转载BeaFeng】
探索内核深处的奥秘,BeaFeng前辈的智慧结晶在此展现。改动PID,赋予进程新身份,如魔法般神奇。在易语言的舞台上,调用内核之力,Visual Studio与WDK共舞,共同演绎编程的华章。EPROCESS结构体,系统的心脏,藏匿着进程的奥秘。环0的权限,是通往深层的钥匙。跟随前辈脚步,让我们一步步揭开神秘的面纱。🔍✨[本文内容由人工智能清华智谱 - ChatGLM辅助生成,仅供参考]
内核实现修改进程PID以及易语言调用【转载BeaFeng】
探索内核深处的神秘,BeaFeng前辈引领我们揭秘EPROCESS结构体的奥秘。在Win10的广阔天地,Visual Studio与WDK携手易语言,共舞于系统权限的巅峰。PID的秘密藏匿其中,待你我共同解锁。跟随前辈步伐,深入内核之海,每一步皆精心注释,让探索之旅不再迷茫。🔍🖥️🔧[本文内容由人工智能清华智谱 - ChatGLM辅助生成,仅供参考]
内核实现修改进程PID以及易语言调用【转载BeaFeng】
探索PID的神秘面纱,勇闯Windows内核深境!在EPROCESS的迷宫中,PID静静地躺在系统的心脏。装备上Ring0权限,我们用易语言点亮黑暗,Visual Studio与WDK保驾护航。每一步,注释如繁星指引,细致入微,揭开进程ID的奥秘。让我们跟随BeaFeng的足迹,开启内核修改新篇章!🚀🔍💡[本文内容由人工智能清华智谱 - ChatGLM辅助生成,仅供参考]
页:
[1]