https://anyfix.ru/ak-skopirovat-ne-eksportiruemyj-klyuch-ep-iz-esmart-token-i-jacarta.html взял отсюда

Нам понадобится:
1) Windows 7 (x86/x64), либо более поздние ОС, но с отключенным Secure Boot. Иначе, SmartcardSniffer работать не будет.
2) Редист Microsoft Visual C++ 2010 x86 (если не установлен)
3) Strawberry Perl 5.32.1.1 32bit — Нужен для работы скрипта, разделяющего дамп по действиям.
4) Драйвера esmart.
Легче всего, вставить esmart в USB, зайти на i.kontur.ru и настроить рабочее место, например, под работу с Диадок. Тогда установятся все нужные компоненты. Кстати! Самое главное — не устанавливать компоненты, да и вообще не работать по RDP! Компоненты не запустятся. Если нужно работать удалённо — запустите AnyDesk, либо VNC (ну, или чем вы там любите подключаться?). Если не хотите лишнего ставить — ссылка на скачивание.
4.1) Драйвера JaCarta.
Ставятся точно так же, как и драйвера esmart через i.kontur.ru.
5) КриптоПро (Если зайдёте на i.kontur.ru — то криптопро скачается сама. Если ставите руками — то вот свежая версия)
6) WinHEX
7) Некоторые советуют Total Commander, но мне удобнее пользоваться Q-Dir.
В нём нужно настроить: Меню Настройки\Размер файлов, там поставить галочки: «Внутренний алгоритм Q-Dir» и «Размер в байтах».

Готовую, настроенную версию можно стянуть тут.
8) Smartcard Sniffer качаем SmartcardSniffer и оттуда достаём «SmartcardSniffer.dll» в моём случае, т.к. у меня Win7x86 — дёргаю файлик из папки SmartcardSniffer-0.1\SmartcardSniffer\bin\x86.
Его кидаем на диск C:\, в папку «SmartcardSniffer» (Желательно, сделать именно так, как в инструкции, т.к. команды, в дальнейшем, будут опираться именно на этот путь).
Так же, нужно поправить реестр:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]»AppInit_DLLs»=»C:\\SmartcardSniffer\\SmartcardSniffer.dll»
«LoadAppInit_DLLs»=dword:00000001
«RequireSignedAppInit_DLLs»=dword:00000000
9) Файл writeBinaryAPDU.pl (готовый файл лежит здесь)
Помещаем его в “C:\SmartcardSniffer\”
10) CertFix версии 1.1.27.3154. Нужен для конвертации ключа в экспортируемый. Про более старые — ничего не скажу, а вот новые уже не могут конвертировать. И самое поганое — при первом же запуске — программа сама обновится до новой версии. Поэтому, ей нужно обломать доступ в интернеты.
11) Firewall App Blocker. Нужен для блокировки доступа в интернет CertFix.
Устанавливаем все компоненты и ОБЯЗАТЕЛЬНО перезагружаем компьютер.
I. Собственно, сам процесс извлечения ключа из ESMART:
1) Получаем дамп диалога КриптоПро с токеном:
1.1) Вставляем ключ в ПК,
1.2) Запускаем КриптоПро,
1.3) Открываем вкладку «Сервис»,
1.4) Нажимаем «Протестировать»
1.5) Выбираем ключ и вводим пароль (кто не знал — стандартный пароль от ruToken и ESMART Token — 12345678, от JaCarta 1234567890 (в старых версиях (до 15.01.2019) стоял 1eToken), админские пароли можно глянуть тут и тут),
1.6) В открывшемся окне, смотрим пункт «Экспорт ключа» и убеждаемся, что он действительно не экспортируемый. Жмём «Готово» и закрываем программу.

1.7) В папке “C:\SmartcardSniffer\” появится дамп-файл «rundll32.exe.txt»

2) Разбиваем дамп на отдельные файлы:
2.1) Запускаем консоль (Win+R, пишем CMD и жмём «Enter»)
2.2) В консоли меняем папку командой: cd C:\SmartcardSniffer

2.3) Пишем команду perl writeBinaryAPDU.pl < rundll32.exe.txt


2.4) Появится папка с кучей файлов

2.5) Сразу, чтоб облегчить жизнь, в папке, жмём Ctrl+F, в поиске вбиваем «in» и удаляем все файлы, содержащие в названии это слово.

3) Собираем контейнер:
3.1) Первым идёт primary.key
3.1.1) Ищем файл, содержащий в названии 30_22

У меня он один, но у вас могут быть их несколько.
3.1.2) Выбираем тот, что по меньше и перетаскиваем в WinHEX.

3.1.3)Видим, что в конце стоят нули. Подрезаем файл до 36 байт (у меня это были все нули):
3.1.3.1) Ставим курсор на последний ноль, зажимаем клавишу Shift и стрелочками двигаем курсор, выделяя данные (лучше выделить не все нули, а оставить сначала половину и посмотреть, сколько данных обрезали).
3.1.3.2) Жмём клавишу Del и смотрим сколько отрезали. Должно остаться 36 байт.

