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 T...
Проект под кодовым
названием “ODIN”
Что мы имеем на входе и что требуется?
• Имеем:
• Firmware с полным набором GUI приложений и Popups:
InfoBar, Guide, Setti...
Info Bar and Guide, как оно было…
Settings and DVR, как оно было…
Основные проблемы с точки зрения development
• Ограниченный Public API
• Поддержка re-skin чего-либо отсутствует
Раз так, ...
Hack-Driven Development
• PowerTV OS environment
• Общее адресное пространство
• Есть динамическая загрузка PowerTV модуле...
GOT (Global Offset Table) Injection
• Содержит адреса global functions и переменных
• Запоминаем оригинальный адрес
• Подм...
Объектный файл нам в помощь…
• Адреса требуемых изменяемых переменных (section .data)
• Адреса требуемых методов (section ...
Hack-Driven Development
• Реализовали «толстый» wrapper class ExtendedAPI
• Всю свою платформу замкнули на данных класс
• ...
Генерация
• Для каждой версии firmware свои таблицы
Hack-Driven Development
• Пример сгенерированного кода
Hack-Driven Development
• Пример вызова internal API
Hack-Driven Development
• Пример использования GOT Injection
Что мы получили в итоге?
• Guide
Что мы получили в итоге?
• DVR
Что мы получили в итоге?
• Settings
Спасибо за Внимание!
Вопросы?
Upcoming SlideShare
Loading in...5
×

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

66

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
66
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Hack-Driven Development для Cable TV или история одного проекта Докладчик: Антон Енин 25.04.2014
  2. 2. Set-Top Box • CISCO Explorer 8652HDC • MIPS 24k @ 700Mhz, 384MB RAM • 960x540 32bpp • PowerTV OS over Embedded Linux
  3. 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
  4. 4. Проект под кодовым названием “ODIN”
  5. 5. Что мы имеем на входе и что требуется? • Имеем: • Firmware с полным набором GUI приложений и Popups: InfoBar, Guide, Settings, DVR. Разрешение 640x480. • Нет возможности модифицировать исходники firmware • Имеем исходники, правда другой версии • Требуется: • Заменить все GUI приложения на новые. Сделать re-skin отдельных popups. Разрешение 960х540 • Добавить новую функциональность
  6. 6. Info Bar and Guide, как оно было…
  7. 7. Settings and DVR, как оно было…
  8. 8. Основные проблемы с точки зрения development • Ограниченный Public API • Поддержка re-skin чего-либо отсутствует Раз так, то let’s hack…. 
  9. 9. Hack-Driven Development • PowerTV OS environment • Общее адресное пространство • Есть динамическая загрузка PowerTV модулей • Firmware имеет fixed address
  10. 10. GOT (Global Offset Table) Injection • Содержит адреса global functions и переменных • Запоминаем оригинальный адрес • Подменяем на новый адрес функции
  11. 11. Объектный файл нам в помощь… • Адреса требуемых изменяемых переменных (section .data) • Адреса требуемых методов (section .text) • Адреса функций в таблице GOT (section .got)
  12. 12. Hack-Driven Development • Реализовали «толстый» wrapper class ExtendedAPI • Всю свою платформу замкнули на данных класс • Инициализация в зависимости от версии firmware на старте • Таблицы инициализации генерируются скриптом
  13. 13. Генерация • Для каждой версии firmware свои таблицы
  14. 14. Hack-Driven Development • Пример сгенерированного кода
  15. 15. Hack-Driven Development • Пример вызова internal API
  16. 16. Hack-Driven Development • Пример использования GOT Injection
  17. 17. Что мы получили в итоге? • Guide
  18. 18. Что мы получили в итоге? • DVR
  19. 19. Что мы получили в итоге? • Settings
  20. 20. Спасибо за Внимание! Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×