Перейти к содержимому

Как найти rx tx

  • автор:

Аппаратный взлом

Эта статья предназначается для всех, кто имеет опыт в разработке *nix/ПО/эксплойтов, но не обладает или почти не обладает знаниями оборудования/электроники! Хоть мы и не будем рассматривать все подробности простых схем (для этого есть множество отличных онлайн-ресурсов), информация изложена так, что не требует предыдущего опыта работы.

Основная задача статьи — помочь тем, кто пытается заниматься исследованием уязвимостей и/или разработкой эксплойтов физического устройства без системы отладки, оболочки и прошивки. Иными словами, мы попробуем добраться до root shell без сложностей поиска уязвимостей нулевого дня!

Разведка

Прежде чем переходить к исследуемому устройству, полезно провести предварительное изучение. В США все устройства, использующие радиочастотную связь (RF, Radio Frequency), например, WiFi, Bluetooth и т. п., должны проходить тестирование и проверку FCC. Эти тесты доступны публично, и обычно в них содержатся изображения внутренностей устройства!

Чтобы найти эти тесты FCC, нужно для начала узнать FCC ID. Этот ID всегда указан на корпусе устройства и обычно объединён с другой технической информацией и спецификациями. У данного устройства FCC ID находится на нижней крышке.

Для автоматизации процесса этот ID можно поискать непосредственно на официальном сайте поиска FCC или воспользоваться сайтами наподобие fcc.io или fccid.io. На них вы можете найти разнообразные документы: руководства пользователя, информацию о радиочастотном тестировании и фотографии внутренностей и внешнего вида устройства! Эти фотографии могут помочь в поиске возможных интерфейсов отладки оборудования, интересных компонентов, архитектуры ЦП и т. д.

Вскрываем оборудование

Обычно детали аппаратных устройств скрепляются вместе винтами, клеем и (почти всегда) пластмассовыми защёлками. Эти защёлки — проклятие любого хакера оборудования, однако их обычно удаётся открыть, аккуратно надавив отвёрткой с плоским шлицем или другим узким инструментом. (Помните, что острые края инструмента всегда должны быть направлены в противоположную от вас сторону!)

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

При изучении документации FCC или внутренностей устройства мы стремимся решить следующие важные задачи:

1. Больше узнать об устройстве

Найдите ЦП. Обычно это самый большой чёрный квадрат на плате. Прочитайте его маркировку и найдите её в поисковом движке, обычно там есть технические описания архитектуры, контактов и многого другого.

Любой другой большой чип на печатной плате тоже может дать полезную информацию об устройстве (ОЗУ, накопитель и т. п.).

2. Получить прошивку устройства

См. подраздел «При помощи оборудования» в разделе «Получение прошивки».

3. Найти оболочки

Процесс получения shell и проведения интерактивной сессии отладки оборудования описан ниже.

Общение с оборудованием

В программировании двоичные файлы могут компилироваться с отладочными символами; аналогично этому, разработчики оборудования могут добавлять в устройства такие элементы, как отладочные разъёмы, позволяющие обмениваться данными с компонентами печатной платы. Эти интерфейсы используются для отладки при разработке и часто необходимы при производстве устройств для загрузки прошивок и/или проведения автоматизированных тестов. Поэтому такие разъёмы не убираются из готового устройства и могут служить замечательными точками входа для любопытного реверс-разработчика.

Отладочные разъёмы (или контакты) обычно состоят из группы соединений, выстроенных в стандартную, легко узнаваемую структуру на печатной плате. Они могут быть уже припаянными к разъёму печатной платы (благодаря чему к ним можно легко подключать внешние устройства), или же вам придётся разогревать паяльник и припаивать к ним новые провода.

Примечание: отладочные разъёмы для встроенных ЦП часто представляют собой непосредственные соединения с контактами на самом ЦП. Если отладочные разъёмы сломаны или отсутствуют, то можно не обращать внимания на остальную часть платы и подключиться напрямую к этим контактам ЦП. С такими мелкими соединениями помогают специальные инструменты наподобие pcbite.

Хотя протоколов связи с оборудованием очень много (JTAG, I2C, SPI, CAN . ), в этой статье мы рассмотрим UART, потому что это один из самых популярных протоколов интерфейсов отладки.

Что за UART?

U niversal A synchronous R eceiver/ T ransmitter (UART) — это простой, но изящный протокол. Как понятно из названия, он позволяет устройству асинхронно получать и передавать данные. UART-соединение обычно выглядит вот так:

Интерфейс UART состоит из четырёх контактов:

  • GND: низкое напряжение, например, 0 В.
  • Vcc: высокое напряжение, обычно от 3,3 В до 12 В.
  • Rx (приём).
  • Tx (передача).

При помощи анализатора цепей мы можем исследовать реальную передачу UART.

В каждой строке показано изменение напряжения на отдельном контакте UART в процессе передачи. Здесь мы замеряем, как устройство получает данные.

  • Канал 0 (GND) постоянно имеет низкое напряжение.
  • Канал 1 (Vcc) постоянно имеет высокое напряжение.
  • Канал 2 (Rx) попеременно имеет низкое и высокое напряжение в процессе передачи данных.
  • Канал 3 (Tx) постоянно имеет высокое напряжение (то есть передача данных отсутствует).

▍ Скорости передачи информации (скорость в бодах)

Подробное описание бодов, скорости в бодах, скорости в битах и другого можно прочитать на stackoverflow. Однако для наших задач можно принять, что скорость в бодах UART-устройства — это просто количество передаваемых по проводу битов в секунду.

Большинство устройств работает со скоростью 9600 бод (9600 бит/с или 1200 байт/с) или 115200 бод. Существует много стандартных скоростей (обычно кратных 9600), но 9600 и 115200 почти всегда используются по умолчанию. Трюки для определения скоростей будут изложены ниже.

▍ Разъём UART

Заглянув внутрь устройства, вы можете увидеть нечто подобное:

Этот безымянный производитель даже любезно промаркировал контакты!

Естественно, каждый инженер может реализовывать проекты по-разному. В первую очередь нужно искать следующее:

1. Маркировку Rx и Tx

Если контакты Rx/Tx промаркированы, то почти всегда в пятидесяти процентах случаев обозначение Rx подразумевает или «здесь можно получать данные», или «отсюда устройство получает данные». (Тоже справедливо и для контакта Tx).

Примечание: Rx и Tx работают под одинаковым напряжением, поэтому ошибка обычно не приводит к проблемам (при необходимости провода можно позже поменять местами).

2. Контакт Vcc

Не всегда понятно, для чего предназначается контакт Vcc. Обычно, если плата уже запитана (например, через USB или блок питания), то необходимость работать с контактом Vcc отсутствует, поскольку он уже подключён к внутреннему Vcc платы. Неправильная работа с эти контактом и попытка подключить к нему другой источник питания может привести к короткому замыканию двух источников питания, сгоранию устройства и повреждению оборудования! (К сожалению, я знаю это по собственному опыту.) Короче, НЕ ПОДКЛЮЧАЙТЕСЬ К ЭТОМУ КОНТАКТУ.

Получаем Root Shell

Всё это здорово, но вы читаете эту статью не ради аппаратных протоколов, а чтобы получить root shell!

Как говорилось выше, при работе с UART присутствует некоторая неопределённость. Иногда контакт Vcc вообще отсутствует, иногда маркировка может быть ошибочной и т.п. Однако если вы увидите на плате три или четыре контакта в ряд, то это, скорее всего, UART.

Если на вашей плате отладочные контакты промаркированы, то сразу переходите к разделу «Взаимодействие». В противном случае надо браться за мультиметр!

▍ Идентифицируем контакты

Существует множество способов реверс-инжиниринга выводов UART, от простой удачи до оборудования за тысячу с лишним долларов. Мы выберем более дешёвый вариант: мультиметр! Если у вас его нет, то в продаже есть мультиметры ценой от 5 долларов. Для UART не требуется ничего крутого, подойдёт любой мультиметр, который может показывать напряжение в диапазоне 0 — 12 В и имеет режим проверки целостности цепи. (Например, этот или этот).

Разобравшись с мультиметром, выполните следующие действия:

  • Найдите выводы, которые похожи на UART. (Там может быть два, три или четыре контакта)
  • Включите устройство обычным образом.
  • Переключите мультиметр в режим проверки целостности цепи. Обычно он выглядит как символ диода ().
  • Приложите чёрный щуп мультиметра к заземлённому компоненту (обычно это любой металлический участок — ради безопасности используйте корпуса выводов, радиочастотные экраны и т. п.)

На изображении ниже радиочастотные экраны — это большие прямоугольные металлические крышки компонентов, излучающих радиоволны; экраны почти всегда заземлены.