3.1.4) Сохраняем файл под именем primary.key куда-нибудь отдельно (я сохранил в C:\SmartcardSniffer\2)
3.2) Далее, идёт файл masks.key:
3.2.1) Ищем файл с именем, содержащем 30_36

3.2.2) Подрезаем его до 56 байт (так же как предыдущий) и сохраняем под именем masks.key.
3.3) Ну и самый геморный файл — header.key:
3.3.1) Ищем самые большие файлы (для этого нам и понадобится Q-Dir с настройкой отображения байтов).
3.3.2) Берём файл, идущий перед ними (весит обычно, 16 байт и в названии содержит 83_02 (по крайней мере, у меня во всех случаях так было)) и тот, что идёт после них (он чуть меньше самых больших файлов (бывает так, что в конце, может быть два одинаковых по размеру файла. Берём любой(см скриншот ниже))).

Распишу подробнее: нам нужен первый файл, обычно, в ESMART Token он называется *_out(16)30_82_0A_BE, в JaCarta, называется *_out(16)30_82_0A_32.
После 30_82, названия могут быть разными, однако, «out(16)30_82» присутствует всегда (по крайней мере, на моей тачке, у ESMART Token и JaCarta — точно.

В моём случае, их было 12. Может быть 14 (например, как у JaCarta)
3.3.3) Копируем эти файлы в отдельную папку (в данном случае, я скопировал в C:\SmartcardSniffer\3)
3.3.4) В консоли меняем рабочую папку на C:\SmartcardSniffer\3 (ну, или на ту, в которую вы скопировали файлы) командой cd C:\SmartcardSniffer\3

3.3.5) Пишем команду copy /B * header.key и жмём энтер

3.3.6) В папке C:\SmartcardSniffer\3 появился файл header.key

3.3.7) Его помещаем в папку к другим файлам.

3.4) Остаётся получить файл name.key. Конечно, можно его как-то вытащить из того сборища файлов, но легче взять готовый. Например, вот здесь. Отображаться в КриптоПро он будет как «Test_123», но потом, ключ легко будет переименовать после того, как вы сделаете его экспортируемым.
Если хотите — то вот вам файл с именами: esmart_1, esmart_2, esmart_3? jakarta_1, jakarta_2, jakarta_3, Export_1, Export_2, Export_3
3.4.1) Копируем файл в папку с primary.key, masks.key и header.key.
3.5) Переименовываем папку в «1234» (можно использовать любые 12 символов, (цифры и ТОЛЬКО латинские буквы) и закидываем папку на любую флешку или жёсткий диск, имеющий любую букву, кроме диска C:\ (я использую виртуальный диск (VHD). Примонтировал такую виртуальную «флешку» и балуешься).

3.6) Снова запускаем КриптоПро и находим сертификат.

3.7) Убеждаемся, что ошибок не обнаружено.

3.8) В принципе, ключ уже можно использовать так. Многие так и делают: закидывают папку на флешку и спокойно работают. Но можно пойти дальше и сделать ключ экспортируемым (на сколько это видно госорганам, когда подключаешься к их порталам — я не знаю. Но есть люди, которым принципиально нужно скопировать ключ на токен и использовать его как раньше.
Описание по конвертации ключа в экспортируемый, перейдите в раздел III.
II. Процесс извлечения ключа из JaCarta:
1) Выполняем пункты с 1 по 3.2.2, пункт 3.3 тоже похож, только файлов может быть меньше и после удаления файлов *in*, нужные нам файлы будут идти практически по порядку.

2) Ровно таким же способом, как описано в пунктах с 3.3.1 по 3.3.7 собираем header.key
3) И так же, используем любой name.key
III. Конвертация не экспортируемого ключа в экспортируемый.
1) Запускаем Firewall App Blocker и запрещаем CertFix выход в интернет (я на всякий случай запретил как входящие, так и исходящие подключения).



2) Запускаем CertFix от имени администратора и находим наш ключ. Смотрим на столбец «Экспорт закрытого ключа» и видим параметр «DENIED».
3) Зажимаем клавишу «Shift» на клавиатуре, нажимаем правой кнопкой мыши по ключу и выбираем пункт «Сделать экспортируемым (файловая система)».

4) После чего, получаем уведомление, что всё прошло успешно и резервная копия лежит в папке контейнера.

Если зайти в папку с ключом — можно увидеть каталог бэкапа.

5) Ну а дальше всё просто:
5.1) Запускаем КриптоПро, там жмём вкладку Сервис;
5.2) Жмём кнопку «Скопировать…»
5.3) Затем, кнопку «Обзор…»
5.4) Выбираем контейнер и жмём кнопку «Ок»
5.5) Можем задать другое имя контейнеру (я оставил по умолчанию), жмём «Готово»
5.6) Выбираем носитель (у меня Rutoken Lite), жмём «Ок»
5.7) Готово!
5.8) Тестируем сертификат.