Парсинг CDB-файла MikroTik с помощью PowerShell

В этой статье мы рассмотрим, как извлечь все текстовые строки из бинарного CDB-файла MikroTik и вывести их таблично по 5 колонок без фильтров и ограничений.

Что такое CDB-файл и зачем его парсить?

CDB-файлы — это бинарные базы данных, используемые MikroTik для хранения настроек и резервных копий. Часто в них можно найти полезные данные, включая логины, пароли и адреса, но они хранятся в бинарном виде.

Задача

  • Считать файл как бинарные данные
  • Извлечь из них все ASCII-строки длиной 3 и более символов
  • Вывести строки в виде таблицы с 5 колонками

PowerShell-скрипт с комментариями

# Путь к файлу CDB $filePath = "C:\Users\User\Desktop\backup.cdb" # Читаем весь файл как массив байт $fileBytes = [System.IO.File]::ReadAllBytes($filePath) # Функция для извлечения ASCII-строк минимальной длины из массива байт function Get-AsciiStrings { param([byte[]]$bytes, [int]$minLength = 3) $chars = @() # Временный массив символов текущей строки $results = @() # Массив всех найденных строк foreach ($b in $bytes) { # Проверяем, что байт — печатный ASCII символ (код от 32 до 126) if ($b -ge 32 -and $b -le 126) { $chars += [char]$b # Добавляем символ в текущую строку } else { # Если встретился непечатный символ и длина текущей строки >= minLength, # добавляем её в результаты if ($chars.Count -ge $minLength) { $results += -join $chars } $chars = @() # Сбрасываем временный массив для следующей строки } } # Обработка остатка после окончания цикла if ($chars.Count -ge $minLength) { $results += -join $chars } return $results } # Извлекаем все ASCII строки из файла $strings = Get-AsciiStrings -bytes $fileBytes -minLength 3 # Количество колонок для вывода $columns = 5 $rows = @() # Формируем объекты с динамическими колонками для вывода for ($i = 0; $i -lt $strings.Count; $i += $columns) { # Берём срез из $columns элементов (если меньше — берём остаток) $rowItems = $strings[$i..([Math]::Min($i + $columns - 1, $strings.Count - 1))] $obj = [PSCustomObject]@{} for ($j = 0; $j -lt $rowItems.Count; $j++) { $colName = "Column$($j + 1)" # Имена колонок: Column1, Column2 и т.д. $obj | Add-Member -NotePropertyName $colName -NotePropertyValue $rowItems[$j] } $rows += $obj } # Выводим таблицу с автоматическим подбором ширины колонок $rows | Format-Table -AutoSize

Как это работает

  • Читаем файл как последовательность байт
  • Ищем подряд идущие ASCII-символы длиной 3 и более, формируем из них строки
  • Группируем полученные строки по 5 штук и формируем строки таблицы
  • Выводим результат в табличном виде — удобно просматривать много строк подряд

Применение

Этот скрипт полезен для быстрого анализа содержимого CDB-файла MikroTik, когда нужно просто увидеть все текстовые данные подряд, без дополнительной фильтрации и поиска. Можно легко менять число колонок, задав переменную $columns — например, 3, 4, 6 и так далее.