Android hacking pro začátečníky – ADB

Vítám čtenáře, kteří sledují náš seriál o “hackování” Androidu. Minule jsme se prokousali přípravou prostředí, abychom se dnes mohli připojit k Androidu pomocí nástroje Android Debug Bridge (ADB).

Praktické příklady zkoušíme na emulovaném zařízení, a tak si na začátku ještě odskočíme k nástroji pro emulaci virtuálních zařízení.

Emulátor

Nemáme-li fyzické Android zařízení, použijeme emulátor a spustíme virtuální zařízení, které jsme si připravili pomocí správce – AVD.

Spuštění emulátoru bez parametrů způsobí chybu. Emulátor si stěžuje, že jsme nespecifikovali jméno zařízení, které se určuje řetězcem, který začíná zavináčem.

Spustíme emulátor s parametrem -help, sice dostaneme nápovědu na tři obrazovky, ale první volba by nás měla upoutat.

Volba “-list-avds” zobrazí dostupná Android zařízení, vytvořená přes správce AVD. Použijeme tento přepínač a zjistíme jména připravených zařízení k emulaci.

Nastartujeme druhou konfiguraci s názvem “Nexus_6P_API_27”.

Po startu emulátoru nám vyskočí grafické okno s emulovaným zařízením. Nyní se můžeme vrhnout na ADB.

ADB – Android Debug Bridge

Android Debug Bridge, zkráceně ADB, je nástroj, který slouží k základní komunikaci mezi vaší stanicí a Android zařízením. ADB zvládá připojení k více zařízením, bez ohledu na to, zda jsou fyzická nebo emulovaná. Připojení lze realizovat pomocí transportního protokolu TCP nebo přes USB kabel, v tomto případě musí mít Android zařízení zapnutou volbu “USB debugging”, kterou najdeme v systémovém nastavení v sekci  “Developer options”.

Architektura

Architektura ADB se skládá z:

  • adb serveru, který běží na pozadí na vašem hostitelském počítači.
  • adb démonu (adbd) – proces běžící na pozadí Android zařízení, který vykonává příkazy adb klienta.
  • adb klient – klientský proces přes který uživatel spouští příkazy. Zadané příkazy se pomocí adb serveru přepošlou na cílové mobilní zařízení, kde jej  adb démon vykoná.

Toužíte-li znát další detaily o této architektuře, doporučuji prezentaci ADB (Android Debug Bridge): How it works od japonského vývojáře T.Kobayashiho.

Síťové spojení

V následujících příkladech se na linuxu připojujeme k emulovanému zařízení, kde jde vše jak po másle. Pokud byste se chtěli připojit k fyzickému Android zařízení, máte dvě možnosti jak na to:

Nyní přejdeme k samotným ukázkám s ADB klientem.

ADB klient

ADB klienta (adb) spustíme stejnojmenným příkazem. Bez dalších parametrů dostaneme stručnou nápovědu. V dokumentaci k adb klientu, se můžeme dočíst o významu jednotlivých voleb. Pojďme si projít základní použití tohoto nástroje.

adb devices – seznam připojených zařízení

Seznam připojených zařízení, se kterými můžeme komunikovat, zjistíme přes parameter “devices”. Touto volbou ověříme, že ADB server vidí naše zařízení.

abd shell – vzdálený terminál

Připojit se vzdáleně k Androidu přes terminál pomocí volby “shell”, je jedna z nejzajímavějších funkcí.

Po připojení jsme zadali linuxový příkaz id, který vypíše identitu uživatele, pod kterou vystupujeme na Android zařízení. Pro hacking experimenty potřebujeme práva uživatele root. Ukončíme relaci příkazem exit nebo pomocí zkratky CTRL+D a zkusíme restartovat adb démona s vyšším oprávněním.

adb root – vyšší oprávnění pro adb démona

Pokud jsme při vytváření virtuálního zařízení použili neprodukční build, je naše virtuální zařízení přístupné pod root účtem a můžeme restartovat adb démona s vyšším oprávněním pomocí volby “root”.

Poznámka: Rootování fyzických zařízení je mimo možnosti tohoto článku. Pokud vás tato oblast zajímá, prozkoumejte fórum https://www.xda-developers.com/root. Rootování telefonu vede ke ztrátě záruky a vyřazuje jeho bezpečnostní mechanizmy.

adb install – instalace nové aplikace

Pro demonstraci si stáhneme úmyslně zranitelnou aplikaci DIVA, její APK balíček se nachází uvnitř tar archivu, který musíte nejdříve rozbalit. Pomocí příkazu adb install aplikaci nainstalujeme.

Rychlím průzkumem Android zařízení zjistíme, že mezi dostupnými aplikacemi najdeme ikonu zeleného Androida s popiskem DIVA. Spustíme aplikaci, abychom se přesvědčili, že instalace proběhla úspěšně. Jak ukazuje následující obrázek, podařilo se.

adb shell pm list packages – seznam instalovaných aplikací

Následujícím příkazem si vypíšeme seznam existujících aplikací (balíčků).

Ze syntaxe vidíme, že se nejdříve zavolá adb shell a uvnitř příkazové příkaz “pm list packages”. Zkusíme si spustit adb shell a tento příkaz zavolat znovu.

Tímto jsme se dozvěděli, že jakýkoliv platný příkaz v systému Android můžeme volat přímo z konzole adb klienta ve formě “adb shell příkaz”.

Poznámka: “pm” je zkratka pro správce balíčků v Androidu, který eviduje všechny instalované aplikace, umožňuje instalaci APK balíčků včetně deinstalace.

Protože je seznam existujících aplikací dlouhý, pomůžeme si v linuxu zřetězením příkazů pomocí roury a vyfiltrujeme si balíčky, které obsahují slovo “diva”.

Správce balíčků s filtrem “grep diva” nám našel jeden záznam a to aplikaci “jakhar.aseem.diva” (DIVA).

adb uninstall – deinstalace aplikace

Chceme-li z Androidu odinstalovat aplikaci a známe název jejího balíčku, zavoláme příkaz adb a specifikujeme název balíčku.

adb logcat – přístup k systémovému logu

Android je postaven na jádře linuxu, a tak i zde najdeme analogii systémového logu. Pomocí příkazu logcat, který si můžeme zavolat i v shellu Androida, spustíme interaktivní výpis systémových zpráv. Kromě zpráv operačního systému zde najdeme i zprávy aplikací, které zde úmyslně logují.

adb push – přenos souboru do zařízení

Následující funkcionalita nám pomůže nakopírovat do Android zařízení libovolný soubor. Kromě souboru, který chceme kopírovat, musíme specifikovat existující cílovou cestu.

Můžeme si přes adb shell ověřit, že se soubor skutečně uložil.

adb pull – přenos souboru ze zařízení

Pokud bychom naopak chtěli zkopírovat soubor z Android zařízení do našeho počítače, použijeme volbu “pull” a cestu k souboru na zařízení, odkud se má zkopírovat.

ADB klient podporuje řadu dalších zajímavých příkazů, ale pro základní použití a správný rozjezd je tato zásoba postačující. Tímto se blížíme k samotnému závěru příspěvku.

Závěr

V tomto díle jsme se zaměřili na ADB nástroj, který umožňuje komunikaic s Android zařízeními několika způsoby. Seznámili jsme se s jeho architekturou a základním použití pomocí příkazů adb klienta.

Pokud se vám článek líbil a máte komentáře a další tipy k tomuto tématu, zapojte se do diskuze k článku, kterou najdete na našem facebooku.