Share
## https://sploitus.com/exploit?id=3CFDF9F7-11F7-5384-8BF7-9E6236B2A4C6
# Загрузчик неподписанного кода для Yandex Station 2 (Yandex Max)

Инструмент использует [уязвимость](https://fredericb.info/2021/02/amlogic-usbdl-unsigned-code-loader-for-amlogic-bootrom.html) в режиме загрузки по USB для запуска неподписанного кода в Secure World.

## amlogic-bl2dl
Позволяет запустить пропатченный загрузчик bl2 с отключенными проверками подписи и ARB (Anti Roll-back)
потенциально может позволить нам свой загрузчик, но без исходных кодов u-boot устройства вызывает сложности

`./bin/amlogic-bl2dl ./payloads/bin/bl2_payload.bin`


## Как вытащить bl2 (и запустить)
- Берем ota обновление или загрузившись через pyamlboot из консоли дампим bootloader.img, либо через скрипт ./payloads/bootloader_dump.sh
- Из дампа берем bl2aeskey bl2ivkey и расшифровываем bootloader.img `openssl enc -aes-256-cbc -nopad -d -K $(cat путь_к_bl2aeskey)-iv $(cat путь_к_bl2ivkey) -in bootloader.bin -out bootloader_dec.bin` 
- Далее распаковываем расшифрованный образ `mkdir image && gxlimg -e ./bootloader_dec.bin ./image`
- Обрезаем файл, чтобы уложиться в лимиты `./scripts/make_bl2_payload.sh -i ./image/bl2.sign -o ./payloads/bin/bl2_payload.bin`
- Запускаем устройство в DL MODE
- `./boot_bl2.sh`

Запустить свой образ bootloader можно с помощью `./bin/update bl2_boot bootloader.bin`

## Сборка
Для сборки при внесении изменений, требуется установить компиляторы по ссылке (1 пункт)
https://docs.khadas.com/products/sbc/vim3/development/android/install-toolchains

Команда для полной пересборки `./build.sh`


## Адреса для payload: что есть в репозитории и что в bootrom

**Из репозитория Amlogic-Lineage** (https://github.com/Amlogic-Lineage/u-boot/tree/d3fef27d223a0d29faa0d581a41a0f24ff63be42/arch/arm/include/asm/arch-g12a):

| Назначение       | Адрес       | Имя / файл |
|------------------|-------------|------------|
| Сброс watchdog   | 0xff80012c  | P_AO_WATCHDOG_RESET, `secure_apb.h` |
| Базовый адрес загрузки/запуска | 0xfffa0000  | P_SHARE_SRAM_BASE, `mailbox.h` |
| AO UART (putc)   | 0xff803000  | P_AO_UART_WFIFO, `secure_apb.h` |
| Расположение SRAM BL1 | 0xD9...     | RAM_START, BL1_USB_BUFF и др., `cpu_config.h` |

**Не в этом репозитории** (bootrom/BL1 проприетарны):

- Адреса **заглушек** bootrom, используемые payload: `_clear_icache` (0xffff051c), `_dwc_pcd_irq` (0xffff6c94), `_start_bulk_transfer` (0xffff5604), PCD по 0xfffe3918, `_uart_putc` (0xffff32f0), `_udelay` (0xffff3430). Они есть **только** в `poc/payloads/`;

**Как получить или проверить адреса bootrom:**

1. **Дамп bootrom** — используй payload для дампа памяти (например memdump_over_usb_bl1 или memdump_over_usb), чтобы снять дамп с 0xFFFF0000, затем откройте бинарник в Ghidra/IDA и найдите логику USB/PCD, инвалидацию кэша, UART putc и циклы задержки, чтобы определить реальные адреса для вашего SoC/ревизии.
2. **Использовать известные значения** — payload в `payloads/` используют адреса, полученные реверс-инжинирингом для G12A (S905X2); для других SoC или ревизий bootrom их может потребоваться скорректировать.
3. **Обойти заглушки bootrom** — для UART можно использовать **регистр** из репозитория Amlogic-Lineage/u-boot: `P_AO_UART_WFIFO` (0xff803000) и реализовать putc в самом payload вместо вызова 0xffff32f0. Для остальных заглушек (_clear_icache, _dwc_pcd_irq, _start_bulk_transfer, PCD) эквивалентов в репозитории нет, их нужно брать из дампа или существующего payload.

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

Тестировалось на YNDX-0008, запускалось с Ubuntu 24

https://t.me/+Ti7yjer2NStiODg6 (Linux on YDX)