Запускаем Ubuntu и смотрим Torrent и Torrent-TV прямиком на Samsung SmartTVИсточник: habrahabr ValdikSS
После прочтения комментария от awoland во вчерашней статье Как SmartTV забыли о главном, я сразу полез пробовать получить root-права и telnet/ssh на своем телевизоре. Оказывается, все уже готово для этого, и это проще простого! Достаточно установить Виджет SamyGo, и он все сделает за вас!
Что дает нам SamyGO?
# -*- DISCLAIMER -*- Для моего ТВ (E-серия), мне необходимо было:
Как они это сделали, демоны?Вот как выглядит скрипт инсталлятора: Скрытый текст Уязвимость в функции FilePlugin.Copy, вызываемой через eval, которая позволяет копировать что угодно куда угодно. Скрипт берет и копирует подмененный libSkype.so, который умеет только запускать другой скрипт, и устанавливает сам виджет SamyGo. Что же в виджите SamyGo? Скрытый текст Ну это вообще пушка! Мы можем выполнять shell-команды из все той же функции, используя $()-синтаксис. run.sh выполняет инсталляцию busybox и прочей мишуры, монтирует data.xfs, запускает telnetd и nc, который запускает sh при коннекте (если будут какие-то проблемы с /dev/pts и к telnet нельзя будет подключиться), запускает подобия init-скриптов.
Что внутри?Внутри у нас 2-ядерный процессор с архитектурой ARMv7, с поддержкой NEON, я полагаю, семейства Cortex-A8, видео MALI 400, 512МБ оперативной памяти, ядро 2.6.35.13. В общем, довольно типичный "планшет" 2012 года. cat /proc/cpuinfo Ядро поддерживает SquashFS, FAT32, XFS, RFS (Самсунговская ФС, FAT32 + журналирование), NTFS (Драйвер tntfs от Tuxera). Есть поддержка модулей, в SamyGo поставляются несколько модулей ФС, FUSE загружается, а, например, ext2/3/4 - нет, т.к. в ядре нет символов для них. На ТВ запущен самый обычный X-сервер с xf86-video-mali, за весь SmartTV отвечает 125-мегабайтный файл exeDSP (загружался в IDA PRO 17 минут до начала анализа ), а вот со звуком интересней: alsa нет, и, похоже, exeDSP общается с /dev/system напрямую.
Что можно делать-то?Да что угодно. Я лентяй, и стараюсь лишний раз не кросс-компилировать что-либо, поэтому просто взял Ubuntu Core, создал на флешке XFS-раздел, распаковал туда Ubuntu и вставил в ТВ. С armhf-версией были проблемы (всякие unknown instruction, там компилируют с thumb2?), поэтому нашел 12.04 armel. Остается только вставить флешку в ТВ, подключиться по telnet и сделать: chroot /dtv/usb/sda1 /bin/bash И мы получим полноценную убунту 12.04. mount --bind не работает, поэтому, если вам нужен proc и sys в chroot (а он вам будет нужен), используйте: mount -t sysfs sysfs ./sys mount -t proc proc ./proc
Первым делом, я, конечно же, поставил mplayer. И знаете, работает! Медленно, конечно, и из выводов только x11 работает, но показывает! Я посмотрел вчерашний опенинг с субтитрами и без звука ;)
Скриншотов, вот, scrot'ом поснимал: Прошу обратить внимание, разрешение скриншотов я не менял, и, на самом деле, разрешение у ТВ (по крайней мере у X-сервера) 1280×720! Ну а дальше я решил поставить Ace Stream Engine и AceProxy для просмотра ТВ-стримов и Torrent прямо на ТВ. Для этого нам необходим Python, т.к. именно на нем написаны эти два продукта. Т.к. Ace Stream официально не выпускается для ARM, да и вообще, его разработчики несколько дикие, то мы возьмем распакованную версию для Raspberry PI, ну а AceProxy из моего репозитория Собственно, нужные пакеты для Ace Stream написаны в ссылке, а для AceProxy нужен только python-gevent. Запускаем все это дело, можно даже открыть страницу статистики AceProxy во встроенном браузере ТВ: На удивление, Ace Stream не особо грузит процессор (где-то на 15% судя по top), так что его вполне можно использовать на ТВ.
Что-то еще?Это все proof-of-concept. Я все это делал чисто из кратковременного интереса и, скорее всего, не буду продолжать дальше. Однако, если кто-нибудь подопнет меня, как происходит работа со звуком, то можно будет смотреть видео с FLAC и Vorbis в MKV, просто запуская их вместе. |