Jump to content

    
EIKA

Вход в режим аварийной загрузки у Anritsu SiteMaster S331L

Recommended Posts

Я нарисовал в теории, но с учетом того как эти кнопки называются и что делают в коде. Вероятность достоверности 99% и более. Потому, что вариантов других нет.

Плата пока НЕ осмотрена. Я лишь говорю о том, что шифта нет на мембране / резине. Даже если шифт есть на PCB, его придется коротить перемычкой.

Валкодер уже мимо кассы, так как его нет в кеймаппинге, да и он не нужен.

Тем временем добрый человек нашел единственный кусок кода, который вызывает бутстрап (отдается код возврата 0x1C8).

v8 = 0;
do
{
if ( *(KeyMapping + 5) | (*(KeyMapping + 6) << 8) | (*(KeyMapping + 7) << 16) | (*(KeyMapping + 8) << 24)
  && (*(*(KeyMapping + 1) | (*(KeyMapping + 2) << 8) | (*(KeyMapping + 3) << 16) | (*(KeyMapping + 4) << 24)) - 0x34) <= 2u )
{
  ++v8;
}
v9 = *(KeyMapping + 9);
KeyMapping += 9;
}
while ( v9 != 255 );
if ( v8 == 3 )
{
  DebugPrintf("Request to launch Bootstrap.bin received.\r\n");
  return 0x1C8;
}

По этому коду видно, что bootstrap.bin вызовется когда v8 будет равно 3.

А случится это когда вот это условие выполнится 3 раза:

if ( *(KeyMapping + 5) | (*(KeyMapping + 6) << 8) | (*(KeyMapping + 7) << 16) | (*(KeyMapping + 8) << 24)
  && (*(*(KeyMapping + 1) | (*(KeyMapping + 2) << 8) | (*(KeyMapping + 3) << 16) | (*(KeyMapping + 4) << 24)) - 0x34) <= 2u )

Итого, в уравнении остается одна-две неизвестных:

1. Это байт из "карты клавиатуры KeyMapping" (который указывается через +, например, +5, +6, +8). А откуда брать содержимое байта, не понятно.

2. И это некий адрес в памяти 0x34. Который, видимо, "железный".

Ответив на эти вопросы можно будет получить названия кнопок, которые вводят в бутстрап.

Есть тут местные гении? Ну, ребят, давайте напряжемся и получим суперпри$$$!

Edited by EIKA

Share this post


Link to post
Share on other sites
3 hours ago, EIKA said:

Так тут USB же реализован в WinCE, бутлоадер то как ее распознает?

Никакого обычного PC там нет. Это какой-то OMAP ARM + WinCE.

Более того, клавиатура не распознается даже в WinCE на рабочем приборе.

Вопрос был прост:

Вы пробовали или нет?

Отговорки можете придумывать только самому себе :dirol:у

Share this post


Link to post
Share on other sites
6 часов назад, EIKA сказал:

Доступ ко второму аналогичному прибору как может помочь?

да почти никак, раз первый прибор пытается грузится и останавливается, то стартовый бутлоадер живой

вот если затереть первичный бутлоадер, то все сильно было бы сложнее - из второго прибора надо было бы извлечь SoM, аккуратно сдуть флешку с фирмварью, слить с нее полный дамп, потом на окирпиченном, аналогично сдуть флеш и накатить в нее содержимое живого прибора

в вашем случае ищем магическую комбинацию, по которой бутлоадер принимает решение об апдейте с юсб флешки

если функция возвращает 255, то я бы квалифицировал, как "нет нажатия"

Share this post


Link to post
Share on other sites
2 hours ago, Oymyacon said:

Вопрос был прост:

Вы пробовали или нет?

Отговорки можете придумывать только самому себе :dirol:у

Какие отговорки, я написал, что поддержки клавиатуры нет даже в работающем приборе! Нет в этом устройстве драйвера клавиатуры даже в Windows! Что непонятного?

Share this post


Link to post
Share on other sites

В юзермануале вообще то такое есть.

Quote

If the Site Master is not functioning as expected, perform a
preset. All the current settings and applied calibration factors
will be cleared.
The next step if a preset does not resolve the issue is a
Factory Reset. This can be performed at power on by holding
down the ESC key and pressing the power button, or through
the Preset (9) menu.

Т.е ESC как то завязан на сброс параметров.

Share this post


Link to post
Share on other sites
6 часов назад, EIKA сказал:

Итого, в уравнении остается одна-две неизвестных:

1. Это байт из "карты клавиатуры KeyMapping" (который указывается через +, например, +5, +6, +8). А откуда брать содержимое байта, не понятно.

2. И это некий адрес в памяти 0x34. Который, видимо, "железный".

покрутил бинарники в Ida, ничего умного не нашел

в spl.exe есть вхождение main(), ближе к концу которого делается вызов TestForSecretKeypresses() в которой есть заветная ветка с завершением

LDR     R0, =aRequestToLaunc
BL      DebugPrintf
MOV     R0, #0x1C8   // тот самый код
LDMFD   SP!, {R4-R6,PC}

а при возвращение в main() анализ кода возврата

LDRH    R3, [SP,#0x78+var_26]
TST     R3, #4
MOV     R5, R0
BNE     loc_86004C50
и двигается на выход из main()

из странного - нет сторонних вызовов опроса кнопок. судя по коду использован порт самого omap (gpio5) и вероятно клавиатура устроена матрицей кнопок (извращения в виде отдельных кнопок через резисторы и АЦП откидываю, как и использование отдельного i2c контроллера кнопок тоже). тогда обычно делают стандартно - порт или часть порта на выход, и часть пинов на вход. далее гоняют уровень на отдельных выводах и смотрят что на входах. отсюда можно вычислить в каком "перекрестье" нажали кнопку. антидребезг и фантомы по вкусу.

есть еще пара загадочных функций TestBootstrapKeys() те же сдвиги и сравнение и GetKeysDown() которая еще куда-то стучится по i2c

и похоже "адрес в памяти 0х34" это просто константа в TestForSecretKeypresses()

SUB     R2, R2, #0x34 

ЗЫ там под кузовом WinCE 5.0, а жизнь usb hid началась вроде как с 6.0.. т.ч. не должна работать клавиатура ни в мелкой венде, ни в т.б. загрузчике

Share this post


Link to post
Share on other sites
21 minutes ago, Jury093 said:

покрутил бинарники в Ida, ничего умного не нашел

А с какими параметрами бинарник в Иду грузили чтобы сегменты кода-данных правильно проинитились?

Share this post


Link to post
Share on other sites
1 hour ago, khach said:

Т.е ESC как то завязан на сброс параметров.

Спасибо за оттвет.

Но это чутка другое. Это запрос режима Reset, когда стираются файлы калибровки тач-скрина и прочее. Как это было 15 лет назад во времена КПК.

У меня проблема глубже. И я забыл об этом написать, моя вина. При обновлении прошивки, которая выполнялась минут 10, не нашелся файл SM-L (насколько я понял, это образ WinCE). Хотя на флешке, с которой выполнялся апгрейл, он есть и он целый, и у него верная CRC. По какой-то причине СайтМастер не смог его подцепить.

То есть, апгрейд что-то там делал минут 10, а потом написал следующее:

S331L-fail.thumb.jpg.f73f79bff7952c5b2cc8b0953b122757.jpg

Таким образом, как я подозреваю, у меня на флешке сейчас СайтМастера нет образа ОС. А бутлоадер выполняет нормальный старт.

ОС в устройстве Windows Embedded CE 6.0 Core.

Edited by EIKA

Share this post


Link to post
Share on other sites

Factory Reset нормально вызывается через ESC + Power On, но висит с тем же экраном Loading OS..., но внизу с припиской Applying Factory Reset. 12 минут так висело, выключил, так как явно эта функция тоже не работает и желает чтобы была ОС.

Share this post


Link to post
Share on other sites

Предполагалось в дизасмленном бутлоадере найти функцию которая ESC + Power On обрабатывает и поискать там другие возможности- выход в дебаг, принудительный апгрейд фирмвари итд. Скорее всего перехват клавиатуры после включения для всех возможных сценариев будет в одном месте.

Share this post


Link to post
Share on other sites
5 hours ago, khach said:

Предполагалось в дизасмленном бутлоадере найти функцию которая ESC + Power On обрабатывает и поискать там другие возможности- выход в дебаг, принудительный апгрейд фирмвари итд. Скорее всего перехват клавиатуры после включения для всех возможных сценариев будет в одном месте.

В этом случае полностью согласен. Код, видимо, этот. Но ясности с клавишами он не добавляет:

do
	  {
	    if ( v12[5] | (v12[6] << 8) | (v12[7] << 16) | (v12[8] << 24) )
	    {
	      ++v14;
	      if ( !v13 )
	        v11 = 1;
	    }
	    v15 = v12[9];
	    v12 += 9;
	    v13 = v15;
	  }
	  while ( v15 != 255 );
	  v16 = v14 == 1;
	  if ( !v11 )
	    v16 = 0;
	  if ( v16 )
	  {
	    DebugPrintf("Factory Reset requested. \r\n");
	    return 27;
  }

Share this post


Link to post
Share on other sites
3 hours ago, EIKA said:

DebugPrintf("Factory Reset requested. \r\n");

Кстати, неплохо бы посмотреть все что выводит DebugPrint - иногда там прямо видно консоль бутлоадера. Конечно прийдется раскручивать прибор чтобы добраться до последовательного порта DebugPrint-а.

Share this post


Link to post
Share on other sites
14 часов назад, khach сказал:

А с какими параметрами бинарник в Иду грузили чтобы сегменты кода-данных правильно проинитились?

параметры не задаю, выбирают тип PE, меняю процессор на ARM, выбираю spl.exe и autoanalize, далее софт сам все раскладывает

так выглядит фрагмент keymapping

 

.data:860074CC KeyMapping      DCB 0, 0xB8, 0x71, 0, 0x86, 0, 0, 0, 0, 3, 0xBC, 0x71
.data:860074CC                                         ; DATA XREF: .text:off_8600008Co
.data:860074CC                                         ; .text:off_86000110o ...
.data:860074CC                 DCB 0, 0x86, 0, 0, 0, 0, 4, 0xC4, 0x71, 0, 0x86, 0, 0
.data:860074CC                 DCB 0, 0, 5, 0x60, 0x67, 0, 0x86, 0, 0, 0, 0, 6, 0x68
.data:860074CC                 DCB 0x67, 0, 0x86, 0, 0, 0, 0, 0x10, 0xCC, 0x71, 0, 0x86
 

да, по клавиатуре/мыше, в аттаче, достоверность непонятна, т.к. имя документа латиницей на русском..

anritsu-usb.jpg

Edited by Jury093

Share this post


Link to post
Share on other sites
30 minutes ago, Jury093 said:

выбираю spl.exe

Этот файл у меня автоматом грузится как ARM ELF ( ida 7.0) а вот хотелось бы загрузить на анализ bootstrap.bin. Ну и поищите в интернете, может для этого анализатора найдется фото платы с процессором и распиновка армовского JTAG. Тогда отладичком может получится по коду полазить или хотя бы полную копию флеша без выпаивания снять.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.