Pisałem swego czasu o rootowaniu Androida na przykładzie chińskiego telefonu, dlatego dzisiaj mały suplement na przykładzie używanego przeze mnie obecnie Samsunga Galaxy II. Tym bardziej, że firma Samsung udostępniła możliwość szczególnie prostego złamania telefonu.
Wspominaną możliwością jest głośna ostatnio dziura bezpieczeństwa w systemach Samsunga. Błąd jest gruby, pozwala każdej zainstalowanej aplikacji na zdobycie roota na telefonie i należy się nim przejmować (na pewno będąc ostrożniejszym w instalowaniu nowych rzeczy). Ale skoro już jest, niech przyniesie także korzyść.
Sporo technicznych informacji o błędzie można znaleźć tutaj.
Rootowanie i jego efekty
Przebieg rootowania telefonu:
-
pobieramy
ExynosAbuse-v1.40.apk
(ja użyłem nieco wcześniejszej wersji 1.30) z tego wątku na forum XDA Developers -
w dowolny sposób ją instalujemy na telefonie.
Wystarczy normalna instalacja po pobraniu powyższego pliku bezpośrednio na
telefon. Ja, jako że plik pobrałem na PC, podpiąłem telefon kabelkiem
i użyłem adb
:
$ adb install ExynosAbuse-v1.40.apk
W bieżącym Ubuntu adb można zainstalować po prostu instalując pakiet android-tools-adb, np.
sudo apt-get install android-tools-adb
.
Po zainstalowaniu aplikacji po prostu ją uruchomiłem.
Po wyborze opcji Root device
aplikacja zrootowała telefon, tj. zainstalowała program
/usr/xbin/su
oraz nakładkę SuperSU.
Od tego momentu działa to normalnie: dowolne użycie su
, czy to z shella, czy to przez aplikację korzystajacą z roota, powoduje wyświetlenie pytania o zgodę:
W wersji 1.40 ExynosAbuse obsługuje także instalację zabezpieczenia przed exploitem (można włączać je jednorazowo albo nakazać włączenie przy uruchomieniu telefonu).
Niestety włączenie tej poprawki sprawia, że przestaje działać aparat fotograficzny - po prostu nie prezentuje obrazu. Wynika to z natury błędu (tak naprawdę błąd Samsungów polega na pewnym skrócie użytym przez programistę do komunikcji programów z kamerą). Dobrą nowiną jest że można to w programie przełączać, włączając zabezpieczenie przynajmniej przed instalowaniem i uruchamianiem nowych aplikacji.
Precz z melodyjką
Pierwsze zastosowanie roota: usunięcie irytującej melodyjki odgrywanej przez telefon po włączeniu.
Na Galaxy II jest to plik /system/etc/PowerOn.ogg
który trzeba
usunąć (albo zmienić mu nazwę).
Interaktywnie pozwala na to wiele menedżerów plików, np. ES File Explorer w którym trzeba (chwilowo) włączyć opcje przemontowania systemowego katalogu w trybie do zapisu i dostępu root.
Następnie po prostu trzeba przejść do /etc
, odnaleźć plik melodyjki i pozbyć się go
a potem przełączyć system z powrotem w tryb read-only.
Precz z melodyjką (wariant command line)
Z pecetowego shella na podpiętym kabelkiem telefonie to samo można zrobić w niewiele bardziej skomplikowany sposób (po su trzeba zerknąć na telefon i udzielić zgody na udostępnienie roota):
# Uruchomienie shella adb
marcink@banach:~$ adb shell
# Uzyskanie praw roota
shell@android:/ $ su
# Sprawdzenie jak jest zamontowany system
shell@android:/ # mount | grep system
/dev/block/mmcblk0p9 /system ext4 ro,relatime,barrier=1,data=ordered 0 0
# Przemontowanie w tryb do zapisu (ext4 i mmcblk0p9 wdg. powyższego)
shell@android:/ # mount -o rw,remount -t ext4 /dev/block/mmcblk0p9 /system
# Właściwa zmiana nazwy
shell@android:/ # cd /etc
shell@android:/etc # mv PowerOn.ogg PowerOn.ogg.disabled
# Przemontowanie w tryb tylko do odczytu
shell@android:/ # mount -o ro,remount -t ext4 /dev/block/mmcblk0p9 /system
Podobno niektóre modele mają też melodyjkę pożegnalną w
/system/media/audio/ui/Shutdown.ogg
a jeszcze inne
stosują /system/media/audio/ui/PowerOn.ogg
i
/system/media/audio/ui/PowerOff.ogg
. W razie potrzeby
z tymi plikami można postąpić podobnie.
Busybox
O Busyboksie pisałem już poprzednio - program dostarcza chmary shellowych poleceń przydatnych w razie częstszego używania shella telefonu.
Zainstalowałem go tym razem używając
jednego z instalatorów z marketu. Sama instalacja tej aplikacji
udostępniła polecenie busybox
, po uruchomieniu program
tworzy brakujące symlinki (dając opcję podejrzenia co dokładnie
będzie zrobione - istniejących programów nie nadmazuje ale dodaje
brakujące).
(powyższy screenshot zrobiony już po instalacji, dlatego busyboksowe linki już istnieją).
Dygresja o zrzutach ekranowych
Odkryłem ostatnio bardzo poręczny program do robienia zrzutów ekranowych podpiętego kablem telefonu z shella (bez uruchamiania DDMS), wszystkie obrazki w tym artykule zrobiłem przy jego pomocy.
Programik można pobrać stąd (na tejże stronie dokładny opis jak działa) a używa się go po prostu robiąc:
java -jar screenshot.jar -d zrzut.png
Dla wygody nieco go sobie opakowałem, zapisując ~/bin/adb_capture_screen
o treści::
#!/usr/bin/perl
use strict;
my $APP="$ENV{HOME}/Android/screenshot.jar";
unless( -f $APP ) {
die "Zainstaluj screenshot.jar z\nhttp://www.roman10.net/a-program-for-taking-screenshot-for-android-device-from-command-line/\njako $APP\n";
}
my $output = shift @ARGV;
unless($output && $output =~ /\.png$/ && ! @ARGV) {
die "Uruchamianie:\n $0 wynik.png\n";
}
if(-f $output) {
die "Plik $output istnieje\n";
}
system("java", "-jar", $APP, "-d", $output);
system("eog", $output);
Galaxy problemy z baterią
A na koniec wzmianka o problemie nierozwiązanym. Przez prawie pół roku używałem na Galaxy II starszej wersji Androida (bodajże 2.3) i byłem dosyć zadowolony, nieco ponad miesięc temu nieopatrznie zrobiłem upgrade do Androida 4.0.4.
Od tego czasu regularnie powtarza się sytuacja, w której telefon (nieraz świeżo naładowany) wyłącza się i zachowuje jak gdyby jego bateria się rozładowała. Naprawdę rozładowana nie jest, po wyjęciu i ponownym włożeniu baterii telefon włącza się poprawnie, pomaga również chwilowe podpięcie do ładowarki (tu można uzyskać efekt humorystyczny: podpinamy telefon do kabelka, próbujemy włączyć, telefon wyświetla szary symbol rozładowanej baterii … który po 2-3 sekundach zmienia na symbol naładowanej np. w ¾.
Znalazłem w sieci sporo informacji dotyczących błędów Samsunga z interpretowaniem rozmaitych mierzonych wartości (błędy typu oczekiwania 33 mA gdy normalną wartością jest 3mA), eksperymentowałem z poprawką ale jak na razie nie udało mi się problemu rozwiązać.