Конвертер баз Cronos
Go to file
2024-12-30 14:26:18 +01:00
bin Initial commit 2024-12-28 15:35:05 +03:00
crodump Initial commit 2024-12-28 15:35:05 +03:00
docs Обновить docs/cronos-research.md 2024-12-30 14:26:18 +01:00
templates Initial commit 2024-12-28 15:35:05 +03:00
test_data/all_field_types Initial commit 2024-12-28 15:35:05 +03:00
.gitignore Initial commit 2024-12-28 15:35:05 +03:00
LICENSE Initial commit 2024-12-28 15:35:05 +03:00
README.md Обновить README.md 2024-12-30 14:21:10 +01:00
setup.py Initial commit 2024-12-28 15:35:05 +03:00

cronodump

Утилита cronodump может анализировать большинство баз данных, созданных с помощью программного обеспечения CronosPro, и экспортировать их в несколько выходных форматов.

Это программное обеспечение пользуется популярностью среди российских государственных учреждений, компаний и правоохранительных органов.

Быстрый старт

В своей самой простой форме, без каких-либо зависимостей, команда croconvert создаёт CSV-представление всех таблиц базы данных, а также копию всех файлов, содержащихся в базе данных:

bin/croconvert --csv test_data/all_field_types

По умолчанию создаётся каталог cronodump-YYYY-mm-DD-HH-MM-SS-ffffff/, содержащий CSV-файлы для каждой найденной таблицы. В этом каталоге также будет создана директория Files-FL/, содержащая все файлы, хранящиеся в базе данных, независимо от того, ссылаются ли они (до сих пор) на какие-либо данные в таблицах. Все файлы, которые фактически ссылаются (и, таким образом, известны по своим именам), будут сохранены в директории Files-Referenced. С помощью опции --outputdir можно выбрать место для сохранения дампа.

Если вы получаете сообщение об ошибке или просто нечитаемые данные, вероятно, ваша база данных защищена. Вам может потребоваться изучить опции --dbcrack или --strucrack, которые описаны ниже.

Шаблоны

Команда croconvert может использовать мощный фреймворк шаблонов Jinja для создания дополнительных форматов файлов, таких как PostgreSQL и HTML.

Действие по умолчанию для croconvert — это преобразование базы данных с использованием шаблона html. Для использования других шаблонов вы можете настроить параметры соответствующим образом.

python3 -m venv ./venc
. venv/bin/activate
pip install jinja2
bin/croconvert test_data/all_field_types > test_data.html

чтобы выгрузить HTML-файл, содержащий все таблицы, найденные в базе данных, список файлов с возможностью их скачивания через встроенные data URI, а также встроенные изображения из таблиц. Обратите внимание, что полученный HTML-файл может быть огромным для больших баз данных, что может вызвать значительную нагрузку на браузеры при попытке открыть его.

Команда -t postgres выведет схемы таблиц и записи в формате валидных выражений CREATE TABLE и INSERT INTO в стандартный поток вывода. Этот дамп затем можно импортировать в базу данных PostgreSQL. Учтите, что символ обратного слэша не экранируется, поэтому параметр standard_conforming_strings должен быть отключён.

Инспекция

Существует инструмент bin/crodump, предназначенный для дальнейшего изучения баз данных. Это может быть полезно для извлечения метаданных, таких как пути к файлам изображений таблиц или формы ввода и вывода. Не все метаданные пока полностью разобраны, поэтому может потребоваться опыт работы с бинарными дампами.

Скрипт crodump предлагает множество опций, но в самом базовом виде команда strudump предоставляет обширный набор метаданных для дальнейшего анализа:

bin/crodump strudump -v -a test_data/all_field_types/

Опция -a указывает команде strudump выводить данные в ASCII вместо шестнадцатеричного дампа.

Для низкоуровневого дампа содержимого базы данных используйте:

bin/crodump crodump -v  test_data/all_field_types/

Опция -v указывает crodump включать все неиспользуемые диапазоны байтов. Это может быть полезно для идентификации удалённых записей.

Для более высокоуровневого дампа содержимого базы данных используйте:

bin/crodump recdump  test_data/all_field_types/

Эта команда выведет шестнадцатеричный дамп всех записей для всех таблиц.

Расшифровка защищённых паролем баз данных

Начиная с версии Cronos v4, базы данных могут быть защищены паролем. Эта защита работает за счёт изменения KOD sbox. Утилита cronodump предоставляет два метода для извлечения KOD sbox из базы данных:

Оба метода основаны на статистическом анализе и не всегда могут дать корректный результат.

1. strudump

Если файл CroStru.dat в базе данных достаточно большой, то можно легко извлечь изменённый KOD-sbox из файла CroStru. Для этого используется опция --strucrack:

crodump --strucrack  recdump <dbpath>

2. dbdump

Если файлы Bank и Index сжаты, то KOD sbox можно извлечь путём анализа четвёртого байта каждой записи, который должен декодироваться в ноль.

Для этого используется опция --dbcrack

crodump --dbcrack  recdump <dbpath>

Установка

cronodump требует Python версии 3.7 или выше. Программа протестирована на Linux, MacOS и Windows. Есть одно необязательное требование: использование движка шаблонов Jinja2, однако установка возможна и без него.

Существует несколько способов установки cronodump:

  • Вы можете запускать cronodump напрямую из клонированного git-репозитория, используя скрипты в подкаталоге bin.
  • Вы можете установить cronodump в своей среде Python, запустив команду: python setup.py build install.
  • Вы можете установить cronodump из публичного from the public pypi repository с помощью команды pip install cronodump.
  • Вы можете установить cronodump вместе с движком шаблонов Jinja2 из публичного pypi repository с помощью команды pip install cronodump[templates].

Терминология

Мы решили использовать более общепринятую терминологию для обозначения баз данных, таблиц, записей и других элементов. Ниже представлена таблица, демонстрирующая, как Cronos называет эти элементы:

what cronos english cronos russian
Database Bank Банк
Table Base Базы
Record Record Записи
Field Field поля
recid System Number Системный номер

License

cronodump выпущен по лицензии MIT license.

Ссылки

cronodump основан на документации формата файлов, найденной в старых версиях Cronos, а также на последующей реализации парсера для старого формата файлов. Однако вместо эвристического подхода для предположения смещений и параметров обфускации, используется более строгий парсер. Подробности можно найти в документации.