Windows內(nèi)核修練與內(nèi)核安全培訓(xùn)班
*階段
1. windows系統(tǒng)服務(wù)
1.1 windows系統(tǒng)服務(wù)原理
1.1.1 intel x86的用戶模式-內(nèi)核模式切換
1.1.2 windows的用戶模式-內(nèi)核模式切換
1.1.3 windows中的系統(tǒng)服務(wù)分發(fā)
1.1.4 增加系統(tǒng)服務(wù)表或表項(xiàng)
1.2 lpc(本地過(guò)程調(diào)用)服務(wù)
1.2.1 lpc結(jié)構(gòu)模型
1.2.2 lpc端口和lpc消息
1.2.3 lpc通訊模型的實(shí)現(xiàn)
1.2.4 lpc應(yīng)用
1.3 命名管道(named pipe)服務(wù)
1.3.1 命名管道的名稱解析
1.3.2 命名管道的通訊模型
1.3.3 命名管道的實(shí)現(xiàn)
2. 內(nèi)核編程環(huán)境及其特殊性
2.2.1 內(nèi)核編程的環(huán)境
2.1.1 隔離的應(yīng)用程序
2.1.2 共享的內(nèi)核空間
2.1.3 無(wú)處不在的內(nèi)核模塊
2.2 數(shù)據(jù)類型
2.2.1 基本數(shù)據(jù)類型
2.2.2 返回狀態(tài)
2.2.3 字符串
2.3 重要的數(shù)據(jù)結(jié)構(gòu)
2.3.1 驅(qū)動(dòng)對(duì)象
2.3.2 設(shè)備對(duì)象
2.3.3 請(qǐng)求
2.4 函數(shù)調(diào)用
2.4.1 查閱幫助
2.4.2 幫助中有的幾類函數(shù)
2.4.3 幫助中沒(méi)有的函數(shù)
2.5 windows的驅(qū)動(dòng)開(kāi)發(fā)模型
3. 串口的過(guò)濾
3.1 過(guò)濾的概念
3.1.1 設(shè)備綁定的內(nèi)核api之一
3.1.2 設(shè)備綁定的內(nèi)核api之二
3.1.3 生成過(guò)濾設(shè)備并綁定
3.1.4 從名字獲得設(shè)備對(duì)象
3.1.5 綁定所有串口
3.2 獲得實(shí)際數(shù)據(jù)
3.2.1 請(qǐng)求的區(qū)分
3.2.2 請(qǐng)求的結(jié)局
3.2.3 寫(xiě)請(qǐng)求的數(shù)據(jù)
3.3 完整的代碼
3.3.1 完整的分發(fā)函數(shù)
3.3.2 如何動(dòng)態(tài)卸載
3.3.3 完整的代碼
4. 鍵盤(pán)的過(guò)濾
4.1 技術(shù)原理
4.1.1 預(yù)備知識(shí)
4.1.2 windows中從擊鍵到內(nèi)核
4.1.3 鍵盤(pán)硬件原理
4.2 鍵盤(pán)過(guò)濾的框架
4.2.1 找到所有的鍵盤(pán)設(shè)備
4.2.2 應(yīng)用設(shè)備擴(kuò)展
4.2.3 鍵盤(pán)過(guò)濾模塊的driverentry
4.2.4 鍵盤(pán)過(guò)濾模塊的動(dòng)態(tài)卸載
4.3 鍵盤(pán)過(guò)濾的請(qǐng)求處理
4.3.1 通常的處理
4.3.2 pnp的處理
4.3.3 讀的處理
4.3.4 讀完成的處理
4.4 從請(qǐng)求中打印出按鍵信息
4.4.1 從緩沖區(qū)中獲得keyboard_input_data
4.4.2 從keyboard_input_data中得到鍵
4.4.3 從makecode到實(shí)際字符
4.5 hook分發(fā)函數(shù)
4.5.1 獲得類驅(qū)動(dòng)對(duì)象
4.5.2 修改類驅(qū)動(dòng)的分發(fā)函數(shù)指針
4.5.3 類驅(qū)動(dòng)之下的端口驅(qū)動(dòng)
4.5.4 端口驅(qū)動(dòng)和類驅(qū)動(dòng)之間的協(xié)作機(jī)制
4.5.5 找到關(guān)鍵的回調(diào)函數(shù)的條件
4.5.6 定義常數(shù)和數(shù)據(jù)結(jié)構(gòu)
4.5.7 打開(kāi)兩種鍵盤(pán)端口驅(qū)動(dòng)尋找設(shè)備
4.5.8 搜索在kbdclass類驅(qū)動(dòng)中的地址
4.6 hook鍵盤(pán)中斷反過(guò)濾
4.6.1 中斷:irq和int
4.6.2 如何修改idt
4.6.3 替換idt中的跳轉(zhuǎn)地址
4.6.4 qq的ps/2反過(guò)濾措施
4.7 利用ioapic重定位中斷處理函數(shù)
4.7.1 什么是ioapic
4.7.2 如何訪問(wèn)ioapic
4.7.3 編程修改ioapic重定位表
4.7.4 插入新的中斷處理
4.7.5 驅(qū)動(dòng)入口和卸載的實(shí)現(xiàn)
4.8 直接用端口操作鍵盤(pán)
4.8.1 讀取鍵盤(pán)數(shù)據(jù)和命令端口
4.8.2 p2cuserfilter的最終實(shí)
實(shí)驗(yàn):
實(shí)習(xí)示例一: 驅(qū)動(dòng)編寫(xiě)實(shí)驗(yàn)
1,驅(qū)動(dòng)程序設(shè)計(jì)
2,串口驅(qū)動(dòng)
第二階段
5. 磁盤(pán)過(guò)濾
5.1 磁盤(pán)過(guò)濾驅(qū)動(dòng)的概念
5.1.1 設(shè)備過(guò)濾和類過(guò)濾
5.1.2 磁盤(pán)設(shè)備和磁盤(pán)卷設(shè)備過(guò)濾驅(qū)動(dòng)
5.1.3 注冊(cè)表和磁盤(pán)卷設(shè)備過(guò)濾驅(qū)動(dòng)
5.2 具有還原功能的磁盤(pán)卷過(guò)濾驅(qū)動(dòng)
5.2.1 簡(jiǎn)介
5.2.2 基本思想
5.3 驅(qū)動(dòng)分析
5.3.1 driverentry函數(shù)
5.3.2 adddevice函數(shù)
5.3.3 pnp請(qǐng)求的處理
5.3.4 power請(qǐng)求的處理
5.3.5 deviceiocontrol請(qǐng)求的處理
5.3.6 bitmap的作用和分析
5.3.7 boot驅(qū)動(dòng)完成回調(diào)函數(shù)和稀疏文件
5.3.8 讀/寫(xiě)請(qǐng)求的處理
5.3.9 示例代碼
6. 文件系統(tǒng)的過(guò)濾與監(jiān)控
6.1 文件系統(tǒng)的設(shè)備對(duì)象
6.1.1 控制設(shè)備與卷設(shè)備
6.1.2 生成自己的一個(gè)控制設(shè)備
6.2 文件系統(tǒng)的分發(fā)函數(shù)
6.2.1 普通的分發(fā)函數(shù)
6.2.2 文件過(guò)濾的快速io分發(fā)函數(shù)
6.2.3 快速io分發(fā)函數(shù)的一個(gè)實(shí)現(xiàn)
6.2.4 快速io分發(fā)函數(shù)逐個(gè)簡(jiǎn)介
6.3 設(shè)備的綁定前期工作
6.3.1 動(dòng)態(tài)地選擇綁定函數(shù)
6.3.2 注冊(cè)文件系統(tǒng)變動(dòng)回調(diào)
6.3.3 文件系統(tǒng)變動(dòng)回調(diào)的一個(gè)實(shí)現(xiàn)
6.3.4 文件系統(tǒng)識(shí)別器
6.4 文件系統(tǒng)控制設(shè)備的綁定
6.4.1 生成文件系統(tǒng)控制設(shè)備的過(guò)濾設(shè)備
6.4.2 綁定文件系統(tǒng)控制設(shè)備
6.4.3 利用文件系統(tǒng)控制請(qǐng)求
6.5 文件系統(tǒng)卷設(shè)備的綁定
6.5.1 從irp中獲得vpb指針
6.5.2 設(shè)置完成函數(shù)并等待irp完成
6.5.3 卷掛載irp完成后的工作
6.5.4 完成函數(shù)的相應(yīng)實(shí)現(xiàn)
6.5.5 綁定卷的實(shí)現(xiàn)
6.6 讀/寫(xiě)操作的過(guò)濾
6.6.1 設(shè)置一個(gè)讀處理函數(shù)
6.6.2 設(shè)備對(duì)象的區(qū)分處理
6.6.3 解析讀請(qǐng)求中的文件信息
6.6.4 讀請(qǐng)求的完成
6.7 其他操作的過(guò)濾
6.7.1 文件對(duì)象的生存周期
6.7.2 文件的打開(kāi)與關(guān)閉
6.7.3 文件的刪除
6.8 路徑過(guò)濾的實(shí)現(xiàn)
6.8.1 取得文件路徑的3種情況
6.8.2 打開(kāi)成功后獲取路徑
6.8.3 在其他時(shí)刻獲得文件路徑
6.8.4 在打開(kāi)請(qǐng)求完成之前獲得路徑名
6.8.5 把短名轉(zhuǎn)換為長(zhǎng)名
6.9 把sfilter編譯成靜態(tài)庫(kù)
6.9.1 如何方便地使用sfilter
6.9.2 初始化回調(diào)、卸載回調(diào)和綁定回調(diào)
6.9.3 綁定與回調(diào)
6.9.4 插入請(qǐng)求回調(diào)
6.9.5 如何利用sfilter.lib
實(shí)驗(yàn):
實(shí)習(xí)示例二:
1.1 實(shí)習(xí)一:磁盤(pán)過(guò)濾
1.2 實(shí)習(xí)二:文件系統(tǒng)
第三階段
7. 文件系統(tǒng)透明加密
7.1 文件透明加密的應(yīng)用
7.1.1 防止企業(yè)信息泄密
7.1.2 文件透明加密防止企業(yè)信息泄密
7.1.3 文件透明加密軟件的例子
7.2 區(qū)分進(jìn)程
7.2.1 機(jī)密進(jìn)程與普通進(jìn)程
7.2.2 找到進(jìn)程名字的位置
7.2.3 得到當(dāng)前進(jìn)程的名字
7.3 內(nèi)存映射與文件緩沖
7.3.1 記事本的內(nèi)存映射文件
7.3.2 windows的文件緩沖
7.3.3 文件緩沖:明文還是密文的選擇
7.3.4 清除文件緩沖
7.4 加密標(biāo)識(shí)
7.4.1 保存在文件外、文件頭還是文件尾
7.4.2 隱藏文件頭的大小
7.4.3 隱藏文件頭的設(shè)置偏移
7.4.4 隱藏文件頭的讀/寫(xiě)偏移
7.5 文件加密表
7.5.1 何時(shí)進(jìn)行加密操作
7.5.2 文件控制塊與文件對(duì)象
7.5.3 文件加密表的數(shù)據(jù)結(jié)構(gòu)與初始化
7.5.4 文件加密表的操作:查詢
7.5.5 文件加密表的操作:添加
7.5.6 文件加密表的操作:刪除
7.6 文件打開(kāi)處理
7.6.1 直接發(fā)送irp進(jìn)行查詢與設(shè)置操作
7.6.2 直接發(fā)送irp進(jìn)行讀/寫(xiě)操作
7.6.3 文件的非重入打開(kāi)
7.6.4 文件的打開(kāi)預(yù)處理
7.7 讀寫(xiě)加密/解密
7.7.1 在讀取時(shí)進(jìn)行解密
7.7.2 分配與釋放mdl
7.7.3 寫(xiě)請(qǐng)求加密
7.8 crypt_file的組裝
7.8.1 crypt_file的初始化
7.8.2 crypt_file的irp預(yù)處理
7.8.3 crypt_file的irp后處理
實(shí)驗(yàn):
實(shí)驗(yàn)三、 鍵盤(pán)過(guò)濾實(shí)驗(yàn)
第四階段
8. 網(wǎng)絡(luò)傳輸層過(guò)濾
8.1 tdi概要
8.1.1 為何選擇tdi
8.1.2 從socket到windows內(nèi)核
8.1.3 tdi過(guò)濾的代碼例子
8.2 tdi的過(guò)濾框架
8.2.1 綁定tdi的設(shè)備
8.2.2 *的分發(fā)函數(shù)
8.2.3 過(guò)濾框架的實(shí)現(xiàn)
8.2.4 主要過(guò)濾的請(qǐng)求類型
8.3 生成請(qǐng)求:獲取地址
8.3.1 過(guò)濾生成請(qǐng)求
8.3.2 準(zhǔn)備解析ip地址與端口
8.3.3 獲取生成的ip地址和端口
8.3.4 連接終端的生成與相關(guān)信息的保存
8.4 控制請(qǐng)求
8.4.1 tdi_associate_address的過(guò)濾
8.4.2 tdi_connect的過(guò)濾
8.4.3 其他的次功能號(hào)
8.4.4 設(shè)置事件的過(guò)濾
8.4.5 tdi_event_connect類型的設(shè)置事件的過(guò)濾
8.4.6 直接獲取發(fā)送函數(shù)的過(guò)濾
8.4.7 清理請(qǐng)求的過(guò)濾
8.5 本書(shū)例子tdifw.lib的應(yīng)用
8.5.1 tdifw庫(kù)的回調(diào)接口
8.5.2 tdifw庫(kù)的使用例子
實(shí)驗(yàn):
實(shí)習(xí)示例三:網(wǎng)絡(luò)傳輸