国产精品久av福利在线观看_亚洲一区国产精品_亚洲黄色一区二区三区_欧美成人xxxx_国产精品www_xxxxx欧美_国产精品久久婷婷六月丁香_国产特级毛片

錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
進程隱藏與進程保護(SSDT Hook 實現)

作者: 佚名  日期:2023-07-08 18:02:00   來源: 本站整理

文章目錄:

                 

1. 引子 – Hook 技術:

2. SSDT 簡介:

3. 應用層調用 Win32 API 的完整執行流程:

4. 詳解 SSDT:

5. SSDT  Hook 原理:

6. 小結:

          

1. 引子 – Hook 技術:

     

前面一篇博文呢介紹了代碼的注入技術(遠程線程實現),博文地址如下:

http://www.cnblogs.com/BoyXiao/archive/2011/08/11/2134367.html

雖然代碼注入是很老的技術了,但是這種技術也還是比較常見,

當然也比較好用的,比如在 Spy++ 中就使用了遠程線程注入技術,

同時,如果有興趣的閱讀過 Spy++ 的源碼的朋友,當然也可以在其源碼中閱讀到關于遠程線程注入技術了。

            

(這篇博文雖然我會截斷分為兩篇博文撰寫,但是博文仍然會比較長,內容其實是比較多的,覆蓋面也比較廣,

需要有一定耐心和基礎方可閱讀完,有興趣者請自備茶水以及零食,然后慢慢閱讀全文,

PS:這話引用自園子里某位園友)

            

然后的話就是漫漫長夜,心情不佳,于是寫了篇博文,剛好又喝了點,所以估計會有些許疏漏之處,還請見諒 ~

           

在這一篇博文中呢,介紹的是一種 Hook 技術,對于 Hook 技術,可以分為兩塊,

第一塊是在 Ring3 層的 Hook,俗稱應用層 Hook 技術,

而另外一塊自然是在 Ring0 層得 Hook,俗稱為內核層 Hook 技術,

而在 Ring3 層的 Hook 基本上可以分為兩種大的類型,

第一類即是 Windows 消息的 Hook,第二類則是 Windows API 的 Hook。

           

關于 Hook 的幾種類型呢,下面給出幾個簡潔的圖示:

image

            

image

          

image

         

關于 Windows 消息的 Hook,相信很多朋友都有接觸過的,因為一個 SetWindowsHookEx 即可以完成消息 Hook,

在這里簡要介紹一下消息 Hook,消息 Hook 是通過 SetWindowsHookEx 可以實現將自己的鉤子插入到鉤子鏈的最前端,

而對于發送給被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都會被我們的鉤子處理函數所捕獲到,

也就是我們可以優先于窗體先捕獲到這些消息,Windows 消息 Hook 可以實現為進程內消息 Hook 和全局消息 Hook,

對于進程內消息 Hook,則可以簡單的將 Hook 處理函數直接寫在這個進程內,即是自己 Hook 自己,

而對于用途更為廣泛的全局消息 Hook,則需要將 Hook 處理函數寫在一個 DLL 中,

這樣才可以讓你的處理函數被所有的進程所加載(進程自動加載包含 Hook 消息處理函數的 DLL)。

對于 Windows 消息 Hook 呢,可以有個簡單的邪惡應用,就是記錄鍵盤按鍵消息,

從而達到監視用戶輸入的鍵值信息的目的,這樣,對于一些簡單的用戶通過鍵盤輸入的密碼就可以被 Hook 獲取到,

因為沒當用戶按下一個鍵時,Windows 都會產生一個按鍵消息(當然有按下,彈起等消息的區分),

然后我們可以 Hook 到這個按鍵消息,這樣就可以在 Hook 的消息處理函數中獲取到用戶按下的是什么鍵了。

                  

當然關于消息 Hook 的話,其不是這篇博文的重點,

這篇博文主要介紹的是 SSDT Hook 技術,即內核 Hook 技術的一種,

這種技術呢,也是比較老的技術了,貌似是當年 Rootkit 起火的時候出來的,

但是 SSDT Hook 現在也還比較流行,比如在很多的殺毒軟件或者安全軟件里面也都會使用到 SSDT Hook 技術。

關于內核 Hook 也有幾種類型,下面也給出一副圖示:

image

上面的幾種內核級 Hook 技術,在看雪啊,debugman,xfocus 上都有很多的介紹,

而我只不過是落后這些技術很多年的小輩后生,在這里也只是將自己的學習以及一些總結的經驗給列出來而已,

