1 / 146

Ch2.5~Ch2.7 ( p53~p96 ) TEAM 4 指導 教授 : 許富皓

Window 核心原理與實務開發. Ch2.5~Ch2.7 ( p53~p96 ) TEAM 4 指導 教授 : 許富皓. 100522039      曾毓傑 100522060      何儒軒 100522073      歐巡丞 100522078      李佳恆 100522068      陳安琪 100552023      廖緯玲   985402018      左昌國 985402017   許齊顯 100522004 陳威宇 100522109 連 捷 100522102 吳浩維 995202109 關呂叡.

Download Presentation

Ch2.5~Ch2.7 ( p53~p96 ) TEAM 4 指導 教授 : 許富皓

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Window 核心原理與實務開發 Ch2.5~Ch2.7 ( p53~p96 )TEAM 4指導教授 : 許富皓 100522039      曾毓傑 100522060      何儒軒 100522073      歐巡丞 100522078      李佳恆 100522068      陳安琪 100552023      廖緯玲   985402018      左昌國 985402017   許齊顯 100522004陳威宇 100522109連捷 100522102吳浩維 995202109關呂叡

  2. Outline • 2.5 Windows核心中的公用管理設施 • 2.5.1 Windows核心中的物件管理 • 2.5.2 登錄和組態管理員 • 2.5.3 事件追蹤 (ETW) • 2.5.4 安全性管理 • 2.6 Windows啟動過程 • 2.6.1 核心載入 • 2.6.2 核心初始化 • 2.6.3 建立使用者登入工作階段 • 2.7 本章總結

  3. 2.5.1 Windows核心中的物件管理 (報告者 :歐巡丞) (報告者 : 李佳恆)

  4. 物件管理員 子系統DLL NTDLL.DLL 使用者模式 子系統服務 核心模式 系統服務 執行體API Windows子系統 記憶體管理員 行程和緒程管理員 隨插即用管理員 安全參照監視器 快取管理員 本地程序呼叫(LPC) 組態 管理員 (登錄) I/O 管理員 視窗管理圖形介面 物件管理員 核心(或微核心) 圖形驅動程式 硬體抽象層(HAL) 檔案系統 網路 裝置驅動程式

  5. What’s Object? (wiki) Each resource, which are surfaced as logical objects Resources can be physical devices, files or folders on volumes, Registry entries or even processes and Threads

  6. 物件管理員 Object Manager is a subsystem implemented as part of the Windows Executive which managesWindows resources. (Wiki) 在Windows核心中,屬於執行體中的元件。 物件可分成物件標頭和物件主體。

  7. 物件標頭 引用計數 物件的控制代碼數 物件型別 各個資訊的記憶體偏移 安全描述項 根據物件型別提供資訊與否 物件主體開始

  8. 物件型別(Object Type) WRK支援31種物件,索引(Index)不可紀錄超過48種物件。

  9. 物件型別(Object Type) typedefstruct _OBJECT_TYPE { … UNICODE_STRING Name; … ULOGNIndex; ULONG TotalNumberOfObjects; ULONG TotalNumberOfHandles; … OBJECT_TYPE_INITIALIZER TypeInfo; … } OBJECT_TYPE, *POBJECT_TYPE; Type Name, 例如process 記錄在Type陣列中的索引 系統變數:ObpObjectTypes陣列 :此陣列紀錄所有已建立的TYPE

  10. 物件結構 物件 1 物件型態 物件2 名稱 型態名稱 路徑 Access Types 物件標頭 … 物件主體 Body 物件 3

  11. 建立一個物件 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化

  12. ObCreateObjectType 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化 NTSTATUS ObCreateObjectType( __in PUNICODE_STRING TypeName, __in POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, __in_opt PSECURITY_DESCRIPTOR SecurityDescriptor, __out POBJECT_TYPE *ObjectType );

  13. _OBJECT_TYPE_INITIALIZER 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化 typedefstruct _OBJECT_TYPE_INITIALIZER { USHORT Length; … OB_DUMP_METHOD DumpProcedure; OB_OPEN_METHOD OpenProcedure; OB_CLOSE_METHOD CloseProcedure; OB_DELETE_METHOD DeleteProcedure; OB_PARSE_METHOD ParseProcedure; … } OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;

  14. ObCreateObject 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化 NTSTATUS ObCreateObject( __in KPROCESSOR_MODE ProbeMode, __in POBJECT_TYPE ObjectType, __in POBJECT_ATTRIBUTE ObjectAttributes, … __in ULONG ObjectBodySize, … __out PVOID *Object );

  15. Example: 建立Process 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化 先初始化ObjectType一些欄位 建立Process的ObjectType

  16. Example: 建立Process 物件型別初始化 建立物件標頭,分配記憶體給物件主體 完成物件主體初始化 建立Process的物件 利用PspCreateProcess函式建立Process.

  17. 物件管理員設計目的 提供一種統一而又可擴充的定義和控制機制 提供一致性的安全存取機制 無須修改已有系統程式碼,而又可加入新的物件型別 有一組標準的API來對物件執行各種操作 提供一種命名機制,與檔案系統的命名機制整合再一起。

  18. 物件層次目錄(系統全域命名空間) Windows 也提供以’名稱’的方式管理物件 --------------------------------------------------------------- WHY? 方便找到某個物件 , 分類

  19. 目錄建立過程 Winobj程式 ObpRootDirectoryObject 定義根目錄 NtCreateDirectoryObject() 建立子目錄

  20. 標準Object Directories(from book Windows internal 5th) \ arcname\ BaseNamedObjects\ callback\ device\ driver\ FileSystem\ GLOBAL??\ KnownDlls\ ObjectTypes\ RPC Control\ Windows\ Sessions\ UMDFCommunicationPort \ \ Symbolic links mapping ARC-style paths to NT-Style paths. Mutexes,events,semaphores,waitable timers and section objects for Session 0. Callback Object. Device objects. Driver objects. File system driver object and file system recognizer divice objects. MS-Dos device names. Section names and path for Known DLLs. Ames of tyes of objects. Port objects use by remote procedure calls. Windows subsystem ports and windows sations. Per-session namespace directory ALPC ports used by the User-Mode Driver Framwork

  21. 物件管理員如何管理目錄 (物件管理員所提供的基本操作) ObpLookupDirectoryEntry函式: 在一個指定的目錄中收尋一個名稱 ObpInsertDirectoryEntry 把一個物件插到一個目錄中 ObpDeleteDirectoryEntry 刪除某個目錄中的物件 ObpLookupObjectName 可以從指定的目錄或根目錄,以名稱遞迴的尋找 (obOpenObjectByName,ObReferenceObjectByName 也利用此function)

  22. name • Windows相容從DOS時代保留的下來的的習慣,以磁碟機代號來存取磁碟機或檔案系統的習慣 判別方法: 當物件管理員在解析名稱時,看到 “\??\”開頭或是 “ \??”它就會利用process的devicemap來取得相關的目錄,再進一步解析。  例: ”\??\C:\” • DeviceMap: 定義一個Dos裝置命名空間 • 詳細第七章

  23. 7.3.2 例子 \??\C: 根(\) DeviceMap DosDevice Directory HarddiskVolume1 Device HarddiskVolume2 \DosDevices\C: Dos Devices C: D: • 詳細第七章

  24. Handle • 物件管理員中得物件是執行體物件,所以這些物件位於KERNEL SPACE • 但是PROCESS中執行的user mode code不能直接用指標來引用這些物件 • 所以只能透過Handle(控制代碼)來引用物件 • 詳細第三章 

  25. Object生命週期管理 • 透過引用計數來管理生命週期 引用計數等於零-> 物件生命週期結束 (所占用的記憶體可以回收) • 引用計數 某物件被系統中指標引用(Reference) process使用Handle(控制代碼)引用

  26. WinoBJ WinoBJ http://technet.microsoft.com/en-us/sysinternals/bb896657 介紹 WinObj是 32 位元的 Windows 程式,使用原生 Windows NT API (由 NTDLL.DLL 所提供) 來存取和顯示 NT物件管理員的命名空間資訊。

  27. WinoBJ

  28. WinoBJ

  29. WinoBJ

  30. 2.5.2 登錄和組態管理員 登錄和組態管理員架構 (報告者 : 陳安琪 ) 組態管理員和登錄的初始化

  31. 組態管理員與登錄 子系統DLL NTDLL.DLL 使用者模式 子系統服務 核心模式 系統服務 執行體API Windows子系統 記憶體管理員 行程和緒程管理員 隨插即用管理員 安全參照監視器 快取管理員 本地程序呼叫(LPC) 組態 管理員 (登錄) I/O 管理員 視窗管理圖形介面 物件管理員 核心(或微核心) 圖形驅動程式 硬體抽象層(HAL) 檔案系統 網路 裝置驅動程式 • Windows系統利用登錄檔(registry)作為系統的組態和管理中心 • 提供API供應用程式存取登錄 • 例如,我們安裝了Office Word,則安裝元件在過程中便會透過API來向Registry註冊檔案關聯。 • 安裝完畢後,*.docx檔案皆會與相應的程式 ( 即Office Word )關聯 • 由執行體中的組態管理員(configuration manager)負責實作

  32. 登錄簡介 Root Key value Sub Key • Value類型可大致分成 • REG_DWORD(32位元整數 ) • REG_BINARY( 二進位資料 ) • REG_SZ( 字串 ) • REG_LINK

  33. 登錄區(hive) • 登錄檔是由一組稱為登錄區(hive)的檔案所構成 • 每個登錄區皆為樹狀結構 • 包含了機碼 (key)、值 (value) • Value 包含了名稱、類型、資料 • 資料可為實際的資料或是索引值指向其他value • 實作資料結構為CMHIVE • 定義在base\ntos\config\cmp.h

  34. Root Key

  35. Root Key( cont. ) • HKLM和HKU為真正存放系統設置資訊的子樹,不隨登入帳戶而發生變化 • HKCU、HKCR、HKCC都是利用HKLM和HKU重新建構出針對目前使用者、硬體環境的檢視

  36. HKEY_LOCAL_MACHINE • HKLM存放系統的全域資訊,包含五個subkey • HARDWARE • 硬體設置 • SAM (Security Account Manager) • ,安全性帳戶管理員 • SECURITY • 安全性原則及使用者權限 • SOFTWARE • 軟體設置 • SYSTEM • 系統中的全域組態資訊,在系統初始化時會最先被載入, 包括裝置驅動程式和系統服務等

  37. HKLM\SYSTEM • 組態管理員透過HKLM\SYSTEM底下的hivelist建立起完整的登錄 • HKLM\SYSTEM\CurrentControlSet\control\hivelist

  38. Invisible Root Key HKEY_PERFORMANCE_xxx並不存在登錄檔中,Windows系統為上層應用程式提供API來獲得效能資訊

  39. 登錄區

  40. 登錄區架構-Block • Block為登錄區的基本分配單元 • 每個block大小為4K • 登錄區的第一個Block稱為Base Block • 儲存所有登錄區的訊息( Signature、TimeStamp 、RootCell…) • 資料結構為HBASE_BLOCK

  41. 登錄區架構-Cell、Bin • Cell( 儲存格 )為儲存登錄檔的基本單位 • 資料結構為HCELL • 其中HCELL_INDEX為該Cell在檔案中的偏移量 • 資料型別為ULONG • 可用來引用其他Cell,建立起Cells之間的關聯 • 儲存箱 (Bin)為擴充既有的登錄區所需申請的儲存單元 • 資料結構為HBIN Defined in base\ntos\inc\hivedata.h

  42. 透過Cell Index建立關係 祖父機碼儲存格 值1儲存格 箭頭代表透過儲存格索引建立起來的引用關係 值2儲存格 安全描述項儲存格 父機碼儲存格 … 類別名稱串儲存格 值n儲存格 子機碼1儲存格 值列表儲存格 子機碼2儲存格 子機碼列表儲存格 …….. 值n儲存格 指向父機碼儲存格

  43. Hive Structure [ref] • 每個儲存箱可容納一個以上的Block • 第一個Block稱為Base Block • 每個儲存箱簽名( hbin )後即為Cells區塊

  44. 登錄和組態管理員 • 每個登錄區在kernel address space中可能會有兩個Cell目錄 • 穩定(stable) 的配置資料: On-Disk • 揮發(volatile)的配置資料: In Memory • 每個儲存格目錄,有1024項,每一項指向一個儲存格表 • 每個儲存格表包含512個表項,每一項指向一個區塊(block) 區塊(block) Hive Main Storage ……. 區塊(block)

  45. HCELL_INDEX Structure HMAP_ENTRY

  46. 組態管理員起始化以前 • 組態管理員的實作仰賴於記憶體管理員、快取管理員、檔案系統… • 在執行體元件 (組態管理員、記憶體管理員、快取管理員…)尚未完全初始化前,Windows已經需要使用登錄中的組態資訊了 • 核心載入器( ntldr)會將整個HKLM\SYSTEM登錄區視為Read-Only檔案載入記憶體 • \Windows\System32\Config\System • 組態管理員透過Cell Index+HKLM\SYSTEM基底位址即可取得Cell的位址

  47. 2.5.2 登錄和組態管理員 登錄和組態管理員架構 組態管理員和登錄的初始化 (報告者 : 何儒軒)

  48. 組態管理員和登錄的初始化 • 分三個步驟初始化 • 第一部分:在核心初始化過程中建立HKLM\System及HKLM\Hardware • 第二部分:由工作階段管理員(smss.exe)載入HKLM\Sam、HKLM\Security、HKLM\Software、HKLM\.Default登錄區 • 第三部分:由登入行程(winlogon.exe)載入剩下的一些登錄值

  49. 登錄初始化第一部分 base/ntos/init/initos.c, line 1437 Phase1InitializationDiscard() { ... CmInitSystem1(); ... } base/ntos/config/cmsysini.c, line 466 CmInitSystem1() { ... status = CmpCreateObjectType(); ... } 開機過程中呼叫到CmInitSystem1()去初始化 初始化組態管理員的全域變數,但還沒有產生出組態管理員 建立出通用的CmpKeyObjectType

  50. 登錄初始化第一部分(Cont.) base/ntos/config/cmsysini.c, line 476 status = CmpInitializeHive(...); base/ntos/config/cmsysini.c, line 506 status = CmpCreateRegistryRoot(...); base/ntos/config/cmsysini.c, line 574 CmpInitializeSystemHive(...); 建立主登錄區(\) 建立節點\Registry 使用CmpLinkHiveToMaster()將建立的Machine及User節點連結到\Registry\Machine及\Registry\User位置 將ntldr已經載入至記憶體的system hive去初始化\Registry\Machine\System

More Related