cronodump/README.md

115 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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).