Hardware Hacking: Делаем дамп прошивки с помощью программатора CH341a

2020

Перевод: @N3M351D4

Источник: https://www.blackhillsinfosec.com/dumping-firmware-with-the-ch341a-programmer/

Недавно я столкнулся с проблемой: она заключалась в том, что микросхема SPI, с которой я пытался сдампить прошивку, была рассчитана на уровень напряжения 1.8 В. Это не было бы проблемой, если бы программаторы Shikra и Bus pirate не были бы рассчитаны на 3,3 В. Я подумал о создании делителя для понижения напряжения, но после небольшого поиска в Google я наткнулся на программатор CH341a с адаптером на 1.8 В. Я решил заказать его. После того, как я поработал с ним и смог успешно сдампить прошивку с микросхемы 1,8 В, не снимая микросхемы с печатной платы, я решил написать об этом в блоге. Эта статья может показаться слишком подробной для опытных людей, которые могут сдампить прошивку и другими инструментами, но я хотел бы также охватить аудиторию новичков, потому что мы все когда-то начинали, верно?

Ниже приведена фотография содержимого набора, который я получил. В конце этого блога я приведу ссылки на ресурсы, где я покупал необходимое железо.

Рисунок 1 – содержимое набора, идущего в комплекте с программатором CH341a

Программатор CH341a прост в настройке. Обычно я использую операционную систему Linux для проведения тестирований, однако из предыдущего опыта я знаю, что AsProgrammer лучше работает на ПК с Windows. Все, что вам нужно, — это драйверы и программное обеспечение AsProgrammer, которые можно найти по следующим ссылкам.

· «CH341-Windows-SPI-I2C-Driver+SDK-library» и «CH341-Windows-Serial-Driver+SDK-library» находятся в директориях этого репозитория — https://github.com/boseji/CH341-Store.

· ПО AsProgrammer – https://github.com/nofeletru/UsbAsp-flash/releases/

После загрузки программного обеспечения и установки его на мой ноутбук с Windows было необходимо выбрать девайс для исследования. Я обратился к своей коллекции электроники и нашел маршрутизатор Netgear WNDR3700, который справился бы с задачей исследуемого устройства. Разобрав корпус и изучив микросхемы устройства, я обнаружил целевую SPI-микросхему. Ниже приведено изображение платы с идентифицированной микросхемой.

Рисунок 2 – печатная плата Netgear WNDR3700 с идентифицированной микросхемой

Как при любой разведке, необходимо найти максимум информации о исследуемой цели, поэтому я взял даташит для микросхемы MX25L6445E, изучил ее схему выводов и определил тип корпуса, который используется на плате WNDR3700.

Рисунок 3 – конфигурация и описание контактов

Изучая даташит, я заметил, что наша микросхема имеет VCC (напряжение питания) 3,3 В, а тип корпуса на плате – 16-контактный – 16 – PIN SOP. Благодаря этой информации мы знаем, что у нас нет необходимости использовать переходник на 1.8 В, но у нас могут возникнуть проблемы с 16-контактным корпусом микросхемы (обратите внимание, что ее средние 8 пинов не используются). Программатор поставляется только с 8-контактным адаптером. Я мог бы припаять провода к работающим контактам MX25L6445E и соединить их с разъемом CHIF1a Zero Insertion Force (ZIF), но так как мне мог бы пригодиться 16-контактный адаптер для будущих исследований, я решил заказать один.

После недолгого поиска в интернете я выбрал 16-контактную прищепку для программатора, которая имеет разъем для использования с CH341a. Среди штырьевых переходников, шедших в комплекте с 16-контактной прищепкой для микросхемы, были также переходники с 8-ми на 16 и с 16-ти на 16 контактов. Я подключил переходник с 8-ми на 16 контактов и обнаружил, что на нем установлена верная распиновка для взаимодействия с 16-контактным чипом MX25L6445E и ZIF-разъемом CH341a. Ниже приведено изображение контактирующего устройства-прищепки и штырьевых переходников.

Рисунок 4 – 16-ти контактная прищепка для программатора и переходники

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

Рисунок 5 – ключ микросхемы MX25L6445E

Рисунок 6 – шелкография на плате программатора CH341a

