Копируем неэкспортируемый контейнер с JaCarta LT

Примечание:

Автор ПО и методики — Сергей Солдатов

Данный способ работает не только на JaCarta LT и ESMART Token (нет личного опыта только сторонний отзыв, и непонятно какая именно модель 64K или ГОСТ).

Данное способ точно не работает на токенах Рутокен ЭЦП 2.0 и токенами формата PKCS#11

Что понадобится:
  1. Исходный токен JaCarta LT (на который записан оригинальный контейнер).
  2. Второй токен Rutoken Lite (сейчас удобней их юзать)
  3. Флешка (хотя по идеи и внешний HDD подойдет)
  4. Нужен чистый ПК желательно с Windows 7 x86/64 (я использовал x86). Потому что если включён Secure Boot (версии Windows 8 и выше), то инфраструктура AppInit_DLLs выключена.
Подготовка ПК для работы:
  1. Скачать и поставить Microsoft Visual C++ 2010 x86
  2. Скачать и поставить Strawberry Perl 5.32.1.1 32bit
  3. Скачать и поставить Единый Клиент JaCarta 3.0 32bit
  4. Скачать и поставить КриптоПро CSP 5.0.12600
  5. Скачать и распаковать WinHex
  6. Скачать и поставить Total Commander (просто с ним удобней)
    • Конфигурация => Настройка => Табуляторы => Размеры в панелях => «в байтах»
  7. Tokens.exe + CertFix.000032.exe
  8. Скачать Smartcard Sniffer (Копия проекта внизу)
    • Библиотеку необходимой разрядности SmartcardSniffer.dll кидаем в папку «C:\SmartcardSniffer\»
    • Прописать в реестре загрузку SmartcardSniffer.dll и значения переменных (кому лень ручками, есть .reg файл в архиве SmartSniffer.zip):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="C:\SmartcardSniffer\SmartcardSniffer.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000
  1. Скачать файл writeBinaryAPDU.pl (Копия проекта внизу)
    • Кидаем его в «C:\SmartcardSniffer\»
  2. Перезагружаем ПК
Получаем дамп диалога приложения с токеном:
  1. Вставляем наш ключ JaCarta LT в ПК, и выполняем любую операцию требующую работу с ключом, например тестирование.
    • Открываем КриптоПро и запускаем тестирование: КриптоПро CSP -> Сервис -> Протестировать -> Выбираем копируемый сертификат -> Дожидаемся окончания тестирования -> Закрываем КриптоПро CSP
  2. После этого в папке «C:\SmartcardSniffer\», появится файл rundll32.exe.txt, в котором сохранён дамп диалога приложения с токеном.
  3. Разбиваем дамп на отдельные бинарные файлы:
perl writeBinaryAPDU.pl < rundll32.exe.txt

Для хлебушков, команда выполняется в папке, где лежит файл rundll32.exe.txt

В результате rundll32.exe.txt будет разобран на бинарные файлы (появится отдельная папка) вида «001_out(4)39_6A_42_32», где:
001 — идентификатор последовательности запрос-ответ;
out — направление передачи: out — из токена в приложение, in — от приложения в токен;
(4) — количество переданных/полученных байтов;
39_6A_42_32 — первые 4 байта.

Собираем контейнер:

primary.key — размер 36 байт, начинается с 30_22_04_20

Ищем файлы вида №_out(36)30_22_04_20. У меня таких было 2 штуки, размером по 80 байт, начало одинаковое, в конце нули, взял один и обрезал через WinHex до 36 байт, результат сохранил как primary.key


masks.key — размер 56 байт, начинается с 30_36_04_20

Ищем файлы вида №_out(56)30_36_04_20. У меня таких было 2 штуки, размером по 64 байта, одинаковые, в конце нули, взял один и обрезал через WinHex до 56 байт, результат сохранил как master.key


header.key — самый большой файл.

Находим файлы с самым большим объёмом, плюс берём кусок до и кусок после. У меня таких файлов было много, но их все можно было разбить на группы и получилось 6 групп по 16 файлов (18 если учитывать нулевые).

Копируем все файлы в «C:\SmartcardSniffer\header» и склеиваем их командой:

copy /B * header.key

name.key — тут есть два варианта:

  • Просто взять от другого контейнера
  • Сгенерировать свой на базе дампа

Если с первым пунктом всё понятно, то со вторым чуть интересней. В дампе ищем файл — следующего вида №_out(длина имени)30_длина имени_16_длина имени — 2.

Интересен тот факт, что содержимое этого файла, в целом, не важно, поэтому можно сгенерить свой файл name.key, с соблюдением формата его первых четырех байт.

У себя я нашел один такой файл, 163_out(10)30_26_16_24. Из него и сделал name.key.

И накидал в него данных, чтобы привести его виду обычного name.key из рабочего контейнера:

Результат сохранил как name.key


Далее схема работы простоя, по аналогии со статьей с Rutoken Lite:

  1. Все полученные ключи кидаем в отделённую папку (числового вида, формата «2560») на флешку.
  2. Разблокируем
  3. Копируем на новый носитель.

Готово.

Значок

Token_JaCarta_LT

3 файл(ы) 22.71 MB
Подписаться
Уведомить о
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Ancyferov
Ancyferov
1 месяц назад

Можно сделать только п.8, остальное сделает программка на питоне.
https://bmcsoft.ru/forum/viewtopic.php?p=21479#p21479