piatok 25. decembra 2015

Android CrackeMe

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:
  1. notepad++  so svýraznovačom syntaxe (link na zvýraznovač syntax highlight)
  2. apktool, ktorý slúži na reverzne inžinierstvo súborov apk, link Apktool 
  3. 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.