На шелкографии платы программатора CH341a ключи микросхем серии 25xx и 24xx отмечены маленькими полукругами справа от них. Этот полукруг указывает, что контакт 1 (ключ) находится рядом с полукругом в правом верхнем углу микросхемы. Разъем ZIF имеет 16 контактов, поэтому он разделен пополам на правую сторону — для микросхем 24xx и левую — для чипов 25xx. Мы будем использовать левую сторону разъема ZIF, поскольку наш чип является чипом MX25L6445E.

Рисунок 7 – обозначения первого контакта на кабеле и переходнике

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

Рисунок 8 – прищепка программатора, присоединённая к микросхеме MX25L6445E

Затем, нужно установить переходник с кабелем прищепки в ZIF разъем программатора CH341a, как показано ниже.

Рисунок 9 – установка переходника в разъем ZIF

Теперь, когда все подключено, мы можем сдампить прошивку с нашей микросхему MX25L6445E. Мы подключаем CH341a к USB-порту нашего ПК с Windows и открываем AsProgrammer. Для начала мы должны выбрать CH341a в качестве аппаратного устройства на вкладке Hardware.

ВАЖНОЕ ПРИМЕЧАНИЕ: программатор CH341a самостоятельно подает питание на плату, поэтому вам не нужно подключать WNDR3700 к источнику питания. Если вы это сделаете, вы можете повредить программатор.

Рисунок 10 – выбор устройства в AsProgrammer

Следующее, что вам нужно сделать, это выбрать тип микросхемы SPI, которую вы будете использовать. Во вкладке IC выберите SPI, производителя микросхемы, а затем саму микросхему. В данном случае нам нужна микросхема MACRONIX MX25L6445E.

Рисунок 11 – выбор микросхемы в AsProgrammer

Как только микросхема выбрана, она будет отображена наверху окна AsProgrammer. Поля «Size» («Размер»), «Page» («Страница») и «SPI commands» («Команды SPI») — заполняются автоматически, поэтому, их не требуется заполнять вручную. Также, вам необходимо выбрать радиокнопку SPI. Ниже приведен скриншот настроенного AsProgrammer.

Рисунок 12 – настройка AsProgrammer после выбора микросхемы

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

Считывание моей микросхемы заняло 1,5 минуты, ее содержимое показано ниже на скриншоте ниже.

Рисунок 13 – успешно считанные данные с микросхемы

Теперь, когда у нас есть сдампленная прошивка, мы можем изучить ее в поисках чего-либо интересного. Я использовал «strings» или «strings.exe» (для ОС Windows) для поиска слов «password» и «SSID», как показано ниже.

Рисунок 14 – использование утилиты strings для поиска слов «password» и «SSID»

Как вы заметили, этот конкретный маршрутизатор, скорее всего, был сброшен до стандартных настроек перед тем, как был снят с эксплуатации и продан, поскольку содержит значения «password» и «SSID», которые выглядят как устанавливаемые по умолчанию.

При использовании программаторов Bus Pirate и Shikra, мне нужно выпаивать микросхемы с платы для взаимодействия с ними из-за того, что другие схемы мешают считыванию целевой микросхемы. Самое замечательное в программаторе CH341a — это то, что по сравнению с другими аппаратными средствами, мне достаточно просто разместить прищепку на микросхеме, не беспокоясь о ее повреждении путем выпайки.

Ниже приведены ссылки на железо, которое я приобрел для написания данной статьи.

· CH341a Pro с переходником на 1.8 В

https://www.amazon.com/Organizer-EEPROM-CH341A-Adapter-Programmer/dp/B07V2M5MVH/ref=sr_1_1?keywords=ch341a&qid=1579295338&s=electronics&sr=1-1

· 16-ти пиновый адаптер

https://www.amazon.com/WINGONEER-SOIC16-circuit-programming-adapter/dp/B01CYA9BTY/ref=pd_sbs_147_20?_encoding=UTF8&pd_rd_i=B01CYA9BTY&pd_rd_r=bcbc95e8-fcd8-4012-a17a-5e15d8a7da7b&pd_rd_w=4xhD3&pd_rd_wg=BUd6J&pf_rd_p=670e3530-913b-43e2-8005-da937e9a4fe8&pf_rd_r=AE4216TVMK66NZAYCY34&psc=1&refRID=AE4216TVMK66NZAYCY34