ну так для этого предусматривается ВОЗМОЖНОСТЬ менять эту прошивку ВНУТРЕННИМИ командами..т.е. куском кода, который ты сам, как программист предусмотрел... т.е. если твоя прошивка отлажена, а у СОНИ это так - то такого кода просто нет. Ну и главное, даже знай мы - где эта подпрограммка - один хрен мы не влияем на исполняемый чипом код.. нет у нас возможности, перейти по определенному адресу
Alezhek добавил 18.12.2010 в 22:52
так что это, по-моему - тупик
Alezhek добавил 18.12.2010 в 23:04
Ладно, следующая идея: имеем команды работающие с 4-мя байтами.
Командой Cheksum - проверяем их - получаем число - побайтное вычитание
этих 4х ячеек из 0000h. Таким образом значительно сокращается количество вариантов перебора значений для команды Verify. Нам нужно проверять только те a,b,c,d, разность которых равна этому числу
Последний раз редактировалось Alezhek; 18.12.2010 в 23:04.
Причина: добавил, подумав
Alezhek, разговор идёт не про оригинал бат. от сони....в них всё закрыто..а вот в китайках доступ через бутлоадер открыт.
мы путаемся в определениях! я до сих пор не могу понять, что ты имеешь в виду под бутлоадером! в 501 чипе бутом называется просто область первых 1К, где лежат адреса переходов. нет там никакого "лоадера" в понимании программы.
Alezhek добавил 18.12.2010 в 23:38
Сообщение от Alex14435
А разве есть команда Checksum?
есть! код команды B0h описана в мануале U17739EJ3V0AN00.pdf стр. 47
Alezhek добавил 18.12.2010 в 23:41
причем по описанию - в ней операндами служат адрес начала и адрес конца блока, который мы хотим проверить. т.е. ничего вроде не мешает задать проверку одного байта
Последний раз редактировалось Alezhek; 18.12.2010 в 23:41.
Причина: добавил, подумав
A bootloader lets you update or replace application code without an external programmer, and makes it
possible to update code remotely—over a phone line or Internet connection.
For example, if you have 5,000 MCU-based pay phones and the phones require a firmware update, the
phone company’s service person could manually reprogram the individual telephones—a time-consuming
effort—or use a bootloader to reprogram all 5,000 phones remotely from a central location.
И ты поймёшь что есть бутлоадер и для чего он нужен в NEC
Ладно, следующая идея: имеем команды работающие с 4-мя байтами.
Командой Cheksum - проверяем их - получаем число - побайтное вычитание
этих 4х ячеек из 0000h. Таким образом значительно сокращается количество вариантов перебора значений для команды Verify. Нам нужно проверять только те a,b,c,d, разность которых равна этому числу
мммм чего то я не догнал, но команду Cheksum и правда почему то не реализовал когда с чипом игрался - но этот момент уже исправлен, новая прога считывает чексум или со всего чипа или с конкретного блока...
Теперь про алгоритм чексума - побайтного вычитания там нет и в помине, что там за алгоритм - хз. можно конечно попробовать просчитать алгом выложенным в доках на 9202 - но там блок 256 байт а у нас 1024...
Если кому интересно то блок из 1024 FF имеет чексум 0400h, причем полностью затертый чип так же имеет этот же чексум, как и любой блок.
Первый блок с данными "8000FFFF....FF" имеет чексум 057Eh, остальные пустые блоки имеют тот же чексум 0400h, а чексум всего чипа равен 417Eh
Мне пока не удалось найти алгоритм расчета чексуммы, попытайтесь - может кому повезет, но всеравно сомневаюсь что будет толк - поскольку мы узнаем лишь чексум всего блока - т.е. 1024 байт, а никак не 4-х байт которых достаточно для верификации...
Тем кто будет играться с моей прогой напоминаю что прошивка для заливки должна быть в виде бинарника а не стандартного хекса, т.е. вид типа ":10016600B7891CD6874197B0B160F204FAF3B1B0F3" не прокатит...
Для перевода нужно загрузить хекс в проге FlashProg и скопировать в бинарник или же заливать в самом FlashProg, но она льет с самого начала, а в моей проге можете записать данные в любой блок и стереть так же любой блок...
ANDPSP добавил 20.12.2010 в 18:01
Сообщение от hax0r
Что-то я не очень понял.. Если это мне адресовано, то я всего лишь пытался человеку объяснить, что он предложил априори провальный путь...
А насчет практических идей - то, мне кажется, варианта всего 3 на данный момент:
1.декап
2.вариант с двумя чипами
3.вычисление ключей и алгоритма по ответам, но это наиболее нереально.. только если ООООчень сильно повезет... хотя, если у вас есть знакомые криптографы с мировым имене-можно попробовать..)
1. У тебя реально есть навыки декапа и соответствующее оборудование ?
2. Тут Боря немного сам запутался и вас всех запутал, в реале наиболее открытые 501-е чипы с батареек, имеющие возможность перезаписи бута, закрыты от программирования - а это отключает возможность стереть определенный блок и записать в него програмку внутреннего чтения. теоретически есть конечно надежда найти в батарейке полностью открытый чип, но это скорее из области фантастики, как и надежда найти работающий бутлоадер в этих чипах - хотя этот момент так и не проверили...
3. Это не реально, я на 90 % теперь уверен что там реализован XTEA который в асме занимает всего 20-30 строк кода - можете в википедии посмотреть...
Последний раз редактировалось ANDPSP; 20.12.2010 в 18:02.
Причина: добавил, подумав
ANDPSP, действительно, очень похоже на XTEA.. но не забывайте, что у сони есть свой алгоритм, который так же не требователен к ресурсам и памяти. Название не приведу, но я о нем писал ранее... Или возможно, что сони модифицировали XTEA и стали его применять, т.к. XTEA не был запатентован по инфе из википедии..
Да и в семействе XTEA довольно много разновидностей.. например, XXTEA или RTEA..
RTEA вообще на СИ одну строчку занимает..
Все правильно в доке, это я ошибся при пересчете чексума - все значения перепроверил и все сходится тютя в тютю, там реально побайтное вычитание из нуля, но что это нам дает ?
Все правильно в доке, это я ошибся при пересчете чексума - все значения перепроверил и все сходится тютя в тютю, там реально побайтное вычитание из нуля, но что это нам дает ?
Это дает уменьшение возможных вариантов при бруте прошивки с помощью поблочной/побайтной верификации.
Alezhek, по докам , да....а на деле 4 байта..Я же и прогу и доки и схемы всё выложил..можете сами попробовать...Мы тоже губы раскатали на эти доки ...но NEC быстро закатал
Boryan добавил 21.12.2010 в 20:23 Alezhek, А уже если у тебя есть желание помочь ..то поизучай доки на 9202 ..мож там дырку можно найти...или на 102 чип посмотри своим свежим взглядом
Последний раз редактировалось Boryan; 21.12.2010 в 20:23.
Причина: добавил, подумав
может все-таки еще раз проверить и команду Verify?
[IMG][/IMG]
ведь судя по доку.. проверять можно от 1 байта?
Что же ты примечание (Note) в вышеприведенный фрагмент не включил ? Сразу бы все понятно стало.... короче вот тебе фрагмент переписки с разработчиком FlashProg, а он побольше всех нас в неках шарит...
про верификацию
Привет,
было бы здорово если бы этот способ сработал, поскольку с нашей
верификацией чипа UPD78F0501 что то не получается, тоже была мысль
что реализована лишь поблочная верификация по 256 байт, но тогда не
понятно для чего реализована передача данных произвольной длины - от
1 байта до 256 и не понятен байт окончания пакета - 03H или 17H -
какой из них оканчивает передачу данных и дает понять чипу что можно выдавать результат верификации.
Верификация только блочная... посылать инфу можно хоть по
байтику и отвечать он будет всегда положительным подтверждением (ACK
= 0х06) на каждый посланный байт...но конечный результат верификации
предоставляется только после передачи последнего 256 байта!
Про это черным по белому написано в каменте на Verify result:
Even if a verify error occurs in the specified address range, ACK is always returned
as the verify result. The status of all verify errors are reflected in the verify result for
the last data. Therefore, the occurrence of verify errors can be checked only when
all the verify processing for the specified address range is completed.
Почему такую возможность сделали...возможно просто алгоритмы
скопировали...То же программирование имеет подобную схему.
А так хрен их знает....зачем они так сделали.
я конечно принял эту инфу к сведению но все же решил сам проверить, так вот методом научного тыка и нашлись эти 4 байта достаточные для верификации...
свежий лог
22.12.2010 13:42:13 49333,39 send: 010120DF03
22.12.2010 13:42:13 49333,56 read status command: 020106F903
22.12.2010 13:42:13 49333,56 Chip erase successful...
22.12.2010 13:42:29 49349,19 Read from file 8 byte...
22.12.2010 13:42:51 49371 send command to write: 010740000000003FFF7B03
22.12.2010 13:42:51 49371,02 read status command: 020106F903
22.12.2010 13:42:51 49371,02 send data frame: 0208019B5E011620FE10B903
22.12.2010 13:42:51 49371,05 get status data frame: 02020606F203
22.12.2010 13:42:51 49371,05 data frame write successful...
22.12.2010 13:42:51 49371,25 get status all data frame: 020106F903
22.12.2010 13:42:51 49371,27 All data write successful...
22.12.2010 13:42:58 49378,05 Read from file 1 byte...
22.12.2010 13:42:58 49378,05 send command to verify: 010713000000003FFFA803
22.12.2010 13:42:58 49378,08 read status command: 020106F903
22.12.2010 13:42:58 49378,08 send data frame: 020101FE03 SentBytes = 5
22.12.2010 13:42:58 49378,16 get status data frame: 0202060FE903
22.12.2010 13:42:58 49378,16 data frame verify error...
22.12.2010 13:43:01 49381,36 Read from file 2 byte...
22.12.2010 13:43:01 49381,36 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:01 49381,38 read status command: 020106F903
22.12.2010 13:43:01 49381,38 send data frame: 0202019B6203 SentBytes = 6
22.12.2010 13:43:01 49381,47 get status data frame: 0202060FE903
22.12.2010 13:43:01 49381,47 data frame verify error...
22.12.2010 13:43:07 49387,52 Read from file 3 byte...
22.12.2010 13:43:07 49387,53 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:07 49387,55 read status command: 020106F903
22.12.2010 13:43:07 49387,55 send data frame: 0203019B5E0303 SentBytes = 7
22.12.2010 13:43:07 49387,63 get status data frame: 0202060FE903
22.12.2010 13:43:07 49387,63 data frame verify error...
22.12.2010 13:43:10 49390,27 Read from file 4 byte...
22.12.2010 13:43:10 49390,27 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:10 49390,3 read status command: 020106F903
22.12.2010 13:43:10 49390,3 send data frame: 0204019B5E010103 SentBytes = 8
22.12.2010 13:43:10 49390,31 get status data frame: 02020606F203
22.12.2010 13:43:10 49390,31 data frame verify successful...
22.12.2010 13:43:13 49393,25 Read from file 5 byte...
22.12.2010 13:43:13 49393,25 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:13 49393,27 read status command: 020106F903
22.12.2010 13:43:13 49393,27 send data frame: 0205019B5E0116EA03 SentBytes = 9
22.12.2010 13:43:13 49393,36 get status data frame: 0202060FE903
22.12.2010 13:43:13 49393,36 data frame verify error...
22.12.2010 13:43:15 49395,95 Read from file 6 byte...
22.12.2010 13:43:15 49395,95 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:15 49395,97 read status command: 020106F903
22.12.2010 13:43:15 49395,97 send data frame: 0206019B5E011620C903 SentBytes = 10
22.12.2010 13:43:16 49396,06 get status data frame: 0202060FE903
22.12.2010 13:43:16 49396,06 data frame verify error...
22.12.2010 13:43:19 49399,33 Read from file 8 byte...
22.12.2010 13:43:19 49399,33 send command to verify: 010713000000003FFFA803
22.12.2010 13:43:19 49399,34 read status command: 020106F903
22.12.2010 13:43:19 49399,34 send data frame: 0208019B5E011620FE10B903 SentBytes = 12
22.12.2010 13:43:19 49399,38 get status data frame: 02020606F203
22.12.2010 13:43:19 49399,38 data frame verify successful...
22.12.2010 13:43:30 49410,86 Read from file 4 byte...
22.12.2010 13:43:32 49412,86 send command to write: 010740000400003FFF7703
22.12.2010 13:43:32 49412,88 read status command: 020106F903
22.12.2010 13:43:32 49412,89 send data frame: 02048000FFFF7E03
22.12.2010 13:43:32 49412,91 get status data frame: 02020606F203
22.12.2010 13:43:32 49412,91 data frame write successful...
22.12.2010 13:43:33 49413,05 get status all data frame: 020106F903
22.12.2010 13:43:33 49413,05 All data write successful...
22.12.2010 13:43:37 49417,63 Read from file 4 byte...
22.12.2010 13:43:37 49417,63 send command to verify: 0107130004000007FFDC03
22.12.2010 13:43:37 49417,64 read status command: 020106F903
22.12.2010 13:43:37 49417,64 send data frame: 02048000FFFF7E03 SentBytes = 8
22.12.2010 13:43:37 49417,67 get status data frame: 02020606F203
22.12.2010 13:43:37 49417,67 data frame verify successful...
22.12.2010 13:43:42 49422,38 Read from file 4 byte...
22.12.2010 13:43:42 49422,39 send command to verify: 0107130004000007FFDC03
22.12.2010 13:43:42 49422,41 read status command: 020106F903
22.12.2010 13:43:42 49422,41 send data frame: 0204019B5E010103 SentBytes = 8
22.12.2010 13:43:42 49422,44 get status data frame: 0202060FE903
22.12.2010 13:43:42 49422,44 data frame verify error...
22.12.2010 13:43:49 49429,22 Read from file 4 byte...
22.12.2010 13:43:49 49429,22 send command to verify: 0107130004000007FFDC03
22.12.2010 13:43:49 49429,25 read status command: 020106F903
22.12.2010 13:43:49 49429,25 send data frame: 02048000FFFF7E03 SentBytes = 8
22.12.2010 13:43:49 49429,27 get status data frame: 02020606F203
22.12.2010 13:43:49 49429,28 data frame verify successful...
22.12.2010 13:43:51 49431,69 send command to verify: 0107130004000007FFDC03
22.12.2010 13:43:51 49431,72 read status command: 020106F903
22.12.2010 13:43:51 49431,72 send data frame: 02048000FFFF7E03 SentBytes = 8
22.12.2010 13:43:51 49431,73 get status data frame: 02020606F203
22.12.2010 13:43:51 49431,73 data frame verify successful...
22.12.2010 13:43:51 49431,73 send command to verify: 0107130004000007FFDC03
22.12.2010 13:43:51 49431,77 read status command: 020106F903
22.12.2010 13:43:51 49431,77 send data frame: 0201807F17 SentBytes = 5
22.12.2010 13:43:51 49431,78 get status data frame: 02020606F203
22.12.2010 13:43:51 49431,78 send data frame: 020100FF17 SentBytes = 5
22.12.2010 13:43:51 49431,81 get status data frame: 02020606F203
22.12.2010 13:43:51 49431,81 send data frame: 0201FF0017 SentBytes = 5
22.12.2010 13:43:51 49431,84 get status data frame: 02020606F203
22.12.2010 13:43:51 49431,84 send data frame: 0201FF0003 SentBytes = 5
22.12.2010 13:43:51 49431,86 get status data frame: 0202060FE903
22.12.2010 13:43:51 49431,86 data frame verify error...
Лень писать комменты в логе, тот кто разбирается прекрасно все поймет - чип вначале полностью стирается, потом во всю память пишется 8 тестовых байт (они пишутся в первый блок), дальше идут попытки верификации заведомо правильными байтами: 1 байт, 2 байта, 3, 4, 5, 6, 8 - где 4 и 8 там успех, потом во второй блок пишутся других 4 байта и так же верифицируются правильными и неправильными значениями ну и напоследок прототип брута - вот тут очень интересный результат - если сразу верифицировать 4 байта - то все нормально , а если посылать побайтно правильные байты то в результате будет провал...
Ну и еще интересное - вспомнил как гонял батарейку по однобайтовым командам и решил так же пробить чип на недокументированные команды, в итоге нашлась пара таких команд A4h и 9Eh
ответ 020104FB03 говорит о том что команда не поддерживается (стр. 17 доки), а вот ответ 020105FA03 (для A4 и B0) говорит про ошибку передачи параметров, но признает что команда есть...
а вот ответ 020105FA03 (для A4 и B0) говорит про ошибку передачи параметров, но признает что команда есть...
уточни пожалуйста, ведь B0h - это как раз команда Cheksum...
перспективная команда, мне кажется A4h... уж очень похожа на security set (А0h)
был бы у меня чип, я бы попробовал поиграться параметрами, ей передаваемыми
Последний раз редактировалось Alezhek; 22.12.2010 в 21:31.