Эиком - электронные компоненты и радиодетали poiskzip.ru

SPI, подмена данных.

  • Magadan69
M
Magadan69
  • 13 Фев 2021
В кратце. Есть интерфейс SPI (4 провода SCK, MOSI, MISO, NSS), по нему передаются данные между крипточипом и основным микроконтроллером. В полудуплексном режиме, если я правильно понял суть термина (то-есть запрос и ответ идут друг за другом, а не одновременно). Основной микроконтроллер - ведущий, соответственно крипточип - ведомый. Хотя тут я могу и ошибаться, может они попеременно становятся то ведомыми, то ведущими. Микроконтроллер передает в крипточип кодированные посылки, крипточип дешифрует их и отдает обратно. Устройство не мое, поэтому нет ничего из исходников, да и микроконтроллеры закрыты от чтения, записи. Вот раскодированное и нужно подменить на мои данные. Просьба "не посылать в гугль", я был уже там, я видимо не знаю как ему вопрос правильно задать.
Интересуют любые подсказки связанные с этим вопросом, софт, инструменты, ссылки на полезные статьи .... Я просто не представляю, с чего начать, первый раз за такое взялся.
 
  • 14 Фев 2021
Видимо нужен посредник между абонентами. Например быстрый микроконтроллер с двумя спи интерфейсами или их эмуляцией и обрабатывающий посылки, а так же передающий данные наружу для анализа. Вполне реализуемо но не примитивно. И кстати спи интерфейс предполагает что мастер - активное устройство, а слейв - ведомое. Обмен всегда осуществляет мастер, слейв лишь обрабатывает и шлет ответы.
 
  • 14 Фев 2021
Magadan69 сказал(а):
не представляю, с чего начать

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

Понадобятся приборы. И тут возникает встречный вопрос - а что есть из подходящих приборов в наличии? Я имею ввиду, конечно, не мультиметр и отвертку-пробник, а что то типа логического анализатора или осциллографа с возможностью анализа...
 
  • 14 Фев 2021
Magadan69, как я правильно понимать, МК должен видеть этот крипточип, свободно с ним общаться на эту тему, но как только дойдет до дела - вот тут подменять данные? То есть нужен такой вот четкий дешифратор, чтобы мгновенно ориентировался... Думаешь, потянешь?...

Васисуалий сказал(а):
И тут возникает встречный вопрос - а что есть из подходящих приборов в наличии? Я имею ввиду, конечно, не мультиметр и отвертку-пробник, а что то типа логического анализатора или осциллографа с возможностью анализа...
Скорее всего нихрена нет, иначе бы не спрашивал, что из инструмента ему нужно...
Magadan69, софт, кстати, - тоже инструмент...
 
  • 15 Фев 2021
chignon сказал(а):
Скорее всего нихрена нет, иначе бы не спрашивал, что из инструмента ему нужно...
Ну раз я разобрался, что один дает криптованное, а потом получает декриптованное, то значит я это как-то увидел. У меня есть анализатор (SaleaeLogic).
Есть и осциллограф, записывающий. Правда он автомобильный, но сигналы в этом SPI видит. Частота их не очень большая, 1.33333... МГЦ для линии SCK, со скважностью 50%.
chignon сказал(а):
как я правильно понимать, МК должен видеть этот крипточип, свободно с ним общаться на эту тему, но как только дойдет до дела - вот тут подменять данные?
Да, верно поняли, в момент передачи надо дождаться команды с определенным заголовком, и подменить в ней тело с данными. Таких команд будет много, благо что они идут подряд. И когда придет первая "не такая команда", прекратить подмену.
Васисуалий сказал(а):
С расшифровки протокола. Для начала надо точно знать, что куда и как передается и кто там ведущий или ведомый. Т.е. изучать и изучать.
Частично протокол я понял, где ID посылки, где размер, где сама команда, где данные. Трудность только с CRC в конце, но думаю разберусь. Сдается мне что crc вообще не считается, но это только предположение, так как переодически попадаются разные посылки с одинаковым CRC. Вопрос, как разобраться, один у меня мастер в линии, или оба микроконтроллера попеременно становятся мастерами?
sszer сказал(а):
Видимо нужен посредник между абонентами.
Мысль конечно хорошая. Надо будет взять ее на вооружение. Я думал просто мультиплексор поставить на шину MISO, и управлять им с третьего микроконтроллера, или микрокомпьютера, или еще какого-нибудь устройства. По максимуму, хотелось-бы найти какое-то готовое устройство, которым можно управлять из Винды, через скрипты, или еще как-то. Но боюсь, все упрется в реалтайм ОС.

