Blog

Reverzování Android aplikací: úvod

28. 3. 2017 author: Barebit team comments: 0

Android v posledních letech předstihl iOS a ovládnul mobilní telefony a tablety. Tím se se nevyhnutelně dostal do zájmu výzkumníků, crackerů a herních cheaterů. Pokud chcete teprve začít s reverzováním aplikací pro Android, následující text se snaží vysvětlit nezbytnou přípravu. Články, které by měly následovat, se už budou víc věnovat jednotlivým tématům a reverzování aplikací.

Motivace

Umění reverzování na Androidu nemusí být dobré jenom kvůli crackování aplikací a her. Existuje několik legálních důvodů, kdy se může hodit:

  • Během klasických penetračních testů může probíhat také analýza klientské aplikace. Na mobilech to je typicky bankovní aplikace pro Android a iOS. V rámci OWASP se tomu věnuje zvláštní projekt. Třeba k zabezpečení mobilního bankovnictví Raiffeisenbank napsal pár slov jeden z jeho autorů. Zajímavě také vypadá projekt Android InsecureBankv2 nebo Damn insecure and vulnerable App.
  • Analýza malware, kterého existuje pro Android obrovské množství. V Česku existuje několik firem, které se mobilním malwarem zabývají (kromě Avastu a ESETu).
  • V herním průmyslu analýza cracků a cheatů. Cheatování se sice často dá zachytit na serveru sledováním chování hráče, dává ale smysl snažit se o protiakci i na straně klienta ztížením úprav kódu a dat hry. Větší firmy v oboru, třeba česká Bohemia Interactive, mají na boj s cheatery vytvořené týmy. Zajímavou přednášku na tohle téma měl jejich lead producer Eugen Harton.

Získání souborů aplikace pro Android

I když je Android postavený na Linuxu, nepoužívá tradiční balíčkovací systém. Namísto toho jsou aplikace distribuovány ve formě souborů APK (inspirace soubory IPA z iOS je zřejmá), který používá tradiční ZIP formát. Každá aplikace má jedinečným identifikátor ve formě com.example.name.

Hlavním distribučním kanálem je obchod Google Play, z kterého ale nejde soubory APK získávat přímo. Místo toho stahování a instalaci provádí na pozadí Google Play services. Soubor APK jde potom získat přímo ze zařízení – po instalaci nedojde k jeho smazání. Nejrychleji se dá APK aplikace z Google Play získat stažením z webu apkpure.com, který s minimálním zpozděním nabízí ke stažení snad všechny neplacené aplikace.

Pro začátek si sežeňte APK aplikace com.barebit.cme.on_coffee, s kterou budeme pracovat v následujících kapitolách.

Vedle toho existuje spousta neoficiálních distributorů, pro bezplatné aplikace např. F-Droid. Ten vedle vlastního instalátoru nabízí ke stažení i APK každé aplikace přímo na webu.

Pro komerční aplikace platí, že pokud nejsou na Google Play, tak jako by nebyly. I když Google Play není tak přísný jako iTunes, aplikace musí splňovat spoustu pravidel, týkajících se obsahu, soukromí nebo zobrazování reklamy.

Jak na výběr zařízení

Pro vážnější práci s Androidem se vyplatí pořídit si fyzické zařízení. V následujících článcích si řekneme, proč není emulátor optimální volba.

Aktuální rozšíření různých verzí Androidu je vidět třeba na Wikipedii. V době psaní článku je nejnovější Nougat (verze 7), ale nejrozšířenější je Lollipop, to znamená verze 5. Je to i nejrozšířenější verze v českých obchodech, aspoň v oblasti běžných levných tabletů v ceně okolo 2.500 Kč, které pro začátek úplně postačí. Prakticky stačí ještě levnější Android 4 (KitKat), který vyšel o rok dřív. V nejhorším se dá pořídit i hodně starý mobil nebo tablet, ale neměl by na něm být Android starší než verze 2.3 Gingerbread. Interní paměť by měla mít volných minimálně 100 MB, aby tam šlo něco instalovat.

Nová verze Androidu vychází každý rok, takže počítejte s rychlým zastaráváním zařízení. U takto levných zařízení výrobce nenabízí vůbec žádnou aktualizaci systému. Ta probíhá až někde u mid-range zařízení, ale i tak je podpora pro aktualizace omezená. Teprve u nejdražších tabletů a telefonů, jako je Google Nexus a Pixel, můžete očekávat podporu trvající několik let.

Architektura

I když Android oficiálně podporuje architektury ARM, x86 a MIPS (vše jak 32bitové, tak 64bitové), naprostá většina zařízení na trhu běží na ARMv7 (pozor, neplést s ARM7). Teprve v posledních letech se rozšiřuje x86 (v prodejnách nepřesně uváděná jako “Intel”). Z toho důvodu se dodnes setkáte s aplikacemi, které spouštějí nativní kód, ale jenom pro architekturu ARM, přestože aplikace může obsahovat jak nativní ARM kód, tak x86. Bude to tématem následujících kapitol.

Co se týče 64bitových architektur ARM64 a x86-64, ty jsou na trhu jenom krátce v kategorii high-endů.

Zařízení běžící na x86 sice dokážou spouštět nativní ARM kód díky knihovně houdini, ale překlad nefunguje vždy na 100%. Z toho důvodu se dá doporučit, aby vaše první zařízení běželo na ARMv7.

Root

Pro reverzování na Androidu se hodí zařízení “rootnout”, to znamená odstranit omezení účtu, na kterém Android standardně běží. Podobně jako jailbreak na iOS není rootnutí Androidu oficiálně podporováno. Proces rootnutí se často liší podle výrobce.

Ještě před zakoupením konkrétního tabletu nebo telefonu je dobré zjistit, jestli jde vůbec rootnout. U některých z nich to může být zásadní problém. Samozřejmě čím rozšířenější určitý model je, tím víc se na něm komunita snaží pracovat. Jedním z dobrých zdrojů na toto téma je XDA-Developers forum, kam stačí zadat něco jako “root Acer B1 710”. V diskuzích je trochu chaos, ale pokud je rootnutí dostupné, návod tam někde je.

Programování pro Android

Pokud máte hlubší zájem o Android, naučte se základy programování aplikací. Typická aplikace pro Android je napsaná v Javě. Aplikační programování ale nebude téma následujících článků.

K dispozici je přímo od Google zadarmo Android Studio IDE, běžící na Javě (IntelliJ IDEA), prostředí připomíná Eclipse IDE. Vedle toho historicky existuje i plugin do Eclipse, který už Google nepodporuje.

Portabilní aplikace (Android a iOS) jde vytvářet v Xamarin Studio, na Windows přímo ve Visual Studio. Tady jde o programování v C#, aplikace běží na Androidu na Mono frameworku, který už dnes kontroluje Microsoft.

Co se týče her pro mobilní zařízení, hodně populární je Unity3D. Hry pro Android dřív běžely na Mono runtime, v současné době jde o proprietární backend IL2CPP, který kompiluje IL bytekód do C++ zdrojáků a odsud do nativního kódu (je to zvláštní, ale funguje to).