windows 核心情景分析 說明

2021-06-21 09:45:23 字數 3190 閱讀 6138

說明本文結合《windows核心情景分析》(毛德操著)、《軟體除錯》(張銀奎著)、《windows核心程式設計》、《寒江獨釣-windows核心安全程式設計》、《windows pe權威指南》、《c++反彙編與逆向分析揭秘》以及reactos作業系統 (v0.3.12)原始碼,以《windows核心情景分析》為藍本,對windows核心重要框架、函式、結構體進行解析

由於工程龐大,我能理解到的只是冰山一角,但本文力求做到讓每個讀者都能從整體上理解windows核心的架構,並大量解釋一些關鍵細節。

2、函式的引數沒有嚴格排序,很多不重要的引數也省略了,要注意

3、結構體內的成員沒有嚴格排序,成員名稱也不嚴格對應,並只列出一些重要成員

4、一些清理工作,如關閉控制代碼、釋放記憶體、釋放互斥物件等工作省略

5、很多時候,函式體開頭宣告的那些沒有初始值的區域性變數我都略去了

(我所做的修改基本不影響從**層次理解windows核心的原理)

寫作初衷1: 我一直對rootkit感興趣,但是以前在不熟悉核心的情況下,總是不知道要在哪個位置掛鉤,要hook哪些函式才能達到我的目的。

寫作初衷2:以前在寫檔案系統過濾驅動、ndis過濾驅動以及其他驅動時遇到的種種疑惑,因此,總想看一下ddk提供的核心函式到底是怎麼實現的。

於是,翻看了毛老師的大作,受益匪淺,在基本理清了原理與細節後,特此做了一番總結,希望這篇文章能夠為安全界的朋友盡一點綿薄之力。由於工作原因,我接觸到的知識面有限,不可能逐一摸透windows的方方面面,再說,reactos本來就與windows有一些小差別,因此,希望各位朋友帶著批判的態度去閱讀本文。(當然,我是盡我所能,認真寫完逐篇的)

分析的部分專案截圖:

描述符:指用來描述一件事物的「結構體」。如緩衝描述符,描述了乙個緩衝的基址、長度等資訊。中斷描述符,描述了那個中斷向量對應的分配狀態、isr等資訊

entry:指表中的表項、條目,有時也指函式入口

ssdt:基本系統服務表(其實全稱應叫系統服務派遣表)

shadow ssdt:gui/gdi系統服務函式表,這是第二張ssdt

ssdtdt:系統服務表描述符表,表中每個元素是乙個ssdt描述符(注意核心中有兩張ssdt和兩張ssdtdt)

idt:中斷描述符表,每個cpu乙個。(每個表項是乙個描述符,可以簡單視為isr)

isr:中斷服務例程,idt表中的中斷描述符所描述的中斷處理函式

epr:異常處理例程,idt表中的異常描述符所描述的異常處理函式

pte:二級頁表中的表項,真正記錄著每個虛擬頁面的對映情況以及其他資訊,又叫「對映描述符」

頁目錄:(又叫一級頁表、總頁表),乙個pde陣列,這個陣列的大小剛好佔據乙個頁面

二級頁表:乙個pte陣列,這個陣列的大小也剛好佔據乙個頁面(程序有乙個總頁表+1024個二級頁表)

area:位址空間中的一塊連續的區段,virtualalloc分配記憶體都是以區段為單位

pid:程序id、程序號。(其實也是個控制代碼)

tid:執行緒id、執行緒號。(其實也是個控制代碼)

pdo:物理裝置物件,相對於fdo而言。pdo並不一定是最底層的那個硬體pdo

fdo:功能裝置物件,相對於pdo而言。fdo也可能直接訪問硬體晶元。fdo與pdo只是一種相對概念。

棧底pdo:又叫『基石pdo』,『硬體pdo』,指用作堆疊基石的那個pdo,它是由相應的匯流排驅動內部建立的 。 

埠裝置物件:埠驅動或者小埠驅動中建立的裝置物件(他下面是硬體pdo)

匯流排驅動:用來驅動匯流排的驅動(匯流排本身也是一種特殊的裝置),如pci.sys匯流排驅動

埠驅動:由廠家提供的真正用來直接訪問硬體晶元的驅動,位於匯流排驅動上層