PS
Прошу прощения не пришло уведомление на почту, об ответах в теме. Только сейчас сообразил глянуть в нее, а вдруг, и действительно, не зря.
 
  • 15 Фев 2021
Magadan69 сказал(а):
Вопрос, как разобраться, один у меня мастер в линии, или оба микроконтроллера попеременно становятся мастерами?
Мастер гонит такты.

Magadan69 сказал(а):
хотелось-бы найти какое-то готовое устройство, которым можно управлять из Винды, через скрипты,
Дороговато будет с реалтаймом = килобаксы.
 
  • 15 Фев 2021
Magadan69 сказал(а):
Я думал просто мультиплексор поставить на шину MISO, и управлять им с третьего микроконтроллера, или микрокомпьютера, или еще какого-нибудь устройства.
Ну какие микрокомпьютеры, тебе надо на лету решать, тут нужен шаблон, раз запрос точно известен (или в нескольких вариантах), чтобы по последнему его такту было решение, подменять ответ или не подменять.
Тут логика нужна. Василий в программируемой логике очень разбирается, его конЁк. :)
 
  • 15 Фев 2021
Magadan69 сказал(а):
Частично протокол я понял

Нет, не частично! Полностью и досконально! Иначе браться и что то городить невозможно т.к. не понятно, что именно надо делать!
 
  • 15 Фев 2021
Сделаю предположение что супербыстрого контроллера с реалтайм ОС не потребуется, т.к. вряд ли при обмене мастера с крипточипом жестко фиксируются тайминги. Современные копеечные микроконтороллеры, например STM, имеют тактовую частоту под сотню и более MHz. При клокинге спи интерфейса 1,3MHz, что соответствует примерно 1,3/8 = 160Кб/с в пике при блоковой передаче производительности микроконтроллера думаю вполне должно хватить.
Главная проблема это 100% верное повторение протокола обмена.
 
  • 15 Фев 2021
Васисуалий сказал(а):
Нет, не частично! Полностью и досконально! Иначе браться и что то городить невозможно т.к. не понятно, что именно надо делать!
sszer сказал(а):
Главная проблема это 100% верное повторение протокола обмена.
Ну в моем случае задача попроще. Посылки которые я буду подменять, состоят из 0х202 байт. Непосредственно подменяемые данные размером 0x1F8 байт. Соответственно остаются 0хА служебных байт. В этих служебных байтах,изменять нужно только контрольную сумму. (и то это под вопросом, я выше уже писАл). Поэтому я сначала попробовал-бы без изменения контрольки, если не пойдет, тогда напишу брутфорсер для подбора коэффицентов под алгоритм CRC(версию точно не знаю), что алгоритм CRC, это точно, только какие коэффициенты не известно.
chignon сказал(а):
тут нужен шаблон, раз запрос точно известен (или в нескольких вариантах), чтобы по последнему его такту было решение, подменять ответ или не подменять.
Тут тоже немного проще. Самые первые посылки, из нужных запросов я менять не буду (или буду менять на те-же самые). То-есть у меня "есть время подготовиться". И все нужные запросы идут непрерывным блоком, то-есть подмена начинается и заканчивается, в середине нет запросов другого типа. Проблема только в конце распознать последний запрос, и по быстрому замолчать, переключив MOSI на крипточип .
Konstantin_18 сказал(а):
Мастер гонит такты.
Это ясно, вопрос немного в другом. Например. Основной контроллер стал мастером, передал запрос, освободил шину, и переключился в слейв. Крипточип в момент приема был слейвом, принял декриптовал запрос, проверил что шина свободна, переключился в мастера и занял шину для передачи. Такое может быть? Или это лишние "телодвижения", проще в такой ситуации крипточип всегда держать в слейве?
Konstantin_18 сказал(а):
Дороговато будет с реалтаймом = килобаксы.
Хоть одну ссылочку на такое устройство, можно поглядеть?
 
  • 15 Фев 2021
Magadan69 сказал(а):
Такое может быть? Или это лишние "телодвижения", проще в такой ситуации крипточип всегда держать в слейве?
ИМХО мультимастеринг маловероятен и малооправдан.

Для варианта со слейвом времени на раздумье будет мало. Микросекунды.
Так как по заднему фронту тактов ваши данные должны уже быть выставлены.
 
  • 15 Фев 2021
Konstantin_18 сказал(а):
Для варианта со слейвом времени на раздумье будет мало. Микросекунды.
Так как по заднему фронту тактов ваши данные должны уже быть выставлены.
Там еще есть одна особенность в протоколе. На линии SCK импульсы идут, и пока крипточип не готов к передаче, он выдает в линию серии байт 0х66, когда готов, пакет начинается с байта 0хАА. Думаю это мне поможет, заставить мастера подождать ответ.
 
  • Like
