M
mrdjtb
Neues Mitglied
- 21
So, hier mal die Anleitung von Frank_m das SGS+ per Hand zu rooten!
Wer es auf diese weise lieber nicht versuchen möchte, kann auch die Variante 2 etwas weiter unter benutzen:
Hier Variante 1
Variante 2 - Und hier jetzt noch die Flash per Odin Methode:
Ich denke ich spreche im Namen aller die ihr SGS+ auf diese Wiese gerootet haben:
frank_m - Das hast Du einfach super hinbekommen!
DANKE DANKE DANKE
MrDJTB
Wer es auf diese weise lieber nicht versuchen möchte, kann auch die Variante 2 etwas weiter unter benutzen:
Hier Variante 1
frank_m schrieb:Wie immer gilt: Jeder ist für sein Telefon selber verantwortlich. Wer sein Gerät mit Hilfe dieser Anleitung schrottet, ist selber schuld. Ich hab euch gewarnt, die Sache ist gefährlich.
zunächst kümmern wir uns um die SMD Archive. SMD Archive scheinen eine Art aufgebohrtes TAR zu sein. Es gibt einen Header, der Informationen über den Dateinamen, die Länge, das Start-Offset der Datei im Archiv und eine MD5 Checksumme der Datei enthält. Im Anschluss an den Header sind die integrierten Dateien einfach hintereinander angehängt. Der Header ist immer ein Vielfaches von 512 Byte lang.
//EDIT
Ich habe ein automatisiertes Script geschrieben, dass den Vorgang des Extrahierens komplett übernimmt:
Hinweis: Wenn man das Script hier rauskopiert und in einen Texteditor in Linux einfügt, muss man anschließend die gespeicherte Datei ausführbar machen:Code:#!/bin/bash base=0 length=1 while (( length > 0 )) do # calculate Length let "skip = base + 18" length=`hexdump -e '"%d"' -s ${skip} -n 2 ${1}` let "length = length * 65536" let "skip = base + 16" length2=`hexdump -e '"%d"' -s ${skip} -n 2 ${1}` let "length += length2" let "length = length / 512" # Number of 512-Byte blocks # calculate offset let "skip = base + 22" offset=`hexdump -e '"%d"' -s ${skip} -n 2 ${1}` let "offset = offset * 65536" let "skip = base + 20" offset2=`hexdump -e '"%d"' -s ${skip} -n 2 ${1}` let "offset += offset2" let "offset = offset / 512" # Number of 512-Byte blocks # save header in case of first loop if (( base == 0 )) then dd if=${1} bs=512 of=header count=${offset} fi # extract filename let "skip = base + 32" filename=`dd if=${1} skip=${skip} count=16 bs=1 2>/dev/null` # and finally: extract Image if (( length > 0 )) then echo "Länge: ${length}" echo "Offset: ${offset}" echo "Dateiname: ${filename}" dd if=${1} bs=512 of=${filename} skip=${offset} count=${length} 2>/dev/null fi # next header let "base += 64" done
Aufruf:Code:chmod +x extract.sh
also z.B.Code:exctract.sh SMD-Archive
Damit gehört das elendige Rechnen der Offsets Und Längen der Vergangenheit an.Code:./extract.sh SMD_PDA_I9001XXKP4_CL374422_REV00_user_low_ship_EMMC.smd
//EDIT end
Alte manuelle Version:
Das Bild zeigt den Header, wenn ein Archiv im Hex-Editor geladen ist (ich verwende ghex2 in Ubuntu 11.04).
Anhang anzeigen 48272
Ich lade immer die Datei, stelle dann im Menu "Ansicht" -> "Daten gruppieren" auf "Longwords". Dann ziehe ich das Fenster so in die Breite, dass immer 32 (0x20) Byte in einer Zeile angezeigt werden. Damit werden Längen und Offsets immer direkt passend angezeigt, und die Dateinamen stehen immer am Zeilen-Anfang. Pro Datei werden 64 Byte im Header verwendet.
Im Bild sind die entscheidenden Inhalte für die erste Datei markiert:
Direkt im Anschluss an die Checksumme für die erste Datei beginnen die Infos für die 2. Datei.
- Grün ist die Länge
- Rot das Offset
- Violett der Dateiname
- Blau die MD5 Checksumme
Mit den Infos kann man sich nun an das Extrahieren der Dateien machen. Dafür gibt es einen schönen Trick: Wenn man den Cursor im ghex2 an die richtige Stelle setzt, werden einem unten in den Feldern direkt die passenden Dezimal-Werte der hexadezimalen Header Inhalte angezeigt:
Anhang anzeigen 48274
Wie man sieht, steht der Cursor oben auf dem Offset Wert der ersten Datei. Unten wird 1536 angezeigt: Das ist das Startbyte der Datei. Wichtig ist, dass "Little Endian" aktiviert ist.
Wenn man bedenkt, dass SMD Dateien immer ein Vielfaches von 512 Byte lang sind, kommt man schnell auf folgendes Shell Script:
Hinweis: Das Script ist sehr rudimentär und momentan nur eine Behelfskrücke. Ich muss mich mal in bash Scripting einarbeiten. Das kann man bestimmt auch eleganter und automatisiert lösen.Code:#!/bin/bash let "skip_var = ${3} / 512" let "count_var = ${4} / 512" echo "dd if=${1} bs=512 of=${2} skip=${skip_var} count=${count_var}" dd if=${1} bs=512 of=${2} skip=${skip_var} count=${count_var}
Syntax:
Also im Beispiel:Code:extract.sh SMD_Archiv Zieldatei Offset Länge
Die Ausgabe:Code:./extract.sh SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC.smd partition.bin 1536 29184
Auf die Art kann man schnell alle Dateien der SMD Dateien extrahieren. Man muss sich halt immer Länge und Offset aus dem Hexeditor holen, den Dateinamen angeben und ab dafür. Im Falle der KF6 sind das:Code:dd if=SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC.smd bs=512 of=partition.bin skip=3 count=57 57+0 Datensätze ein 57+0 Datensätze aus 29184 Bytes (29 kB) kopiert, 0,0163007 s, 1,8 MB/s
Hinweis: Die Reihenfolge und die Bestandteile sind firmwarespezifisch! Bei der KP4 sieht das anders aus. Also nicht blind die Anleitung abtippen, sondern nachdenken!
- partition.bin
- dbl.mbn
- osbl.mbn
- amss.mbn
- EMMCBOOT.MBN
- adsp.mbn
- boot.img
- system.ext4
- cache.ext4
- recovery.img
- persist.ext4
- emmcparam.bin
Am Ende extrahiert man noch den Header:
Den braucht man zwar nicht zum Ändern, aber er erleichtert das Zusammenfügen der Images am Ende.Code:./extract.sh SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC.smd header 0 1536
Man kann auf die gleiche Weise CSC oder Modem Dateien extrahieren. Die Vorgehensweise ist grundsätzlich immer die gleiche.
frank_m schrieb:Wie immer gilt: Jeder ist für sein Telefon selber verantwortlich. Wer sein Gerät mit Hilfe dieser Anleitung schrottet, ist selber schuld. Ich hab euch gewarnt, die Sache ist gefährlich.
Kommen wir nun zum eigentlichen Root Vorgang.
Nach dem Extrahieren haben wir u.a. die Datei "system.ext4". Um die kümmern wir uns jetzt näher.
Man legt ein temporäres Verzeichnis an, z.B. "system":
Dann mountet man per Loopback die system.ext:Code:mkdir system
Anschließend kann man im Ordner "system" in diesem Image nach belieben herumspielen. Allerdings sollte man sich überlegen, was man tut.Code:sudo mount -o loop system.ext4 system
Um zu rooten, besorgt man sich eine passende su und eine Superuser.apk. Ich habe die aus dem Link von astuermer verwendet, und zwar die "su-3.0-beta4-efgh-signed.zip". Zukünftig kann man sicher auch aktualisierte Versionen verwenden. Aus diesem Zip kann man die Datei su und die Datei Superuser.apk extrahieren.
Die Datei su kopiert man nach "system/xbin". Dann ändert man die Zugriffsrechte:
Als nächstes ist die Superuser.apk dran. Die kommt nach system/app:Code:sudo cp su system/xbin/ sudo chown 0.0 system/xbin/su sudo chmod 4755 system/xbin/su
Dann kann man das System Image wieder unmounten:Code:sudo cp Superuser.apk system/app/ sudo chown 0.0 system/app/Superuser.apk sudo chmod 644 system/app/Superuser.apk
Fertig. Jetzt hat man ein gerootetes system.ext4 verfügbar.Code:sudo umount system
Nun müssen wir das ganze wieder aufs Handy bringen.
frank_m schrieb:Wie immer gilt: Jeder ist für sein Telefon selber verantwortlich. Wer sein Gerät mit Hilfe dieser Anleitung schrottet, ist selber schuld. Ich hab euch gewarnt, die Sache ist gefährlich.
Der letzte Schritt ist das Packen des SMD Archivs.
//EDIT
Hier nun auch ein automatisiertes Script, dass die Dateien wieder zusammenfügt und die MD5 Checksums neu berechnet.
Achtung: Das Script verlässt sich darauf, dass vom letzten extract Vorgang eine gültige Header-Datei vorhanden ist!
Hinweis: Wenn man das Script hier rauskopiert und in einen Texteditor in Linux einfügt, muss man anschließend die gespeicherte Datei ausführbar machen:Code:#!/bin/bash base=16 length=0 filename=dummy # save the beginning dd if=header of=newheader bs=1 count=16 2>/dev/null while [ ! -z "${filename}" ] do let "skip = base" dd if=header of=newheadertmp bs=1 skip=${skip} count=32 2>/dev/null cat newheadertmp >> newheader rm newheadertmp # extract filename let "skip = base + 16" filename=`dd if=header skip=${skip} count=16 bs=1 2>/dev/null` if [ ! -z "${filename}" ] then echo "Berechne MD5 Sum: ${filename}" checksum=`md5sum ${filename} | tr '[a-z]' '[A-Z]'` echo -n ${checksum:0:32} >> newheader fi # next header let "base += 64" done filesize=$(stat -c%s header) let "base -= 32" let "size = filesize - base" dd if=header of=newheadertmp bs=1 skip=${base} count=${size} 2>/dev/null cat newheadertmp >> newheader rm newheadertmp cat newheader > ${1} filename=dummy base=16 while [ ! -z "${filename}" ] do # extract filename let "skip = base + 16" filename=`dd if=header skip=${skip} count=16 bs=1 2>/dev/null` if [ ! -z "${filename}" ] then echo "Füge zum Archiv hinzu: ${filename}" cat ${filename} >> ${1} fi # next header let "base += 64" done rm newheader
//EDIT endCode:chmod +x compress.sh
Alte manuelle Methode:
Wie schon erwähnt sind SMD Archive nichts anderes, als hintereinander gehängte Dateien mit einem Header. Genau das stellen wir jetzt wieder her. Dateien kann man sehr bequem mit cat aneinanderhängen. Wir haben ja beim Entpacken den Header gesichert, das erleichtert uns jetzt das Leben.
Wichtig ist die Reihenfolge der Befehle! Die muss exakt zur Reihenfolge der Dateinamen im Header passen!!! Achtung: Bei Fehlern besteht erhöhte Brick Gefahr!Code:cat header > SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat partition.bin >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat dbl.mbn >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat osbl.mbn >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat amss.mbn >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat EMMCBOOT.MBN >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat adsp.mbn >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat boot.img >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat system.ext4 >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat cache.ext4 >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat recovery.img >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat persist.ext4 >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd cat emmcparam.bin >> SMD_I9001BOKF6_I9001BOKF6_CL319318_REV00_user_low_ship_EMMC_rootet.smd
Hinweis: Die Reihenfolge und die Bestandteile sind firmwarespezifisch! Bei der KP4 sieht das anders aus. Also nicht blind die Anleitung abtippen, sondern nachdenken!
Nach dieser Befehlsfolge haben wir eine SMD Datei, die die gleiche Länge hat, wie die originale Datei. Die neue Datei hat nur eine Schwäche: die MD5 Checksumme der system.ext4 passt nicht, da wir daran herumgespielt haben. Aber kein Problem:
Die Ausgabe sieht in etwa wie folgt aus:Code:md5sum system.ext4
Blau markiert die MD5 Checksumme. Nun laden wir das neue SMD Archiv in ghex2 und tauschen die Checksum einfach aus:
Anhang anzeigen 48281
Man beachte, dass die Buchstaben GROß geschrieben werden müssen. Abspeichern und
Fertig.
Jetzt kommt folgende Flashanleitung zum Tragen:
https://www.android-hilfe.de/forum/...pdate-auf-android-2-3-4-anleitung.137222.html
Einfach die modifizierten Dateien entsprechend eintragen und flashen. Nach dem Reboot freuen wir uns über ein gerootetes Galaxy S Plus.
Variante 2 - Und hier jetzt noch die Flash per Odin Methode:
frank_m schrieb:Hallo,
man verzeihe mit bitte den Doppelpost, aber das Ereignis ist meines Erachtens wichtig genug für einen neuen Beitrag. Es ist vollbracht.
Wie immer gilt: Jeder ist für sein Telefon selber verantwortlich. Wer sein Gerät mit Hilfe dieser Anleitung schrottet, ist selber schuld. Ich hab euch gewarnt, die Sache ist gefährlich.
Hier sind die Links zum FMROOT Kernel. Dabei handelt es sich um den unveränderten Original Kernel, der lediglich aufgrund eines modifizierten init.rc Scriptes die für ROOT erforderlichen Dateien in die /system Partition kopiert.
FMROOT_XXKP4.zip
FMROOT_BOKF6.zip
Anleitung:
Sucht euch die passende Datei für eure Firmware heraus. Entpackt sie. Dabei sollten 2 Dateien entstehen:
AriesVE.ops
FMROOT_?????.smd
Seht euch diese Flashanleitung an. So wie dort beschrieben, muss die OPS-Datei bei OPS rein und die FMROOT Datei bei PDA. Start drücken und einige Sekunden warten. Danach rebootet das Phone und ist gerootet. Normalerweise ohne Verlust von Daten und Einstellungen.
Credits:
- astuermer für den Hinweis auf die richtigen Binaries
- Chainfire von den XDA Developers. Mein FMBOOT Script basiert größtenteils auf seinen Ideen
- Paul von Madaco. Bei seinem "superboot" habe ich ebenfalls Anleihen gemacht.
Für die Entwickler unter euch: Das Script, das in der init.rc aufgerufen wird:
Die Ergänzung für die init.rc:Code:mount -o rw,remount -t ext4 /dev/block/mmcblk0p15 /system rm /system/xbin/su rm /system/bin/su mkdir /system/xbin cat /fmboot/su > /system/xbin/su chmod 4755 /system/xbin/su cat /fmboot/Superuser.apk > /system/app/Superuser.apk mount -o ro,remount -t ext4 /dev/block/mmcblk0p15 /system
Code:start fmboot class_start default ## Daemon processes to be run by init. ## service fmboot /system/bin/sh /fmboot/fmboot.sh user root group root oneshot
frank_m schrieb:
Ich denke ich spreche im Namen aller die ihr SGS+ auf diese Wiese gerootet haben:
frank_m - Das hast Du einfach super hinbekommen!
DANKE DANKE DANKE
MrDJTB
Zuletzt bearbeitet: