¿Alguien ha invertido diseñado el protocolo utilizado por la aplicación remota iOS de Apple para controlar un Apple TV sobre IP? -- reverse-engineering campo con tvos campo con apple-tv campo con remote-control camp Relacionados El problema

Has anyone reversed engineered the protocol used by Apple's iOS Remote app for controlling an Apple TV over IP?


14
vote

problema

Español

Tengo curiosidad si es posible que escriba programas que puedan controlar un televisor de Apple, específicamente un Apple TV 4th Gen que ejecuta TVOS 9.1.1, al igual que la aplicación remota de Apple para iOS. Me gustaría enviarlo los comandos para navegar en las cuatro direcciones cardinales, seleccionando un elemento en la pantalla, subiendo la pila de navegación: esencialmente lo que puede hacer la aplicación remota de Apple.

¿Alguien ha hecho algún trabajo en ingeniería inversa en el protocolo que usa? El googling cursory solo ha cedido hasta ahora los resultados fuera de la fecha sobre la generación anterior de los televisores de Apple y el protocolo DAAP que se parece a algo diferente de lo que quiero.

Original en ingles

I'm curious if it's possible for me to write programs that can control an Apple TV, specifically an Apple TV 4th gen running tvOS 9.1.1, like Apple's Remote app for iOS can. I'd like to send it commands for navigating in the four cardinal directions, selecting an item on the screen, going up the navigation stack -- essentially what Apple's Remote app can do.

Has anyone done any work reverse engineering the protocol it uses? Cursory Googling only has so far yielded out of date results about earlier generation Apple TVs and the DAAP protocol which looks like something different than what I want.

           

Lista de respuestas

8
 
vote

Capturé el tráfico en mi iPhone usando tcpdump y lo analizé con Wireshark. La aplicación remota le solicita a Apple TV con solicitudes HTTP normales en el puerto 3689.

El flujo de trabajo de la aplicación consiste en cuatro solicitudes HTTP:

  • /server-info para obtener información sobre el Apple TV. Responde con una Respuesta patentada de Apple DAAP (Protocolo de acceso de audio digital) Proporcionando algunas etiquetas sobre el dispositivo , como el nombre de la pantalla.
  • /login se realiza durante la conexión, cuando la aplicación muestra el mensaje "Conexión a Apple TV ...". Responde con un DAAP sobre el estado de inicio de sesión.
  • Aquí está el cuello de botella. /home-share-verify Valida la conexión entre la aplicación y el Apple TV. Esta llamada necesita un encabezado /databases4 con un largo valor de cadena desconocido. Según Wikipedia, esto parece ser como un hash generado por un intercambio de certificados entre fuentes verificadas que se introdujeron en iTunes 7.0+ y nunca se invertirá en Invasiones.
  • /ctrl-int/1/{controlpromptupdate|controlpromptentry|playstatusupdate} parece ser las llamadas hechas para los botones de entrada.

Algunas otras llamadas menores se despiden entre (como una actualización de servicio de Bonjour o una llamada 99887776666 ).

aquí y aquí puedes encontrar más información. Espero que esto ayude a obtener una visión general de cómo funciona esta aplicación simple (pero protegida).

 

I captured the traffic on my iPhone using tcpdump and analyzed it with WireShark. The Remote app asks the Apple TV with normal HTTP requests on port 3689.

The workflow of the app consists in four HTTP requests:

  • /server-info for getting infos about the Apple TV. It responds with a Apple proprietary DAAP response (Digital Audio Access Protocol) providing some tags about the device, like the display name.
  • /login is performed during connection, when the app displays the "Connecting to Apple TV..." message. It responds with a DAAP about the login status.
  • Here's the bottleneck. /home-share-verify validates the connection between the app and the Apple TV. This call needs a Client-DAAP-Validation header with a long unknown string value. According to Wikipedia, this seems to be like an hash generated by a certificate exchange between verified sources that was introduced in iTunes 7.0+ and never reverse engineered.
  • /ctrl-int/1/{controlpromptupdate|controlpromptentry|playstatusupdate} seems to be the calls made for the input buttons.

Some other minor calls are fired in between (like a Bonjour service update or a /databases call).

Here and here you can find more infos. Hope this helps for getting an overview of how this simple (but protected) app works.

 
 
   
   
2
 
vote
vote
La mejor respuesta
 