功能驅動:指類驅動。如滑鼠類驅動mouseclass.sys,磁碟類驅動disk.sys

上層過濾驅動:位於功能類驅動上面的驅動

下層過濾驅動:位於功能驅動下面,埠驅動上面的驅動

頂層驅動:指位於棧頂的驅動

中間驅動:intermediate drivers,凡是夾在頂層驅動與埠驅動之間的那些驅動都叫中間驅動

裝置樹:由pnp管理器構造的一顆用來反映物理匯流排布局的『硬體裝置樹』。

裝置節點:裝置樹中的節點。每個節點都表示乙個真正的『硬體pdo』

老式驅動:即nt式驅動,指不提供adddevice或通過ntloaddriver載入的驅動

wdm驅動:指提供了adddevice並且不是通過ntloaddriver載入的驅動

irp派遣例程:又叫分發例程、派遣函式。驅動程式中用來響應處理irp的函式。(dispatch)

裝置繫結:指將裝置『堆疊』到原棧頂裝置上面,成為新的棧頂裝置。

檔案:指物理介質上的檔案(磁碟、光碟、u盤)

檔案物件:每次開啟裝置時生成乙個檔案物件(檔案物件不是檔案,僅僅表示對裝置的一次開啟上下文,因此檔案物件又叫開啟者)

套接字驅動:afd.sys

套接字裝置:\device\afd\endpoint

套接字檔案物件:每開啟一次套接字裝置生成乙個套接字檔案物件

套接字fcb:每個套接字檔案物件關聯的fcb,用來描述套接字的其他資訊

socket irp:發往afd套接字裝置(即\device\afd\endpoint)的irp

tdi irp:發往傳輸層裝置(即\device\tcp,\device\udp,\device\rawip)的irp

物理卷裝置:指磁碟卷、光碟卷、磁帶卷等物理卷裝置,由相應型別的硬體驅動建立

磁碟卷裝置:指磁碟分割槽,裝置物件名為\device\harddiskn\partitionn 形式(n從0開始)

檔案卷裝置:由檔案系統內部建立的掛載(即繫結)在物理卷上的匿名裝置

cdo:控制裝置物件。乙個驅動通常建立有乙個cdo,用來與外界通訊。

fsd:檔案系統驅動,file system driver縮寫。

簇:檔案以簇為分配單位。乙個檔案包含n個簇,簇之間不必物理連續,乙個簇一般為4kb

扇區:系統以扇區為單位進行磁碟io。乙個簇包含n個扇區,乙個扇區一般為512b

檔案塊:磁碟檔案中的檔案塊,對應於核心中的檔案緩衝段

緩衝段:檔案塊在核心中的緩衝

acl:訪問控制表。每個ntfs檔案、核心物件都有乙份acl,記錄了各使用者、組的訪問許可權

token:訪問令牌。每個執行緒、程序都有乙個token,記錄了包含的特權、使用者、組等資訊

sid:指使用者id、組id、機器id,用來唯一標識。

主令牌:程序自己的令牌

客戶令牌:也即模擬令牌。每個執行緒預設使用程序的令牌,但也可模式使用其他程序的令牌

Windows核心情景分析 概述

現在的windows 現在的windows核心包含了兩大部分,一部分是本來意面上的作業系統核心,另一部分則是移到了核心中的視窗服務,前者對應ntoskrnl.exe後者win32k.sys 後者部分為了保證效率。windows作業系統包含多個子系統,最常用就是windows子系統 貌似現在的wind...

《Windows核心情景分析》物件管理

物件的資料結構都是由物件頭和具體物件型別的資料結構兩部分組成。物件頭object header在下,它的上方是具體物件型別的資料結構本身。nt object header 0x000 pointercount int4b 0x004 handlecount int4b 0x004 nexttofre...

Windows核心情景分析 學習日誌之一

毛德操老師對核心的研究非常透徹,乙個小問題都能講得異常清晰,pfpf。系統呼叫 一般只有三種手段可以從使用者態進入核心態 1 中斷 interrupt 2 異常 exception 3 自陷 trap 4 快速系統呼叫 fastsystemcall pentium 2之後出現 5 呼叫門 x86系列...