這篇文章比較特殊,是一篇穿插答疑文章,由於剛好在前一篇教程`《驅動開發:內核枚舉PspCidTable句柄表》`整理了枚舉句柄表的知識點,正好這個知識點能解決一個問題,事情是這樣的有一個粉絲求助了一個問題,想要枚舉處驅動中活動的線程信息,此功能我並沒有嘗試過當時也只是說了一個大致思路,今天想具體聊一... ...
這篇文章比較特殊,是一篇穿插答疑文章,由於剛好在前一篇教程《驅動開發:內核枚舉PspCidTable句柄表》
整理了枚舉句柄表的知識點,正好這個知識點能解決一個問題,事情是這樣的有一個粉絲求助了一個問題,想要枚舉出驅動中活動的線程信息,此功能我並沒有嘗試過當時也只是說了一個大致思路,今天想具體聊一聊這個話題,也想聊一聊自己對粉絲們的想法。
首先因為我的人生經歷比較特殊,我經歷過無法求知的困境,深知一個人在沒有任何人指點的情況下去研究技術是多麼的折磨人,所以在某些情況下只要你關註了我,我也會盡自己最大可能去幫助大家,即便是當時沒有解決這個問題我也會記下來,只要能被解決我一定會第一時間告訴粉絲,但也希望大家不要遇到困難關註我,解決困難取消關註,這樣我覺得很不地道。
好了步入正題,這個枚舉驅動內的線程我們無法用傳統的API去枚舉,原因很簡單你拿不到進程的EPROCESS
結構,或者說他這個驅動程式本身就是系統的一部分根本就沒有進程ID的概念,由於我一直沒有嘗試這個需求,所以當時對粉絲說的是通過PEB來拿到,但這個方法其實關鍵就在於,以我目前的知識儲備無法拿到驅動的EPROCESS
結構。
然後乾脆就直接枚舉出整個系統所有的進程與線程信息,例如上一篇文章中提到的枚舉句柄表,打開ARK工具找到所需查詢的線程,會發現他有一個ETHREAD
結構。
我們直接在枚舉列表中查詢以下看看,你會發現所有句柄表線程中是存在這個ETHREAD
結構。
但是這個是全局的,無法得到它屬於哪個驅動模塊,這就很尷尬了。
你或許靈機一動,我直接得到ETHREAD
信息,從裡面找EPROCESS
,再從裡面找進程名,但跟到最後你會發現它顯示的是SYSTEM
進程,小丑竟是你自己。
這裡只能用笨辦法,首先線程ETHREAD
地址是0xFFFF9C02B2DCC540
抹掉最後三位0xFFFF9C02B2DCC000
。
然後看看驅動列表中的0xFFFF9C02B2DCC060
同樣抹掉最後三位是0xFFFF9C02B2DCC000
,這兩個地址相差不大甚至說就是一摸一樣。
我不知道別人的ARK工具是怎麼實現的,但是我目前能想到的辦法只能是這一種笨辦法,兩者作比較相差在一個誤差以內就說明是進程內的子線程。
這樣我們首先枚舉的是驅動完整信息,然後在和線程作比較,從而判斷或者說歸檔,將某一些子線程歸類到某個驅動程式上面,代碼我就不寫了,再寫也是重覆的東西,前面的文章中都有代碼,自己拼湊一下就可以實現的功能。
文章作者:lyshark (王瑞)文章出處:https://www.cnblogs.com/LyShark/p/16796956.html
版權聲明:本博客文章與代碼均為學習時整理的筆記,文章 [均為原創] 作品,轉載請 [添加出處] ,您添加出處是我創作的動力!
轉載文章請遵守《中華人民共和國著作權法》相關法律規定或遵守《署名CC BY-ND 4.0國際》規範,合理合規攜帶原創出處轉載!