![]() |
eXeL@B —› Вопросы новичков —› Как передать файл прошивки микроконтроллера через ЮСБ-канал? |
Посл.ответ | Сообщение |
|
Создано: 17 октября 2011 16:50 · Личное сообщение · #1 Я в прошлой теме научился кодировать-раскодировать файл прошивки. Спасибо за помощь. Сделал свой (исправленный) кодированный файл, но родной апдейтер программы, видимо не признает его за то, что ему нужно. Передавать-передает, но умышленно портит несколько байт. Чтоб вопросов было меньше, он (апдейтер), точно так-же поступает и с файлом от другой версии программы. Вопрос примерно такой. Есть-ли готовые сорцы под передачу и прием файлов по ЮСБ-каналу? Защиту-то родного апдейтера, мне точно не сломать, думал КС, нашел, вычислил, но этого оказалось мало. ![]() |
|
Создано: 17 октября 2011 17:44 · Личное сообщение · #2 |
|
Создано: 17 октября 2011 17:44 · Личное сообщение · #3 |
|
Создано: 17 октября 2011 17:58 · Личное сообщение · #4 |
|
Создано: 17 октября 2011 18:44 · Поправил: Kuzya69 · Личное сообщение · #5 Оригинальный флешер я раскопал, контрольку вычислил. Портит именно апдейтер, я уже писАл, если в программу подложить дамп от другой версии (старше или младше), то происходит то-же самое. Хотя нужной версией, заливается без ошибок. То-есть дамп заведомо верный, а вот апдейтер не признает его. Да и если подсмотреть протокол передачи через ЮСБ-монитор, то видно, что эти байты (испорченные), вылезают в хаотичном порядке. Один раз прошивка даже запустилась, но при работе повисла. Мне по сути надо мою переделанную, зашифрованную прошивку, передать байт в байт, порциями по 128 байт, добавив впереди посылки три байта служебных, и сзади два (посчитанную контрольку передачи). Дождаться ответа о правильной передаче и продолжить дальше передавать следующие 128 байт. ![]() |
|
Создано: 17 октября 2011 20:10 · Личное сообщение · #6 |
|
Создано: 17 октября 2011 20:31 · Личное сообщение · #7 |
|
Создано: 17 октября 2011 20:35 · Личное сообщение · #8 что вы называете "апдейтером", где он у вас тут ?: файл->флешер->драйвер->ром_микроконтроллера->флешка если можете снифить и в снифе видно битые байты(биты), значит или плохо перексорили бинарник или одно из двух о чем и пишет reversecode попробуйте в патченой прошивке подменить сигнатуру/хидер на сигнатуру правильной версии, код ревизии или что-то еще ![]() |
|
Создано: 17 октября 2011 22:01 · Личное сообщение · #9 я так понимаю "файл" и есть прошивка которую вы пытаететь залить через апдейтер(флешер) и оригианльным файлы апдейтер никакие байты не меняет а в вашем файле(что бы перехачили) он меняет два байта может это ценные два байта? может там какая нибудь crc? которую вставляет флешер если вы расковыряли прошивку, то расковырят флешер тем более сможете может и есть опенсоурсный, но обычно флешеры(апдейтеры) пишутся под что то конкретное, там есть какие то байты синхронизации или заголовки... ![]() |
|
Создано: 18 октября 2011 00:37 · Поправил: Kuzya69 · Личное сообщение · #10 где он у вас тут ?: файл->флешер->драйвер->ром_микроконтроллера->флешка Судя по этим порядкам это "флешер". Просто я думал, что флешер это бутлоадер внутри контроллера, раз он с флешем работает. Просто в каждой версии программы "флешер" расчитан так, что он признает только файл той прошивки, версия которой соответствует именно версии программы (честое слово не курил). И не только версии, но и проверяется целостность прошивки. Поэтому даже попытка подсунуть заведомо правильный файл (который успешно заливается флешером другой версии в этот-же контроллер, с этим-же бутлоадером), приводит к появлению в потоке "случайных" ошибочных байт. Они появляются в произвольном количестве и в произвольном месте. Для того, чтобы после флеширования бутлоадер пропускал в начало флеша (прошел тест) существует контролька, ее я пересчитал. Если мою переделанную, но не закодированную под апдейт через "через ЮСБ канал", прошивку залить программатором в контроллер, то она работает и проходит тест бутлоадера. Расшифровав гамму по которой кодируется прошивка для "апдейта через ЮСБ", я ее переделал, но флешер где-то проверяет ее на соответствие нужному, и умышленно портит. Поэтому я и хочу подобрать (написать) другой флешер, который будет просто тупо лить по очереди байты из подготовленного файла, не обращая внимания на версию и состояние заливаемой прошивки. Потому-что по правилам бутлоадера это пройдет. если вы расковыряли прошивку, то расковырят флешер тем более сможете может и есть опенсоурсный, но обычно флешеры(апдейтеры) пишутся под что то конкретное, там есть какие то байты синхронизации или заголовки... Да это Россовская программа ВЦДС. Есть там и заголовки и шифрованные данные...... Я хочу заливать во флеш вместо родной прошивки, свою. Отработать с ней, и потом спокойно опять обновиться родной россовской. Остался только один этап (но он самый трудный для меня), как залить мою прошивку в контроллер? ![]() |
|
Создано: 18 октября 2011 01:30 · Личное сообщение · #11 |
|
Создано: 18 октября 2011 01:50 · Поправил: Kuzya69 · Личное сообщение · #12 Попробуйте отмониторить начиная с ОЕП ! Ну во первых флешер встроен в основную программу, и включается в работу, если видит, что прошивка адаптера ниже версией чем прошивка предлагаемая для флеширования. К тому-же к вашей задаче добавится еще распаковка самой проги. А этого я делать не умею. Может проще от мониторить Флешер с той прошивкой, с которой работает без ошибок и сравнить с работой Флешера на Фашей прошивке. Я-же объяснял, что моя прошивка тоже льется, но в потоке появляются одиночные ошибочные данные, причем в разных местах. Или я вас неправильно понял? Я под словом монитор подразумеваю, лог обмена байтами между контроллером и компьютером по шине ЮСБ. ![]() |
|
Создано: 18 октября 2011 15:16 · Личное сообщение · #13 |
|
Создано: 18 октября 2011 17:43 · Личное сообщение · #14 |
|
Создано: 18 октября 2011 19:12 · Личное сообщение · #15 |
|
Создано: 18 октября 2011 20:12 · Личное сообщение · #16 Kuzya69 пишет: Загнать прошивку в режим флеширования не сложно, а залить тоже алгоритм не из сложных. Можно предположить что под словом "прошивка" в данном контексте имеется в виду последовательность данных. Но каким же таким нехитрым образом аффтор "заганяет" эти данные в "режим флеширования" ?? Как вообще последовательность данных можно "загнать" в какой-то режим ??? У меня от этого выражения происходит разрыв шаблона... Kuzya69 пишет: Меня правда пугали таймингами, но не думаю что это верх мастерства. Да конечно, ерунда это все. Не стоит такими мелочами замарачиваться. Ни слова о том что за девайс, какой там контроллер, в каком именно режиме используется юсб... Kuzya69 неужели вы думаете что действительно существует какой-то универсальный способ для обновления по в разных девайсах ? ![]() |
|
Создано: 18 октября 2011 21:24 · Личное сообщение · #17 Как вообще последовательность данных можно "загнать" в какой-то режим ??? Ну не умею я правильно "выражаться", хотелось-бы матом, да нельзя. ![]() Я хотел сказать, что чтобы перевести этот контроллер, с которым я мучаюсь, в режим флеширования, не обязательно проходить очень много шагов как это делается в программе, когда начинается апдейт. Все проверки там нужны только, чтобы убедиться, что флешироваться будет именно-то что нужно. А если убрать все проверки, то можно при включении адаптера, после ответа "44", от адаптера, сразу начинать передачу страниц. Да конечно, ерунда это все. Не стоит такими мелочами замарачиваться. И тут меня неправильно поняли. Просто я не думаю, что это так сложно, переделать в каком-то похожем по действию флешере. Ни слова о том что за девайс, какой там контроллер, в каком именно режиме используется юсб... Кратко уже упоминал это ВЦДС, от РоссТеч. Бывший ВАГ-КОМ. Конроллер там атмега162. В каком режиме ЮСБ, не знаю. Может есть другие вопросы для уточнения? Отвечу. неужели вы думаете что действительно существует какой-то универсальный способ для обновления по в разных девайсах ? Именно это я как раз и не думаю, просто хочется посмотреть работу похожих флешеров, и на их основе или написать свой, или переправить готовый. ![]() |
|
Создано: 18 октября 2011 21:50 · Личное сообщение · #18 |
|
Создано: 18 октября 2011 22:34 · Личное сообщение · #19 |
|
Создано: 18 октября 2011 23:19 · Личное сообщение · #20 В атмеге 162 нет аппаратного USB. Значит используется софтовая реализация, что врядли, или на плате есть преобразователь USB2UART например FTDI232, PL2302 или подобные. Если это так, значит никаким USB там и не пахнет. Обмен данными идет по UART. Прошить сам контроллер ATmega162 вообще никаких проблем не представляет. Засунул в прогер и пишеш туда что душе угодно. Если прогера подходящего нет то можно SPI шнурок на коленке спаять. В данном случае сложность совсем в другом. Kuzya69 хочет прошить контроллер через функцию обновления. В флеше контроллера ATmega162 есть область BootLoader из которой возможно выполнять команды записи в флеш область программы контроллера. Код BootLoader разрабочтик пишет сам, как ему вздумается, поэтому искать какие-то флешеры просто глупо. В данном случае BootLoader принимает криптованную прошивку по UART, раскриптовывает и пишет в флеш. При этом сам BootLoader скорее всего не обновляется и соответственно не содержится в криптованой прошивке. Поскольку в контроллере установленны локбиты, прочитать его программатором не выйдет. Значит даже если раскриптовать ту часть прошивки которая имеется, толку будет мало. Софт там пакован вроде обычным UPX. Вот очень мне интересно что Kuzya69 удумал там менять ? ![]() |
|
Создано: 19 октября 2011 01:42 · Поправил: Kuzya69 · Личное сообщение · #21 Ну все верно. преобразователь USB2UART например FTDI232 FT232В Kuzya69 хочет прошить контроллер через функцию обновления. И это верно Код BootLoader разрабочтик пишет сам, как ему вздумается, поэтому искать какие-то флешеры просто глупо. Код этот я знаю, и не только я. Правда для старых адаптеров, но пока так. Так я не ищу готовый флешер, я ищу близкий по смыслу, но чтоб был как база для переделки в свой. При этом сам BootLoader скорее всего не обновляется и соответственно не содержится в криптованой прошивке. Все верно, всегда один и тот-же. Вот очень мне интересно что Kuzya69 удумал там менять ? Менять так, чтоб контроллер выдавал некриптованную область ЕЕПРОМА, в порт UART. А так он выдает криптованную. ЕЕПРОМ-это самое ценное в кабеле. Софт там пакован вроде обычным UPX. Вот там ПС-Гуард и виртуалка. Я не смог. Мне так проще. Вот темка моя была, пришлось забить https://ssl.exelab.ru/f/action=vthread&forum=5&topic=18543&page=0#25 ![]() |
|
Создано: 19 октября 2011 14:39 · Личное сообщение · #22 Kuzya69, дык гуглите библеотеку для работы с ком портом для любого удобного Вам языка программирования. И сможете принимать/отправлять байты или пакеты как Вым будет угодно. вот пример для C++ и Delphi: В теме про расспаковку ссылки битые. Хотелось бы на ЕХЕ глянуть. ![]() |
|
Создано: 19 октября 2011 16:46 · Личное сообщение · #23 Хотелось бы на ЕХЕ глянуть. Это версия 10.6.1, она как раз работает с той прошивкой, над версией которой я ломаю голову. http://zalil.ru/31895818 Или может ехе-инсталку надо? Но там хитрая прога она регится самим шнуром. И функция обновления включится, когда прога поймет, что фирмваре шнура устарело. Спасибо, за линк, буду разбираться. ![]() |
|
Создано: 19 октября 2011 18:11 · Личное сообщение · #24 |
|
Создано: 19 октября 2011 19:08 · Личное сообщение · #25 |
|
Создано: 21 октября 2011 16:44 · Личное сообщение · #26 |
|
Создано: 21 октября 2011 18:39 · Личное сообщение · #27 |
|
Создано: 23 октября 2011 04:48 · Поправил: Ratinsh · Личное сообщение · #28 |
|
Создано: 23 октября 2011 15:01 · Личное сообщение · #29 По моему Кузя вы сто лет сом-портом занимаетесь Нет, видимо я не тот Кузя. Жаль. Или задача прогу заломать... Задача сделать флешер, или старый упростить, избавить от проверок. А прога распакованная и так есть. Только слаб я в этих тонкостях, как кусок из общего кода вынимать, как от проверок избавлять. С сырцами еще могу попробовать повозиться, а вот с кодом без опыта вряд-ли справлюсь. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Как передать файл прошивки микроконтроллера через ЮСБ-канал? |