真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

說(shuō)說(shuō)windows內(nèi)核中為什么要隱藏線程?

一、論:
接著上一篇來(lái)談?wù)劊M(jìn)程都能隱藏,單獨(dú)隱藏進(jìn)程中的某一個(gè)線程干啥?
二、需求:
需求源動(dòng)力,就是有需求,除了正兒八經(jīng)熱愛(ài)喜歡專(zhuān)研的朋友,無(wú)利無(wú)名、無(wú)食而學(xué)日不思,真的讓人很尊敬。
三、打個(gè)比方:
當(dāng)你想要去實(shí)現(xiàn)隱藏線程的時(shí)候你有可能在干什么?做一個(gè)工具?或者說(shuō)是學(xué)習(xí)?通過(guò)隱藏線程可以更深入理解windows內(nèi)部原理?進(jìn)程與線程之間的關(guān)系?一個(gè)正常進(jìn)程里面包含惡意線程?這是一個(gè)很棒的學(xué)習(xí)方式。也許你會(huì)用它來(lái)做一些事情,以前想寫(xiě)過(guò)一個(gè)類(lèi)似于ARK的工具,才有了學(xué)習(xí)的需求及動(dòng)力。但是還沒(méi)有實(shí)際的環(huán)境去應(yīng)用隱藏線程,沒(méi)有需求,但還是把代碼認(rèn)真的寫(xiě)出來(lái),分享一些知識(shí),知識(shí)在于分享。
四、還是那些結(jié)構(gòu)體:
有時(shí)候我在想,不用winAPI我能做什么事?也許我還能做很多的事情,因?yàn)橛凶銐虻慕Y(jié)構(gòu)體我就不慌、但是,如果沒(méi)有了結(jié)構(gòu)體我能做什么事情?這個(gè)還真不好說(shuō),其實(shí)相對(duì)于windows我更為喜歡Linux那種自由。
介紹主人公_ETHREAD與_KTHREAD:
?1、_EPROCESS.ThreadListHead ---> _ETHREAD
?2、_KPROCESS.ThreadListHead ---> _KTHREAD
線程屬于進(jìn)程,一個(gè)進(jìn)程由多個(gè)線程、那么同一個(gè)進(jìn)程的多個(gè)線程使用的是相同的進(jìn)程空間,線程也叫做輕量級(jí)進(jìn)程。線程掛靠技術(shù),也可以本線程使用其他進(jìn)程的空間。
windows下線程是最小執(zhí)行單位,每個(gè)進(jìn)程至少會(huì)有一個(gè)主線程去響應(yīng)執(zhí)行。同樣_ETHREAD屬于執(zhí)行體層,內(nèi)嵌偏移0是_KTHREAD(微內(nèi)核層),異曲同工之妙,windows的管理不得不說(shuō)很優(yōu)秀,可以用藝術(shù)來(lái)形容。
_KPROCESS中會(huì)有一個(gè)成員叫做ThreadListHead字段是進(jìn)程所有線程的鏈表。指向的位置是_KTHREAD.ThreadListEntry,這個(gè)地方當(dāng)時(shí)異或了好久,為啥?為啥這個(gè)鏈表指向的就是這個(gè)結(jié)構(gòu)體這個(gè)位置,其實(shí)我現(xiàn)在也很糾結(jié).
說(shuō)說(shuō)windows內(nèi)核中為什么要隱藏線程?
?_KPROCESS.ThreadListHead指向 -----> _KTHREAD.ThreadListEntry
說(shuō)說(shuō)windows內(nèi)核中為什么要隱藏線程?
就是這個(gè)情況.內(nèi)核就是通過(guò)這個(gè)來(lái)遍歷屬于某一個(gè)進(jìn)程空間的所有線程。詳細(xì)資料還是參考:https://bbs.pediy.com/thread-223858.htm 個(gè)人感覺(jué)翻譯過(guò)來(lái)的文章質(zhì)量五星好評(píng)。
五、貼上源碼
注:
用戶層與頭文件源碼與隱藏線層套路一樣,代碼可復(fù)用(改一下控制碼的宏定義即可)
以下測(cè)試代碼沒(méi)有到三環(huán)進(jìn)行通訊,在0環(huán)進(jìn)行的測(cè)試(主代碼斷鏈部分與進(jìn)程斷鏈一樣,這里給出偽代碼及思路)

成都創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供渝北企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站建設(shè)、做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為渝北眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。

驅(qū)動(dòng)層:

#include "HideThreadHeader.h"

VOID UnLoad(PDRIVER_OBJECT pDriverObj)
{
    UNICODE_STRING DeleteSymbolicLinkName;
    RtlInitUnicodeString(&DeleteSymbolicLinkName, L"\\DosDevices\\SymbolicLinkName");

    IoDeleteSymbolicLink(&DeleteSymbolicLinkName);
    IoDeleteDevice(pDriverObj->DeviceObject);

    KdPrint(("UnLoad Sucess"));
}

NTSTATUS DefaultFun(DEVICE_OBJECT* pDeviceObj, IRP* irp)
{
    UNREFERENCED_PARAMETER(pDeviceObj);

    irp->IoStatus.Information = 0;

    irp->IoStatus.Status = STATUS_SUCCESS;

    IoCompleteRequest(irp, IO_NO_INCREMENT);

    return STATUS_SUCCESS;
}

NTSTATUS onCreate(DEVICE_OBJECT* pDeviceObj, IRP* irp)
{
    UNREFERENCED_PARAMETER(pDeviceObj);

    irp->IoStatus.Information = 0;

    irp->IoStatus.Status = STATUS_SUCCESS;

    IoCompleteRequest(irp, IO_NO_INCREMENT);

    return STATUS_SUCCESS;
}

NTSTATUS onClose(DEVICE_OBJECT* pDeviceObj, IRP* irp)
{
    UNREFERENCED_PARAMETER(pDeviceObj);

    irp->IoStatus.Information = 0;

    irp->IoStatus.Status = STATUS_SUCCESS;

    IoCompleteRequest(irp, IO_NO_INCREMENT);

    return STATUS_SUCCESS;
}

// 遍歷屬于某個(gè)進(jìn)程所有線程 通過(guò)斷鏈實(shí)現(xiàn)隱藏線程
VOID HideThreadListLink()
{

    CLIENT_ID* ThreadId = NULL;
    PEPROCESS pkProcess = NULL;
    PKTHREAD pkThread = NULL;
    PETHREAD pEthread = NULL;
    LIST_ENTRY* pEthreadNext = NULL;
    LIST_ENTRY* pEthreadCurrent = NULL;

    pkProcess = PsGetCurrentProcess();

    // 獲取_KPROCESS->ThreadListHead(_LIST_ENTRY)
    pEthreadCurrent = (LIST_ENTRY *)((ULONG_PTR)pkProcess + 0x02c);

    /* 注:

            1. _KPROCESS.ThreadListHead->Flink指向的是一個(gè)_KTHREAD.ThreadListEntry 
            2. _KTHREAD.ThreadListEntry - 偏移ThreadListEntry獲取到KTHREAD地址,其實(shí)也就是ETHREAD地址.

    */

    KdPrint(("ThreadListHead.Flink = %p\n", pEthreadCurrent->Flink));
    KdPrint(("ThreadListHead.blink = %p\n", pEthreadCurrent->Blink));

    // 這個(gè) (PETHREAD)(PEPROCESS + 0x2c)
    pEthreadNext = pEthreadCurrent->Flink;

    DbgBreakPoint();

    while (pEthreadCurrent != pEthreadNext)
    {
        pkThread = (PKTHREAD)((ULONG_PTR)pEthreadNext - 0x1e0);

        // pKthread->Teb 偏移 0x88
        // KdPrint(("pKThread->Teb = %p , %s \n", (ULONG_PTR)pkThread + 0x88, (((ULONG_PTR)pKThread + 0x88) == NULL || pkThread->Teb > 0x80000000 ? "System Thread" : "Non System Thread")));
        // 轉(zhuǎn)換成EPROCESS
        pEthread = (PETHREAD)pkThread;

        DbgBreakPoint();

        // pEthread->Cid  偏移0x22c  
        ThreadId = (CLIENT_ID *)((ULONG_PTR)pEthread + 0x22c);

        KdPrint(("ThreadId = %d, ProcessId = %d\n\n", ThreadId->UniqueThread, ThreadId->UniqueProcess));

        // 這個(gè)地方也可以使用斷鏈 偽代碼
        if (ThreadId->UniqueThread == "隱藏的線程id")
        {
            // 與進(jìn)程隱藏?cái)噫湻绞揭粯?        }

        pEthreadNext = pEthreadNext->Flink;
    }
}

// 驅(qū)動(dòng)對(duì)象入口點(diǎn)
NTSTATUS DriverEntry(DRIVER_OBJECT* pDriverObj,  UNICODE_STRING* RegistryPath)
{

    UNREFERENCED_PARAMETER(irp);

    DbgBreakPoint();

    for (int i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; ++i) {
        pDriverObj->MajorFunction[i] = DefaultFun;
    }

    pDriverObj->DriverUnload = UnLoad;
    pDriverObj->MajorFunction[IRP_MJ_CREATE] = onCreate;
    pDriverObj->MajorFunction[IRP_MJ_CLOSE] = onClose;

    UNICODE_STRING DeviceName;
    UNICODE_STRING SymbolicLinkName;
    DEVICE_OBJECT* DeviceObj;
    NTSTATUS nStatus = STATUS_SUCCESS;

    RtlInitUnicodeString(&DeviceName, L"\\Device\\DeviceName");
    RtlInitUnicodeString(&SymbolicLinkName, L"\\DosDevices\\SymbolicLinkName");

    nStatus = IoCreateDevice(pDriverObj, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, 0, &DeviceObj);

    if (!NT_SUCCESS(nStatus))
        return nStatus;

    nStatus = IoCreateSymbolicLink(&SymbolicLinkName, &DeviceName);

    if (!NT_SUCCESS(nStatus))
        return nStatus;

    DbgBreakPoint();

    // 沒(méi)有使用控制碼等處理  偽代碼進(jìn)行測(cè)試
    HideThreadListLink();

    return STATUS_SUCCESS;
}

分享題目:說(shuō)說(shuō)windows內(nèi)核中為什么要隱藏線程?
文章鏈接:http://weahome.cn/article/gggphe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部