Konstantin_18
  • 15 Фев 2021
Magadan69, У вас видимо недопонимание обмена по спи протоколу. Мастер опрашивает регистр статуса слейва, если он готов к обмену шлет слейву команду. В зависимостти от типа команды читает статус слейва для контроля выполнения или наличия ошибки исполнения. Если результат команды некоторое количество байт к чтению, то читает эти данные.
Ну и синхронизация обмена тактируется сигналом SCK мастера. Слейв обмен не инициирует.
 
  • 15 Фев 2021
Magadan69 сказал(а):
Там еще есть одна особенность в протоколе. На линии SCK импульсы идут,
sszer сказал(а):
недопонимание
... Долог путь рассказа, сынок, короток путь показа!
- Натан, я опять не въехал. Есть всё-таки между нами какое-то недопонимание...
- Зачем рассказывать, покажи!





Magadan69, обмен в студию!
 
  • 15 Фев 2021
sszer сказал(а):
У вас видимо недопонимание обмена по спи протоколу.
Я недописАл, в предыдущем сообщении, что эти байты 0х66 и 0хАА, это байты в линии MISO. То-есть это именно крипточип выдает. И поэтому, чтобы приостановить основной микроконтроллер, когда он уже готов принять расшифрованные данные, я могу отключить линию MISO от крипточипа, и выдавать в нее со своего контроллера байты 0х66, а в этот момент готовить данные для подмены.

Добавлено:

chignon сказал(а):
обмен в студию!
В каком виде, графическом, текстовом, весь лог, или достаточно пары посылок, или еще как-то? Я думаю, давать свой обмен, который я обработал, бесполезно, вы не поймете его, потому-как я не профи, и обрабатывал его так, как мне удобно, и так как я его понимаю.
 
  • 15 Фев 2021
Magadan69, как есть, как SaleaeLogic сохраняет, сколько захвачено. И с указанием моментов времени, где что происходит. Отдельные картинки нечего не дадут, текст тем более.
 
  • 15 Фев 2021
chignon сказал(а):
Magadan69, как есть, как Saleae сохраняет. Отдельные картинки нечего не дадут, текст тем более.
Хорошо, позже сделаю, пока основной работой занят. Я не сохранял те "простыни", что Saleae создает, они весят много, да и неудобные для восприятия. Я их обработал и сохранил обработанное.
 
  • 15 Фев 2021
А вообще крипточип это что? Память с доступом по паролю или шифрующая исходные данные схема и возвращающий криптованное мастеру? Т.е. Данные хранятся или обрабатываются слейвом?
 
  • 15 Фев 2021
sszer сказал(а):
А вообще криптосистема это что? Память с доступом по паролю или шифрующая исходные данные схема и возвращающий криптованное мастеру? Т.е. Данные хранятся или обрабатываются слейвом?
В моем случае, который мы тут разбираем. Основной контроллер (мастер) получает по USART каналу кодированный firmware для апдейта. И потом через SPI передает его в крипточип (слейв), частями. Крипточип (в данном случае слейв, как мы решили) декриптует принятую часть firmware, и по SPI отдает обратно в основной контроллер. Контроллер собирает все части воедино, проверяет их целостность, и перешивает свой firmware.
Но крипточип занимается не только этим, он задействован firmware-ем во всех операциях связанных с крипто-математикой. Но меня не интересуют другие моменты, мне нужно именно на этапе апдейта подменить стоковый firmware, на свой (практически стоковый, но с моими исправлениями).
 
  • 15 Фев 2021
Magadan69 сказал(а):
sszer сказал(а):
А вообще криптосистема это что? Память с доступом по паролю или шифрующая исходные данные схема и возвращающий криптованное мастеру? Т.е. Данные хранятся или обрабатываются слейвом?
В моем случае, который мы тут разбираем. Основной контроллер (мастер) получает по USART каналу кодированный firmware для апдейта. И потом через SPI передает его в крипточип (слейв), частями. Крипточип (в данном случае слейв, как мы решили) декриптует принятую часть firmware, и по SPI отдает обратно в основной контроллер. Контроллер собирает все части воедино, проверяет их целостность, и перешивает свой firmware.
Но крипточип занимается не только этим, он задействован firmware-ем во всех операциях связанных с крипто-математикой. Но меня не интересуют другие моменты, мне нужно именно на этапе апдейта подменить стоковый firmware, на свой (практически стоковый, но с моими исправлениями).
Так может зайти в дверь а не окно? Т.е. Внести правки в код основного контроллера чтобы он декриптованное правил?
 
  • 15 Фев 2021
