Toto bude netradičný článok. Osobne sa pohybujem v android vývoji už určitý čas a začal som sa zaujímať o to, ako funguje ochrana aplikácií na tejto platforme. Pár aplikácii som si pre zvedavosť crackol, ale nepoužívam ich a ani nedistribuujem ďalej. Vysvetľovať to, ako som postupoval na takejto aplikácií nie je dobré a ani férové voči vývojárovi, je to nelegálne. Preto som si vybral na to špecialne určenú aplikáciu CrackMe, ktorá bolá napísaná vývojárom ako challenge pre tých, čo sa radi vŕtajú v aplikáciách a zisťujú ako fungujú, teda ovládajú taje umenia reverzného umenia.
Na naše účely poslúži aplikácia od Deurus užívateľa, ktorý napísal viacej druhov crackme pre rôzne platformy, link Dereus. Užívateľ ako požaduje vo výzve vytvorenie generátora sériových čísel alebo patchovanie aplikácie. Prikladám odkaz na súbor, na ktorom vysvetlím postup, treba sa registrovať a stiahnúť: CrackMe04. Toto opisujem ako moje zmýšľanie pri riešení tohto crackme.
Ako nástroje som použil:
- notepad++ so svýraznovačom syntaxe (link na zvýraznovač syntax highlight)
- apktool, ktorý slúži na reverzne inžinierstvo súborov apk, link Apktool
- decompilér JEB, použil som demo verziu.
Ako prvé som nahral
aplikáciu do mobilu (pri malware radšej do virtuálneho stroja AVD). Pozrel som ako vyzerá,
zistil som, že má tri obrazovky (Activity). Samotné apk som prešiel cez apktool:
java -jar apktool d AndroidCrackme.apk -o CrackMe
Pozrel som si
verziu a VersionName aplikácie
(netradičné hodnoty). Pozrel som si certifikát:
keytool.exe -printcert -jarfile AndroidCrackme04.apk
Obr.1 Certifikát aplikácie |
Otvoril som manifest a
pozrel som štruktúru aplikácie. Jeden vstupný bod do aplikácie je súbor Splash
a
niekoľko povolení ako čítanie pamäťovej karty, stav WIFI, Bluetooth.
Obr.2 Manifest.xml aplikácie |
Pozrel som na štruktúru
adresárov a súborov. V zdrojových súboroch som v adresári Raw našiel zvukové
súbory. Pozrel som ešte layouty ako vyzerajú. Z názvov súborov je jasné, že je
použitá obfukácia kódu. Dal som si vypísať
reťazce vo všetkých smali súboroch:
findstr /i /n "const-string" *.smali
Z výpisu som nemohol nič
užitočné vyčítať. Otvoril som si teda súbor Splash.smali v notepad++. Keďže je to aktvita (Activity), tak vstupným
bodom do nej je metóda onCreate, ale hľadal som aj onResume a onStart (tie sa ale v
tomto súbore nenachádzajú).
V metóde onCreate vloží do premenných
b="classes.dex" (súbor
nachádzajúci
sa v AndroidCrackme04.apk, teda dalvik kód celej aplikácie) ,
c="cr4.dat", d="MD5" (pre použitie hashovania). Potom
zavolá metódu a()V, kde kontroluje to, či aplikácia bola upravená. Tam som
našiel túto podmienku, ktorú stačí iba zmeniť na opačnú (viď. zakomentovaný kód
a pod ním nekomentovaný kód).
Obr.3 Nájdena ochrana |
Ok, to je ochrana
aplikácie proti zmene v kóde(patchovaniu). Aktivita Splash nakoniec spustí nový Handle, ktorá bude aktivita CrackMe a seba ukončí. V CrackMe aktivite je znova vstupom, len
onCreate metóda. Pozrel som aj ostatné metódy, čo robia ako a(Landroid/content/Context;)Ljava/lang/String;
vráti VersionName
b(Landroid/content/Context;)I
vráti
Verziu aplikácie. Znova metóda d()V, kde je ochrana proti
patchovaniu aplikácie, na konci som upravil podmienku tak, aby prešla
opatchovaná aplikácia. Metóda a()Ljava/lang/String; číta CID karty, teda jej ID. Ostatne metódy
robili úpravy s údajmi, ktoré dostali ako napr. odstránenie znaku ":"
z MAC adresy a pod..
Zameral som sa teda na Metódu onCreate, kde je
nakoniec algoritmus na overovanie Mena, Serial kľúča. Neštudoval som ho do
detailov. V metóde ale vidím, že aplikácia získava MAC adresu wifi karty, adresu bluetooth karty, ale aj ID SD karty, ktoré spacuváva. Našiel som ale toto viď. obrázok obr.4, porovanie sériového čísla, tak som zmenil podmienku, čo bola kontrola zadaného sériového čísla.Obr.4 Druhá časť overenia |
Nakoniec som uložil
zmeny, zabalil aplikáciu znova pomocou apktool:
java -jar apktool.jar b Eset -o AndroidCrackme_TEST.apk
Ešte som podpísal
aplikáciu:
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1
-keystore [moj keystroke]
[AndroidCrackme_TEST.apk] alias_nam
Ohľadom nástroja JEB,
nemám licenciu a mohol som použiť len demo, takže niektoré metódy neboli
dekompilované, tak som kontroloval a porovnával smali kód s JEB aplikáciu. Ak toto používate, tak máte ľahšiu analýzu, čo je veľmi dobré, a teda je jednoduchšie
robiť analýzu v jave.
Vyjadrenie na záver,
aplikácia
obsahuje aj prehrávač hudby AndModPlug od Peculiar Games, do projektu sa
dostane v podobe knižnice. Autor tohto cracku
vytvoril viacej druhov cracku, ako pre desktopy, tak pre android.