1. Коснитесь красным щупом каждого контакта предполагаемого UART. Если звучит сигнал (или показания на экране мультиметра меняются), то вы нашли контакт заземления! Примечание: контакт заземления обычно имеет квадратную форму, но не всегда.

2. Переключите мультиметр в режим постоянного тока. Обычно он выглядит как “V” со сплошной горизонтальной линией над пунктирной линией. Если у мультиметра есть фиксированные диапазоны напряжений, выберите ближайший к 12 В (с округлением вверх).

3. Прижмите чёрный щуп мультиметра к найденному ранее контакту заземления.

4. Касайтесь красным щупом каждого контакта предполагаемого UART. Если мультиметр показывает 3,3 В или 5 В, то это, скорее всего, контакт приёма. Это может быть и контакт Vcc, поэтому можно проверить цепь на целостность с запитанным контактом коаксиального разъёма или USB-входа. Если значения колеблются в диапазоне от 3,3 В/5 В до 0 В, то это, скорее всего, контакт передачи. Если мультиметр показывает 0 В (или

Контакт заземления — самый важный. Если вам удастся также найти Vcc, то можно просто случайным образом решить, где находятся Rx и Tx, а потом поменять их местами в случае отсутствия соединения.

▍ Взаимодействие

Отлично! Теперь, когда мы идентифицировали потенциальные контакты UART, нам нужно каким-то образом начать с ними общаться. Для этого подойдёт любой преобразователь USB-to-serial. Однако самыми простыми являются четырёхконтактные переходники наподобие такого или такого (он лучше). Эти переходники имеют следующие контакты:

Красный: Vcc (Нам его использовать не нужно !)

Зелёный: передача (со стороны переходника)

Белый: приём (в переходник)

Подключите эти провода к соответствующим контактам UART устройства следующим образом:

  • Чёрный провод к заземлению устройства.
  • Зелёный провод к контакту приёма устройства.
  • Белый провод к контакту передачи устройства.
  • Красный провод ни к чему не подключается!

▍ Обмен данными

И мы приближаемся к финишу! Подключите USB-кабель и запустите ПО, способное работать с последовательным соединением:

В Linux-подобных системах:

1. sudo screen /dev/ttyUSB0 [baudrate]
2. sudo gtkterm -p /dev/ttyUSB0 -s [baudrate]
3. minicom/miniterm — тоже отличные специализированные CLI-инструменты для этого

В системах Windows можно использовать для последовательного соединения PuTTY.
Как говорилось выше, важно подобрать скорость целевого устройства, чтобы правильно общаться с ним. Так как в устройствах обычно используются стандартные скорости, можно воспользоваться скриптом наподобие baudrate.py для циклической проверки всех скоростей.

▍ Устранение неполадок

❒ Я не получаю вывод!

1. Убедитесь, что инструменты последовательной связи запущены под root/admin.
2. Снова проверьте контакты (попробуйте поменять местами Rx и Tx).
3. Убедитесь, что на устройство подаётся питание так, как это задумано производителем (т. е. не по красному последовательному проводу).

❒ Вывод представляет собой мусор из поломанных символов и Unicode

Скорее всего, неверно установлена скорость в бодах. Попробуйте пройтись по скрипту baudrate.py, возможно, какие-то другие скорости дадут вам нужную информацию.

❒ Устройство не запускается!

Возможно, это особенность работы с кабелем usb-to-serial. Раньше у меня бывало так, что после включения питания кабель посылает 1 В в свою линию передачи, из-за чего некоторые устройства перестают запускаться. Просто отключите кабель, перезапустите устройство, подождите секунду и подключите кабель.

❒ А что дальше?

После успешного подключения по UART вы, скорее всего, наткнётесь на лог запуск устройства, выдающий потоки отладочной информации. Если вам повезёт, то подождав несколько секунд и нажав на [ENTER], вы получите доступ к интерактивной оболочке, запущенной под root.

В противном случае придётся использовать различные трюки:

1. Если в начале процесса запуска вы увидите запрос ввода или нажатия определённых клавиш, нажмите их!

  • Возможно, вы перейдёте в интерактивную оболочку загрузчика устройства. Хотя операционная система ещё не загрузилась, вы можете изучить содержимое nvram, сдампить прошивку, выполнять произвольную запись в участки памяти и принудительно запускать в устройстве оболочку, изменив аргументы init (см. этот пост)
  • Быстро нажимать CTRL+C при запуске. Это странный трюк, но в нескольких случаях он сработал.
  • Если устройство использует загрузчик U-Boot, то можно заставить оборудование перебросить вас в интерактивную оболочку загрузчика. По умолчанию, если U-Boot не может считать образ прошивки из флэш-памяти в ОЗУ, то он вызовет панику и переключится в режим интерактивной оболочки восстановления. Чтобы вызвать эту панику (прости, U-Boot), на короткое время заземлите линию данных ввода-вывода флэш-чипа во время запуска. В этом вам помогут технические описания (даташиты) производителя!

Получение прошивки

Теперь, когда у вас есть оболочка с root, вы, вероятно, хотите заняться хакингом, и в этом случае вам пригодится копия прошивки оборудования. Процесс получения прошивки выходит за рамки этой статьи, но вот несколько возможных вариантов действий:

▍ 1. Скачивание непосредственно у производителя (самый простой способ):

Некоторые производители оборудования (OEM, Official Equipment Manufacturer) выкладывают сжатые образы прошивок на свои веб-сайты (предназначенные для обновлений вручную). Если не можете найти страницу скачивания, попробуйте ввести в поисковом движке «[название устройства]” “firmware”. Например: центр скачивания Netgear

▍ 2. Сетевой перехват

К сожалению для безопасности устройства (но к счастью для нас!) многие потребительские устройства общаются с конечными точками OEM по HTTP. Из-за отсутствия SSL/TLS иногда во время обновления прошивки можно перехватить сетевой трафик для получения файлов. При этом есть возможность и загрузки зловредных обновлений прошивок. (См. этот пост ZDI).

▍ 3. При помощи оборудования

Последовательное соединение: для автоматизации этого процесса существует множество отличных инструментов и руководств, например, это. Из загрузчика устройства обычно можно считывать содержимое флэш-памяти, в котором содержится образ прошивки! (Так как он ещё не был скопирован в ОЗУ.)

Дамп флэш-памяти: существует множество специализированных руководств, например, это. При помощи специализированных аппаратных инструментов (например, TL866II+) можно физически подключиться к флэш-чипам платы (отпаяв их или специальными зажимами), а затем считать содержимое.

FIN

  • ruvds_перевод
  • поиск уязвимостей
  • встраиваемые системы

Arduino.ru

Здравствуйте.
Подскажите, пожалуйста, есть ли какой-то метод определения tx rx, кроме метода тыка? То есть, где именно из них tx, a где rx? До момента приема/передачи.

  • Войдите на сайт для отправки комментариев

Сб, 06/10/2018 — 15:48

trembo аватар

Зарегистрирован: 08.04.2011

Без тыка не выйдет.
Измеряем напряжения на обоих выводах.
Тыкаем на них через резистор допустим 4к7 или 0 или 5 Вольт.
Там где напряжение будет меняться — это вход.

  • Войдите на сайт для отправки комментариев

Сб, 06/10/2018 — 20:38

andriano аватар

Зарегистрирован: 20.06.2015

Определение на плате контактов Rx, Tx, Gnd.

Плата роутер Zyxel Keenetic 4G II rev.1. Нужно определить Rx, Tx, Gnd для прошивки через usb-com. кабель есть (шил через него tp-link). распиновку UART консоли для этого роутера не нашёл. помогите разобраться. предполагаю что: 1. квадратик +3,3V, 2.- TX, 3.- RX, 4.- Vcc, 5.- Gnd. если я неправ, то поправьте. спасибо за ответ.

Лучший ответ

1) найти землю;
2) мультиметром найти питание (3,3 или 5), если оно нужно;
3) методом тыка найти RX и TX.

