Как стать автором
Обновить

Комментарии 92

А разве в современных компьютерах нет защиты памяти, которая бы не давала dma лезть по произвольным адресам без разрешения ОС?
Да, есть защита ядра от DMA, на некоторых новых ПК включена по умолчанию (увы, далеко не на всех). С ней прочитать / записать можно только те адреса, что были выделены устройству. Всё это, конечно, при отсутствии ошибок в реализации защиты.

VT-D не бесплатный (по производительности) и с кучей ограничений. По-умолчанию он выключен, его явно надо включать для pci-passthrough.

Сколько времени заняло это исследование?
Суммарно — около недели.
А «грязными»?
Самый первый контроллер купил месяц назад
Единственно оставшийся вопрос — это все dayjob или nightjob. Судя по подписи в профиле, первое. Тогда еще не плохо. Еще не та ситуация, когда security researcher проходил мимо твоего дома с умным холодильником, и вот ты уже умираешь с голода (локдаун, ёпта!)
Сейчас занимаюсь разработкой ПО, реверс как хобби
Тоже неплохо. Не буду говорить, что мой глаз до сих пор набит на эти вещи, но сдается, что скриншоты с кодом из одной тулзы, на «I» начинается, на «DA» заканчивается. А я думал я один Гидру еще не попробовал?..

Ну это же и правда самый настоящий монстр, ну тот что на И начинается. Его перепутать с чем то сложно.

«схватил топор, рублю хардкор!» ;)

автору респект! а что за пинфайндер? самоделка какая или фабричное устройство? можно ссылочек, плиз?
Поделие разработчика sergiuss из Красноярска, достаточно удобные программаторы делает (но купить довольно сложно из-за самого автора)
www.ejtag.ru
ага, спасибо за наводку! значит я был на верном пути. какой-то огороженый форум, без регистрации ничего нельзя ;)
Все старо как мир, десятки лет в open-source, повторено с нуля и просто своровано сотни раз. Совершенно случайные ссылки (ибо тыщщи их):

* github.com/nada-labs/jtagknocker
* www.elinux.org/JTAG_Finder
Чтобы микроконтроллер не мешал чтению flash (а в случае spi он всегда мешает), обычно достаточно замкнуть вход reset микроконтроллер на землю и подать питание.
Да, вот только Reset пина на этом контроллере я не нашёл
Шикарное гик-порно, просто шикарное!
Лесковский Левша ещё подходит.
Absolutely. Концептуально если подходить. Я же скорее по оценке уровня «притягательной магии» :) Реверс ведь на самом деле магия :) Даже для посвященных, но с разными уровнями владения. Так и хочется перефразировать, что «Бесконечно можно смотреть на три вещи: горящий огонь, бегущую воду и на то, как обратно_разрабатывают очередное железо». И чем железо это обыденнее — тем интереснее.
> Бесконечно можно смотреть

Очень правильная формулировка — именно смотреть. Если делать самому, быстро надоедает, и понимаешь, что forward engineering — более благодарное дело, чем reverse engineering. Я например reverse engineering люблю, но с какой-то высокой целью. Ну там, написать opensource драйвер для какого-то полезного железа. Но очень сочувствую всяким security researchers, у которых жизнь такая — ковыряться в грязных вонючих кишках какого-то тухлого железа или софта ;-).
FE — это работа, RE — это скорее хобби, или «песочница» для того, чтобы перейти к FE. Обучение «через руки». Главное правильно подобрать «тухлое железо/софт» (теоретически, это возможно сделать, особенно для узкоспециализированных кейсов, вроде научных и т.п.).

Каждое "тухлое" железо/софт имеет автора — forward инженера :)

Класс! Можно кастомные устройства с PCI-E делать на основе копеечного (по сравнению с FPGA) железа. Да еще и с программированием самого FPGA не заморачиваться, все доступно из микроконтроллера.

Скрытый текст
Или я отстал от жизни и давно продаются микроконтроллеры с pci-e?
Давно. Но партия как всегда, обычно от миллиона.
Имя нам — Легион, купим контроллеров миллион!
Cпасибо!
Интересно ещё hdd где тоже ARM, где то читал, как товарищ на нём… linux запустил
ps цена у коробочки Ой! (если правильно загуглил)
Были статьи про реверс HDD Western Digital, там тоже контроллер Marvell, и даже с тем же JTAG ID. Подскажите ссылочку про линукс? Такого не видывал.
А по поводу коробочки — 5к цена, это самый недорогой поисковик JTAG, что я смог найти. JTAGulator стоит под сотню $, другие и того дороже.

