FineArt News

親愛的,我把檔案變不見了

Windows中的每個檔案都會有屬性,其中包含了唯讀、隱藏2種屬性。如果在檔案總管中,對每個檔案點選「右鍵」再點選「內容」,或者按住 「Alt 鍵」後再連點滑鼠左鍵 2 次,就可以看到檔案內容的相關資訊,其中有「屬性」區塊,可設定唯讀、隱藏 2 種屬性。唯讀屬性表示檔案僅能讀取,無法修改。而隱藏屬性則是另一種附加的條件,可以在檔案總管中,透過開關對有隱藏屬性的檔案進行隱藏,這樣,就不會在檔案總管中顯示有隱藏屬性的檔案,這些簡單的設定,可以避免有心人士,在你的電腦上,查找機密檔案。不過,因為這種方法是檔案總管的基本操作,也不是真正的隱藏檔案,無法阻擋有心人的窺探。

 

使用軟體技術,真正的把檔案變不見

前文簡單的說明了,在Windows 中如何使用隱藏屬性簡單的隱藏檔案,但這是通用的簡單技巧,我們可以進一步使用軟體技術,實作進階的檔案隱藏功能。

STEP 1:決定檔案系統的攔截方案

要實作檔案隱藏,首先我們須要先決定對Windows 檔案系統的攔截點。

為了方便說明攔截點的方案,我們可以先看看下面這個故事,假設你已經知道,在新竹市有一個逃犯,會隨機撘乘市內公車32路或是64路到達新竹火車站,再經由新竹火車站,轉乘火車逃到外地,身為刑警的你,不知道犯人何時會逃亡,那麼你應該在那些地方,佈置埋伏探員來抓嫌犯?

  • 方案一:你可以在每台32路公車及64路公車上埋伏探員,這樣可以最早期的抓到犯人,但是因為每一台公車都要佈署探員,需要比較龐大的人力 (見下圖藍色探員)。
  • 方案二:你可以將探員埋伏在新竹火車站,因為32路公車及64路公車的終點都在火車站交匯,可以使用較精簡的人力(見下圖綠色探員)。

 

Windows系統中,可以如方案一,將檔案系統的攔截點設在高階程式,這樣可以針對每一個Win32/Win64 App進行攔截。如果將攔截點設在高階程式,我們就必須有一個方法, 能針對每一個Win32/Win64 App 32路公車及64路公車),注入獨立的攔截桯式(藍色探員)。

使用方案二,將檔案系統的攔截點設在Windows 的底層,這樣就可以在單一驅動程式下,攔截全部的檔案系統,而驅動程式,可以使用 Mini Filter Driver 進行設計。

下面的例子,分別展示了2App,由Notepad.exe64路公車)及Winword.exe32路公車)使用'開檔'的流程。事實上,我們可以使用前述的任一方案,對檔案系統進行攔截 ( 綠色探員及藍色探員 )

 

STEP 2:決定要攔截的 API

在Windows下有很多種檔案系統,例如:FAT32, NTFS…,但是Windows使用統一的API來存取這些檔案系統,所以我們不必管這些不同檔案系統之間的差異,程式設計師,只須要瞭解如何調用適當的Windows API ,即可操作Windows檔案系統。

以高階攔截 API HOOK為例,任何一個App ( 例如:檔案總管) 要讀取目錄 C:\A 下面的檔案時,須要3 個步驟(如下圖)。

  • 步驟一:先使用 FindFirst 找到目錄 C:\A 下面的第一個檔案。
  • 步驟二:使用 FindNext 找後續的檔案,因為目錄 C:\A 下的子檔案或目錄不知道有多少個,所以可能會用FindNext 很多次,每次都會一一傳回後續檔案,直到檔案全部找完。
  • 步驟三:使用FindClose 關閉查找檔案。

 

攔截API之後進行內容過濾

有了(1)攔截點,以及(2)攔截點針對的API之後,就可以很容易實作隱藏檔案。

以上面的例子( 方案一)來說,我們要攔截至少2個API (FindFirst, FindNext)。

攔截API 可以讓我們針對由 Windows底層 API傳上來的檔案列表進行過濾,過濾完之後,再將過濾後的檔案列表,返回給上層的App。

例如:某一關鍵檔案C:\A\A8.TXT在檔案系統中原本是存在的,但可以在 API攔截之後過濾,刪除A8.TXT資訊,這樣App 就得不到A8.TXT 的訊息,總之,對於App 來說,只要透過FindFirst, FindNext這2 個 API去列舉 C:\A目錄下的檔案列表, A8.TXT 就不會上傳,也就是被隱藏起來了。

 

結論

本文我們簡單地討論了基本的檔案總管隱藏檔案操作,以及如何使用API Hook設計進階的隱藏檔案方案,這種技術普遍用於駭客隱藏自身的執行檔案,或是安全防護軟體,用來隱藏重要的文件。

技術不分好壞,端看怎麼使用。

我們要注意的是,隱藏檔案並不等於檔案不見,實際上,檔案系統中是存在這個隱藏檔案,但是透過攔截API之後的進一步過濾,可以讓應用程式’看不到’這個檔案。所以就資安風險上來說,隱藏檔案,並不是一個安全的方案,因為還是有很多種手段能夠破解這些方案,未來有機會時可以再談談這些破解方法。