My Hero Adventure (II) – How ‘to root’ your Android phone
In my previous post about the Hero I wrote about the structure of the system and commented how I got a root shell. In this post I'll tell you how to easily root your phone to be able to use applications that need root (admin/superuser) access in a VERY simple and easy way, without flashing recovery images or anything, just by installing an application and performing a click.
I tried it on my Hero with the latest HTC update, but it should work with any Android system with a kernel version up to 2.6.30.4. If you give it a try, give me feedback!
The application: Rooter
To assist myself in the rooting process I modified the FlashRec application by Christopher Lais, which uses an exploit for a NULL pointer dereference vulnerability in the Linux kernel (<= 2.6.30.4) in order to obtain backups of the flash memory and to flash new custom ROMs.
In my case, I removed most of FlashRec's code and only left there the stuff that was needed for my application: a couple of buttons and a TextView to show information about the result of the process.
The Create rootshell button creates a setuid root shell in /system/bin/rootsh which you can use from the terminal, while the Extract SuperUser button extracts a Superuser.apk tool and an implementation of su to their respective directories. These applications are also from Christopher Lais I believe, and I didn't check their source code although I tried them out on the emulator and everything seems to be fine. As usual, all this comes without any warranty ;-).
From then on, an Intent (a message between Android's applications) will be sent to the Superuser.apk application each time a root request is performed using su. So, the user will be able to Allow once or always the requesting app. or to deny once or always.
Installing and running Rooter
Installing the application cannot be easier. Since I didn't upload it into the Market because I have no interest at all on doing so, you can download it from here and store it in your phone's SD card (I'm assuming you know how to ;-)). Once that's done, install a file manager if you don't have one yet. For instance Linda File Manager is available for free from the Market.
Using Linda File Manager, go to your SD card and find the Rooter.apk file. Clicking on it, choose to open it with Package Installer. At this point, it is possible that you need to enable the option to allow installation of apps from unknown sources in Settings > Application settings > Unknown sources.
Once enabled, accept and go back to Linda File Manager by pressing Back in your phone. Once there you can click again on Rooter.apk and now you will be able to install it. Once it's installed, press Open and the application will be launched. The only step left is to press Extract SuperUser and you'll have your Hero rooted. Now you can install applications that require root access such as Wifi theter :-).
Easy, isn't it?
Source code
For the curious reader, I've also uploaded the source code of the application here.
October 13th, 2009 - 19:43
Hola. No entiendo ni papa de criptografia, pero tengo un hero que quiero rootear. La app la instalas a la raiz de la SD y la ejecutas sin más, sin cable usb ni nada? Eso se puede hacer con todas las apps? (Tengo entendido que desde la SD no tiran las apps sin hacerle root).
Gracias, gran blog. Feedeado.
October 13th, 2009 - 20:56
Hola,
Sí, la copias a la raiz de la SD y luego la ejecutas desde ahí con el ‘Package Installer’. Esto la instalará en /system/app, que es donde se instalan las aplicaciones y desde donde se ejecutan.
Para poder lanzarla, debes poder navegar hasta la SD. De ahí que diga que necesitas algo tipo ‘Linda File Manager’ que es gratuito desde el Market. Ahora mismo no te sé decir si tienes otra forma de instalarla sin usar un gestor de archivos como ese.
Una vez la ejecutas, clicando en el segundo botón se crea el binario ‘su’ y se instala ‘Superuser.apk’. Esto es lo que suelen llamar ‘rootear’. Te saldrá un mensajito que diga que se ha extraido ‘successfully’ ;-). A partir de ahí ya puedes usar programas que requieran root.
Tienes por ejemplo App2SD, que te mueve tus aplicaciones a la SD y hace que /system/app apunte a la SD. Así ya tienes todo el espacio que quieras para la SD.
Ya me comentas si te funcionó.
Saludos
October 15th, 2009 - 11:22
Por qué se ha de instalar en la SD?
Las aplicaciones también se pueden instalar así:
adb install aplicacion.apk
Teniendo conectado el cacharro vía usb.
October 15th, 2009 - 12:18
Correcto. Es igual de valido.
Solo que la forma que yo utilice es la otra, y asi no hace falta ejecutar comandos (uuuuh! q miedooo! ;-))
Saludetess
October 15th, 2009 - 21:35
El comando adb, sera del SDK de android; supongo que para ejecutarlo habra que instalarlo antes, no?. Por cierto, el screen del post… eso no es una magic¿
P.D. Si, tengo miedo. Soy un isnorante de cosas informaticas, y ya estoy muy hecho al synaptic pa estar crakeando el movil. Aun esperare algo mas de tiempo.
October 16th, 2009 - 08:15
Hola de nuevo.
Sí, el adb es parte del SDK de Android. Puedes instalar el SDK y usar adb o puedes hacer como dije antes: copiar a la SD y navegar hasta él y ejecutarlo con un file manager instalado desde el Market.
El screen del post no es ni siquiera una magic, es el emulador de Android que viene con el SDK 😉
En principio el programa es 100% seguro y no debería pasar nada si lo ejecutas. Si clicas en el botón tienes dos opciones:
A.- El exploit no funciona xq tienes un kernel más nuevo que comprueba el NULL pointer. Te dirá que no se ha podido copiar los datos.
B.- El exploit funciona. Entonces lo único que hace es un remount de la partición /system para que se pueda escribir en ella, luego extrae los ficheros a la ubicación adecuada ( su a /system/bib y Superuser.apk a /system/app ) y vuelve a hacer un remount como read-only.
Pero entiendo perfectamente que tengas un poco de miedo 🙂 Yo también me quise asegurar de todo antes de ejecutar según qué cosas jeje
Un saludo
PD: Si tu móvil se queda tonto tras flashear la partición del sistema (que en este caso no se hace) siempre se puede usar flashboot para reflashearlo… es un poco más complejo pero funciona y quita miedo saber que está ahí la opción 🙂
October 16th, 2009 - 08:31
Una pregunta, dado que se usa el mismo kernel que en sistemas GNU/Linux, este exploit podría servir para rootear una máquina normal? (Modificándolo un poco)
October 16th, 2009 - 10:03
@Newlog
Más que un poquito, un muchito 🙂
En este caso, el código del exploit es muy simple, pero porque el kernel para ARM te permite mapear cosas en la dirección 0 mientras que en x86 no. O quizás sea simplemente porque en Android está desactivada la protección de mmap_min_addr que hace que no se pueda mapear nada por debajo de cierta dirección.
Yo cuando leí el código de este exploit me sorprendí bastante porque no veía por ningún lado como iba a mapear nada en NULL, no había nada de código ‘especial’ para hacerlo. Lo que pasa que en el Makefile vi que se creaba una sección especial y se mapeaba en cero, y ahí se pone el código que se ejecuta al explotar la vulnerabilidad.
Luego busco un enlace al respecto (en inglés) del caso de Linux x86 (quizás más arquitecturas, no estoy del todo puesto en ello 🙂 ) y lo pongo por aquí.
October 16th, 2009 - 11:36
Una pregunta, me imagino que esta aplicacion que has creado ¿funciona unicamente para utilizar programas que soliciten root, o tambien lo podemos usar para cargar ROMs? Un saludo
October 16th, 2009 - 12:16
Vas a tener que dar una rueda de prensa…;)
October 16th, 2009 - 19:40
Hola,
@Newlog
Un poco de info sobre el tema, en inglés:
http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html
http://blog.cr0.org/2009/08/linux-null-pointer-dereference-due-to.html
@andrew
Es solo para crear un binario ‘su’ (que es lo que usan los programas que requieren root) y una aplicacion para gestionar los privilegios de dichos programas. Y a parte para crear una shell de root, desde la que si quieres puedes flashear ROMs usando los comandos adecuados.
De todas formas, para eso puedes usar FlashRec, que se hizo para ello y es en la que me basé yo. Creo que está en el Market… y también tienes el código en http://zenthought.org/content/project/flashrec
October 19th, 2009 - 09:29
Muchas gracias, TuXeD.
En tu linea ^^
October 19th, 2009 - 09:34
Perdón el doble post, sólo quiero remarcar que el blog que me has pasado es realmente bueno, ya lo conocía, pero no he relacionado dicha entrada con el exploit de Android jejeje.
Una pena que actualize cada tanto!
Gracias de nuevo.
November 5th, 2009 - 23:50
Juer, que envidia me das, llevo un mesecito trasteando con el android sdk y el simulador de android, y me frustra muchísimo no podre probarlas en vivo xD.
Si al final te vas a pasar por Valencia, pega un toque o algo 😉
January 8th, 2010 - 02:07
thanks man,this is very very easy way.
god bless you
I guess that I 1st man from Iran that use this very very good program
May 28th, 2010 - 11:29
i just tried this on my hero with the latest htc update… kernel version is 2.6.29… and it didn’t work.
August 12th, 2010 - 06:38
Tried this on my HTC Hero 2.39.591.1 and didn’t work.
Create rootshell-> ERROR: /bin/system/rootsh not created 🙁
Extract SuperUser -> There was an eror. SuperUser or su could not be extracted.
October 13th, 2010 - 22:21
I got the same: Create rootshell-> ERROR: /bin/system/rootsh not created