Давайте оставим задачу, как я ее сформулировал. Я запарюсь много писать. В кратце, контроллеры закрыты от чтения программатором, я должен вынуть из основного контроллера бутлоадер. Дальше все я сделаю сам. У меня проблема только залить в контроллер мой firmware по SPI. Я уверен, что эта задача решаема. У меня просто не хватает знаний в этой области подмены байт в посылках SPI.
 
  • 16 Фев 2021
Может банально попробывать терминальной программой лог снять с контроллера?
 
  • 16 Фев 2021
А каков там общий алгоритм работы? Что делает криптопроцессор, и как это соотносится с задачей подменить бутлоадер?

По первым вопросам - с вероятностью 99% главный процессор мастер интерфейса. Понять это можно обрезав SCK, посмотреть кто выставляет тактование.
Ответ, соответственно, читается после чтения регистра статуса. По предположению дополнительный процессор с двумя каналами аппаратного SPI и dma каналом между ними позволит полностью захватить, а потом поправить данные.
 
  • 16 Фев 2021
Для начала нужно понять архитектуру крипточипа - адреса регистров и назначение битов управляющих и статусных регистров. В общем нетривиальная задача, придется много ковырять логическим анализатором. Может оказаться что проще из лога анализатора, написав софтину, собрать декриптованный дамп и понять что нужно подать на вход чтобы без дополнительно железа решить задачу.
 
  • 16 Фев 2021
chignon сказал(а):
как есть, как SaleaeLogic сохраняет, сколько захвачено. И с указанием моментов времени, где что происходит
Блин, я не ожидал (вернее забыл), что файл "*.csv", будет конвертироваться так долго, и еще как назло места на диске не хватило. В принципе, самое наглядное и понятное в файле с расширением "*.logicdata". Там прямо графики всех сигналов. Но его можно просмотреть только через программу "Saleae Logic". В файле с расширением "*.csv", байты в сигнальных проводах (MOSI, MISO), с привязкой ко времени, малоиформативный файл. Если установите прогу и откроете файл "*.logicdata", то потом из программы можно будет сохранить в файлы "Binary","Csv", "Matlab","Vcd". Я диск освободил, запустил второе создание файла "*.csv", но боюсь это еще сутки (или чуть больше). Пока так
Вот сама программа "Saleae Logic":  ссылка скрыта от публикации 
Вот мои настройки для SPI в программе:  ссылка скрыта от публикации 
Вот файл апдейта с расширением "*.logicdata" :  ссылка скрыта от публикации 
Brandmajor сказал(а):
Может банально попробывать терминальной программой лог снять с контроллера?
Что-то не понимаю вашу мысль.
vth сказал(а):
А каков там общий алгоритм работы?
Про алгоритм я выше писал, вкратце. Если есть конкретные вопросы, задавайте их.
vth сказал(а):
Что делает криптопроцессор, и как это соотносится с задачей подменить бутлоадер?
Про криптопроцессор я тоже писал выше. И я не собираюсь подменять бутлоадер. Фуллфлеш основного контроллера состоит из двух частей, бутлоадер и фирмварь. Бутлоадер не меняется никогда, а вот фирмварь обновляется. Я как раз собираюсь в процессе апдейта фирмваря, подменить сам фирмварь, и с помощью подменного фирмваря вынуть бутлоадер из основного контроллера.
vth сказал(а):
По первым вопросам - с вероятностью 99% главный процессор мастер интерфейса. Понять это можно обрезав SCK, посмотреть кто выставляет тактование.
Я уже смирился с тем, что основной контроллер - мастер. А по сути ваших слов скажу. Да обмен по SPI начинает основной котроллер, как мастер. Но я сомневался, что в моем случае может быть мультимастеринг, и обрезание линии SCK или NSS, мне ничего не даст, для проверки этого предположения.
vth сказал(а):
По предположению дополнительный процессор с двумя каналами аппаратного SPI и dma каналом между ними позволит полностью захватить, а потом поправить данные.
Да, эту идею мне уже предложили раньше, я взял ее на заметку. Если вариант с мультиплексором на шине MISO, не будет работать четко, то буду пробовать этот вариант.
sszer сказал(а):
Может оказаться что проще из лога анализатора, написав софтину, собрать декриптованный дамп и понять что нужно подать на вход чтобы без дополнительно железа решить задачу.
Именно это я и сделал. Я собрал из лога декриптованный фирмварь, поправил его как мне надо в ИДА. Осталось только его залить через SPI, подменяя ответы крипточипа.
 

Для ответов войдите или зарегистрируйтесь

 FLProg - это просто!  Считать прошивку ATTINY84A