Hack-driven development для cable TV или история одного проекта

Post on 14-Jun-2015

66 views 1 download

Tags:

description

Антон Енин, Zodiac Interactive

Transcript of Hack-driven development для cable TV или история одного проекта

Hack-Driven Development для Cable TV или история одного проекта

Докладчик: Антон Енин

25.04.2014

Set-Top Box

• CISCO Explorer 8652HDC• MIPS 24k @ 700Mhz, 384MB RAM• 960x540 32bpp• PowerTV OS over Embedded Linux

Использование С++ для разработки под 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

Проект под кодовым названием “ODIN”

Что мы имеем на входе и что требуется?

• Имеем:• Firmware с полным набором GUI приложений и Popups:

InfoBar, Guide, Settings, DVR. Разрешение 640x480.• Нет возможности модифицировать исходники firmware• Имеем исходники, правда другой версии

• Требуется:• Заменить все GUI приложения на новые. Сделать re-skin

отдельных popups. Разрешение 960х540• Добавить новую функциональность

Info Bar and Guide, как оно было…

Settings and DVR, как оно было…

Основные проблемы с точки зрения development

• Ограниченный Public API

• Поддержка re-skin чего-либо отсутствует

Раз так, то let’s hack….

Hack-Driven Development

• PowerTV OS environment

• Общее адресное пространство

• Есть динамическая загрузка PowerTV модулей

• Firmware имеет fixed address

GOT (Global Offset Table) Injection

• Содержит адреса global functions и переменных

• Запоминаем оригинальный адрес

• Подменяем на новый адрес функции

Объектный файл нам в помощь…

• Адреса требуемых изменяемых переменных (section .data)

• Адреса требуемых методов (section .text)

• Адреса функций в таблице GOT (section .got)

Hack-Driven Development

• Реализовали «толстый» wrapper class ExtendedAPI

• Всю свою платформу замкнули на данных класс

• Инициализация в зависимости от версии firmware на старте

• Таблицы инициализации генерируются скриптом

Генерация

• Для каждой версии firmware свои таблицы

Hack-Driven Development

• Пример сгенерированного кода

Hack-Driven Development

• Пример вызова internal API

Hack-Driven Development

• Пример использования GOT Injection

Что мы получили в итоге?

• Guide

Что мы получили в итоге?

• DVR

Что мы получили в итоге?

• Settings

Спасибо за Внимание!Вопросы?