Some rooting techniques I've used.
Rooting done 2012-04-12 on a G9 with firmware 3.2.69. Also done 2012-04-16 with firmware 4.0.5. (The technique seems to work for 4.0.6 and 4.0.7 too. Not tried but by reading init.rc from the AOS file it seems so...)
After reading Rosenberg's website (see the links below), I wondered if a symbolic link root method was possible on the G9. (There is already an exploit out there, coming from Paul O'Brien, but only binary and no details on how it works, so I didn't try it. No source, no trust.) I booted the G9, launched adb, and looked at /init.rc. I saw those lines:
mkdir /data/misc/smb 0770 system system mkdir /data/test 0777 shell shell chown system system /data/misc/gps chown system system /data/misc/smb chmod 777 /data/misc/smb touch /data/misc/smb/fusesmb.conf chown system system /data/misc/smb/fusesmb.conf chmod 666 /data/misc/smb/fusesmb.conf
Bingo? Is /data/misc/smb/fusesmb.conf exploitable?
I removed it. No complain. File deleted. Okay. Let's reboot. File reappears? Yes! Let's remove it again, do a link to /data/local.prop, reboot one more time. Can I read/write /data/local.prop? Yes! Let's put ro.kernel.qemu=1 in there, reboot. Root shell? Root shell. Game over.
Here is the procedure, as run from my linux host. The G9 is in USB debug mode (dig in the settings) and, obviously, connected to the linux computer with an USB cable. You need adb (get the android SDK, it's in there somewhere).
adb shell in the shell, type: rm /data/misc/smb/fusesmb.conf ln -s /data/local.prop /data/misc/smb/fusesmb.conf quit the shell (ctrl+d) reboot the G9, wait for it to come back adb shell in the shell, type: echo "ro.kernel.qemu=1" > /data/local.prop quit the shell reboot the G9 adb shell you have a root shell
The G9 is in a weird state because of this ro.kernel.qemu (sound won't work with firmware 3.2.69 for example). So, when you are done being root, clean up.
adb shell in the shell, type: rm /data/local.prop rm /data/misc/smb/fusesmb.conf quit the shell reboot the G9
On your linux computer, run adb kill-server when you are done, to clean up your linux computer.
Rooting done 2012-03-30 with android 2.3.6 (kernel version 2.6.35.7-N7000XXKKA-CL726566, build number GINGERBREAD.XXKKA). The phone was from SFR, bought beginning of 2012.
The goal was to sim-unlock the phone.
You need "adb" coming from the android SDK.
You need the program "zergRush", dig for it on the internet.
Become root:
adb push zergRush /data/local adb shell in the shell, type: cd /data/local chmod 777 zergRush ./zergRush (wait for zergRush to give you root, a bit long, the adb shell will auto-exit when it's done)
Once you are root, you can sim-unlock.
Get the file to modify:
adb pull /efs/nv_data.bin (dig in the file for the offset where is the 01 that will become 00 to sim-unlock the phone for me it is at 0x181469, I have that line from a "od -tx1 -Ax nv_data.bin | less" (you can type "/53 53" to search in 'less' or "/^180" to go to first line starting with "180"): 180000 53 53 4e 56 7c 75 f3 e8 df fd 00 0d f1 b0 6d b1 it's a start of block or something (the first 4 bytes read "SSNV", and then: 181460 ff ff ff ff ff ff ff ff ff 01 00 00 00 00 ff 95 see this 01 before the 00, that's what you're after)
Compile and run the following C program.
#include <stdio.h> #include <stdlib.h> int main(void) { char c = 0; FILE *f = fopen("nv_data.bin", "r+"); if (f == NULL) abort(); fseek(f, 0x181469, SEEK_SET); fwrite(&c, 1, 1, f); fclose(f); return 0; }
You must modify the offset of fseek to match yours. Compile, run.
Once you ran, verify that the file has a 00 instead of 01 at the wanted offset.
Then, get the user and group of original nv_data.bin:
adb shell ls -l /efs/nv_data.bin
It says "radio radio" for me.
Remove old nv_data.bin.
adb shell rm /efs/nv_data.bin
Put new one:
adb push nv_data.bin /efs/nv_data.bin
Remove md5 file:
adb shell rm /efs/nv_data.bin.md5
Change owner of file (adapt, maybe it's not "radio.radio" for you):
adb shell chown radio.radio /efs/nv_data.bin
Change permission too (maybe not necessary):
adb shell chmod 666 /efs/nv_data.bin
Cleanup:
adb shell rm /data/local/zergRush adb shell rm /data/local/tmp/boomsh adb shell rm /data/local/tmp/sh
Reboot phone:
adb reboot
Check the locks. Dial: *#7465625# (don't forget the '*' and the two '#').
Contact: sed@free.fr
Created:
Fri, 13 Apr 2012 09:46:41 +0200
Last update:
Mon, 25 Jun 2012 10:55:40 +0200