115 lines
10 KiB
Markdown
115 lines
10 KiB
Markdown
# 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 <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](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). |