如果有興趣想深入了解這些內容的話,完全可以在看雪上找到資料 ~

           

           

2. SSDT 簡介:

         

以下介紹來自百度(PS:被百度文庫弄去了很多博文,這里也抄它一下):

SSDT 的全稱是 System Services Descriptor Table,系統服務描述符表。

這個表就是一個把 Ring3 的 Win32 API 和 Ring0 的內核 API 聯系起來。

SSDT 并不僅僅只包含一個龐大的地址索引表,它還包含著一些其它有用的信息,諸如地址索引的基地址、服務函數個數等。

通過修改此表的函數地址可以對常用 Windows 函數及 API 進行 Hook,從而實現對一些關心的系統動作進行過濾、監控的目的。

一些 HIPS、防毒軟件、系統監控、注冊表監控軟件往往會采用此接口來實現自己的監控模塊。

          

在 NT 4.0 以上的 Windows 操作系統中,默認就存在兩個系統服務描述表,這兩個調度表對應了兩類不同的系統服務,

這兩個調度表為:KeServiceDescriptorTable 和 KeServiceDescriptorTableShadow,

其中 KeServiceDescriptorTable 主要是處理來自 Ring3 層得 Kernel32.dll 中的系統調用,

而 KeServiceDescriptorTableShadow 則主要處理來自 User32.dll 和 GDI32.dll 中的系統調用,

并且 KeServiceDescriptorTable 在 ntoskrnl.exe(Windows 操作系統內核文件,包括內核和執行體層)是導出的,

而 KeServiceDescriptorTableShadow 則是沒有被 Windows 操作系統所導出,

而關于 SSDT 的全部內容則都是通過 KeServiceDescriptorTable 來完成的 ~

           

從下面的截圖可以看出 KeServiceDescriptorTable 在 ntoskrnl.exe 中被導出:

image

             

然后我們再來看看在 Windows 操作系統的源碼 WRK 中,KeServiceDescriptorTable 是怎么被定義的 ~

首先來看 KeServiceDescriptorTable 是如何被 Windows 操作系統源碼給導出的:

從下面的截圖可以看出,這個系統服務描述表是在 WRK 源碼中的某一個模塊劃分文件(.def)中所導出的。

關于 WRK 是什么東西 ? 則可以參閱我的另一篇博文Windows 內核(WRK)簡介》,博文地址如下:

http://www.cnblogs.com/BoyXiao/archive/2011/01/08/1930904.html

            

image

     

而在 Windows 源碼 WRK 中對于系統服務描述符表的代碼定義如下(KeServiceDecriptorTable 即由該結構定義):

image

             

上面的這個結構定義在成員變量的名稱上還看不出什么名堂,下面給出我們將在自己代碼中所使用的結構體:

   1:  typedef struct _KSYSTEM_SERVICE_TABLE
   2:  {
   3:      PULONG  ServiceTableBase;          // SSDT (System Service Dispatch Table)的基地址
   4:      PULONG  ServiceCounterTableBase;   // 用于 checked builds, 包含 SSDT 中每個服務被調用的次數
   5:      ULONG   NumberOfService;           // 服務函數的個數, NumberOfService * 4 就是整個地址表的大小
   6:      ULONG   ParamTableBase;            // SSPT(System Service Parameter Table)的基地址
   7:   
   8:  } KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;
   9:   
  10:  typedef struct _KSERVICE_TABLE_DESCRIPTOR
  11:  {
  12:      KSYSTEM_SERVICE_TABLE   ntoskrnl;  // ntoskrnl.exe 的服務函數
  13:      KSYSTEM_SERVICE_TABLE   win32k;    // win32k.sys 的服務函數(GDI32.dll/User32.dll 的內核支持)
  14:      KSYSTEM_SERVICE_TABLE   notUsed1;
  15:      KSYSTEM_SERVICE_TABLE   notUsed2;
  16:   
  17:  } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;
  18:   
  19:  //導出由 ntoskrnl.exe 所導出的 SSDT
  20:  extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable;

              

有了上面的介紹后,我們可以簡單的將 KeServiceDescriptor 看做是一個數組了(其實質也就是個數組),

在應用層 ntdll.dll 中的 API 在這個系統服務描述表(SSDT)中都存在一個與之相對應的服務,

當我們的應用程序調用 ntdll.dll 中的 API 時,最終會調用內核中與之相對應的系統服務,

由于有了 SSDT,所以我們只需要告訴內核需要調用的服務所在 SSDT 中的索引就 OK 了,

然后內核根據這個索引值就可以在 SSDT 中找到相對應的服務了,然后再由內核調用服務完成應用程序 API 的調用請求即可。

基本結構可以參考下圖:

image

          

             

3. 應用層調用 Win32 API 的完整執行流程:

       

有了上面的 SSDT 基礎后,我們再來看一下在應用層調用 Win32 API(這里主要指的是 ntdll.dll 中的 API)的完整流程,

這里我們主要是分析 ntdll.dll 中的 NtQuerySystemInformation 這個 API 的調用流程,

(PS:Windows 任務管理器即是通過這個 API 來獲取到系統的進程等等信息的)。

先給出一副圖示(先記住這里有四個類似的 API,但是必須得注意區分開來,弄混淆了就麻煩大了):

image

             

再給出這些個 API 的基本的調用流程(讓大伙有個印象,至少不會迷失):

image

                   

首先,使用 PE 工具來打開 ntdll.dll 文件,可以看到 NtQuerySystemInformation,

image

          

除了 NtQuerySystemInformation 外,同時還可以看到 ZwQuerySystemInformation,

image

                   

而實質上,在 Windows 操作系統中,

Ntdll.dll 中的ZwQuerySystemInformation 和 NtQuerySystemInformation 是同一函數,

可以通過下面的截圖看出,這兩個函數的入口地址指向同一區域,他們的函數入口地址都是一樣的 ~

很奇怪吧 ~ 其實我也覺得奇怪 ~ 何必多此一舉呢 ~

image

           

眾所周知 Ntdll.dll 中的 API 都只不過是一個簡單的包裝函數而已,

當 Kernel32.dll 中的 API 通過 Ntdll.dll 時,會完成參數的檢查,

再調用一個中斷(int 2Eh 或者 SysEnter 指令),從而實現從 Ring3 進入 Ring0 層,

并且將所要調用的服務號(也就是在 SSDT 數組中的索引值)存放到寄存器 EAX 中,

并且將參數地址放到指定的寄存器(EDX)中,再將參數復制到內核地址空間中,

再根據存放在 EAX 中的索引值來在 SSDT 數組中調用指定的服務 ~

       

經過上面的步驟后,便由 Ring3 層進入了 Ring0 層,

我們再通過 PE 工具來查看 ntoskrnl.exe 中的 ZwQuerySystemInformation 和 NtQuerySystemInformation

           

image

            

image

    

先來看 ntoskrnl.exe 中的 ZwQuerySystemInformation:

             

image

        

在上面的這幅截圖中,可以看到在 Ring0 下的 ZwQuerySystemInformation 將 0ADh 放入了寄存器 eax 中,

然后調用了系統服務分發函數 KiSystemService,而這個 KiSystemService 函數則是根據 eax 寄存器中的索引值,

然后再 SSDT 數組中找到索引值為 eax 寄存器中存放的值得那個 SSDT 項,

最后就是根據這個 SSDT 項中所存放的系統服務的地址來調用這個系統服務了 ~

比如在這里就是調用 KeServiceDescriptorTable[0ADh] 處所保存的地址所對應的系統服務了 ~

也就是調用 Ring0 下的 NtQuerySystemInformation 了 ~

至此,在應用層中調用 NtQuerySystemInformation 的全部流程也就結束了 ~

最后,貼出一點在 Ring0 下的 NtQuerySystemInformation 的反匯編代碼:

image

              

     

4. 詳解 SSDT:

          

在這一節里面,我們將來看看 SSDT 到底是個什么東西 ~ 這里使用 WinDbg 來調試 XP SP2 系統 ~

       

首先來看看 KeServiceDescriptorTable 是何物 ?

從下面的截圖中可以看到 KeServiceDesciptorTable 的首地址為 804e58a0,

然后查看分析這個地址,可以查看到第一個系統服務的入口地址為 80591bfb !

2011-08-18_012703

       

我們再來看看 80591bfb 這個地址對應的究竟是何系統服務 ?

從下面的截圖中,可以看到 SSDT 中第一個系統服務就是 NtAcceptConnectPort !!!

2011-08-18_013027

           

由于我們知道了 SSDT 的首地址,又知道了 Ring0 下 NtQuerySystemInformation 服務的索引號,

所以可以根據 “SSDT 中系統服務地址所在的 Address = SSDT 首地址 + 4 * 索引號”,

推算出 NtQuerySystemInformation 服務的地址,

因此有 Address = 804e58a0 + 4 * 0adh = 804E5B54;

然后我們再來看 804E5B54 這個地址的信息,信息如下截圖:

從截圖中,我們可以看到 NtQuerySystemInformation 的起始地址為 80586ff1,

2011-08-18_020103

         

下面就來驗證一下地址 80586ff1 到底是不是 NtQuerySystemInformation 的首地址 ~

從下面的截圖中可以肯定 80586ff1 確實就是 NtQuerySystemInformation 的首地址,

這和我們上面對 SSDT 中指定索引號的服務的地址的計算公式計算出來的結果是統一的 !!!

2011-08-18_020231

                   

從上面的介紹,可以看出,其實 SSDT 就是一個用來保存 Windows 系統服務地址的數組而已 !!!

           

                    

5. SSDT  Hook 原理:

        

有了上面的這部分基礎后,就可以來看 SSDT HOOK 的原理了,

其實 SSDT Hook 的原理是很簡單的,從上面的分析中,

我們可以知道在 SSDT 這個數組中呢,保存了系統服務的地址,

比如對于 Ring0 下的 NtQuerySystemInformation 這個系統服務的地址,

就保存在 KeServiceDescriptorTable[0ADh] 中,

既然是 Hook 的話,我們就可以將這個 KeServiceDescriptorTable[0ADh] 下保存的服務地址替換掉,

將我們自己的 Hook 處理函數的地址來替換掉原來的地址,

這樣當每次調用 KeServiceDescriptorTable[0ADh]時就會調用我們自己的這個 Hook 處理函數了。

               

下面用幾幅截圖來表示:

image

        

下面的截圖則是 SSDT Hook 之后了,可以看到將 SSDT 中的服務地址修改為 MyHookNtQuerySystemInformation 了,

這樣的話,每次系統調用 NtQuerySystemInformation 這個系統服務時,

實質上調用的就是 MyHookNtQuerySystemInformation 了,而我們為了保證系統的穩定性(至少不讓其崩潰),

一般會在 MyHookNtQuerySystemInformation 中調用系統中原來的服務,也就是 NtQuerySystemInformation。

image

               

         

6. 小結:

          

本篇博文呢尚還只是介紹了 SSDT 到底是個什么東西,而還沒有給出具體的 SSDT Hook 的實現,

對于 SSDT Hook 的實現以及 Demo 我都放到(二)中完成,也就是本篇博文未完 , 待續 ……

關于 SSDT 的話,在看雪上有很多的文章,由于我也是前陣子對這東西突然感興趣了,

所以我也算是初次了解,自然也看過了很多的文章,SSDT 在 Google 一搜索可以出來一大堆,

[1] [2]  下一頁



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    国产视频你懂的| ...av二区三区久久精品| 国产经典欧美精品| 国产精品三级久久久久三级| 亚洲一区视频在线观看视频| 亚洲r级在线视频| 99热在线看| 草草视频在线播放| 国产成人久久久久| 久久久精品毛片| 综合免费一区二区三区| 亚洲性生活大片| 精品全国在线一区二区| 免费观影入口看日本视频| 国产二区视频在线观看| videoxxxx另类日本极品| 很很鲁在线视频播放影院| 欧美一级淫片a免费视频| 国产真实生活伦对白| 黄色网页在线播放| 黄色片免费在线| 天堂av网在线| 情趣网站在线观看| gogo高清在线播放免费| 成人在线视频亚洲| 日本电影在线观看网站| 国产精品一区免费在线 | 黄色动漫在线观看| 国产精品一级在线观看| 在线不卡欧美| 亚洲国产精品t66y| 成人久久18免费网站麻豆| 亚洲综合激情网| 一本色道久久综合狠狠躁篇怎么玩| 热久久这里只有| 成人高清dvd| av手机在线播放| 亚洲成人偷拍自拍| 久热免费在线视频| 欧美视频综合| 豆花视频一区二区| 国产一区欧美日韩| 久久久久久99久久久精品网站| 91精品国偷自产在线电影| 国产精品视频一区二区三区四蜜臂| 六月丁香婷婷久久| 色婷婷av一区二区三区gif | 一级 黄 色 片一| 亚洲911精品成人18网站| 日本a级c片免费看三区| 中文字幕第2页| 男人天堂手机在线观看| 黄色污网站在线免费观看| 四虎在线精品| 久久99精品国产麻豆婷婷洗澡| 99久久精品国产精品久久| 91精品国产综合久久久久久| 国产精品爽爽ⅴa在线观看| 久久av一区二区三区亚洲| 亚洲一区尤物| 久久久久久久久久网| 可以免费看av的网址| 国产美女视频网站| 伊人久久精品一区二区三区| 欧美日韩天堂| 色综合天天做天天爱| 国产精品va在线播放我和闺蜜| 久久成人资源| 成人在线一级片| 无码人妻aⅴ一区二区三区有奶水| 天天干夜夜夜操| 成人噜噜噜噜| 26uuu成人网一区二区三区| 亚洲视频一区二区三区| 91视频成人免费| 亚洲婷婷综合网| 日韩美女一级视频| 亚洲国产一区二区三区在线播放| 亚洲一区二区三区在线| 国产精品99导航| 欧美无人区码suv| 波多野结衣视频在线观看| 日本在线三级| 久久久人成影片免费观看| 午夜电影久久久| 亚洲色图第一页| 热99这里只有精品| 国产精品欧美久久久久天天影视| 成年人在线观看网站| 99精品免费视频| 日韩免费视频一区| 一级做a爰片久久| 日本一级淫片色费放| 在线中文视频| 亚洲国产精品一区制服丝袜| 欧美一区二区三区色| 91爱视频在线| 亚洲天堂第一区| 五月婷婷六月婷婷| 第一视频专区在线| 丝袜美腿亚洲色图| 日韩激情av在线免费观看| 欧美一区二区中文字幕| 少妇精品一区二区| 日本激情五月| 网友自拍一区| 成人91在线观看| 色综合久综合久久综合久鬼88| 日韩国产在线一区| 波多野结衣一区二区三区在线| 国产传媒在线播放| 国产jizzjizz一区二区| 国外色69视频在线观看| av中文字幕av| 色欲av伊人久久大香线蕉影院| 国产超碰在线| 欧美亚洲三区| 欧洲视频一区二区| 国产精品欧美日韩久久| 阿v天堂2014| 最新版天堂资源中文官网| 亚洲精品aaa| 亚洲r级在线视频| 日韩高清三级| 国产视频aaa| 亚洲成av人片一区二区| 欧美极品一区| 免费成人你懂的| 日韩精品日韩在线观看| 丝袜美腿一区二区三区动态图| 欧洲精品久久一区二区| 欧美孕妇孕交黑巨大网站| 久久久精品欧美丰满| 欧美日韩精品一区二区三区在线观看| 久久这里只精品| 日韩亚洲欧美成人一区| 久久久91精品国产一区二区精品 | 欧美gv在线| 德国性xxxx| 99久久久无码国产精品不卡| 亚洲精品乱码久久久久久按摩观| 美丽的小蜜桃4春潮| 男女免费视频网站| 男人天堂999| 波多野结衣在线一区| 国产在线观看a视频| 农村黄色一级片| 精品福利视频一区二区三区| 日韩午夜电影网| 伊人免费视频| 国产免费av网站| 国产男男gay体育生白袜| 久久久久免费精品| 韩国成人精品a∨在线观看| 天天槽夜夜槽| 国产精品yjizz| 青青草原在线亚洲| 久草影视在线| 日韩欧美在线视频一区二区| 国产伦理一区二区三区| 亚洲最新在线观看| 国产婷婷色一区二区三区四区| 成年人黄色大片在线| 免费在线你懂的| 中文娱乐网av| 日本新janpanese乱熟| 999视频在线观看| 亚洲国产精品va| 中文字幕制服丝袜成人av| 国产精品99久久99久久久| 在线观看av网页| 日韩精品中文字幕一区二区三区 | 中文字幕高清在线免费播放| 免费在线黄色片| 三级av在线免费观看| 亚洲国产美女视频| 久久国产午夜精品理论片最新版本| 国产精选久久久久久| www.色综合| 可以免费看不卡的av网站| av在线中文| 91精品视频免费在线观看| 天天干天天操天天操| 天堂а√在线中文在线鲁大师| 天天干天天操天天做| 亚洲激情在线观看| 美腿丝袜亚洲三区| 密臀av在线| 国产一二三区精品视频| 一级片免费在线观看视频| 久久久久久久999精品视频| 国产成人精品免费| 三上悠亚亚洲一区| 一本色道久久综合亚洲| 免费毛片网站在线观看| 欧美精品麻豆| 欧美美女色图| 依依成人在线| 久久久国产精品无码| 免费a在线观看播放|