С вашей железкой так и ещё более дерзкое устроить поди можно — запустить линукс прямо в отображённой памяти хоста :)

Хорошая инженерная работа, плюс автору

Интересные изыскания. При определенном терпении действительно можно сделать внешнее устройство с приличными скоростями за недорого. Эх, а когда-то давно, писал на ПЛИС и мелком МК «эмулятор» IDE HDD. Запись и чтение по определенным секторам использовались как канал связи.

Идея со связью через сектора, кстати, живее всех живых — т.н. SmartSD карты. В с виду нормальную MicroSD дополнительно встроен чипик смарт карты с доступом через первый сектор файла с определённым именем (там всё чуть продвинутее — номер сектора не фиксирован, а выясняется встроенным контроллером через разбор FAT, т.е. форматирование не портит, создали снова файл с нужным именем и работаем).
А сами мы как-то к IDE порту подключали devboard USB хоста ISP1161. У него как раз параллельная 16-битная шина была, а ISA уже отмерла. Windows 9x, прямой доступ к I/O с помощью giveio.sys, и всё, кроме прерывания, заработало.

встроенную прошивку (а не загружаемую драйвером)
Но ведь загрузка драйвером может быть и преимуществом, например, если драйверу легко подсунуть свою

Да, но это нужна система, нужен специальный драйвер, нужно ему прошивку подсунуть. А тут в любой комп вставил — цепляется даже на этапе UEFI, потому что AHCI драйвера есть вообще везде

Рассматриваю такой вариант. Для этого нужен более-менее скоростной канал передачи данных, не по UART же данные выгружать. Да и подпаиваться к выводам непросто.

В каждом SATA есть 2 LVDS, как вариант похожий контроллер PCI-e то USB-3?

На PCI-e есть пин A11 — PERST# (PCI-Express Reset signal)
По SATA разве что на диск выгрузить данные можно. А PCI-E to USB3 это либо хост-контроллер (к которому только девайсы подключить получится), либо USB3380, который к PCI Leech уже прикрутили.
По поводу PERST — кстати очень может быть, попробую им ресетить
По SATA как данные так и команды передаются, если контроллер с райдом то думаю любые данные можно передавать в обе стороны по LVDS в SATA разъемах.
Так и есть, но у меня пока нет идей как SATA хост подключить к ПК по SATA, чтобы с ним взаимодействовать. Хотя… в IDE/Compatible режиме можно попробовать послать некоторые FIS, может что и получится.

на всякие ноутбучные wifi карточки от китайских медиа/реал/… теков, вроде MT7612E и им подобных, не смотрели? не sata/usb3 конечно по скорости (было бы куда его обратной стороной ещё втыкать), но уже и не uart, а если со стороны встроенного процессора получится wifi поднять, то не то что подпаяться, вообще провода не нужны :)

Смотрел, но там всё сложнее — как с прошивкой, загружаемой драйвером, так и с совместимостью — в том же UEFI дров для него не будет.
Да и исследования на эту тему уже есть, очень рекомендую к просмотру
youtu.be/Him_Lf5ZJ38

да, какая-нибудь сетевая карта или последовательный порт в pcie куда более "совместимые" (по сравнению с огороженным вайфаем и блобами), но в них и мозгов совсем нет чтобы со стороны "устройства" в память лазить,
хотя у pcie->езернет мостов какой-то jtag торчит, если через него можно заставить отправлять пакеты в сеть, то может и получится, пусть и с процессором снаружи, зато быстрый интерфейс наружу "человеческий" и есть куда подключить.


и видеокарты ещё есть, лет 10 назад ещё вроде подключали какой-то радеон через отладочный i2c к stm32, если то не первоапрельская шутка была, данные опять же через hdmi выгружать не очень удобно.

Очень интересно, хоть и ничего непонятно.
Для меня есть определенная магия в таких статьях. Понимаю 20-25% от того, что тут написано, но всегда читаю с восторгом.
Спасибо

Жду, что во второй части игру dom запустите)
Только давайте без dom, shadow dom, и прочей javascript-хренотени. Просто старый-добрый Doom на raw железе. HDMI-совместимый видеосигнал выдавать по SATA. Все должно сойтись.
Правильно. На контроллере четыре порта SATA, в каждом по одной паре LVDS transmit, а для HDMI нужно три пары RGB плюс синхронизация.
Компьютер в такой схеме лишний, а от pci-e, похоже, нужно только питание.
Круто! Хммм… Интересно, а чисто теоретически, удастся-ли туда поставить минимальный линукс + mdadm и получить «софтверный» хардварный рейд? ;-)
Примерно так сейчас и устроено — в прошивке RTOS, который разруливает RAID. Так что теоритически осталось заменить RTOS на линукс

