PDA

Ver la Versión Completa : ROM [BOOT] Partición de inicio con mejoras


crushedice2000
13/07/17, 19:50:56
AVISO: No me hago responsable de lo que le pueda ocurrir a tu móvil, a tu casa o a tu coche. Lo que vas a hacer con este tutorial requiere conocimientos avanzados.


La partición de inicio que he modificado, es la misma que la original, con la excepción de dos mejoras:

1. Podemos ejecutar comandos como root desde ADB (ver al final del post).

2. Si creamos un script que se llame script.sh en /system/bin y le damos permisos de ejecución, se ejecutará al inicio.

Materiales

Orange Yumo (Huawei G740-L00) con el cargador de arranque (bootloader) desbloqueado (http://www.htcmania.com/showthread.php?t=1332652).
Partición de arranque (boot) modificada por mí (adjunta al final del post y subida a MEGA (https://mega.nz/#!WxVk2Sya!SatXpPS1F_2hM3F0hsGa2zqG04BV4Zpwa0jr-DB2fgY)).
ADB, fastboot y los drivers necesarios instalados en el ordenador.


Procedimiento

1. Descargamos la imagen de la partición de arranque (boot). Viene comprimida en zip, hay que extraerla.

2. Entramos en modo fastboot en el móvil. Para hacer esto, tenemos que apagarlo y luego encenderlo mientras pulsamos el botón de bajar volumen.

3. Conectamos el móvil al ordenador.

4. Ejecutamos el siguiente comando en el ordenador (la ruta al archivo boot.img tienes que ponerla según dónde esté descargada):
fastboot flash boot boot.img

5. Reiniciamos el móvil ejecutando este otro comando en el ordenador:
fastboot reboot

6. Eso es todo. Ahora tenemos acceso a root a través de ADB y podemos ejecutar cualquier cosa al inicio.

Ejecutando cosas con privilegos de root

En el ramdisk hay un ejecutable puesto por mí (/sbin/root) que nos permite ejecutar comandos como root y/o elevar los privilegios de la consola interactiva donde estamos.

Para ejecutar un comando como root, podemos hacerlo así (en este caso ejecutamos el comando id):


usuario@Ordenador:~$ adb shell
shell@android:/ $ root id
uid=0(root) gid=0(root) groups=1003(graphics),1004(input),1007(log),1009(m ount),1011(adb),1015(sdcard_rw),1028(sdcard_r),300 1(net_bt_admin),3002(net_bt),3003(inet),3006(net_b w_stats)
shell@android:/ $


Para obtener privilegios de root en la consola interactiva:


usuario@Ordenador:~$ adb shell
shell@android:/ $ root
shell@android:/ #


Incluso, si somos mañosos, podemos instalar SuperSU sin necesidad de cambiar el recovery ni hacer cosas raras.


Código fuente de /sbin/root


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>


int main(int argc, char **argv) {
if (setgid(0) || setuid(0)) {
fprintf(stderr,"root: permission denied\n");
return 1;
}

if (argc > 1) {
char *exec_args[argc];
memset(exec_args, 0, sizeof(exec_args));
memcpy(exec_args, &argv[1], sizeof(exec_args));
if (execvp(argv[1], exec_args) < 0) {
fprintf(stderr, "root: %s: exec failed: %s\n", argv[2], strerror(errno));
return -errno;
}
} else {
execlp("/bin/sh", "sh", NULL);
execlp("/bin/ash", "sh", NULL);
execlp("/bin/bash", "sh", NULL);
execlp("/system/bin/sh", "sh", NULL);
execlp("/system/bin/ash", "sh", NULL);
execlp("/system/xbin/ash", "sh", NULL);
execlp("/system/xbin/bash", "sh", NULL);
fprintf(stderr, "root: exec failed\n");
return 1;
}
}