Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
lg-webos-kexec — Загружает кастомное ядро Linux на рутованных телевизорах LG webOS через kexec, с поддержкой watchdog SoC, восстановленной реверс-инжинирингом, framebuffer-пейлоадами и процессом сборки ядра с initramfs. | Kitploit
Инструменты/GitHubGitHub/ggfuchsi-oss/lg-webos-kexec
Безопасность встроенных системОбратная инженерияАппаратный ХакингБезопасность оборудования и IoTАнализ Прошивок
GitHubggfuchsi-oss/lg-webos-kexec

lg-webos-kexec

Загружает кастомное ядро Linux на рутованных телевизорах LG webOS через kexec, с поддержкой watchdog SoC, восстановленной реверс-инжинирингом, framebuffer-пейлоадами и процессом сборки ядра с initramfs.

Репозиторий
64022 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

lg-webos-kexec

Загрузите собственное ядро Linux на рутованный LG webOS TV через kexec — в RAM, без обхода secure-boot.

Статус: в разработке. Собственное ядро можно подготовить, и оно доходит до userspace, но пока не остаётся работать как полноценная ОС.

Целевое устройство

LG 50UP81009LR (webOS 6.5, Realtek RTD2875, armv7l). Рутован через Homebrew Channel; штатное подписанное ядро и userspace webOS не трогаются.

Что доказано (проверено вживую)

  • kexec -l подготавливает ядро (штатное или собранное из исходников); /sys/kernel/kexec_loaded переключается в 1.
  • kexec -e заменяет работающее ядро (после этого TV сбрасывается обратно в сток).
  • Ядро, собранное из исходников, доходит до userspace — подтверждено page fault'ами в user-mode = /sbin/init выполнил реальный код.
  • Крошечные canary-нагрузки выводят изображение на framebuffer (доступ ring-0 и к дисплею подтверждён).
  • Вся цепочка запускается из штатного startup.sh webOS — подписанный загрузчик / ATF / OP-TEE не затрагиваются.

Чего всё ещё не хватает

  • Пинок сторожевого таймера (watchdog pet) — РЕВЕРС-ИНЖЕНЕРИНГ ВЫПОЛНЕН + ИСПРАВЛЕНИЕ НАПИСАНО, но пока не проверено в живом kexec-запуске. См. ниже.

Пинок сторожевого таймера — найдено (2026-08-19)

Сброс выполняет SoC watchdog (блок TC). В штатном ядре его удерживает micom_wdt_thread() тремя обращениями к регистрам (drivers/rtk_kdriver/platform/tv006/intmicom.c):

root@kitploit:~
TCWCR @ 0xFE062204 <- 0xA5         // unlock
TCWOV @ 0xFE062210 <- 0x0FFFFFFF   // max overflow => huge timeout
TCWTR @ 0xFE062208 <- 0x01         // kick

При kexec сырой *(volatile*)0xFE062208 = 0x01 из драйвера попадает в неотображённый виртуальный адрес (unmapped VA) и молча игнорируется, поэтому SoC watchdog срабатывает (~10–21 с). micom-pet.c теперь делает те же обращения из userspace через /dev/mem (CONFIG_DEVMEM=y), который маппится корректно, плюс keepalive 0xB1 в /dev/sys-intmicom как эшелонированная защита.

Статус: micom-pet.c переписан, компилируется с musl-тулчейном, и 5-секундный безвредный smoke-тест на живом TV подтвердил, что он запускается и записывает свой breadcrumb (0x52455814 = "REX"+beat). Осталось только доказать kexec -e-загрузку, которая держится дольше ~21 с — это перезагружает TV, поэтому тест проводится в присутствии человека.

  • Дисплей — панель использует тайловый FBDC; сырой текст на framebuffer'е бесполезен. Для реального вывода нужен VCPU RPC (команды отрисовки в видео-движок).
  • Сеть — vermagic штатного модуля wlan должен совпадать с CONFIG_LOCALVERSION="", чтобы модуль загрузился; в initramfs он пока не подключён.

Как это работает (честная версия)

root@kitploit:~
boot ROM → ATF → signed LG kernel (~2 s) → startup.sh
    → kexec -l <our zImage + dtb + initramfs>
    → kexec -e
    → OUR kernel runs in RAM (no eMMC writes)

Выдернул питание = сток. Забриковать невозможно.

Создано с помощью ИИ (полное раскрытие)

Бо́льшую часть этого репозитория собрал Rex — экземпляр ИИ-кодинг-агента — помогая человеку работать с его собственным TV в его собственной гостиной. ИИ написал kexec-PoC, загрузочную цепочку, framebuffer-канарейки и эти RE-отчёты. Но утверждения в этом README делались только после того, как человек включил TV, посмотрел на экран и подтвердил результат. Если утверждение не подкреплено реальной проверкой экрана/фото/аптайма на железе, его здесь нет.

Ни один TV не был забрикован при создании этого репозитория. Некоторые временно пребывали в замешательстве (ядро под kexec без пинка сторожевого таймера сбрасывает ваш аппарат через ~15 с), после чего перезагружались обратно в сток. /tmp стирается при каждой перезагрузке, так что TV забывает всё, что мы делали — в этом и смысл.

Структура репозитория

  • rexos/ — собственная ОС: boot-хук, сборка ядра, initramfs, заглушка RexBus.
  • kexec-poc/ — PoC только с загрузкой + canary-нагрузки для framebuffer'а.
  • docs/ — разборы реверс-инжиниринга (загрузка/безопасность, загрузка SAM-приложений, карта поверхности, схема luna2).

Проверьте сами (нужен именно ваш TV: 50UP81009LR, рутованный, в вашей LAN)

Эти шаги воспроизводят то, что делали мы, на том же железе. Ничего не сфабриковано.

0. Предварительные требования

  • LG 50UP81009LR, рутованный через Homebrew Channel, root SSH включён, в вашей LAN.
  • Ниже по умолчанию TV = 192.168.2.103; если у вас другой, поправьте.
  • Одноразово — дерево исходников GPL-ядра LG K7LP: задайте KERNEL_SRC=/path/to/linux-4.4.3 (скачайте GPL-тарбол 03.53.45 K7LP с open-source сайта LG), либо сделайте symlink ~/lgtv-toolkit/kernel-src/kernel/linux-4.4.3.

1. Сборка тулчейна + статического kexec (TV не нужен, ~2 мин)

root@kitploit:~
git clone https://github.com/ggfuchsi-oss/lg-webos-kexec
cd lg-webos-kexec/kexec-poc && ./build.sh

Ожидаемый результат: статический ARM-бинарник kexec по пути kexec-arm (168K, file показывает ELF 32-bit LSB ... ARM ... statically linked).

2. Воспроизведите безопасный PoC на своём TV (подготовка + выгрузка — без загрузки)

root@kitploit:~
cd ../kexec-poc
./run-poc.sh 192.168.2.103 ~/.ssh/tv_key

Ожидаемый результат:

root@kitploit:~
staged before      : 0
staged after load  : 1   <- kernel accepted, DTB wired, segments allocated
staged after unload: 0   <- cleared, TV untouched

Это подготавливает через kexec текущее штатное ядро самого TV и сразу же выгружает его. /sys/kernel/kexec_loaded переключается в 1, затем обратно в 0. Никакой перезагрузки, никакой смены ядра, ничего не сохраняется. Выдернул питание = сток.

3. (В присутствии человека) загрузка собственного ядра — перезагружает TV

Делайте это только при включённом TV и с кем-то рядом:

root@kitploit:~
cd ../rexos
make                            # builds rexos-kernel.zImage + rexos-initramfs.cpio.gz into out/
./boot/rexos-kexec --load-only   # stage, do NOT fire (same safe state as step 2)
# then, when ready to actually jump:
./boot/rexos-kexec               # kexec -e -> our kernel runs in RAM (TV will reset)

Честные оговорки по шагу 3 (это не скрываемые баги):

  • После kexec -e новое ядро доходит до userspace, но TV сбрасывается через ~10–21 с, потому что micom/SOC watchdog не получает пинков. Это текущая стена, а не баг с крашем. rexos/initramfs/micom-pet.c — демон, который должен это исправить (всё ещё подключается).
  • Дисплей — тайловый FBDC: текстовой консоли нет, только однотонные маяки (см. kexec-poc/canary/). Для настоящей графики нужен путь VCPU RPC (не сделано).
  • Неправильное ядро/DTB просто даёт чёрный экран до перезагрузки по питанию. Это не может забриковать устройство: kexec пишет только в RAM, никогда в eMMC.

TL;DR статус (честно)

  • Подготовка ядра и примитив выполнения: доказано (шаг 2). ✅
  • Собственное ядро грузится и доходит до userspace: доказано (шаг 3). ✅
  • Остаётся работать как полноценная ОС: пока нет — watchdog и дисплей остаются главными стенами. ⏳

Зависимости (честно о внешнем)

Репозиторий содержит исходники + документацию + захваченные с TV входные данные для сборки (.config ядра, wifi-модуль и прошивку, библиотеки rootfs), но не само ~390 МБ дерево исходников GPL-ядра LG K7LP — это LG должна распространять сама, а не мы.

make упадёт с понятной ошибкой KERNEL_SRC missing, если дерева ядра нет — никакой тихой полусборки.

Новизна / предшествующие работы

Насколько нам известно, это первый публичный запуск собственного ядра на LG webOS TV через kexec. Сами примитивы (kexec, рутованный webOS, RTD2875) по отдельности известны; применение к этому закрытому потребительскому TV выглядит новым. Мы не заявляем об обходе secure-boot — мы его обходим стороной.

Лицензия

GPL-2.0 (работа с ядром; исходники GPL-ядра LG — GPL). Наши скрипты совместимы с GPL. Атрибуция вышестоящих проектов — в CREDITS.

Скачать инструмент
зависимостькак получить
LG K7LP GPL linux-4.4.3 (RTD2875)сайт open-source LG → GPL-тарбол 03.53.45 K7LP → kernel
musl armv7 cross-тулчейн (~98 МБ)автоматически скачивается скриптом kexec-poc/build.sh (самодостаточно)
рутованный TV (50UP81009LR)нужен был один раз, только чтобы снять .config — но этот конфиг теперь закоммичен в rexos/kernel/rexos-tv.config, так что клон собирается офлайн