国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

如何建立內核級鉤子控制操作系統實現程序隱身(1)
2008-04-18   

我們知道,應用程序總是離不開系統內核所提供的服務,比如它要使用內存的時候,只要跟操作系統申請就行了,而不用自己操心哪里有空閑的內存空間等問題,實際上,這些問題是由操作系統的內核來代勞的。站在黑客的角度講,如果能夠控制內核,實際上就是控制了內核之上的各種應用程序。本文將向您介紹如何建立內核級鉤子來控制操作系統向上提供的各種低級功能。有了內核級鉤子,我們不但能夠控制、監視其他程序并過濾有關數據,還能用其實現Rootkit本身及其它程序的隱形。

本文首先回顧系統調用表和內存保護方面的知識,然后講解如何實現內核鉤子,最后對一些重要的內核函數進行了簡要的說明。

一、系統調用表

系統調用表又稱系統服務表或者服務描述符表,是Windows 內核在進行各種系統操作時所需的一個函數指針表。也就是說,這個表中存放的是提供系統服務的各種函數的地址。當然,該表所指向的都是系統自身的一些函數,但是,如果我們對它做了手腳后,就可以讓它指向我們自己的函數。這正是本文要講解的重點。

讀者一定要注意,修改系統調用表及替換內核函數時,會對系統全局產生影響,稍有不慎就會導致系統崩潰。所以,下手之前,最好對表中的各個函數要有足夠的認識,然后才好用我們自己的函數替換這些內核函數的方法。你對它們了解得越多越深,在實現內核鉤子的時候就越順手。但話又說回來,這個系統調用表中的表項實在是太多了,有的指向字符串操作,有的指向客戶機/服務器操作,等等。所以要在短時間內了解所有表項是不可能的,所以下文中對它們只做有選擇的、概括的介紹。

二、內存保護

現代的Windows操作系統通常將系統調用表所在內存頁設為只讀來提供保護。如果不能克服這個問題,實施內核鉤子技術就是癡人說夢。因為試圖向只讀內存寫入數據也即修改只讀內存區時,立刻就會藍屏。為此,先讓我們來了解一下內存保護方面的有關知識。

內存描述符表是內存保護的一大關鍵,具體定義詳見微軟DDK中的ntddk.h頭文件,我們這里僅做簡要介紹:

typedef struct _MDL {
 struct _MDL *Next;
 CSHORT Size;
 CSHORT MdlFlags;
 struct _EPROCESS *Process;
 PVOID MappedSystemVa;
 PVOID StartVa;
 ULONG ByteCount;
 ULONG ByteOffset;
} MDL, *PMDL;

#define MDL_MAPPED_TO_SYSTEM_VA 0x0001
#define MDL_PAGES_LOCKED 0x0002
#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
#define MDL_ALLOCATED_FIXED_SIZE 0x0008
#define MDL_PARTIAL 0x0010
#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
#define MDL_IO_PAGE_READ 0x0040
#define MDL_WRITE_OPERATION 0x0080
#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
#define MDL_FREE_EXTRA_PTES 0x0200
#define MDL_IO_SPACE 0x0800
#define MDL_NETWORK_HEADER 0x1000
#define MDL_MAPPING_CAN_FAIL 0x2000
#define MDL_ALLOCATED_MUST_SUCCEED 0x4000


#define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
 MDL_PAGES_LOCKED | \
 MDL_SOURCE_IS_NONPAGED_POOL | \
 MDL_PARTIAL_HAS_BEEN_MAPPED | \
 MDL_PARENT_MAPPED_SYSTEM_VA | \
 MDL_SYSTEM_VA | \
 MDL_IO_SPACE )


共4頁: 1 [2] [3] [4] 下一頁
 第 1 頁:  第 2 頁:內存保護
 第 3 頁:定義鉤子函數  第 4 頁:內核函數系列

熱詞搜索:

上一篇:解析Vista備份還原功能(1)
下一篇:安全需知:系統自帶不起眼但很強殺毒工具(1)

分享到: 收藏
主站蜘蛛池模板: 饶平县| 利辛县| 五指山市| 遂宁市| 闽侯县| 伊金霍洛旗| 嫩江县| 海安县| 邹城市| 扎赉特旗| 新宁县| 周宁县| 黄石市| 揭西县| 青神县| 焉耆| 江华| 措勤县| 比如县| 新乐市| 娱乐| 廊坊市| 商南县| 池州市| 松阳县| 锡林郭勒盟| 根河市| 绵阳市| 大同市| 滁州市| 宾川县| 东兴市| 普宁市| 莱西市| 温宿县| 淮南市| 长泰县| 措美县| 高碑店市| 贵定县| 江都市|