Загрузка данных


$dumpPath = "C:\Temp\TELEGRAM.dmp"
$outputPath = "C:\Temp\dump_readable.txt"

$fileStream = [System.IO.File]::OpenRead($dumpPath)
$outStream = [System.IO.StreamWriter]::new($outputPath, $false, [System.Text.Encoding]::UTF8)

$chunkSize = 50MB
$buffer = New-Object byte[] $chunkSize

# Фильтр: оставляет ТОЛЬКО кириллицу (\u0400-\u04FF), латиницу (\u0020-\u007E) и переносы строк
$regex = [System.Text.RegularExpressions.Regex]::new('[\u0400-\u04FF\u0020-\u007E\r\n]{4,}')

while (($bytesRead = $fileStream.Read($buffer, 0, $chunkSize)) -gt 0) {
    # Чтение с прямого смещения (четные байты)
    $textEven = [System.Text.Encoding]::Unicode.GetString($buffer, 0, $bytesRead)
    foreach ($m in $regex.Matches($textEven)) {
        $outStream.WriteLine($m.Value)
    }

    # Чтение со смещения в 1 байт (на случай сдвига UTF-16LE в ОЗУ)
    if ($bytesRead -gt 1) {
        $textOdd = [System.Text.Encoding]::Unicode.GetString($buffer, 1, $bytesRead - 1)
        foreach ($m in $regex.Matches($textOdd)) {
            $outStream.WriteLine($m.Value)
        }
    }
}

$fileStream.Close()
$outStream.Close()

Write-Host "Готово! Весь читаемый текст без мусора сохранён в $outputPath" -ForegroundColor Green