2. Set-Top Box
• CISCO Explorer 8652HDC
• MIPS 24k @ 700Mhz, 384MB RAM
• 960x540 32bpp
• PowerTV OS over Embedded Linux
3. Использование С++ для разработки под Set-Top Box
• GCC 3.4.6+, C++03
• C++ Restrictions
• C++ Exceptions
• STL (Standard Template Library)
• RTTI (Run-Time Type Information)
• LIBC limitations, Depends on OS
5. Что мы имеем на входе и что требуется?
• Имеем:
• Firmware с полным набором GUI приложений и Popups:
InfoBar, Guide, Settings, DVR. Разрешение 640x480.
• Нет возможности модифицировать исходники firmware
• Имеем исходники, правда другой версии
• Требуется:
• Заменить все GUI приложения на новые. Сделать re-skin
отдельных popups. Разрешение 960х540
• Добавить новую функциональность
8. Основные проблемы с точки зрения development
• Ограниченный Public API
• Поддержка re-skin чего-либо отсутствует
Раз так, то let’s hack….
9. Hack-Driven Development
• PowerTV OS environment
• Общее адресное пространство
• Есть динамическая загрузка PowerTV модулей
• Firmware имеет fixed address
10. GOT (Global Offset Table) Injection
• Содержит адреса global functions и переменных
• Запоминаем оригинальный адрес
• Подменяем на новый адрес функции
11. Объектный файл нам в помощь…
• Адреса требуемых изменяемых переменных (section .data)
• Адреса требуемых методов (section .text)
• Адреса функций в таблице GOT (section .got)
12. Hack-Driven Development
• Реализовали «толстый» wrapper class ExtendedAPI
• Всю свою платформу замкнули на данных класс
• Инициализация в зависимости от версии firmware на старте
• Таблицы инициализации генерируются скриптом