日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSDT表与ShadowSSDT表

發布時間:2025/4/14 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSDT表与ShadowSSDT表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實際上內核中存在兩個系統服務描述符表,一個是KeServiceDescriptorTable(由ntoskrnl.exe導出);,一個是KeServieDescriptorTableShadow(沒有導出)。

KeServieDescriptorTableShadow不但包含了ntoskrnel項,而且還包含了win32k項,而KeServiceDescriptorTable僅僅包含一個ntoskrnel項。

內核中有2套函數 ,zw,nt,nt才是真正的執行函數,zw只是一個過渡函數,(可用ida察看ntoskrnl.exe得知)

SSDT:主要處理 Kernel32.dll中的系統調用,如openProcess,ReadFile等,主要在ntoskrnl.exe中實現(微軟有給出 ntoskrnl源代碼)

ShadowSSDT:
1.主要處理,user32.dll,GDI32.dll中調用的函數,如postMessage,SendMessage,FindWindow,主要在win32k.sys中實現.(微軟未給出win32k代碼)

2.需要注意的是shadowSSDT并未導出,可用ida在win32k.sys中的導出表搜索,且結構與ssdt相似,但是不能通過windbg dd命令查看值

3.ShadowSSDT表只能在GUI(即有界面的程序進程)環境下才有值,故我們需要調用KeAttachProcess來切換到GUI線程里。

4.用windbg 命令 .process 861ff020 ?(861ff020 ?是通過 命令 !process 0 0得到的)切換到GUI線程上下文

? ? 過程:1)(輸入windbg命令 ) !process 0 0得到其中一個有 圖形界面的程序

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(數據如下)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?PROCESS 861ff020 ?SessionId: 0 ?Cid: 0b58 ? ?Peb: 7ffde000 ?ParentCid: 05e4
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DirBase: 10080380 ?ObjectTable: e1dd2808 ?HandleCount: ?73.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Image: windbg.exe

? ? 2) ?(輸入命令)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?lkd> .process 861ff020 ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Implicit process is now 861ff020

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(切換成功 )

? ? 3) 切換成功后,使用dd KeServiceDescriptorTableShadow即可得到該表數據,否則無法得到,得到數據如下

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lkd> dd KeServiceDescriptorTableShadow
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553f60 ?80502b8c 00000000 0000011c 80503000--〉SSDT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553f70 ?bf999b80 00000000 0000029b ?bf99a890 --〉ShadowSSDT
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553f80 ?00000000 00000000 00000000 00000000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553f90 ?00000000 00000000 00000000 00000000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553fa0 ?80502b8c 00000000 0000011c 80503000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553fb0 ?00000000 00000000 00000000 00000000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553fc0 ?00000000 00000000 00000000 00000000
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?80553fd0 ?00000000 00000000 00000000 00000000

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?其實KeServiceDescriptorTableShadow 包含4個系統服務表,但是我們只用前2個(SSDT,ShadowSSDT)

? ? 4) 總結:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1) ShadowSSDT在KeServiceDescriptorTableShadow[1]中,而KeServiceDescriptorTableShadow[0]為ssdt

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)如果要查看win32k服務,必須要切換到GUI線程上下文

5.如何得到ShadowSSDT地址:在insight source中可查詢到wrk中有KeAddSystemServiceTable函數,里面有對KeServiceDescriptorTableShadow 的調用
思路:利用搜索特征碼的方式搜索KeAddSystemServiceTable,取出KeServiceDescriptorTableShadow?

?

總結

以上是生活随笔為你收集整理的SSDT表与ShadowSSDT表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。