Así que aquí está la historia. Tengo este reloj inteligente, el Olio Model One. Me gustaría instalar Asteroid OS en este reloj, y para ello debo obtener la ejecución del código raíz (el objetivo de esta pregunta).
El Olio, además de no tener ningún puerto de depuración (JTAG o UART) en la placa base, ejecuta un sistema Android bloqueado. De hecho, la interfaz de usuario es una aplicación Dalvik completamente personalizada y el usuario ni siquiera debe saber que el reloj funciona con Android. La ahora desaparecida empresa que fabricó y desarrolló estos relojes nunca publicó ninguna documentación técnica (aparte del fundador, mencionando brevemente que ejecutan Linux en una entrevista); Sé todo esto examinando un archivo de actualización de firmware.
La única forma conocida de obtener la ejecución de código en uno de estos relojes es enviar un archivo de actualización de firmware a través de Bluetooth. (Los archivos de actualización de firmware son realmente simples: los archivos son archivos zip y un script de shell con el nombre de update.sh se extrae de ese archivo zip y se ejecuta como root; este script de shell es responsable de copiar los otros archivos en sus lugares correspondientes ). Simple, ¿verdad? El problema es que este archivo de actualización de firmware debe enviarse a través del protocolo RFCOMM no documentado patentado; Este protocolo está completamente sin documentar y solo se implementó en la aplicación personalizada para teléfonos inteligentes (Olio Assist).
Mi enfoque anterior era leer el código Java descompilado de la aplicación Olio Assist de Android y volver a escribir el código del controlador de actualización de firmware en un programa python; Esta ha demostrado ser la tarea más horrible que he emprendido. En un capricho, busqué en Google 'linux bluetooth arbitrary codeunt' y encontré a BlueBorne. BlueBorne parece ser mi única esperanza de conseguir la ejecución de código arbitrario en el Olio Watch sin ingeniería inversa del protocolo Bluetooth. El sistema Android de Olio parece cumplir con todos los criterios: el reloj ejecuta el kernel 3.10.0 de Android; el último firmware se lanzó el 30 de noviembre de 2016 (el kernel se compiló el 29 de noviembre), antes de que se descubriera a BlueBorne; y, según SDP, toda la pila Bluetooth de Android parece estar intacta (esa parte no está en la actualización del firmware, por lo que SDP es mi mejor fuente). Como parte de la pila de Android Bluetooth intacta, las frases 'L2CAP' y 'BNEP' (las vi mucho mientras investigaba BlueBorne) están generosamente dispersas en toda la búsqueda del SDP. Mi pregunta es, dado que, ¿cómo puedo usar BlueBorne para obtener la ejecución del código en el sistema Android? ¿Qué código PoC está disponible?
Gracias por cualquier ayuda. El reloj de Olio es en realidad completamente disfuncional: la aplicación Olio Assist intenta hablar con un servidor que se cerró cuando la empresa cerró su negocio; insiste en llamar a este servidor antes de hablar con el reloj Olio emparejado, y debido a eso, después de mediados de 2017, todos los relojes Olio que no estaban configurados se convirtieron en pisapapeles. Esta es mi única esperanza de restaurar cualquier funcionalidad.
Algunos enlaces:
El archivo de actualización del firmware al que me refería.
Observe la configuración del kernel (extraída de la actualización del firmware)
búsqueda de SDP