Se logró controlar mi Apple TV (actualmente ejecuta TVOS 9.2) desde un guión de Python. Resulta que no se necesita para usar el hogar compartido para tener un control remoto de la aplicación el Apple TV. No sé si el siguiente método funcionará si la participación en el hogar está habilitada, pero con IT deshabilitado en Apple TV, la aplicación remota iOS tiene la opción de agregar un dispositivo manualmente. (Esto puede requerir la eliminación de todos los dispositivos que ya está emparejada, ya que lamentablemente fue necesario para que lo hagas para mostrar el botón 'Agregar un dispositivo'). Una vez que haya emparejado mi iPhone al Apple TV, grabé algunos De sus solicitudes, copió el GUID de emparejamiento, y luego construyó algunas de mis propias solicitudes.

Las únicas tres solicitudes necesarias para hacer son:

  /login?pairing-guid=< your pairing guid here >&hasFP=1   

registra en el Apple TV. Los últimos cuatro bytes de la respuesta son una identificación de sesión, codificada como un entero de cuatro bytes de Big-Endian.

  /logout?session-id=< your session id here >   

se registra. No es estrictamente necesario, ya que encontré que el inicio de sesión simplemente te convierte en una nueva identificación de sesión, pero probablemente no es una mala idea hacer las cosas como lo espera.

  /ctrl-int/1/controlpromptentry?prompt-id=114&session-id=< your session id here >   

Envíe la entrada del usuario a Apple TV. Los datos son uno de varios buffers que ingresan un comando, o posible un toque en movimiento. Para el movimiento en las instrucciones del cardenal, es necesario enviar varias de estas solicitudes para simular un toque en movimiento.

Tengo un script de Python que demuestra cómo hacer esto aquí: http://pastebin.com/mdhc353a

Utiliza la biblioteca de solicitudes: http://docs.python-requests.org/en/ MASTER /

También agradecimiento especial a Adam Miskiewicz / GitHub USER SKEVY, ya que hice uso de este archivo en su repositorio de Atlas-Backend que tenía convenientemente los buffers adecuados para enviar para el movimiento: https://github.com/skevy/atlas-backend/blob/master/atlas/services/appletv.coffee

 

I did manage to control my Apple TV (currently running tvOS 9.2) from a python script. It turns out that you don't need to use Home Sharing to have a remote app control the Apple TV. I don't know if the following method will work if Home Sharing is enabled, but with it disabled on the Apple TV, the iOS Remote app has the option to manually add a device. (This may require removing all of the devices it is already paired with, since that was unfortunately necessary for me to get it to display the 'Add a device' button.) Once I had paired my iPhone to the Apple TV, I recorded some of its requests, copied the pairing GUID, and then constructed some of my own requests.

The only three requests necessary to make are:

/login?pairing-guid=< your pairing guid here >&hasFP=1 

Logs into the Apple TV. The last four bytes of the response's is a session id, encoded as a big-endian four byte integer.

/logout?session-id=< your session id here > 

Logs out. Not strictly necessary, as I found that logging in simply gets you a new session id, but probably not a bad idea to do things the way it expects.

/ctrl-int/1/controlpromptentry?prompt-id=114&session-id=< your session id here > 

Send user input to the Apple TV. The data is one of several buffers that input a command, or possible a moving touch. For movement in the cardinal directions, sending several of these requests to simulate a moving touch is necessary.

I have a python script demonstrating how to do this here: http://pastebin.com/mDHc353A

Utilizes the requests library: http://docs.python-requests.org/en/master/

Also special thanks to Adam Miskiewicz / github user skevy, since I made use of this file in his atlas-backend repo that conveniently had the right buffers to send for movement: https://github.com/skevy/atlas-backend/blob/master/atlas/services/appletv.coffee

 
 
     
     
2
 
vote

Quería decirle a Alexa que desencadenar a AppleTV y eso despertaría mi AppleTV y a través de HDMI y AMP; CEC convertir mi televisor en,

para hacer eso: Desde su Mac Linux Windows simplemente ejecute: CURL -XPOST -D 'CMCC X00 X00 X00 X01 X30CMBE X00 X00 X00 X04MENU' ' http://10.1.1.56:3689/ctrl-int/1/controlpromptentry?prompt-id=144& ;session-id=1 '

El comando abstracto es: CURL -XPOST -D 'CMCC X00 X00 X00 x01 X30CMBE X00 X00 X00 X00 X00 X00 X04MENU' 'http: // {appletv_ip}: 3689 / CTRL-INT / 1 / CONTROLPROMPENTRY? PROMPT-ID = { Control_pair_id} & amp; session-id = {control_session_id} '

