Копирование неэкспортируемого ключа с JaCarta LT

Программирование, Хакинг, Безопасность, Софт, Железо, а также всё связанное с компьютерами
Аватара пользователя
Андрей
Архитектор
Сообщения: 7935
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 746 раз
Поблагодарили: 498 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Андрей »

Stanislav2112 писал(а):
13 фев 2023, 19:18
Добрый вечер! Токен JaCarta LT. Проделал всё по инструкции, удалось собрать контейнер, он распознаётся КриптоПро, но с несколькими ошибками. Header.key пробовал компоновать по-разному, но в итоге целостным контейнер получается именно по описанной схеме (1 обрезок до + 14 файлов по 200 байт + маленький кусочек после). Есть ли предположения, что ещё может быть?
https://disk.yandex.ru/i/YUKT11hIV8s1nQ
Stanislav2112, если header.key собрали верно, то значит собрали неверно:

1) name.key
либо (что менее вероятно)
2) primary.key
3) masks.key

Хотелось бы увидеть имена файлов с их побайтовым размером, ну и напишите каким образом получали name.key.
Stanislav2112
Сообщения: 3
Зарегистрирован: 11 фев 2023, 20:44

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Stanislav2112 »

Андрей писал(а):
16 фев 2023, 01:47
Stanislav2112 писал(а):
13 фев 2023, 19:18
Добрый вечер! Токен JaCarta LT. Проделал всё по инструкции, удалось собрать контейнер, он распознаётся КриптоПро, но с несколькими ошибками. Header.key пробовал компоновать по-разному, но в итоге целостным контейнер получается именно по описанной схеме (1 обрезок до + 14 файлов по 200 байт + маленький кусочек после). Есть ли предположения, что ещё может быть?
https://disk.yandex.ru/i/YUKT11hIV8s1nQ
Stanislav2112, если header.key собрали верно, то значит собрали неверно:

1) name.key
либо (что менее вероятно)
2) primary.key
3) masks.key

Хотелось бы увидеть имена файлов с их побайтовым размером, ну и напишите каким образом получали name.key.
Добрый вечер!
Вот размер файлов на скрине, primary.key и masks.key были найдены по инструкции и в них обрезаны нули, без нулей размеры чётко 36 и 56 байт соответственно.
https://disk.yandex.ru/i/SFHCTJe6RqqW4w
Name.key искал по инструкции автора методики, т.е. вот так:
name.key - содержит имя контейнера, передаваемое обычно одной порцией (в рамках исследования я делал контейнер с очень длинным именем, это видно на видео, чтобы спровоцировать передачу имени контейнера в нескольких порциях - это удалось, передача проводилась аналогично передаче header.key: сначала первые 10 байт, затем - все остальное), искомый файл - следующего вида №_out(длина имени)30_длина имени_16_длина имени - 2. Интересен тот факт, что содержимое этого файла, в целом, не важно, поэтому можно сгенерить свой файл name.key, с соблюдением формата его первых четырех байт.
У себя я нашёл только один файл, соответствующий схеме: 051_out(10)30_26_16_24. Из него и сделал name.key.
Поскольку имя контейнера короткое, у меня только один файл 10 байт.
https://disk.yandex.ru/i/FsltaJpe-WtPig

PS картинки только в ссылках почему-то удаётся запостить, в <img> не получается
PPS ради эксперимента брал name.key от другого контейнера, ошибки те же самые, но имя контейнера отображает правильное, т.е. от другого контейнера. По такому поведению я пришёл к тому же выводу, что и автор: что содержимое name.key не имеет значения, если первые четыре байта собраны по схеме.
Аватара пользователя
Андрей
Архитектор
Сообщения: 7935
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 746 раз
Поблагодарили: 498 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Андрей »

Stanislav2112, изучил вашу ситуацию. Возможны несколько советов.
Ошибка 0x8009000B Ключ не может быть использован в указанном состоянии.
ошибка говорит о том, что ключ помечен как "не экспортируемый"

В начале данной темы написано как сделать экспортируемым:
Затем положил на флэшку, с помощью CertFix (версии 1.1.27.3154) сделал экспортируемым и скопировал в реестр.
самая последняя операция в п 3.4.

Второй совет менее вероятен для вашей ситуации.
Ошибка 0x8009000A Указан неправильный тип.
попробуйте удалить запомненные пароли в Крипто Про
Сервис -> Удалить запомненные пароли
Аватара пользователя
Андрей
Архитектор
Сообщения: 7935
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 746 раз
Поблагодарили: 498 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Андрей »

Stanislav2112, хотелось бы отчёта о том, удалось ли вам решить проблему.
skinnycatvandal
Сообщения: 1
Зарегистрирован: 01 мар 2023, 10:56
Благодарил (а): 1 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение skinnycatvandal »

Андрей писал(а):
03 ноя 2022, 00:21
Автор ПО и методики - Сергей Солдатов (https://www.securitylab.ru/blog/persona ... 155893.php)

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) сделал экспортируемым и скопировал в реестр.
Спасибо большое за инструкцию, успешно получилось скопировать неэкспортируемую подпись ФНС c токена Jacarta LT :good:
lostly
Сообщения: 6
Зарегистрирован: 03 мар 2023, 15:32
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение lostly »

Спасибо большое за инструкцию, успешно получилось скопировать неэкспортируемую подпись ФНС c токена Jacarta LT :good:
Скажите пожалуйста, как у вас это получилось? Вроде все по инструкции делаю, но в итоге КриптоПро на флэшке ничего не видит . У меня для файла header находит не 14, а 85(!) подходящих файлов размером в 200 байт. Может быть в этом дело? К тому же "предыдущий" файл, то есть кусок до имеет размер 16 байт и внутри нет нулей, чтоб его сократить.
Аватара пользователя
Андрей
Архитектор
Сообщения: 7935
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 746 раз
Поблагодарили: 498 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Андрей »

lostly, наверное, вы несколько раз запускали, поэтому много файлов получилось. Попробуйте всё очистить и заново 1 раз сделать. И скриншот привести файлов.
lostly
Сообщения: 6
Зарегистрирован: 03 мар 2023, 15:32
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение lostly »

Я теперь только в понедельник могу попробовать, но могу заранее сказать, что у меня файл rundll32.exe.txt создается не в момент тестирования конкретного ключа, а когда я открываю список всех подключенных ключей в КриптоПро.
Аватара пользователя
Андрей
Архитектор
Сообщения: 7935
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 746 раз
Поблагодарили: 498 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение Андрей »

Тогда попробуйте вытащить все лишние ключи.
lostly
Сообщения: 6
Зарегистрирован: 03 мар 2023, 15:32
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Копирование неэкспортируемого ключа с JaCarta LT

Сообщение lostly »

Так я все другие вытащил и даже удалил, которые в память компьютера прописаны. Но когда открывается само окно списка ключей, файл уже создается.