Для чего взламывать apple tv

Взлом проигрывателя Apple TV

Несколько месяцев назад на конференции Derbycon я презентовал изящный хак, позволяющий загружать любые приложения в проигрыватель Apple TV. Однако через несколько дней хак перестал работать. Настало время рассказать о том, что произошло, а также узнать чуть подробнее о технологии «certificate pinning» (дословно «привязка сертификата» или технология, защищающая от подделки сертификата).

Несколько месяцев назад на конференции Derbycon я презентовал изящный хак, позволяющий загружать любые приложения в проигрыватель Apple TV. Однако через несколько дней хак перестал работать. Настало время рассказать о том, что произошло, а также узнать чуть подробнее о технологии «certificate pinning» (дословно «привязка сертификата» или технология, защищающая от подделки сертификата).

Для начала небольшое отступление: у операционной системы проигрывателя (Apple TV OS) есть функция «Add Site», позволяющая добавить ссылку на пользовательское приложение, после чего оно появляется на главном экране (home screen). Чтобы эта функция была доступна, необходимо загрузить специальный конфигурационный профиль. Самая веселая часть моего доклада заключалась в демонстрации того, как создать подобный профиль посредством дизассемблирования некоторые бинарных файлов Apple TV.

За несколько дней до доклада кнопка «Add Site» (до этого представляющая собой пустую иконку) вдруг изменилась и стала изящной и красивой. Я не был уверен, как такое могло быть, но предположил, что этому могло быть простое объяснение: в Apple TV (далее я буду употреблять аббревиатуру ATV) обновился XML-файл с именем «StoreFront», который, среди всего прочего, содержит описания всех приложений, находящихся на главном экране. Для того чтобы получить копию этого файла, необходимо выполнить следующую команду (в одну строку):

curl -H «User-Agent: iTunes-AppleTV/5.3 (2; 8GB; dt:11)»
https://itunes.apple.com/WebObjects/MZStore.woa/wa/storeFront
| sed ‘s//>/g’

(Спасибо Аману Гупте (Aman Gupta), его твиттер @tmm1, который подсказал мне содержимое поля User-Agent и тем самым помог сэкономить много времени. В конце команды используется sed, поскольку перечень встроенных приложений закодирован как элемент большого файла и был бы практически не читаем со всеми элементами HTML).

Необходимая нам часть файла выглядит так:

menu-title
Add Site

menu-icon-url

720
http://a1.phobos.apple.com/us/r1000/000/Features/atv/AutumnResources/images/AddSite@720.png

При осмотре файла видно, что приложение Add Site описано по тому же принципу, что и остальные приложения, хотя его и не видно до тех пор, пока не выставлены соответствующие локальные права. Изменение было связано с добавлением элементов menu-icon-url.

Через несколько дней после доклада приложение Add Site исчезло с моего главного экрана. Это также было связано с изменением файла StoreFront (на этот раз было добавлен флаг «minimum-required-version», который скрывал приложение на версиях ATV ниже 6.0 даже в случае, если в настройках показ приложения был разрешен; версии ATV на единицу ниже версии iOS, и ATV 6.0 эквивалентно версии iOS 7.0).

Казалось бы, нужно просто обновиться до версии ATV 6.0 и перезагрузить профиль. Все просто, не правда ли? За исключением того, что это не работает.

Выясняется, что компания Apple также добавила условие подписи профиля до версий 6.0 (и снова спасибо @tmm1, предоставившего убедительное доказательство сему факту). Так когда же это произошло? И можем ли мы обойти эту защиту, например, путем создания профиля подписанного достоверным центром сертификации (CA)?

Читайте также:  Как сделать утилиты для айфона

Отличный вопрос! Давайте разбираться.

Добавление конфигурационного профиля в ATV происходит во фреймворке ManagedConfiguration, в частности в демоне profiled:

/System/Library/PrivateFrameworks/ManagedConfiguration.framework
/Support/profiled Метод

[MCProfile evaluateTrustOfCertificateChain:(id)
outIsAllowedToWriteDefaults:(char *)]

по существу отвечает на вопрос: «позволено ли подписанному профилю записывать в значения по умолчанию компонента com.apple.frontrow». Проверка происходит в следующем методе:

[MCProfileTrustEvaluator sanitizedProfileSignerCertificateChain
IsAllowedToWriteDefaults:(id)]

Я немного структурировал код:

policy = SecPolicyCreateConfigurationProfileSigner()
trust = SecTrustCreateWithCertificates(cert_chain, policy)
result = SecTrustEvaluate(trust)

if (result == 4 || result == 1)
ALLOWED = TRUE
else
ALLOWED = FALSE

Дальше уже становится намного проще, поскольку все функции задокументированы. Для начала рассмотрим содержимое функции SecPolicyCreateConfigurationProfileSigner. В гугле находим следующий файл: SecPolicyPriv.h.

/*!
@function SecPolicyCreateConfigurationProfileSigner
@abstract Check for key usage of digital signature, has a EKU OID of
1.2.840.113635.100.4.16 and
roots to Apple Application Integration 2 Certification Authority
*/
SecPolicyRef SecPolicyCreateConfigurationProfileSigner(void);

После просмотра файла становится ясно, что в сертификате, который используется для подписи профиля, необходимо присутствие специального ключа (1.2.840.113635.100.4.16). За более подробной информации обращайтесь к соответствующей документации.

На самом деле, проблемы особой нет, и мы можем просто подделать этот ключ. А что насчет проверки второй части условия: «roots to Apple»? (дословно: «корни к Apple»). Если из условия следует, что «эмитент (или выданный сертификат) должен называться Apple», то мы должны уметь подделывать это. Давайте заглянем в файл SecPolicy.c (я объединил значимые части в один блок):

static const UInt8 kAppleCASHA1[kSecPolicySHA1Size] = <
0x61, 0x1E, 0x5B, 0x66, 0x2C, 0x59, 0x3A, 0x08, 0xFF, 0x58,
0xD1, 0x4A, 0xE2, 0x24, 0x52, 0xD1, 0x98, 0xDF, 0x6C, 0x60
>;

static bool SecPolicyAddAppleAnchorOptions(CFMutableDictionaryRef
options)
<
return SecPolicyAddAnchorSHA1Options(options, kAppleCASHA1);
>

SecPolicyRef SecPolicyCreateConfigurationProfileSigner(void)
<
SecPolicyRef result = NULL;
CFMutableDictionaryRef options = NULL;
require(options = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks), errOut);

require(result = SecPolicyCreate(kSecPolicyOIDAppleProfileSigner,
options), errOut);

errOut:
CFReleaseSafe(options);
return result;
>

В этом коде создается объект SecPolicyRef, которому необходимы данные X509, вышеупомянутый флаг EKU и привязка к Apple. Функция AddAppleAnchor является реальным ключом, которая добавляет проверку для SHA1 хеша. Черт! Происходит привязка к определенному сертификату корневого центра сертификации на основе SHA1 хеша этого сертификата.

Если у вас ATV версии 6.x и нет загруженного профиля с приложением Add Site, вы не сможете добавить приложение до тех пор, пока не получите профиль подписанный Apple. А поскольку программа Apple TV не имеет доступа во внешнюю среду, вы не сможете получить этот профиль.

Надежная защита, не правда ли?

Однако все же существует один метод: если ваш ATV версии 5.2 или 5.3 вы можете добавить профиль (но при этом вы все равно не увидите кнопку), а затем обновиться до версии 6.0, после чего приложение Add Site станет полностью доступным.

В конце концов, мы одержали победу, верно? Не стоит торопиться с выводами. Компания Apple добавила проверку на сигнатуру при использовании приложения Add Site, однако, эта тема другой статьи.

Источник

Как взломать Apple TV 4 с помощью liberTV

Несколько дней назад Джонатан Левин выпустил джейлбрек-инструмент liberTV, с помощью которого можно взломать телевизионную приставку Apple TV четвёртого поколения на базе tvOS 10. После этого джейлбрейка на приставку можно устанавливать взломанные или сторонние приложения (не из tvOS App Store). Магазин Cydia на неё ещё не портирован, поэтому удобного каталога приложений и твиков для Apple TV пока нет.

Читайте также:  Как подключить usb для айфона

Инструкция:

Вам потребуется Apple TV на tvOS версии 10 или 10.1 (поддержки tvOS 9.x и 10.1.1 нет), компьютер на Windows, macOS или Linux, кабель USB Type-C для подключения к компьютеру, а также приложения liberTV и Cydia Impactor.

1. Включите приставку Apple TV 4 и подключите её к компьютеру кабелем USB Type-C.

2. Скачайте приложение Cydia Impactor для Windows, macOS или Linux по этой ссылке (в зависимости от установленной операционной системы) и запустите его.

3. Скачайте приложение liberTV по этой ссылке.

4. Убедитесь, что в приложении Cydia Impactor отображается ваша приставка, а затем претащите файл liberTV.ipa в окно Cydia Impactor.

5. Нажмите на кнопку Start и введите логин и пароль от своего Apple ID. Если вы используете двухфакторную аутентификацию, зайдите на сайт Apple ID, создайте пароль специально для этого приложения и используйте его для аутентификации в Cydia Impactor.

6. Cydia Impactor выполнит установку приложения liberTV, необходимое для джейлбрейка Apple TV 4. После завершения этого процесса отключите приставку от компьютера и подключите приставку к телевизору с помощью HDMI-кабеля.

7. На стартовой странице tvOS отобразится приложение liberTV, запустите его.

8. Откроется страница с опциями джейлбрейка. Для маскимально полного использования всех возможностей платформы рекомендуется выбрать все опции.

9. Нажмите Do it в нижней части страницы и подождите. Приложение попытается взломать приставку.

10. Если всё прошло хорошо, приложение сообщит, что приставка джейлбрейкнута. Теперь на неё можно загружать приложения в обход tvOS App Store.

11. Если джейбрейк не удался (а такое может случиться, это нормально), просто запустите приложение liberTV ещё раз, выберите опции взлома и снова нажмите Do it.

Имейте в виду, что этот джейбрейк полупривязанный, поэтому вам придётся запускать приложение liberTV каждый раз после перезапуска приставки, поскольку он деактивируется каждый раз при загрузке tvOS. Это не очень большая проблема, ведь приставки Apple TV обычно не выключают полностью, а в режиме ожидания джейлбрейк не сбивается.

Источник

Как взломать Apple TV и установить аналог Cydia

Разработчик Кевин Брэдли выпустил джейлбрейк greeng0blin, совместимый с приставками Apple TV 4. Он устанавливается поверх tvOS 10.2.2, а откат к этой версии операционной системы возможен даже с tvOS 11. Вместе с джейлбрейком на приставку устанавливается аналог Cydia — магазин nitoTV, где можно найти различные твики и приложения.

Инструкция по взлому:

  • Зайдите на сайт nitoTV и скачайте инструмент greeng0blin. В настоящее время он работает только на macOS (версия для Windows будет выпущена позже).
  • Подключите Apple TV к компьютеру с помощью кабеля USB Type-C.
  • Скачайте Cydia Impactor. Установите и запустите эту программу.
  • Перетащите файл greeng0blin.ipa в окно Cydia Impactor и введите логин и пароль от учётной записи Apple ID.
  • Приложение greeng0blin загрузится на приставку. Если будут появляться сообщения об ошибках, игнрируйте их.
  • На стартовой странице появится значок greeng0blin. Запустите приложение и нажмите кнопку jailbreak. Возможно, потребуется несколько попыток; если будут появляться ошибки, просто ещё раз жмите на jailbreak.
  • Послу успешного взлома вы увидите кнопку respring. Нажмите на неё — приставка сбросится.
Читайте также:  Коробка для айфона что там

После установки джейлбрейка на стартовой странице Apple TV появится значок приложения nitoTV. Нажмите на него и выберите нужные вам твики. В утилите greeng0blin можно проверить наличие джейлбрейка и восстановить его в случае сбоя. Чтобы убрать взлом, просто удалите это приложение и перезагрузите приставку.

Источник

Для чего взламывать apple tv

  • Перед тем как задать вопрос, посмотрите ->FAQ по Apple TV

Здесь обсуждается только Apple TV! Все другие девайсы обсуждайте на других ветках форума или общайтесь через личку! Посты впредь будут удаляться! Спасибо за понимание!

Правила темы:

  • Не распространяйте непроверенную или ложную информацию!
  • Читайте внимательно шапку, прежде чем задавать вопросы .
  • Вместо слов «Спасибо» используйте +.
  • Если у Вас меньше 15 сообщений — нажмите на кнопку «Жалоба» на том сообщении, где Вам помогли, и напишите, кто помог.
  • Сообщения, нарушающие правила форума, будут удалены!

Новости Apple TV!

  • Обзоры Apple TV: ixbt.com, ipone.mforum, pctuner.ru.
  • Что такое Apple TV?

Особенности проигрывание видео на Apple TV

Параметры кодирования кодека:
Для модели 2007 года:

  • Для тех у кого есть в наличии Ipad, Iphone рекомендую скачать программу Remote, она совершенно бесплатна и доступна в AppStore и на официальном сайте Apple. Скачиваем приложение, устанавливаем. Открываем приложение и коннектимся к Apple TV и своей домашней коллекции на ПК. Программа Remote позволяет управлять приставкой и совершать поиск в приложениях на русском языке.
  • Если у вас нет яблочного девайса, то рекомендую приобрести bluetooth клавиатуру. Выбор производителя остается за вами. А можно вводить название в поиске латиницей, девайс тоже вас поймет.

#!/usr/bin/env python
import sys
from os import sep
import ConfigParser
from Debug import * # dprint()

«»»
Global Settings.
PMS: plexgdm, ip_pms, port_pms
DNS: ip_dnsmaster — IP of Router, ISP’s DNS, . [dflt: google public DNS]
IP_self: enable_plexconnect_autodetect, ip_plexconnect — manual override for VPN usage
HTTP: port_webserver — override when using webserver + forwarding to PlexConnect
HTTPS: port_ssl, certfile, enable_webserver_ssl — configure SSL portion or webserver
«»»
g_settings = < \
‘enable_plexgdm’ : (‘True’, ‘False’), \
‘ip_pms’ : (‘192.168.178.10’,), \ меняем значение на адрес вашего ПК (192.168.0.102)
‘port_pms’ : (‘32400’,), \
\
‘enable_dnsserver’:(‘True’, ‘False’), \
‘port_dnsserver’ : (’53’,), \
‘ip_dnsmaster’ : (‘8.8.8.8’,), \ меняем значение на ваш адрес DNS (192.168.0.1)
‘prevent_atv_update’ : (‘True’, ‘False’), \
\
‘enable_plexconnect_autodetect’:(‘True’, ‘False’), \
‘ip_plexconnect’ : (‘0.0.0.0’,), \
\
‘port_webserver’ : (’80’,), \
‘enable_webserver_ssl’ : (‘True’, ‘False’), \
‘port_ssl’ : (‘443’,), \
‘certfile’ : (‘./assets/certificates/trailers.pem’,), \ Здесь прописан путь к профилю. Его надо создавать отдельно!
\
‘loglevel’ : (‘Normal’, ‘High’, ‘Off’), \
‘logpath’ : (‘.’,), \
>
class CSettings():
def __init__(self):
dprint(__name__, 1, «init class CSettings»)
self.cfg = None
self.section = ‘PlexConnect’
self.loadSettings()
self.checkSection()

# load/save config
def loadSettings(self):
dprint(__name__, 1, «load settings»)
# options -> default
dflt = <>
for opt in g_settings:
dflt[opt] = g_settings[opt][0]

# load settings
self.cfg = ConfigParser.SafeConfigParser()
self.cfg.read(self.getSettingsFile())

def saveSettings(self):
dprint(__name__, 1, «save settings»)
f = open(self.getSettingsFile(), ‘wb’)
self.cfg.write(f)
f.close()

def getSettingsFile(self):
return sys.path[0] + sep + «Settings.cfg»

def checkSection(self):
modify = False
# check for existing section
if not self.cfg.has_section(self.section):
modify = True
self.cfg.add_section(self.section)
dprint(__name__, 0, «add section <0>«, self.section)

for opt in g_settings:
if not self.cfg.has_option(self.section, opt):
modify = True
self.cfg.set(self.section, opt, g_settings[opt][0])
dprint(__name__, 0, «add option <0>=<1>«, opt, g_settings[opt][0])

# save if changed
if modify:
self.saveSettings()

# access/modify PlexConnect settings
def getSetting(self, option):
dprint(__name__, 1, «getsetting <0>=<1>«, option, self.cfg.get(self.section, option))
return self.cfg.get(self.section, option)

if __name__==»__main__»:
Settings = CSettings()

Источник

Оцените статью