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

20
Hack-Driven Development для Cable TV или история одного проекта Докладчик: Антон Енин 25.04.2014

Upload: diana-dymolazova

Post on 14-Jun-2015

64 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

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

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

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

25.04.2014

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

Set-Top Box

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hack-Driven Development

• PowerTV OS environment

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

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

• Firmware имеет fixed address

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

GOT (Global Offset Table) Injection

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

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

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

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

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

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

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

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

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

Hack-Driven Development

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

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

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

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

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

Генерация

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

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

Hack-Driven Development

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

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

Hack-Driven Development

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

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

Hack-Driven Development

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

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

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

• Guide

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

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

• DVR

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

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

• Settings

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

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