Тред: поразительный секрет работы Lightning-адаптеров Apple

Пользователь Twitter с ником @nyan_satan рассказал о работе Lightning-видеоадаптеров от Apple. Они не так просты, как кажутся.
По сути, внутри обычного кабеля прячется полноценный мини-компьютер, у которого есть процессор, память и даже своя операционная система. То есть эти адаптеры думают самостоятельно, потому и стоят бешеных денег.
1. Первый тип: Lightning Digital AV Adapter (b137ap/iAccy1,1)

Эти адаптеры передают информацию с Lightning на HDMI. Поддерживается видео и аудио.
2. Второй тип: Lightning to VGA Adapter (b165ap/iAccy1,2)
Конкретно этот адаптер передаёт только видео.
Оба указанных выше переходника поддерживают видео до 1080p и используют одинаковый SOC (System On Chip) — S5L8747. Номер микросхемы: H9TKNNN2GD. В ней 256 МБ оперативной памяти.
К сожалению, они ужасного качества. Автор треда заметил, что на сайте Apple у аксессуара всего 2 звезды из 5. Пользователю тоже не повезло, адаптер за $50 внезапно перестал работать. Ниже продолжается тред от лица разработчика:
3. Мой b137 постигла та же судьба, так что появилась возможность его разобрать. Вот так он выглядит без пластикового корпуса

My b137 met the same faith, so we can disassemble it. Here is how it looks like without its plastic closure: pic.twitter.com/6ZCrJQUh9C
— Lisa Braun (@nyan_satan) July 27, 2019

4. Разбираем корпус целиком. Медные контакты представляют собой точки тестирования: некоторые должны быть UART и SWD (оба недоступны через Lightning)

Let’s destroy this metal shell with pliers
These copper dots are test points – some of them must be UART and SWD (both are unavailable over Lightning): pic.twitter.com/S9UhYEFXVZ
— Lisa Braun (@nyan_satan) July 27, 2019

UART — это универсальный асинхронный приёмопередатчик или узел вычислительных устройств, предназначенный для организации связи с другими девайсами.
SWD (Serial Wire Debug) — это интерфейс для отладки и прошивки микроконтроллера.
5. В самом адаптере нет никакой прошивки (ну, кроме SecureROM), поэтому iOS должна каждый раз её загружать самостоятельно

Haywire itself doesn’t store any firmware (well, except for SecureROM), so iOS has to upload it every time. Firmware bundle for it is very tiny, around 25MB uncompressed. Shipped as preinstalled asset with iOS and/or can be downloaded. That’s how its folder structure looks like: pic.twitter.com/0TS0T0Djm0
— Lisa Braun (@nyan_satan) July 27, 2019

Прошивка достаточно маленькая, весит около 25 МБ в несжатом виде. Поставляется как предустановленный ресурс с iOS, и её можно загрузить. Вот структура папок:

6. Прошивка предварительно подписана и не требует никакой персонализации
Уникальный зашифрованный код APTicket хотя и используется, но всё же статичен, то есть не привязан ни к какой системе защиты ECID и однократно используемому числу nonce.
В отличие от всех других устройств, начиная с iOS 5, в эпизодической сети iBSS для видеоадаптеров есть режим Recovery с интерактивной оболочкой. Он нужен для загрузки кэша ядра по USB (вместе с древом устройств DeviceTree и ramdisk, разумеется).
ramdisk — это технология, позволяющая создать обычный диск в оперативной памяти.

Интересная информация о программном обеспечении на ramdisk здесь.
7. У Image3 в iBSS странный, ранее неизвестный тег «RAND», содержащий 64-разрядное целое число и некоторое наполнение
Я не смогла найти, что означает этот тег, даже в исходном коде загрузчика iBoot. Кроме того, у него всегда только один KBAG (формат защищённых файлов).

IMG3 (Image3) — это формат файлов, используемый для доступа iOS к системе устройства.
Карта распределения памяти:
0x20000000-0x20020000 – ROM (128 KB)
0x22000000-0x22020000 – SRAM (128 KB) (iBSS работает отсюда)
0x8000000-0x18000000 – SDRAM (256 MB)
0x08000000-0x0B000000 – Область загрузки (48 MB)
0x0B000000-0x0DF00000 – Ядро (47 MB)
0x0DF00000-0x0E000000 – Дерево устройств (1 MB)
0x0E000000-0x11000000 – Ramdisk (48 MB)
0x11000000-0x17F00000 – Куча (111 MB)
0x17F00000-0x17FFC000 – iBoot (не используется) (1008 kB)
0x17FFC000-0x18000000 – Panic (16kB)
Его SecureROM (iBoot-1413.8 в последней версии) сбрасывается с помощью аппаратных обходов. По крайней мере, у одного человека это получилось. Я попросила у него дамп, но получила отказ по очевидной причине. По его словам, ROM очень похожа на аналогичную в процессоре A6.
8. Согласно утёкшим исходникам iBoot, в Haywire используется флэш-память SPI NOR
Она есть в коммерческих версиях, но, похоже, не отформатирована, поскольку команда saveenv в iBoot не проходит:

According to the leaked iBoot source code, Haywire has SPI NOR, but even if production ones actually have it, it doesn’t seem to be formatted, because “saveenv” iBoot commands fails pic.twitter.com/1IstXIlmIp
— Lisa Braun (@nyan_satan) July 27, 2019

Любая модификация переменных окружения хранится только в энергозависимой памяти и сохраняется в флеш-память после выполнения команды saveenv.
9. Вы можете легко подключить Haywire к ПК, потому что это USB-устройство
Вам нужна только плата с контактами Lightning, microUSB типа «мама» и несколько соединительных проводов:

You can easily connect Haywire to PC because it’s basically an USB device. All you need to get to accomplish is Lightning and micro-USB female breakout boards and few connecting wires: pic.twitter.com/g5PBOYjJzs
— Lisa Braun (@nyan_satan) July 27, 2019

10. Схема соединения
GND -> GND
L0p -> D+
L0n -> D-
ID1 (ACC_PWR1) -> VCC
Обратите внимание, что iPhone изначально даёт 3.3 В, но на USB — 5 В. Не уверена, что это хорошая идея, но она сработала. В любом случае, если что-то сломаете, я не виноват.

Scheme of connection:
GND -> GNDL0p -> D+L0n -> D-ID1 (ACC_PWR1) -> VCC
Please note that iPhone gives it 3.3V originally, but USB has 5V. Not sure if it’s a good idea, but it works. Anyway don't blame me if you break something pic.twitter.com/IppKapYMgj
— Lisa Braun (@nyan_satan) July 27, 2019

11. Результат: все работает!

В итоге парню не удалось узнать причину поломки адаптера, но для восстановления его работоспособности потребовалось перезагрузить кэш ядра USB и спаять контакты переходника с microUSB через дополнительную плату.
Но стоит учитывать, что напряжение на Lightning и USB отличается, так что производить пайку можно только на свой страх и риск. Есть шанс, что ваш кабель просто сгорит.
Источник

Понравилась статья? Поделиться с друзьями: