1. Установить Smartcard Sniffer
Если включён Secure Boot (версии Windows 8 и выше), то инфраструктура AppInit_DLLs выключена.
Я делал на Windows 7 x64.
1.1. Скачать https://code.google.com/p/smartcard-sniffer/
1.2. Библиотеку необходимой разрядности SmartcardSniffer.dll положить в папку
1.3. Прописать в реестре загрузку SmartcardSniffer.dll и значения переменных
Код: Выделить всё
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"AppInit_DLLs"="C:\\1\\SmartcardSniffer.dll"
"LoadAppInit_DLLs"=dword:00000001
"RequireSignedAppInit_DLLs"=dword:00000000
2. Получить дамп диалога приложения с токеном
Для этого выполнить любую операцию, требующую передачу ключа в приложение.
Например, выполнить КриптоПро CSP -> Сервис -> Протестировать.
После этого в папке, где лежит SmartcardSniffer.dll, появляется файл rundll32.exe.txt, в котором сохранён дамп диалога приложения с токеном.
2.1. Разбить дамп на отдельные файлы диалога
2.1.1. Скачать writeBinaryAPDU.pl - https://github.com/votadlos/Antitoken/b ... aryAPDU.pl
2.1.2. Скачать и установить Perl - https://strawberryperl.com/download/5.3 ... -64bit.msi
2.1.3. Запустить
Код: Выделить всё
perl writeBinaryAPDU.pl < rundll32.exe.txt
В результате rundll32.exe.txt будет разобран на бинарные файлы вида "001_out(4)39_6A_42_32", где
001 - идентификатор последовательности запрос-ответ;
out - направление передачи: out - из токена в приложение, in - от приложения в токен;
(4) - количество переданных/полученных байтов;
39_6A_42_32 - первые 4 байта.
3. Собрать контейнер
3.1. primary.key - размер 36 байт, начинается с 30_22_04_20
Ищем файлы вида №_out(36)30_22_04_20.
У меня таких было 2 штуки, размером 68 байт и 80 байт, начало одинаковое, в конце нули, взял один и обрезал до 36 байт.
3.2. masks.key - размер 56 байт, начинается с 30_36_04_20
Ищем файлы вида №_out(56)30_36_04_20.
У меня таких было 2 штуки, размером по 64 байта, одинаковые, в конце нули, взял один и обрезал до 56 байт.
3.3. header.key - самый большой файл.
Находим файлы с самым большим объёмом, плюс берём кусок до и кусок после.
У меня он передавался два раза, состоял из 16 частей - 10 байт (379_out(10)30_82_0B_26)+ 14 * 200 байт + 48 байт (394_out(48)1F_E6_2E_0D), всего 2 858 байт. Соединил все части командой
Код: Выделить всё
copy /B 379_out(10)30_82_0B_26 + ... + 394_out(48)1F_E6_2E_0D header.key
Либо положить все эти файлы в отдельную директорию и
Код: Выделить всё
copy /B * header.key
3.4. name.key - просто взял от другого контейнера
Затем положил на флэшку, с помощью CertFix (версии 1.1.27.3154) сделал экспортируемым и скопировал в реестр.