![]() |
eXeL@B —› Вопросы новичков —› Расшировка CMS файла |
Посл.ответ | Сообщение |
|
Создано: 15 сентября 2019 21:24 · Личное сообщение · #1 Доброго времени суток. Имеется такая проблема. Есть файлы формата .pdf и их же пошифрованный с помощью КриптоПро вариант (с форматом .pdf.sig). Гугл сказать, что пошифрованы CMS обычным base64, без какого-либо ключа. Сначала я удалил из CMS файла заголовки -----BEGIN CMS----- и -----END CMS-----, затем на примитивном питоновском скрипте из двух строк сделал расшифровщик, который с этой задачей справился и я получил файл .pdf. Однако, там была помимо блока данных ещё и лишняя соль (то есть до начала заголовка "%PDF" и после "%%EOF"), которую пришлось отдельно удалять. Однако файл не открылся. При сравнении полученного и исходного файла выяснилось, что в полученном файле отдельно записались в определенных местах дополнительные ненужные байты, ломающие всю структуру. https://dropmefiles.com/0EyJF В архиве три файла. shema.pdf - рабочий исходник, затем пошифрованный файл, и файл shema_copy.pdf - полученный обработанный вариант. Вопрос. Имел ли кто-то успешный опыт расшифровки подобных файлов и как с этим справиться, чтобы получить рабочий оригинал ? Дело в том, что не у всех файлов есть исходники. И кроме того, не все файлы формата .pdf (то есть найти заголовки и окончания файла тоже практически не представляется возможным), а другого формата. ![]() |
|
Создано: 15 сентября 2019 23:04 · Поправил: Adler · Личное сообщение · #2 Slinger, ну так там все очевидно. Они не "пошифрованы", а подписаны, да и base64, это кодирование, а не шифрование. Если убрать мусор до и после заголовка (перед %PDF и после %EOF), то в полученном на каждой 10000h позиции вставлены 5 байт (04 83 01 00 00), а начиная с 150000h - 4 байта (04 82 C0 AB). В другом файле может будет иначе, но закономерность прослеживается легко. Где-то я уже такое встречал, но что-то никак не могу вспомнить... ![]() |
|
Создано: 16 сентября 2019 01:33 · Личное сообщение · #3 Вариант 1 Если инструмент не важен, то можно воспользоваться оригинальным cryptcp от Крипто Про: Пример использования: Code:
Где scheme.msg - это твой файл "shema.sig", а "scheme.pdf" - имя файла, в который будет сохранено содержимое сообщения. Соответствующий сертификат должен быть установлен в системе. Примерный выхлоп: Code:
Вариант 2 Если же очень хочется накатать свой собственный инструмент, то смотри в сторону реализации в CMSSignedData Вариант 3 Можно обработать оригинальный файл без каких-либо модификаций, в оригинальном виде, со строками " -----BEGIN CMS----- " и "-----END CMS----- "Code:
См. ниже примечания в шаге 4, требуется установка GOST Engine для OpenSSL. Если хочется разобраться в формате: Декодировать ручками (почти) и с помощью OpenSSL: 1. Отрезать "-----BEGIN CMS-----" и "-----END CMS-----", сохранить base64 текст в файл msg.b64. Это не обязательный шаг, см. ниже пример с прямым декодированием с помощью OpenSSL. 2. Декодировать данные командой: Code:
На выходе получим файл в DER кодировке. 3. Распарсить ASN.1 данные с помощью OpenSSL: Code:
Результат парсинга будет сохранён в текстовый файл "msg-info.txt". Выхлоп (HEX DUMP поскипан): Code:
Где с 51 по 1425739 - данные документа (PDF) чанками максимальным размером 65536 байт. 4. Проверяем, что у нас как минимум OpenSSL 1.1, ставим GOST Engine для поддержки шифрования и подписей по ГОСТ: Тестирование установленного движка ГОСТ: Code:
Выхлоп: Code:
Если движок ГОСТ не будет корректно установлен, то на следующем шаге будет получено сообщение об ошибке, типа такого: Code:
5. Извлекаем файл из сообщения: Code:
Флаг "-noverify" позволяет проигнорировать подпись и извлечь файл без лишних проверок. Разумеется, можно обработать оригинальный файл без каких-либо модификаций, в оригинальном виде, со строками " -----BEGIN CMS----- " и "-----END CMS----- "Code:
Где scheme.pdf.sig - оригинальный файл CMS. Обрати внимание на параметр -inform PEM, который позволяет напрямую обрабатывать исходный файл в формате PEM. Выхлоп: Verification successful Файл "scheme.pdf" сохранён в папке. 6. Проверяем целостность: Code:
689fcd09000c17da5e8a1be5af9ac316bbffd5a7 scheme.pdf Совпадает с исходным файлом. ОК. Вариант 4 Расшифровка онлайн с помощью сервера проверки электронной подписи КриптоПро DSS: 1. Выбрать файл "scheme.sig" 2. Загрузить файл на сервер. 3. Если параметры не были опеределены автоматически, то выбрать: - Формат подписи: Подпись в формате CMS - Параметры: Присоединённая подпись 4. Нажимаем Снять и проверить. Будет предложено сохранить файл "scheme.pdf". 5. На выходе получаем файл "scheme.pdf", содержимое которого полностью совпадает с исходным файлом: Code:
----- EnJoy! ![]() |
|
Создано: 16 сентября 2019 03:03 · Личное сообщение · #4 |
|
Создано: 16 сентября 2019 10:28 · Личное сообщение · #5 Adler Спасибо. Я тоже вечером дописал инструмент для декодирования и выпиливания того, что мне нужно. 1. Соль до заголовка почему-то разная у файлов, но благо сигнатура файла (спец символы) есть и в .pdf, и в других кодированных файлах, поэтому здесь просто повезло. 2. Соль после окончания файла разная, но начинается с одних и тех же символов, поэтому отследить её вполне можно. 3. Далее удаляю байты "04 83 01 00 00", которые расположены на всё протяжении файла на смещениях, кратные 10000h 4. Последние 4 байта уникальны, но их тоже можно отследить. Как итог - рабочий файл Jupiter Огромное спасибо за развёрнутый ответ и за описание работы и проверки! SReg На выходе получаю .pdf нулевого размера. Сначала выбирал обычный .sig, потом из .sig удалил заголовок и окончание (BEGIN CMS и END CMS), но результат тот же. ![]() |
|
Создано: 16 сентября 2019 10:50 · Личное сообщение · #6 |
|
Создано: 16 сентября 2019 12:01 · Личное сообщение · #7 Slinger пишет: Соль до заголовка почему-то разная у файлов Это не соль, а структура OCTET STRING формата ASN.1, которую я описал выше.Code:
Это блоки, из которых состоит документ. Блок OCTET STRING в ASN.1 ограничен размером в 65536 (10000h) байт, поэтому файл и собирается из кусочков.
----- EnJoy! ![]() |
|
Создано: 16 сентября 2019 12:05 · Личное сообщение · #8 |
![]() |
eXeL@B —› Вопросы новичков —› Расшировка CMS файла |