Pünktlich zum Wochenende habe ich mich dazu entschlossen, mein Samsung Galaxy nun endlich mal zu rooten. Die Motivation dafür war einerseits um mich mit WPA2-Enterprise WLAN Netzen zu verbinden und andererseits weil ich halt nun mal gerne root auf meinen Geräten bin ;-)
In etlichen Foren und Blogs findet man ja inzwischen auch schon diverse Anleitungen dazu wie's geht und nachfolgend habe ich mal kurz zusammengefasst, was dazu notwendig ist.
Vorab, ich übernehme keine Garantie auf alles was da jetzt steht bzw. die verlinkten Downloads. Wenn jemand sein Gerät brickt oder Daten verliert, ist er selber schuld. Und das rooten sollte meines Erachtens nur von Leuten durchgeführt werden, die wissen was sie tun und denen klar ist, was das für Auswirkungen aus das Handy hat!
1. USB-Verbindung zum Galaxy herstellen
Da ich hauptsächlich unter Linux (Gentoo) arbeite ist als erstes einmal eine funktionierende Debugging USB-Verbindung zum Galaxy herzustellen.
Die dazu notwendigen Schritte sind für die HTC Phones im Android Developer Guide auf http://developer.android.com/guide/developing/device.html erklärt.
Theoretisch klingt das einfach, nur praktisch hat man aber das Problem, dass sich das Galaxy mit einer anderen USB VendorId meldet. Wenn man das Galaxy per USB an einem Linux-Rechner ansteckt und lsusb eingibt sieht man folgendes:
Bus 001 Device 002: ID 04e8:6640 Samsung Electronics Co., Ltd
Auf der Android Seite ist aber die VendorId 0bb4 angeführt, die muss man für das Samsung also durch 04e8 ersetzen. Ist ja aber auch klar, weil Samsung gegenüber HTC ja ein anderer Hersteller ist.
Man muß also in /etc/udev/rules.d/51-android.rules folgendes eintragen:
SUBSYSTEM=="usb|usb_device",SYSFS{idVendor}=="04e8",MODE="0666"
Das im Developer Guide nachfolgend angeführte chmod a+rx /etc/udev/rules.d/50-android.rules ist zumindest bei mir unter Gentoo Linux nicht notwendig, da ist nämlich keine einzige udev-rule als ausführbar gesetzt.
BTW: Es ist auch ein kleiner Tippfehler im Developer Guide, weil einmal wird auf das 51-android.rules und dann wieder auf das 50-android.rules verwiesen.
Die udev Regel ist nun richtig gesetzt, im Samsung Galaxy muss man dann noch unter "Einstellungen->Anwendungen->Entwicklung" das USB-Debugging aktivieren und man kann das Galaxy anstecken.
Als nächstes sollte man testweise mit adb (Android Debug Bridge - ein Tool aus dem Software Development Kit von Android) eine Verbindung zum Galaxy aufmachen. Das adb findet man im SDK im Unterverzeichnis tools.
Bei mir folgte dann aber gleich die nüchterne Erkenntnis, dass ein adb devices nur die folgende leere Liste zurückliefert:
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached
Tja, der Haken an der Sache ist, dass es im aktuellen SDK (1.5_r3) die Samsung VendorId noch nicht in die Liste der von adb unterstützen Vendoren geschafft hat. Das sieht man im Source-Repository auf http://android.git.kernel.org/?p=platform/system/core.git;a=history;f=adb/usb_vendors.c;hb=HEAD
Man könnte sich nun den aktuellen Sourcecode mit der bereits eingepflegten Samsung VendorId runterladen und sich das adb selber compilieren oder man verwendet bequemerweise das adb von http://floe.butterbrot.org/external/adb.gz , welches bereits das Samsung Galaxy unterstützt.
Sicherheitshalber macht nach dem Download noch ein md5sum adb.gz , das liefert 82727d3eb69452c50421f9f7196d5cf4 adb.gz zurück.
Danach ein gunzip adb.gz; chmod 755 adb und einen eventuell laufenden adb server prozess mit adb kill-server beenden.
Ein adb devices liefert nun folgendes zurück:
* daemon not running. starting it now *
* daemon started successfully *
List of devices attached
I7500bWHpbWGwO2 device
Teil 1 wäre nun geschafft, wir haben eine funktionierende USB Debugging Verbindung zum Galaxy.
2. Neues Recovery Image für den root-Zugriff flashen
Als nächstes muss ein spezielles Recovery Image geflasht werden, mit dem wir dann das Filesystem des Galaxy mounten können um darin die Änderungen für's rooten einzuspielen.
Dazu benötigt man das fastboot utility von HTC, welches auch mit dem Samsung Galaxy funktioniert. Den Download dazu findet man auf http://www.htc.com/www/support/android/adp.html
Weiters wird das Recovery Image von
http://www.receptorblog.com/wordpress/full-backuprestore-for-samsung-galaxy-with-nandroid/ benötigt. Einfach downloaden und unzippen.
Danach schaltet man das Handy aus und beim Einschalten drückt man gleichzeitig die "Call" und die "Power" Tasten, das sind die beiden Tasten ganz unten und hält sie gedrückt bis nach ein paar Sekunden das Fastboot Menü erscheint.
Das neue Recovery Image flasht man dann ganz einfach mit:
fastboot flash recovery recovery_gal_msdk.img
Nach dem fertigen Flash Vorgang ist kurz die Batterie herausuzunehmen und beim Einschalten des Galaxy sind die Tasten "Leiser" + "Call" + "Power" zugleich gedrückt zu halten. Nach ein paar Sekunden gelangt man dann in das neue Recovery Menü.
Im Recovery Menü kann man nun zum Beispiel mit nandroid ein komplettes System-Backup auf die interne SD-Karte ziehen oder wieder zurückspielen. Das ist hilfreich und beruhigt, ist für's rooten aber nicht unbedingt notwendig, da wir kein neues Image einspielen oder irgendwelche bestehenden Daten löschen/verändern.
3. SU einspielen, um den Anwendungen root-Zugriff zu geben
Das Galaxy ist nun noch immer im Recovery Modus und wir können mit adb shell eine root shell am Handy öffnen und in der Shell mit mount -o rw -t yaffs2 /dev/block/mtdblock1 /system das system Filesystem einhängen.
Wenn man dann ein ls -l /system/bin/su macht wird man feststellen, dass dort keine su Anwendung installiert ist. Diese wird aber von jenen Android Applikationen benötigt, welche bestimmte Kommandos als root auszuführen wollen.
Und was ich dann jetzt als nächsten Schritt in vielen Foren/Blogs gelesen habe, hat mich "gleich mal aus den Socken g'haut".
Man findet sehr oft die naive Anleitung, einfach per "cat sh > su; chmod 4755 su" sich das su zu erstellen, indem man eine Kopie der shell macht und sie auf setuid root setzt. Die kann dann jedermann aufrufen und somit ohne Kontrolle mit root-Rechten arbeiten.
Das funktioniert zwar prinzipiell, nur würde das wohl kein Unix-Admin jemals auf seinen Rechnern machen, warum sollte ich das dann auf meinem Handy machen, wo teilweise doch sehr sensible und persönliche Daten herumliegen und durch bestimmte Aktionen auch hohe Kosten für mich entstehen können.
Mit so einem trivialen su kann nämlich jede x-beliebige Anwendung unkontrolliert root-Rechte am Handy erlangen und dann zB. mit einem "rm -fr /" das Handy Rucki Zucki wipen oder ein Root-Kit, einen Trojaner oder ähnliches installieren.
Theoretisch wäre es so ja auch möglich, dass man über eventuelle Sicherheitslücken im Browser fremden Code von präparierten Webseiten aus in das Handy einschleust.
Ich denke mal, dass viele Anwender, die ihr Handy halt als Neugierde einfach mal rooten, gar nicht wissen, welche grosse Sicherheitslücke sie da aufreissen. In Summe finde ich das schon etwas leichtsinning, solche Vorschläge zu veröffentlichen bzw. blindlings zu befolgen.
Weitaus besser ist es da, sich ein su zu installieren, dass es dem Benutzer erlaubt zu kontrollieren, welche Anwendung das su dann auch ausführen darf.
Darüber haben sich da schon einige Leute Gedanken gemacht und eine auch für das Galaxy brauchbare Anwendung findet man auf:
http://forum.xda-developers.com/attachment.php?attachmentid=211569&d=1249225060
In dem ZIP-Paket sind 2 Files (su und Superuser.apk) enthalten, die man nun einfach wie folgt auf das Samsung kopiert (Zuvor mit exit wieder aus den adb shell aussteigen).
adb push su /system/bin/
adb shell chmod 4755 /system/bin/su
adb push Superuser.apk /system/app/
adb shell sync
adb shell reboot
Das war's dann auch schon, man hat nun ein su am Samsung oben, dass den Benutzer fragt, ob er der Anwendung den Zugriff erlauben oder verweigern will.
Testen kann man das ganze dann zum Beispiel damit, dass man sich aus dem Market das Widget “OverclockWidget(need Root)” installiert und am Home-Screen plaziert. Wenn man dort nun die Frequenzen ändert, ruft das Widget das su auf und es erscheint die "Superuser permissions" Anwendung, in der man den Zugriff auf das su erlauben kann.
Fazit
Das Rooten des Samsung Galaxy geht recht einfach - aber durch die weit verbreitete und verharmloste Version des Herstellens eines su durch eine Kopie von sh ist es wahrscheinlich nur eine Frage der Zeit, bis es die erste Schadsoftware gibt, die diese Lücke ausnutzt. Und dann wird diese Lücke wahrscheinlich dem Android Betriebssystem negativ angekreidet, obwohl sie nur durch den naiven Umgang von einigen Usern mit den Root-Rechten entstanden ist.
Samstag, 29. August 2009
Abonnieren
Kommentare zum Post (Atom)