Extrajo el control_pair_id y control_session_id al configurar la configuración de proxy HTTP de iPhone WiFi HTTP en mi Mac con Fiddler en él y activó la antigua aplicación remota AppleTV y que mostraron las solicitudes que la aplicación está ejecutando

Si no sabe cómo configurar iPhone para trabajar con Fiddler, puede encontrarlo aquí: http://docs.telerik.com/fiddler/configure-fiddler/tasks/ ConfigureForios

 

i wanted to tell alexa to trigger appletv and that would wake my appletv up and via HDMI & CEC turn my tv on,

in order to do that: from your mac\linux\windows simply run: curl -XPOST -d 'cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x04menu' 'http://10.1.1.56:3689/ctrl-int/1/controlpromptentry?prompt-id=144&session-id=1'

the abstract command is: curl -XPOST -d 'cmcc\x00\x00\x00\x01\x30cmbe\x00\x00\x00\x04menu' 'http://{APPLETV_IP}:3689/ctrl-int/1/controlpromptentry?prompt-id={CONTROL_PAIR_ID}&session-id={CONTROL_SESSION_ID}'

i extracted the CONTROL_PAIR_ID and CONTROL_SESSION_ID by setting my iphone wifi http proxy settings to my mac with fiddler on it and activated the old appletv remote app and that displayed the requests the app is executing

if you don't know how to set iphone to work with fiddler you can find it here: http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureForiOS

 
 

Relacionados problema

9  ¿Cuál es la mejor manera de evitar que se copie y se utilice una aplicación sin el permiso del propietario?  ( What is the best way to stop an application being copied and used without the ow ) 
¿Cuál es la mejor manera de evitar que se copie y se use una aplicación sin el conocimiento del propietario? ¿Hay alguna manera de rastrear el uso? El signi...

0  Configuración de un control remoto IR como un mouse en Mstar Android TV  ( Setting up an ir remote as a mouse on mstar android tv ) 
Tengo TV de Mstar Android con Android 4.4.4 instalado. Necesito controlar este dispositivo como si tuviera un mouse habitual. Hace algún tiempo, fue posible c...

0  Bluetooth y Android - ¿Cómo se manejan los eventos?  ( Bluetooth and android how are events handled ) 
Soy C # desarrollador escribiendo una especificación para un desarrollador de Android. Los requisitos deben conectarse a un "motor" a través de Bluetooth. Hab...

0  Control de 2 computadoras, 1 pantalla, 1 teclado y 1 mouse [cerrado]  ( Controlling 2 computers 1 screen 1 keyboard and 1 mouse ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

1  ¿Cómo implementar el mouse en las cajas de televisión de Android en la plataforma Rockchip?  ( How implement mouse on android tv boxes on platform rockchip ) 
Tengo un dispositivo Android "Minix Neo X7 Mini". Hay una aplicación instalada EhomemediaCenter. Es un servidor DLNA. Luego, lanza la aplicación Rkremotecontr...

1  Control remoto del botón RPI Presione a través de Mobile con DataPlicity, Relé involucrado  ( Remote control of rpi button press via mobile with dataplicity relay involved ) 
He intentado durante varios días para obtener mi botón RPI, presione ACCESIBLE a través de DataPlicity en mi teléfono. Sé que es una acción personalizada con ...

3  ¿Arquitectura y herramientas para una aplicación de control remoto?  ( Architecture and tools for a remote control application ) 
Estoy trabajando en el diseño de una aplicación de control remoto. Desde mi iPhone o un navegador web, enviaré algunos comandos. Pronto, la computadora de mi ...

4  ¿API de control remoto o cómo empezar?  ( Remote control api or how to start ) 
Si, por cualquier cambio, quiero desarrollar mi propia herramienta de intercambio de pantalla remota para incluir en mi propio CRM, ¿a dónde debo ir? No ent...

2  Tratar de apagar programáticamente un servidor agrícola en Arr arroja error "Query no compatible"  ( Trying to programmatically shutdown a farm server in arr throws query not suppo ) 
Estoy tratando de "apagar gracioso" un servidor de muestra en una granja de servidores utilizando Microsoft.Web.Administration API. Encontró una solución simi...

1  ¿Una elegante API para un control remoto / demonio remoto basado en C (IPC / RPC)?  ( An elegant api for a c based remote control daemon ipc rpc ) 
Tengo un demonio (que debe escribirse en C) que debería tener un control remoto como los reproductores de medios comunes: mediaplayer-rc --enqueue /path/to...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos