Básicamente, hay un exploit de rom de arranque en los chips Tegra X1, específicamente el Nintendo Switch que le permite enviar cargas útiles mientras está en modo de recuperación y básicamente ejecutar código sin firmar (homebrew, firmware personalizado e incluso lanzar distribuciones de Linux). El iniciador de carga útil funciona en PC, Mac y Linux, y se ha portado a Android; sin embargo, para que funcione en Linux, se requiere un parche de kernel para el controlador EHCI (USB 2.0). Los dispositivos que admiten xHCI (3.0) pueden ejecutarlo sin ningún problema. En Android se hace usando un adaptador USB-OTG por cierto y funciona sin acceso de root. Sospecho que la única forma de parchear el kernel es con acceso de root o una ROM/kernel personalizado con el parche. Aquí está el parche de un equipo de piratería (fail0verflow) sin ninguna instrucción:https://github.com/fail0verflow/shofel2/blob/master/linux-ehci-enable-large-ctl-xfers.patch
Alguien también escribió un script de Python para Linux que parchea la memoria del kernel aquí: https://gist.github.com/DavidBuchanan314/41b12362cc4d8c539dc441d75155f2e9
Intenté ejecutarlo usando Termux con el paquete python instalado, sin embargo, aparece este error:
0x0
Traceback (most recent call last):
File "ehci_patch.py", line 70, in <module>
" " ".replace("PLACEHOLDER", hex(ksyms["ehci_urb_enqueue"])).replace("PLACE2" hex(ksyms["lookup_address"]))
KeyError: 'lookup_address'
Intenté ejecutarlo también con su primero, pero dice sh: python: no encontrado. De todos modos, no creo que el script "hotpatch" pueda funcionar correctamente en Android, ya que está destinado a sistemas Linux de escritorio.
Apreciaría cualquier pista o información sobre una forma de parchear el kernel, ya sea con acceso de root o tal vez una forma de hacer que el script de Python funcione. Bifurqué la aplicación de Android con la esperanza de mejorarla y traducirla a diferentes idiomas y quiero poder brindar una solución con instrucciones para que funcione en dispositivos EHCI (si es posible en Android). Sería increíble si también es posible con un módulo Magisk.
Esa secuencia de comandos de Python parece funcionar generando el código fuente, luego compilando un módulo de kernel personalizado y luego cargando ese módulo para hacer el parche real. Espera, entre otras cosas, un compilador de C, make
un programa y fuentes del kernel que funcionen (al menos encabezados) para el kernel que está ejecutando /lib/modules/$(uname -r)/build
.
Entonces, no, eso no va a funcionar en Android. Por lo general, no tienes ninguna de esas cosas. Con un entorno de compilación cruzada (en una PC) configurado para compilar el kernel de su teléfono, es probable que pueda compilar ese módulo, copiarlo y luego (como root en el dispositivo Android) cargarlo. Pero construirlo directamente en el teléfono sería toda una tarea.
Nishikata
iBug