9 Kommentare:
Sehr gute Beschreibung, weil auch die Hintergründe erläutert werden. Die Warnung vor dem leichtfertigen Umgang mit su würde ich sofort dick unterstreichen, wenn das hier ginge.
Zwei Hinweise noch:
1.) Der Link auf den Download für das recovery Image ist nicht mehr aktuell; man landet auf einem HTTP-404-Error. Auf http://www.mediafire.com/?lidknnnqgwi hab ich es dann gefunden.
2.) Vor dem flashen mit dem fastboot-Utility sollte man mit
fastboot devices
prüfen, ob das Gerät auch wirklich im fastboot-Modus ist und korrekt antwortet. Wenn da eine Leerzeile erscheint ist das NICHT ok. Es müssen zumindestens Fragezeichen erscheinen.
Danke für die Hinweise, habe den Link im Artikel aktualisiert.
Hallo Heiko,
sehr gute Beschreibung, sie half mir sehr weiter. Eine Sache koenntest du evtl. noch ergaenzen: als Vorbedingung muss der Anwender, um die von dir beschrieben Schritte ausfuehren zu koennen eine SD Karte in seinem Samsung eingesteckt haben.
Gruesse Markus
Hallo markusin,
bei meinem Samsung Galaxy hat's auch ohne SD-Karte funktioniert, ich habe nämlich gar keine in meinem Handy.
Hallo
Der fastboot bleibt aber nur ca. 10 sec.
bestehen und dann bootet das galaxy ganz normal.
Ist das bei euch auch so oder mache ich ws falsch.
MfG
Hej Heiko.
Danke erstmal für die Beschreibung und nicht ganz so willkürliche Vergabe von Root-Rechten. Da fühlt man sich gleich etwas besser beim Vorgehen :-)
Ich habe deine Anleitung genutzt, um das framework.jar neu einzuspielen. Ich starte also im Recovery Mode und mounte dann RW die System-Partition. Mit dem push befehl kopiere ich dann das framework.jar von mir aufs Samsung. Leider scheint das Samsung aber nicht mein framework.jar zu benutzen. Auf dem Emulator klappts aber das Samsung weigert sich irgendwie.
Wenn ich auch noch das framework-res.apk Package aufspiele crashed die Android Runtime.
Hast du hierfür einen Tipp oder wenigstens ein Gefühl aus der Erfahrung heraus?
Danke,
Patrick
Hallo Heiko,
eine gute und verständliche Anleitung! Ganz wichtig ist auch der Teil bzgl. der Gefahren. Ich bin nicht so der root-Freund, aber habs jetzt mal getan, um den OpenGL-Treiber von HTC aufs Galaxy zu kopieren.
Dazu brauchte ich nur den Teil bis zum flashen des Recovery-Images und mounten der System-Partition, um den alten libhgl.so Treiber zu löschen bzw. zu überschreiben.
Anwendungen sollen bei mir noch keinen root-Zugriff bekommen, brauch ich noch nicht unbedingt ;)
Aber wenn, dann solte man das so machen, wie du beschreibst ... wäre ein fatales Sicherheitsrisiko, weil alle Anwendungen root spielen können.
Etwas vergleichsbares haben wir ja nun kürzlich bei den iPhones in Holland gehabt.
Danke und viele Grüße,
@HeinzMueller
Super gemacht, vielen Dank!
Vielen Dank für die großartige Anleitung. Funktioniert dieses auch mit dem Galaxy S i9000 oder sollte ich hier anders vorgehen?
Kommentar veröffentlichen