无踪的风 发表于 2023-9-5 12:34:15

磁盘暴力填充器 安全销毁磁盘数据

<#*,:&cls
@echo off
cd /d "%~dp0"
set "batchfile=%~f0"
powershell -C "Set-Location -LiteralPath (::CurrentDirectory);. (::Create(::ReadAllText($env:batchfile,::GetEncoding(0) )) )"
pause
exit /b
#>

# 文件大小
$fillSize = 5gb
# 目标磁盘
$drvLetter = "c:"
# 数据类型:1=以随机填充,2=指定填充字节
$fillType = 1
# 指定字节
$fillByte = 0x88
# 循环次数
$fillCount = 300

$drvInfo = New-Object System.IO.DriveInfo -ArgumentList $drvLetter
$drvInfo
if (-not $drvInfo.IsReady) {
Write-Error '该磁盘未就绪'
return
}

$buff = New-Object 'byte[]' -ArgumentList 1mb

if ($fillType -eq 1) {
$rnd = New-Object Random
$rnd.NextBytes($buff)
}elseif ($fillType -eq 2) {
for ($i = 0; $i -lt $buff.Count; $i++) {
    $buff[$i] = $fillByte
}
}

$listFills = New-Object 'System.Collections.Generic.List'
for ($i = 1; $i -lt $fillCount+1; $i++) {
$listFills.Clear()
try {
    "第 ${i} 次填充"
    while ($drvInfo.AvailableFreeSpace -gt $fillSize) {
      $outName = ::NewGuid().ToString()
      $outFile = ::Combine($drvInfo.RootDirectory.FullName, $outName)
      $listFills.Add($outFile)
      try {
          $stream = New-Object System.IO.FileStream -ArgumentList ($outFile, 'Create', 'Write', 'Read', 1mb)
          $ctr = 0
          do {
            $stream.Write($buff, 0, $buff.Count)
            $ctr += $buff.Count
          } until ($ctr -ge $fillSize)
          $stream.SetLength($fillSize)
      } finally {
          if ($stream) {
            $stream.Close()
            $stream = $null
          }
      }
    }
} finally {}
"正在删除文件"
Remove-Item -LiteralPath $listFills -Force
trap {}
}


此代码只写不读,填满自动删除。如果中断需要手动删除残留文件,它是不会自动删除的。
工作原理:固态硬盘有PE次数,一旦被消耗完硬盘将变得不可靠。


使用方法:把代码另存为bat文件即可,测试内容自己修改后运行。

页: [1]
查看完整版本: 磁盘暴力填充器 安全销毁磁盘数据