天天看點

4、從彙編語言到Windows核心程式設計筆記(4)

了解機器碼<?xml:namespace prefix = o />

X86所有指令的機器碼長度不定,且連續排列,是以讀取機器碼的唯一方法是從頭開始逐條解析指令。

nop指令是單位元組,可以用作填充替換長指令後的多餘區域。

XDE32反彙編引擎。

關于進一步機器碼的構成分析,可以看[6]。

CPU權限級與分頁機制

Intel的x86通過ring級别進行通路控制,共分四級。R0最高,R3最低。現在的作業系統隻分兩級R0和R3.R0代表核心态,R3代表使用者态。

運作模式:

實模式:CPU啟動後處于實模式。隻能通路1MB記憶體,單任務,所有任務都運作在R0層。如DOS。

保護模式:支援分段、分頁,可運作多任務。如Linux,Window.

系統管理模式(SMM)

虛拟8086模式:為了能在保護模式中運作原來能在實模式下運作的程式。

X86處理器的位址分段模式包括如下形式:

平坦模式:線性位址(頁目錄,頁,頁中偏移)。

多段模式:如資料段,位址段,etc。

32位windows中,0~4G線性記憶體空間。0~2G為應用程式記憶體空間(處于其中每個程序都有獨立的記憶體空間),2G~4G為系統核心空間(核心程序完全共享)。R3級無法通路2~4G記憶體空間。

X86中,cr0~cr4為控制寄存器。Cr0為控制R0是否可以寫隻讀頁,cr2存放發生頁中斷時的線性位址,cr3中保留頁中目錄基位址,cr4來進行CPU的架構擴充。

核心程序和應用程式通信的話:核心程式生成一個“裝置對象”,并為這個對象生成一個有應用層可以通路的“符号連接配接”。裝置對象用 IoCreateDevice生成,符号連接配接用IoCreateSymbolicLink生成。應用程式可以用CreateFile打開這個檔案,通過 ReadFile,WriteFile等和DeviceIoControl來進行通信。一個和驅動程式通信的程序應當被開發成為一個“服務程式”,因為服務程式擁有管理者權限。

其它

一個可控制的核心程式就可以稱為一個Rootkit。庫檔案LIB實際上是多個OBJ檔案的集合。

參考

[5] Windows驅動程式設計基礎教程.doc

[7] Windows DDK

AVP主動防禦之隐藏程序

推薦其它書籍

Programming the micfosoft windows Driver Model:驅動開發

windows環境下的32位彙編語言程式設計:彙編學習

軟體調試,張銀奎:軟體調試

ROOTKITS Windows核心的安全防護,Butler,J

《網絡盜竊——10個黑客入侵的故事》

<a href="http://www.pediy.com/">http://www.pediy.com/</a>

繼續閱讀