Остальные ответы
методом тыка

правильно говорят: методом научного тыка.
если rx tx местами поменяешь ничего страшного не произойдет.

Все ответы не верны. если на ТХ случайно подать 0 или заземлить то можно легко спалить линейный узел передатчика.

Алгоритм должен быть такой:
1. Определить GND или 0.Путем прозвонки кз на 0.
2. Определить RX. Для этого на каждый выход платы роутера подключать вход осцилографа. RX это вход и находится в непонятном состоянии (высокоимпедансном). То есть от человеческого прикосновения может переходить в любое состояние, либо на нем вообще может наводится синусойда. в общем сразу поймешь.
3.TX это передатчик с уровнями стандарта RS-232 либо TTLcответственно осциллографом ты увидишь либо передачу (последовательность 0 и 1), либо 1( Для RS232 уровни -12В/+12В, для TTL от 0 до 4,5 вольта).
4. 3.3 Вольта ты сразу увидишь.

Кстати, замерив уровни ты поймеш какой преобразователь тебе надо. Если, там уровни TTL а ты подцепишь преобразователь USB-RS232. Ты можешь сжечь схему. А если наоборот, то у тебя ничего работать не будет, т. к в RS232 напряжения выше, сигнал инвертирован относительно TTL

Напоминаю что для прошивки нужно подключить провода: GND-GND, RX на TX, TX на Rx.

Кстати, не понял вопроса с квадратиками. Поясни или пришли фотографию.

ПеченьМыслитель (5162) 8 лет назад

Картинка из стандарта на UART, мне даже интересно стало про «спалить линейный узел передатчика», объясни по картинке?
И ещё почему RS485 ничего не палит?

Гиляев Максим Профи (982) Уважаемый, для начала изучите что такое уровень TTL и чем отличие RS485 от RS232.. Если кратко, для не образованных: * TTL- уровни сигналов ИМС (где 0 — это от 0 до 0,4В, а 1 от 2.7 до 4,5В * RS232 — существовал на всех старых компьютерах для подключения мышек и т. д, где 0 это +3 до+15В, 1 это -3до-15В *RS485 этот стандарт применяется для передачи данных до 1,5 км и там нет сигнала TX, а есть A и Б. а данные передаются дифирециальным напряжением (полярностью) между А и Б.

MadfishПросветленный (29928) 6 лет назад

А не проще осциллографом сразу всё найти? Крайний — земля. Противоположный 3,3 постоянно. Рядом с 3,3 висит постоянно ноль — это RX, соседний с RX — постоянно висит 3,3 это TX. Очевидно же и не спалишь ничего.

Батраков СергейПрофи (815) 4 года назад

А как быть если у меня есть 3 контакта: №1 — GND, №2 и №3.
Как узнать где TX и RX?
Измерил напряжение между №:
1 и 2 — 5В
1 и 3 — 0В
2 и 3 — 5В.

www.MobiMS.ru

Мобильные новости — обзоры новинок — игры и приложения для смартфонов и планшетов

Как найти нужные контакты Rx,Tx,GND в телефоне?

Кабель для прошивки у вас уже есть.Штекер со всеми контактами- тоже.А еще лучше — с плашкой.удобнее замерять тестером.
Приступим.
Как найти нужный распин?
Для начала,находим общий GND (земля)-называйте как хотите,суть от этого не меняется.Берем тестер.Ставим в режим омметра.Втыкаем в телефон нашу плашку (штекер с выводами).Вытаскиваем батарею из телефона.Минусовой щуп тестера ставим на минусовой контакт (куда прижимается батарея),а другим щупом перебираем контакты на штекере — ищем КЗ (короткое замыкание) или наименьщее сопростивление.Таких контактов может быть 1 или 2,а то и 3.Помечаем в тетрадке номера контаков.Один из них GND.

Как найти нужные контакты Rx,Tx,GND в телефоне?

Как найти нужные контакты Rx,Tx,GND в телефоне?

Ставим батарею в телефон.Переключаем тестер в режим вольтметра на напряжение 5 Вольт.Ставим минусовой щуп тестера на один из найденных контактов (предположительно GND),а вторым щупом поочередно идем по оставшимся контактам и на каждом кратковременно жмем кнопку включения телефона.Смотрим,как очередной контакт реагирует на данное действие.
На двух или трех контактах плашки в момент нажатия на «вкл» будет виден всплеск напряжения ( примерно 2,5 В )
Записываем порядковые номера найденных пинов.Среди них,нужные нам Rx и Tx.
Найдены все контакты.
Включаем прошивочный кабель в компьютер.Если первый раз,то выскакивает окно мастера установки оборудования,устанавливаете нужный драйвер.
Для микросхемы Prolific Technology PL-2303 есть самоустановочный драйвер.
После установки драйвера идете:
Пуск—Панель управления—Производительность и обслуживание—Система—Оборудование—Диспетчер устройств—
—Порты.
Здесь вы увидите строку:
Prolific USB-to-Serial Comm Port (COM7).Номер COM порта может быть любым.
Кликаете по строке правой кнопкой мыши,выбираете Свойства—Параметры порта— выставляете скорость 115200.
Это для кабеля с микросхемой PL-2303.
Запоминаете номер порта.Теперь,если вы будете втыкать кабель в одно и то же USB гнездо,номер порта меняться не будет.
Все готово для снятия прошивки.
Скачиваем программы FlashTool или Spiderman 2.61 Rus и начинаем работать с мобильником.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *