国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Win7 > 正文

Windows7 口令登錄過程調(diào)試

2024-06-28 14:05:36
字體:
供稿:網(wǎng)友

基本原理

Windows7 以后 Winlogon 進程是動態(tài)的,有用戶登錄就會創(chuàng)建一個 Winlogon 進程,因此系統(tǒng)中完全 可能存在多個登錄進程,注銷后 Winlogon 進程也會隨之結(jié)束。

Windbg 斷點 NtCreateUserPRocess 觀察 Windows7 啟動流程:

我整理的基本進程樹如下:

smss.exe autochk.exe

smss.exe 00000000 0000003c //session 0

Csrss.exe

Wininit.exe

Services.exe

開機自啟動服務進程

Lsass.exe

Lsm.exe

smss.exe 00000001 0000003c //session 1

Csrss.exe

Winlogon.exe

LogonUI.exe

LogonUI.exe 負責用戶認證界面,Windows7 以后不再使用 msgina.dll,而是使用多個進程配合,完成用戶 認證過程,大致過程為 1、Winlogon 啟動 LogonUI 等待用戶輸入憑證 2、Winlogon 通過 ALPC 通知 Lsass用戶登錄 3、Lsass 依次查詢認證模塊【本地認證 MSV1_0.dll】4、Lsass 返回認證結(jié)果。框圖如下

調(diào)試過程

必須要吐槽下,windows7 下 windbg 內(nèi)核調(diào)試應用程序經(jīng)常斷不下了,害我浪費了很多功夫~~現(xiàn)總結(jié) 了一個穩(wěn)當可靠的辦法:

1、!process 0 0 查看目標進程的基本情況,主要是 Cid。

2、bp nt!KiFastCallEntry "j poi(@$teb+20) = 0x1a0'';'gc'" 把 1a0 替換成實際的 Cid 即可。

3、等斷點命中后,bp winlogon!XXXXX

4、.reload /user 下,bl 看一下,確保函數(shù)解析成地址。

首先看 Winlogon 和 LogonUI 之間的交互,LogonUI.exe 就是一個殼,類似 svchost,真正的功能是通 過 authui.dll模塊完成的,從《Windows Internals5》介紹,winlogon 是通過 ALPC 的東西同 Lsass 通信的,但是 LogonUI 沒怎么講,我估計八成也是一樣的,應該就是 RPC 調(diào)用。

RPC 調(diào)用分服務端和客戶端,客戶端最終 RPCRT4!NdrClientCall2 執(zhí)行調(diào)用,而服務端最終會執(zhí)行

RPCRT4!Invoke執(zhí)行具體的函數(shù)。

我們斷點 winlogon!NdrClientCall2觀察下【這里不 bp RPCRT4!NdrClientCall2主要是避免其他進程干 擾,因為 RPC 在系統(tǒng)中調(diào)用很頻繁】,隨便輸入個密碼,命中:

這里我們發(fā)現(xiàn) winlogon 的確使用了 RPC 調(diào)用來執(zhí)行進程交互,注意這個函數(shù)名是 WluiDisplayStatus,其 實很明確的告訴我們 winlogonUIDisplayStatus,那么該 RPC 最終在哪里被執(zhí)行呢?很顯然是在 authui.dll 下斷點 RPCRT4!Invoke 命中,而后單步跑一下,如圖:

直接從 IDA 里面翻了下 authui.dll注冊 RPC 服務

直接把所有的 RPC 接口函數(shù) DUMP 出來,如下:

其中 WluirRequestCredentials很惹人關注,對應的 winlogon!WluirRequestCredentials函數(shù)如下:

Winlogon 同 logonUI 的 authui.dll 中通過一一對應的 RPC 函數(shù)完成接口調(diào)用,下面是一次錯誤密碼測 試過程時,依次命中的調(diào)用情況:

序號函數(shù)名描述

1

winlogon!WluiRequestCredentials請求用戶輸入憑證,注:該函數(shù)是阻塞函數(shù),會一直等待直到用戶確認登錄才返回。

2

winlogon!WluiDisplayStatus顯示狀態(tài)?未細究。

3

winlogon!WluiReportResult通報結(jié)果。

4

winlogon!WluiDisplayRequestCredentialsError顯示登錄錯誤提示。

我們發(fā)現(xiàn)基本上 LogonUI 進程沒干啥活,所以的動作都是 winlogon 的 WluiXXXXXX 接口消息驅(qū)動的,

IDA 里面會發(fā)現(xiàn)大量的 DirectUI 界面代碼。

Winlogon 使用狀態(tài)機來維護整個登錄過程中的各種情況處理,通過 Winlogon!StateMachineSetSignal

來完成狀態(tài)切換,整個狀態(tài)定義 DUMP 如下【未截全】:

例如:斷點 Winlogon!StateMachineSetSignal點擊登錄界面殘障人士按鈕,命中如下:

注意其中的參數(shù)二對應的是狀態(tài),查下狀態(tài) 9 對應的正是 g_xWinsrv_accessNotify_Signal,winlogon

和 LogonUI 的交互基本上流程基本比較清晰了,下面我們重點研究下 winlogon 同 lsass 進程完成密碼認證

的一些細節(jié)。

Winlogon 同樣使用 RPC 調(diào)用完成同 lsass 的交互,不同的是 windows 把這幾個 RPC 調(diào)用封裝成了 DLL

形式,分別是 SspiCli 客戶端和 SspiSrv 服務端,最終還是調(diào)用了 RPCRT4 函數(shù),證據(jù)如下:

直接從 IDA 中 DUMP 出 SSPISRV 的 RPC 調(diào)用接口如下:

根據(jù)《windows internals 5》一文,Winlogon 調(diào)用 SspiCli!LsaLogonUser完成登錄,該函數(shù)最終通過

RPC 調(diào)用 Lsass::SspiSrv!SspirLogonUser

其中 AuthenticationInformation 參數(shù)里面包含了登錄所需的信息,具體結(jié)構如下:

Windbg 顯示這里密碼被加密了,哈哈,下內(nèi)存寫斷點,命中堆棧如下:

Winlogon!WLGeneric_Request_Logon_Credz_Execute 對應的代碼如下:

該函數(shù)首先通過 RequestCredentials 函數(shù)請求登錄憑證,如果是本地登錄模式,該函數(shù)最終會調(diào)用 WluiRequestCredentials函數(shù)執(zhí)行 LogonUI 進程的 RPC 服務函數(shù) authui!WluiRequestCredentials,請求用戶輸入登錄憑證。

最終 authui!CRequestCredentialsCallbackData::GetCredential獲取用戶登錄憑證,數(shù)據(jù)結(jié)構為

_CRED_PROV_CREDENTIAL* 可惜沒有數(shù)據(jù)結(jié)構定義。

輸入“QQqqqqqq”調(diào)試顯示 DUMP 如下:

下內(nèi)存斷點:Ba w1 0027e5c8+3e,命中堆棧如下:

這里 windbg 函數(shù)顯示的函數(shù) CRequestCredentialsCallbackData::GetShutdownChoice+0x63是錯誤的,實際 是 sub_7483CBE7 函數(shù):

查看一下內(nèi)存數(shù)據(jù),如下:

源地址是 0027e510,長度是 000000b0 :

Ba w1 0027e510+3e,命中 查看源地址 238df78: 繼續(xù)跟蹤內(nèi)存 Ba w1 238df78+3e

查看內(nèi)存如下:

函數(shù) KerbInteractiveUnlockLogonPack是一個可以 google 到的函數(shù),很好。

02 024df8fc 024df924 024df928 authui!KerbInteractiveUnlockLogonPack+0x90

斷點 ba w1 023888b8 命中堆棧

CredProtect 函數(shù) MSDN 如下:

查看堆棧第二個參數(shù),果然是明文密碼:

對應的解密函數(shù) CredUnprotect

這些內(nèi)容實際在 lsass 進程里面解密,斷點 ADVAPI32!CredUnprotectW命中堆棧如下:

最終的密碼認證還是通過群眾喜聞樂見的 msv1_0!LsaApLogonUserEx2來完成,如下:


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 页游| 隆安县| 绵竹市| 井陉县| 修文县| 冀州市| 新安县| 石楼县| 龙岩市| 孙吴县| 漠河县| 察哈| 寿宁县| 文登市| 南召县| 呼伦贝尔市| 崇文区| 禹城市| 抚宁县| 正宁县| 嘉义市| 榆社县| 铁岭市| 固镇县| 军事| 淳化县| 五常市| 新宾| 莆田市| 津南区| 万宁市| 渑池县| 个旧市| 湖南省| 即墨市| 梅州市| 墨江| 察哈| 金平| 织金县| 桃江县|