相關資訊
本類常用軟件
-
福建農村信用社手機銀行客戶端下載下載量:584212
-
Windows優(yōu)化大師下載量:419727
-
90美女秀(視頻聊天軟件)下載量:366966
-
廣西農村信用社手機銀行客戶端下載下載量:365708
-
快播手機版下載量:325898
初識文件系統(tǒng)相關驅動的時候,卷的概念比較模糊,有分區(qū)了,為啥還得有個卷……當初認為一個分區(qū)就是一個卷,后來發(fā)現,這是不準確的。
卷:卷是扇區(qū)的邏輯集合,這些扇區(qū)可能位于一個磁盤上,也可能來自多個磁盤。一個物理磁盤上的扇區(qū)可以劃分成多個分區(qū)(partition),每個分區(qū)包含一組連續(xù)的扇區(qū);而卷負責管理一個或多個分區(qū)中的扇區(qū)。在windows中,卷有兩種,簡單卷和多分區(qū)卷。
文件系統(tǒng);是卷內部的一種邏輯結構,允許用戶以文件(數據流)方式來訪問和組織數據。
卷與文件系統(tǒng):給卷分配一個驅動器字母并不等于該卷就有了對應的文件系統(tǒng);卷上的數據是以扇區(qū)來管理的,而文件系統(tǒng)則為扇區(qū)中的數據定義了結構信息。為了能以文件和目錄的方式來方訪問一個卷上的數據,該卷必須被關聯(lián)上一個文件系統(tǒng),此過程稱為卷識別。
文件系統(tǒng)驅動程序識別一個卷的依據是,檢查該卷的引導扇區(qū),看是否符合該文件系統(tǒng)所要求的必要條件,包括一些標識字符串和關鍵結構信息。識別通過后,文件系統(tǒng)驅動程序會創(chuàng)建這個卷的文件系統(tǒng)實例(即:一個文件系統(tǒng)設備對象)并設置好設備對象的相關屬性。
從上述信息,我們可以粗略的認為,在一個空白卷上構造一個文件系統(tǒng),就是在該卷的引導扇區(qū)中寫入文件系統(tǒng)關聯(lián)的各種數據。
寫引導扇區(qū),可以調用系統(tǒng)接口來完成,也可以自行填充相關的數據(符合格式規(guī)定就行,Ramdisk例子中有FAT的引導扇區(qū)格式)。以前弄的那個文件保險箱,格式化的時候,是調用系統(tǒng)的外殼(shell32.dll)的函數SHFormatDrive,彈出一個對話框,再進行格式化操作。真正執(zhí)行格式化的并非是這個外殼函數,真正執(zhí)行格式化的操作函數應該在這個對話框的窗口過程中。用OD跟進去瞧瞧。(PS:有啥不對或者,不足,歡迎拍磚)
代碼:
push esi ;
dwInitParampush offset sub_7D668179 ;
lpDialogFuncpush [ebp+hWndParent] ; hWndParentpush 7000h ;
lpTemplateNamepush hInstance ;
hInstancecall sub_7D6103B1
在IDA中,看了一下,很明顯,上面是一個創(chuàng)建對話框函數,跟進對話框過程函數(lpDialogFunc)。
代碼:
push edi ;
lpThreadIdpush edi ;
dwCreationFlagspush esi ;
lpParameterpush offset sub_7D667FA1 ;
lpStartAddresspush edi ;
dwStackSizepush edi ;
lpThreadAttributescall ds:CreateThread
在窗口過程函數中,上面這段代碼比較顯眼,因為那界面上有個進度條,驅動進度條而又不使得界面卡死,通常使用線程,(在加密界面 第三版 的那個殼里面 也是這么弄的),跟進線程函數。
在線程函數中,首先就看到文件系統(tǒng)相關的東西:
代碼:
loc_7D668029: ; "FAT32"mov [ebp+var_4],
offset aFat32jmp short loc_7D668042mov [ebp+var_4], offset aExfat ;
"exFAT"jmp short loc_7D668042loc_7D668032: ;
"NTFS"mov [ebp+var_4], offset aNtfsjmp short loc_7D668042loc_7D66803B: ;
"FAT"mov [ebp+var_4], offset aFat
格式化的函數應該離這里不遠了,繼續(xù)往下,一些獲取句柄,發(fā)送消息,處理外殼通知的一些地方直接跳過,真正格式化的函數的的名字并沒有出現在地圖中。不過有兩個CALL,是通過函數指針來調用的。
代碼:
第一個:push dword ptr [esi+60h]lea eax, [esi+64h]push [ebp+var_C]push eaxpush
[ebp+var_4]push [ebp+var_10]push ebxcall dword ptr [esi+14h]
第二個:loc_7D668110:lea eax, [esi+48h]push eaxpush dword ptr [esi+4]push
dword ptr [esi+28h]call dword ptr [esi+2Ch]
接下來跑OD,瞧瞧這兩個函數指針指向哪個函數。
對話框函數執(zhí)行后,立馬蹦出了那個格式化對話框。跳轉到窗口過程,在創(chuàng)建線程附近下斷。然后設置格式化相關選項,開始格式化
代碼:
(格式化警告)7D6683E5 68 31000100 PUSH 0x100317D6683EA 33FF
XOR EDI,EDI7D6683EC 57 PUSH EDI7D6683ED 68 16700000
PUSH 0x70167D6683F2 FF75 08 PUSH DWORD PTR SS:
[EBP+0x8]7D6683F5
FF35 A4F5797D PUSH DWORD PTR DS:[0x7D79F5A4] ;
shell32.7D5900007D6683FB E8 274C1000 CALL shell32.ShellMessageBoxW ;
彈框函數在提示線程函數時,OD會出現一種假死現象,F8按下,程序狀態(tài)變?yōu)檫\行了,沒斷下來……解決方法:
在之前按F8的地方,往后一句代碼上,F2設個斷點,暫停程序,再回復運行(OD工具欄上的)。就可以斷下來了。繼續(xù)F8,如果卡了,重復上述步驟@_@,直到哪兩個函數指針的位置。
(線程函數中)
第一個函數指針調用代碼
代碼:
7D6680F3 68 4B71667D PUSH shell32.7D66714B ;
CallBackFunction7D6680F8 75 16 JNZ SHORT shell32.7D6681107D6680FA FF76 60
PUSH DWORD PTR DS:[ESI+0x60] ;
20487D6680FD 8D46 64 LEA EAX,DWORD PTR DS:[ESI+0x64]7D668100 FF75 F4
PUSH DWORD PTR SS:[EBP-0xC] ;
7D668103 50 PUSH EAX ;
L"Text"7D668104 FF75 FC PUSH DWORD PTR SS:[EBP-0x4] ;
L"NTFS"7D668107 FF75 F0 PUSH DWORD PTR SS:[EBP-0x10] ;
0xC7D66810A 53 PUSH EBX ; L"Z:\\"7D66810B FF56 14
CALL DWORD PTR DS:[ESI+0x14] ;
fmifs.FormatEx
第二個函數指針調用代碼:
代碼:
7D668110 8D46 48 LEA EAX,DWORD PTR DS:[ESI+0x48]7D668113 50
PUSH EAX7D668114 FF76 04 PUSH DWORD PTR DS:
[ESI+0x4]7D668117 FF76 28
PUSH DWORD PTR DS:[ESI+0x28]7D66811A FF56 2C
CALL DWORD PTR DS:[ESI+0x2C]
瞧瞧ESI結構里是啥:
代碼:
dd ESI:00185280 00000002 //+000185284 00000019 //+400185288 0000FFFF
//+80018528C 00000001
//+c00185290 696D0000 fmifs.696D0000
//+1000185294 696D1EDF fmifs.FormatEx
//+1400185298 696D27A5 fmifs.QuerySupportedMedia
//+180018529C 696D2743 fmifs.EnableVolumeCompression
//+1c001852A0 696D33E0 fmifs.ChkdskEx
//+20001852A4 696D2BED fmifs.QueryDeviceInformation+
//+24001852A8 6CFE0000 diskcopy.6CFE0000
//+28001852AC 6CFE2FC8 diskcopy.#1 //+2c
最后,找到兩個模塊 fmifs.dll (FormatEx函數)和 diskcopy.dll,用PEditor瞧瞧,這兩個模塊有啥導出函數。
diskcopy.dll
fmifs.dll
接著就是弄清里面的函數怎么用了。貌似FormatEx未文檔話,上百度,果然有結果。A下來,改改,能用了,FormatEx回調里面,貌似信息量很多,沒仔細調,而且容量小的磁盤,沒有進度信息貌似沒有。(整個外殼包裝一下)
Src:FormatDisk.rar.