Чётко! Спасибо.

Хорошая, годная статья.


А есть-ли дешёвые pci-e контроллеры с хорошими манами?
Знаю, что "Элвис" делает pci на mips'ах и публикует маны.

Есть в природе китайские чипы CH367/368, там нет вычислительных ядер, но есть GPIO а-ля ISA. Стоит недорого, документация (на первый взгляд) нормальная (но на китайском), заготовки драйверов под Линукс имеются. Я почему-то тоже намедни загорелся идеей поковырять PCIe, выписал себе отладочную плату с Али, посмотрю, что из этого выйдет

Перевод есть? Хоть на англе.

Я не нашёл, копипастил текст из даташита в переводчик, в принципе все понятно

давным давно на PCI сетевых карточках стояли внешние бутромы, то есть из самых дешевых реалтековских сетевух за 2$ теоретически вполне можно было сделать переходник PCI -> 8бит шина + 16бит адрес, как у CH367, но потом эти бутромы стали вешать не на чип, а частично прямо на PCI, а к появлению PCIe сетевых карт внешние бутромы в виде параллельной флэши уже вымерли, но если где ещё вдруг остались, может оказаться проще/дешевле чем специальная плата с CH367.

Просто потрясает ваш уровень и разноплановость знаний! Очень крутая статья.

Спасибо за такую оценку! Кстати, дипломная работа у меня вообще про анализ и исправление 3D фильмов :)

Жесть! Статья огонь :)
А можете сообразить статью про то как делать скрипты под openocd для многоядерных процов?
Да там то же самое, только строчек побольше. Например если проца два:
jtag newtap marvell core1 -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x140003d3
jtag newtap marvell core2 -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0x140003d3
target create core1 feroceon -chain-position marvell.core1
target create core2 feroceon -chain-position marvell.core2

Ну и в консоли переключаться между ядрами через
targets <имя ядра>
я пробовал делать скрипт под SWD и ядра M0 M3, но в итоге споткнулся об непонятки документации.

для одного ядра получилось так
swd newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap
reset_config srst_nogate

openocd от sysprogs

Да, у кортексов с SWD и их DAP'ами иначе конфиг выглядит Получается, что на одном таргете всё висит. Как с многоядерностью в этом случае дела обстоят, не исследовал.

Через SWD видится (в том числе и) отладочная шина APB, выглядящая как отдельная 32-битная шина памяти, через которую видны компоненты CoreSight — доступ к ядрам (останов/пуск/шаг/регистры), точки останова, буферы трассировки итд. Каждое ядро представлено блоком регистров по отдельному адресу на APB, в конфиге OpenOCD нужно для каждого интересующего ядра задать этот APB-адрес (сами адреса узнаются из ROM Table, видимой на той же APB, в ней начальные адреса всех компонентов и их типы). Позже с рабочей машины допишу точный пример конфига, не помню синтаксис из головы.

Обещанный пример:


# A5
target create $_TARGETNAME0 cortex_a -endian $_ENDIAN -chain-position $_CHIPNAME.dap -coreid 0 -dbgbase 0xf4310000
# R5
target create $_TARGETNAME1 cortex_a -endian $_ENDIAN -chain-position $_CHIPNAME.dap -coreid 1 -dbgbase 0xf4320000

Адреса -dbgbase либо посмотреть в документации, либо сделать так: подключиться с каким попало конфигом, прочитать ROM table командой dap info, найти в ней интересующие ядра. Кусочек ROM table процессора из примера выше:


...
        [L01] ROMTABLE[0x4] = 0x10003
                Component base address 0xf4310000
                Peripheral ID 0x04001bbc05
                Designer is 0x4bb, ARM Ltd.
                Part is 0xc05, Cortex-A5 Debug (Debug Unit)
                Component class is 0x9, CoreSight component
                Type is 0x15, Debug Logic, Processor
...
        [L01] ROMTABLE[0x1c] = 0x20003
                Component base address 0xf4320000
                Peripheral ID 0x04004bbc15
                Designer is 0x4bb, ARM Ltd.
                Part is 0xc15, Cortex-R5 Debug (Debug Unit)
                Component class is 0x9, CoreSight component
                Type is 0x15, Debug Logic, Processor

Хабр все еще торт! Получил восторг от созерцания проводов припаянных к ножкам процессора. Гик-порн в чистом виде!

Статья супер, автору респект
Интересная статья. Правда из-за того что этот pinfind практически нереально достать, вся возможность повторения подобного реверса на другом устройстве стремится к нулю. Вопрос для аудитории: существуют ли в природе подобные девайсы для поиска интерфейсов (хотя бы jtag)? По работе часто приходится сталкиваться с подобными задачами.
цена у российского умельца конечно неплоха, но в наличии уж больно мало оборудования, одни переходники. может быть конец года?
и раз уж пошел разговор про железо, возник небольшой вопрос по СА. У вас, как я понимаю, 100 мгц клон Saleae? Есть претензии к работе/замечания? Интересуюсь ибо периодически присматриваю себе модель «на вырост» из «народного» клона Saleae «24Mhz8ch» :)
Там нужно жамкать «хочу купить», чтобы их вам сделали. Поэтому такое наличие.
У меня 100 MHz клон Saleae (вполне устраивает) и DSLogic 400 MHz (рекомендую, но он дороже). Из замечаний по клону — 50/100 не работает, но в 40/80 режиме отлично справляется
Нажамкал, посмотрим как быстро отзовется :) Не даром же я потратил 10 минут на «заполнение профиля».
Спасибо за совет. Насчет же цены DSLogic. Saleae клон — 40$, DSlogic Basic — 60$. Т.е. имхо вполне себе допустимая разница, чтобы не экономить на спичках…
А ещё Basic в Pro доделывается допайкой DRAM, но я всё же Pro версию купил
Дада, возможность апгрейда радует. В общем, еще раз спасибо за наводку.
Спасибо! Первый вариант open-source и выглядит многообещающим.
Читаю, и руки чешутся похимичить. Спасибо!
Этот интерфейс SATA работает в одном направлении? Есть ли такие платы которые симулируют работу SATA HDD/SDD? Интересно можно ли сделать из такого контролера плату перехвата, в один вход SATA подключить жесткий диск, а со второго входа сделать выход и подключить его к другой матиринке, так что бы его распознавало как жесткий диск и можно было с него операционную систему загрузить. Такое можно сделать изменением прошивки или это аппаратно нужно что то еще менять?
Внутри этого чипа аппаратный AHCI контроллер, поэтому возможности ограничены только «хостовой» частью. Имитировать диск не получится, только ПК. Но такие устройства есть
www.epos.ua/view.php/products_epos_ata_analyzer
Более того, можно сделать анализатор самостоятельно, цепочкой SATA->IDE->анализатор->IDE->SATA. IDE на 100 МГц вполне реально перехватывать.
Извините за наивный вопрос: получается, что если не умеешь разводить платы для PCI-E и писать соответствующую прошивку, то для железки без IO, например, аппаратного ключа с подсчётом на борту, это самый дешёвый способ для тиража в 1-5 экземпляров?
Конечно можно сделать на базе этого контроллера PCI ключ, если есть опыт реверс-инжиниринга и разработки под микроконтроллеры без документации, но здесь возникают проблемы — например, вместо своей платы вы будете вынуждены покупать чужие устройства, которые не факт, что есть в продаже, юридические вопросы (вряд ли официально такое можно продавать), вопросы, связанные с отсутствием документации. Но если вас это не пугает — то да, получается очень недорогое и кастомизируемое PCI-E устройство, с которым достаточно легко взаимодействовать (ATA командами)

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


Ждём статью про перепрошивку роутера на ПЛИС Xilinx в аппаратный ускоритель нейронных сетей, они как раз собираются что то подобное мутить, когда их AMD доест, а тут обгоните их силами DIY

Ждём статью про перепрошивку роутера на ПЛИС Xilinx в аппаратный ускоритель нейронных сетей, они как раз собираются что то подобное мутить, когда их AMD доест, а тут обгоните их силами DIY

От таких вещей могут эпилептические припадки начаться как у геймеров от некоторых миссий в Cyberpunk 2077. Правда только у тех кто в силах понять, что человек делает, как и зачем :)

Зачем роутеры? На Али сейчас управляющие платы майнеров на Xilinx Zynq по 12€ распродают :)

USB pinfind tiny tools
где добыть? Не гуглится.

Выше в комментарии писал, www.ejtag.ru
Я купил месяц назад, специально под исследование. И каждый день активность на сайте, сомневаюсь, что дохло
заказал пару часов назад. было 2 шт. в наличии
так что все живо. просто разработчик pinfinder-а работает в режиме жесткого «оn-demand».
Как верстальщик понимаю тут ровно ничего, но, господи, какой же слог и как интересно подано!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации