主頁(yè) > 知識(shí)庫(kù) > win7系統(tǒng)口令登錄過(guò)程調(diào)試方法圖解

win7系統(tǒng)口令登錄過(guò)程調(diào)試方法圖解

熱門(mén)標(biāo)簽:沈陽(yáng)高頻外呼防封系統(tǒng)哪家好 行政區(qū)劃地圖標(biāo)注app 世界地圖標(biāo)注國(guó)家怎么畫(huà) 金昆地圖標(biāo)注是干什么的 溫嶺地圖標(biāo)注 高德地圖標(biāo)注地點(diǎn)更改電話(huà)號(hào)碼 外呼系統(tǒng)打哪顯哪 口碑好的電話(huà)機(jī)器人費(fèi)用 南寧銷(xiāo)售外呼系統(tǒng)廠家

  首先介紹Windows 7系統(tǒng)基本原理

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

  Windbg 斷點(diǎn) NtCreateUserProcess 觀察 Windows7 啟動(dòng)流程:

  我整理的基本進(jìn)程樹(shù)如下:

  smss.exe autochk.exe

  smss.exe 00000000 0000003c //session 0

  Csrss.exe

  Wininit.exe

  Services.exe

  開(kāi)機(jī)自啟動(dòng)服務(wù)進(jìn)程

  Lsass.exe

  Lsm.exe

  smss.exe 00000001 0000003c //session 1

  Csrss.exe

  Winlogon.exe

  LogonUI.exe

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

 

  Windows 7調(diào)試過(guò)程

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

  1、!process 0 0 查看目標(biāo)進(jìn)程的基本情況,主要是 Cid。

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

  3、等斷點(diǎn)命中后,bp winlogon!XXXXX

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

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

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

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

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

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

  直接從 IDA 里面翻了下 authui.dll注冊(cè) RPC 服務(wù)

  從

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

  其中 WluirRequestCredentials很惹人關(guān)注,對(duì)應(yīng)的 winlogon!WluirRequestCredentials函數(shù)如下:

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

  序號(hào)函數(shù)名描述

  1

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

  2

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

  3

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

  4

  winlogon!WluiDisplayRequestCredentialsError顯示登錄錯(cuò)誤提示。

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

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

  Winlogon 使用狀態(tài)機(jī)來(lái)維護(hù)整個(gè)登錄過(guò)程中的各種情況處理,通過(guò) Winlogon!StateMachineSetSignal

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

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

  注意其中的參數(shù)二對(duì)應(yīng)的是狀態(tài),查下?tīng)顟B(tài) 9 對(duì)應(yīng)的正是 g_xWinsrv_AccessNotify_Signal,winlogon和 LogonUI 的交互基本上流程基本比較清晰了,下面我們重點(diǎn)研究下 winlogon 同 lsass 進(jìn)程完成密碼認(rèn)證的一些細(xì)節(jié)。

  Winlogon 同樣使用 RPC 調(diào)用完成同 lsass 的交互,不同的是 windows 把這幾個(gè) RPC 調(diào)用封裝成了 DLL形式,分別是 SspiCli 客戶(hù)端和 SspiSrv 服務(wù)端,最終還是調(diào)用了 RPCRT4 函數(shù),證據(jù)如下:

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

  Winlogon 調(diào)用 SspiCli!LsaLogonUser完成登錄,該函數(shù)最終通過(guò)RPC 調(diào)用 Lsass::SspiSrv!SspirLogonUser

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

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

  Winlogon!WLGeneric_Request_Logon_Credz_Execute 對(duì)應(yīng)的代碼如下:

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

  最終 authui!CRequestCredentialsCallbackData::GetCredential獲取用戶(hù)登錄憑證,數(shù)據(jù)結(jié)構(gòu)為_(kāi)CRED_PROV_CREDENTIAL* 可惜沒(méi)有數(shù)據(jù)結(jié)構(gòu)定義。

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

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

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

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


  源地址是 0027e510,長(zhǎng)度是 000000b0 :

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

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

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

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

  斷點(diǎn) ba w1 023888b8 命中堆棧

  CredProtect 函數(shù) MSDN 如下:

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

  對(duì)應(yīng)的解密函數(shù) CredUnprotect

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

  最終的密碼認(rèn)證還是通過(guò)群眾喜聞樂(lè)見(jiàn)的 msv1_0!LsaApLogonUserEx2來(lái)完成,如下:

以上是圖片的記錄哦!

標(biāo)簽:撫順 中衛(wèi) 中山 防封 煙臺(tái) 焦作 石嘴山 沈陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《win7系統(tǒng)口令登錄過(guò)程調(diào)試方法圖解》,本文關(guān)鍵詞  win7,系統(tǒng),口令,登錄,過(guò)程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《win7系統(tǒng)口令登錄過(guò)程調(diào)試方法圖解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于win7系統(tǒng)口令登錄過(guò)程調(diào)試方法圖解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章