?

免費教程_免費網賺教程_破解版軟件-寂涯網絡學習基地

當前位置: 主頁 > 系統綜合 > 軟件破解 > Windows7注冊表之SAM文件取證分析

Windows7注冊表之SAM文件取證分析

時間:2012-04-18 17:29來源:未知 整理:寂涯網絡 點擊:

Windows注冊表包含大量的鍵值,而且這些鍵值可能被用戶修改過,犯罪嫌疑犯也可能
借用它隱藏一些隱私,如用戶密碼。故,一些注冊表鍵值在許多取證分析中都要被調查,它
們并無必要對應一個給定領域,但是它們和大量計算機調查相關。這些鍵值包括基本的系統
信息(誰使用了該系統,安裝了什么應用程序)和關鍵系統領域的更詳細信息(安裝了哪些
硬件,裝載了哪些驅動器)等,如運行過的程序、訪問過的網站、編輯過的文檔等。這些信
息可以為取證分析提供一定的幫助,而且容易獲取,因為都是明文顯示即通過注冊表API函
數RegOpenKeyEx、RegEnumKeyEx、RegQueryValueEx即可獲取。讀者若對這些關鍵值路徑感
興趣,可參考《Initial Case Analysis using Windows Registry in Computer Forensics》。
本文重點論述注冊表中隱藏的關鍵信息即用戶ID和密碼。
若系統事先設有密碼,則用戶輸入密碼進行系統之前, windows 會對此明文密碼采用MD4
算法進行散列,然后將散列值與系統中保存的 HASH 值進行比對。這些 MD4 散列值即存放在
安全賬戶管理器SAM文件內。盡管SAM文件在最高權限下都無法訪問,但所有的信息都存放
在注冊表內,故完全可以在 SYSTEM 權限下,通過調用注冊表 API 函數獲取到這些信息。本
文是在參考Vincent Roch在 codeproject上發表的文章“Retrieve the Windows 7 Password
Hash on the Fly”、 Dustin Hurlbut的文章 “Forensic Determination of a User’s Logon
的基礎上并結合自己的理解分析完成的,探討windows下SAM文件用戶密碼的破解分析。
1.SAM 結構分析
SAM結構中包含兩內hash分別為:LanMan hash和NT hash,然而從Vista版本開始,因為
LM hash的安全性略低于后者,故已經基本上不再使用了。在注冊表中用戶信息都存放在
HKLM\SAM\SAM\Domains\Account\users\<userRID>下,其下的子鍵即每個賬號的SID相對標
志符。每個賬戶下包含兩個子項,F和V。V值包含了用戶名、以及散列后的用戶密碼值等。
它實際上可以看作一個微型文件系統,包含多個指針即指向一個可變長度的結構體。每個指
針結構為一個12字節值,例如第2個12字節結構體,前4字節即用戶數據起始相對偏移值(需
要加上偏移量0xCC),中間4字節表示用戶名的長度,后4字節保留未用。如圖1所示,
0xBC+0xCC=188,即偏移188處即為用戶名。
圖1. SAM文件中Adminitrator用戶的SID結構
圖1. SAM文件中Adminitrator用戶的SID結構
而且,圖1中的12字節結構體中的第二個4字節包含特殊含義,即
0x BC 00 00 00  — ADMINISTRATIVE USER
0x D4 00 00 00 USER  —  ONLY PRIVILEGE LEVEL即受限制的用戶權限
0x B0 00 00 00  —  GUEST ACCOUNT
“F”鍵值中保存的是一些登錄記錄,如上次登錄時間、錯誤登錄次數等。從上面的分
析,可知用戶密碼保存在SAM文件中,雖然系統默認下config文件受保護,但用戶信息全部
存在在注冊表內,故這里我們可以在SCM(服務控制管理器)內注冊一個系統服務實現SAM
文件取證。
2.創建新服務實現SAM文件取證
當一個服務控制程序請求開啟一個新的服務時,SCM開啟服務的同時,向控制調度器發
送一個開始請求。控制調度器為服務創建一個新的線程來運行ServiceMain函數。代碼如下:
int APIENTRY WinMain(HINSTANCE hProg, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow){
/*SERVICE_TABLE_ENTRY 結構類型的數組,設置調用進程所提供的GetSAM服務的入口函
數及字符串名*/
  SERVICE_TABLE_ENTRY DispatchTable[] = 
    { 
        {"GetSAM", (LPSERVICE_MAIN_FUNCTION)&GetSAMServiceMain}, 
        {NULL, NULL} 
    };
  //連接程序主線程到服務控制管理程序
    StartServiceCtrlDispatcher(DispatchTable);
}
DWORD WINAPI HandlerFunction(DWORD dwControl, DWORD dwEventType, LPVOID
lpEventData, LPVOID lpContext){
SERVICE_STATUS ServiceStatus;
  if (dwControl == SERVICE_CONTROL_SHUTDOWN || 
    dwControl == SERVICE_CONTROL_STOP){
      ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
      ServiceStatus.dwCurrentState = SERVICE_STOPPED;

本頁地址 http://www.ionrce.tw/ruanjianpojie/20120418829.html

百度搜索更多

谷歌搜索更多

頂一下
(0)
0%
踩一下
(1)
100%
------分隔線----------------------------
?
評價:
昵稱: 驗證碼:點擊我更換圖片
推薦內容
贊助商
贊助商
?

關于本站免責聲明視頻更新google百度地圖視頻地圖RRS訂閱

如有什么問題請在本站留言,或發郵件到 hxt167#foxmail.com

内蒙古十一选五基本走势图手机版