# cronodump Утилита **cronodump** может анализировать большинство баз данных, созданных с помощью программного обеспечения [CronosPro](https://www.cronos.ru/), и экспортировать их в несколько выходных форматов. Это программное обеспечение пользуется популярностью среди российских государственных учреждений, компаний и правоохранительных органов. # Быстрый старт В своей самой простой форме, без каких-либо зависимостей, команда **croconvert** создаёт [CSV](https://ru.wikipedia.org/wiki/CSV)-представление всех таблиц базы данных, а также копию всех файлов, содержащихся в базе данных: ```bash 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](https://jinja.palletsprojects.com/en/3.0.x/) для создания дополнительных форматов файлов, таких как PostgreSQL и HTML. Действие по умолчанию для `croconvert` — это преобразование базы данных с использованием шаблона `html`. Для использования других шаблонов вы можете настроить параметры соответствующим образом. ```bash python3 -m venv ./venc . venv/bin/activate pip install jinja2 bin/croconvert test_data/all_field_types > test_data.html ``` чтобы выгрузить HTML-файл, содержащий все таблицы, найденные в базе данных, список файлов с возможностью их скачивания через встроенные [data URI](https://en.wikipedia.org/wiki/Data_URI_scheme), а также встроенные изображения из таблиц. Обратите внимание, что полученный HTML-файл может быть огромным для больших баз данных, что может вызвать значительную нагрузку на браузеры при попытке открыть его. Команда `-t postgres` выведет схемы таблиц и записи в формате валидных выражений `CREATE TABLE` и `INSERT INTO` в стандартный поток вывода. Этот дамп затем можно импортировать в базу данных PostgreSQL. Учтите, что символ обратного слэша не экранируется, поэтому параметр [`standard_conforming_strings`](https://www.postgresql.org/docs/current/runtime-config-compatible.html#GUC-STANDARD-CONFORMING-STRINGS) должен быть отключён. # Инспекция Существует инструмент `bin/crodump`, предназначенный для дальнейшего изучения баз данных. Это может быть полезно для извлечения метаданных, таких как пути к файлам изображений таблиц или формы ввода и вывода. Не все метаданные пока полностью разобраны, поэтому может потребоваться опыт работы с бинарными дампами. Скрипт `crodump` предлагает множество опций, но в самом базовом виде команда `strudump` предоставляет обширный набор метаданных для дальнейшего анализа: ```bash bin/crodump strudump -v -a test_data/all_field_types/ ``` Опция `-a` указывает команде strudump выводить данные в ASCII вместо шестнадцатеричного дампа. Для низкоуровневого дампа содержимого базы данных используйте: ```bash bin/crodump crodump -v test_data/all_field_types/ ``` Опция `-v` указывает crodump включать все неиспользуемые диапазоны байтов. Это может быть полезно для идентификации удалённых записей. Для более высокоуровневого дампа содержимого базы данных используйте: ```bash 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 ### 2. dbdump Если файлы Bank и Index сжаты, то KOD sbox можно извлечь путём анализа четвёртого байта каждой записи, который должен декодироваться в ноль. Для этого используется опция `--dbcrack` crodump --dbcrack recdump # Установка `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](https://pypi.org/project/cronodump/) с помощью команды `pip install cronodump`. * Вы можете установить `cronodump` вместе с движком шаблонов `Jinja2` из публичного [pypi repository](https://pypi.org/project/cronodump/) с помощью команды `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](LICENSE). # Ссылки `cronodump` основан на [документации формата файлов, найденной в старых версиях Cronos](http://sergsv.narod.ru/cronos.htm), а также на [последующей реализации парсера для старого формата файлов](https://github.com/occrp/cronosparser). Однако вместо эвристического подхода для предположения смещений и параметров обфускации, используется более строгий парсер. Подробности можно найти в [документации](docs/cronos-research.md).