SDelete v2.04
作者:Mark Russinovich
發行日期:2020 年 11 月 25 日
下載 SDelete (518 KB)
簡介
Windows NT/2000 (Win2K) C2 合規性的其中一項功能是實作物件重複使用保護。 這表示當應用程式佈建檔案空間或虛擬記憶體時,無法檢視先前儲存在資源中的資料Windows NT/2K 配置。 Windows NT零填滿記憶體,並將檔案放置於磁片上的磁區零,再將任一類型的資源呈現給應用程式。 不過,物件重複使用不會指定檔案在刪除之前所佔用的空間為零。 這是因為Windows NT/2K 的設計是假設作業系統控制系統資源的存取權。 不過,當作業系統不在作用中時,可以使用原始磁片編輯器和復原工具來檢視和復原作業系統已解除配置的資料。 即使您使用 Win2K 的加密檔案系統加密檔案 (EFS) ,檔案的原始未加密檔案資料在建立新加密版本的檔案之後,仍會在磁片上保留。
確保已刪除的檔案,以及您使用 EFS 加密的檔案,唯一的方法是使用安全的刪除應用程式進行復原。 安全刪除應用程式會使用顯示弱式刪除檔案之磁片媒體中顯示弱式刪除檔案之磁片資料的技術覆寫磁片資料,即使使用可讀取磁片資料模式的復原技術也一樣。 SDelete (Secure Delete) 這類應用程式。 您可以使用 SDelete 安全地刪除現有的檔案,以及安全地清除磁片未配置部分中的任何檔案資料, (包括您已刪除或加密) 的檔案。 SDelete 會實作國防部清除和清理標準 DOD 5220.22-M,讓您確信一旦使用 SDelete刪除,檔案資料就會永遠消失。 請注意, SDelete 會安全地刪除檔案資料,但不會刪除位於可用磁碟空間中的檔案名。
使用 SDelete
SDelete 是採用許多選項的命令列公用程式。 在任何指定的使用中,它可讓您刪除一或多個檔案和/或目錄,或清除邏輯磁片上的可用空間。 SDelete 接受萬用字元做為目錄或檔案規範的一部分。
使用方式:
sdelete [-p passes] [-r] [-s] [-q] < 檔案或目錄 > [...]
sdelete [-p passes] [-z|-c [percent free]] < 磁碟機號 [...]>
sdelete [-p passes] [-z|-c] < 實體磁片編號>
參數 | 描述 |
---|---|
-c | 清除可用空間。 指定可供執行中系統使用的選項空間數量。 |
-p | 指定預設為 1) 的覆寫傳遞數目 (。 |
-r | 移除Read-Only屬性。 |
-s | 遞迴子目錄。 |
-z | 零可用空間 (適用于虛擬磁片優化) 。 |
-nobanner | 請勿顯示啟動橫幅和著作權訊息。 |
SDelete 的運作方式
安全地刪除沒有特殊屬性的檔案相當直接:安全刪除程式只會以安全刪除模式覆寫檔案。 更棘手的是安全地刪除Windows NT/2K 壓縮、加密和疏鬆檔案,並安全地清除磁碟空間。
壓縮、加密和疏鬆是由 NTFS 在 16 個叢集區塊中管理。 如果程式寫入這類檔案 NTFS 的現有部分,會在磁片上配置新的空間來儲存新的資料,並在寫入新資料之後解除配置先前由檔案佔用的叢集。 NTFS 基於與資料完整性相關的原因,而基於資料完整性的考慮而採用這個保守的方法,而且在壓縮和疏鬆檔案的情況下,如果新的配置大於新壓縮資料 (新的壓縮資料大於舊壓縮資料) 。 因此,覆寫這類檔案無法成功從磁片刪除檔案的內容。
若要處理這些類型的檔案 ,SDelete 依賴重組 API。 使用重組 API, SDelete 可以精確地判斷磁片上屬於壓縮、疏鬆和加密檔案的資料所佔用的叢集。 一旦 SDelete 知道哪些叢集包含檔案的資料,就可以開啟磁片進行原始存取,並覆寫這些叢集。
清除可用空間會產生另一項挑戰。 由於 FAT 和 NTFS 沒有方法可讓應用程式直接定址可用空間, 因此 SDelete 有兩個選項之一。 第一個是它可以像壓縮、疏鬆和加密的檔案一樣,開啟磁片進行原始存取,並覆寫可用空間。 此方法發生重大問題:即使 已將 SDelete 編碼為能夠完全能夠計算 NTFS 和 FAT 磁片磁碟機的可用空間部分, (非簡單) 的專案,它仍會執行與系統上作用中檔案作業發生衝突的風險。 例如,假設 SDelete 判斷叢集是免費的,而目前檔案系統驅動程式 (FAT,NTFS) 決定為另一個應用程式正在修改的檔案配置叢集。 檔案系統驅動程式會將新資料寫入叢集,然後 SDelete 會隨著並覆寫新寫入的資料:檔案的新資料已消失。 如果叢集配置給檔案系統中繼資料,因為 SDelete 會損毀檔案系統上的磁片結構,所以問題甚至更糟。
第二種方法以及 SDelete 採用的方法,是間接覆寫可用空間。 首先, SDelete 會配置它可以的最大檔案。 SDelete 會使用非快取的檔案 I/O 來執行此動作,因此不會擲回 NT 檔案系統快取的內容,並以 與 SDelete空間存放檔案相關聯的無用資料取代。 由於非快取檔案 I/O 必須是磁區 (512 位元組) 對齊,因此即使 SDelete 無法進一步成長檔案,也可能會有一些未配置給 SDelete 檔案的剩餘空間。 若要擷取任何剩餘的空間 SDelete ,接下來會配置它可以的最大快取檔案。 針對這兩個檔案 SDelete 會執行安全覆寫,確保先前可用的所有磁碟空間都會受到安全清除。
在 NTFS 磁片磁碟機 SDelete的作業配置並覆寫這兩個檔案之後,不一定通過。 SDelete 也必須填入 NTFS MFT (Master File Table 的任何現有可用部分,) 符合 MFT 記錄內的檔案。 MFT 記錄的大小通常為 1 KB,而且磁片上的每個檔案或目錄至少需要一個 MFT 記錄。 小型檔案會完全儲存在其 MFT 記錄內,而不符合記錄內的檔案則會配置 MFT 外部的叢集。 所有 SDelete 必須負責處理可用 MFT 空間的配置最大檔案,當檔案佔用 MFT Record NTFS 中的所有可用空間時,檔案將無法變大,因為磁片上沒有可用的叢集, (兩個先前配置的 SDelete 檔案都保留) 。 SDelete 接著會重複此程式。 當 SDelete 無法再建立新的檔案時,它知道 MFT 中的所有先前可用記錄都已完全填入安全覆寫的檔案。
若要覆寫您刪除之檔案的檔案名, SDelete 會重新命名檔案 26 次,每次以連續字母字元取代檔案名的每個字元。 例如,「foo.txt」 的第一個重新命名會是 「AAA」。AAA」。
當清除磁碟空間時 ,SDelete 不會安全地刪除檔案名的原因是刪除它們需要直接操作目錄結構。 目錄結構可以有包含已刪除檔案名的可用空間,但可用目錄空間無法配置給其他檔案。 因此, SDelete 無法配置此可用空間,以便安全地覆寫它。
下載 SDelete (518 KB)
執行于:
- 用戶端:Windows Vista 和更新版本
- 伺服器:Windows Server 2008 和更新版本
- Nano Server:2016 和更新版本