Scrie un troian pentru Android
Când vorbim despre plugin-uri și aplicații modulare, care au în primul rând în minte Software-ul normal al utilizatorilor. Cu toate acestea, designul modular poate fi la fel de util în dezvoltarea rootkit-urilor și backdoors. Prin mijloace convenționale pentru a actualiza astfel de software este prea incriminatoare, și nu este întotdeauna posibil, dar în liniște încărcați modulul cu o nouă funcționalitate în rețea - l te rog. Iar dacă scoate funcționalitate cheie în modulele și a le elimina imediat după descărcarea, vă poate afecta grav o reverser viață.
În clasic Java are o clasă numită java.lang.Classloader. Sarcina lui - pentru a încărca codul de octet al clasei specificate (cu fișier extensia .class) la o mașină virtuală în timpul rulării. Apoi, puteți crea un obiect al acestei clase și de apel metodele sale folosind reflecție. Acesta este modul de a încărca dinamic cod, care poate fi utilizat pentru aplicații de scriere cu funcționalitate extinsă, sau, să-l puneți pur și simplu, plug-in suport.
În Android, există o mașină virtuală Java și nu este clasa ClassLoader, dar există un DexClassLoader analogic, efectuează exact aceeași funcție, dar în raport cu bytecode Dalvik (fișiere și .dex în loc de .class, respectiv). Și, spre deosebire de desktop Java, în cazul în care este mai ușor de a pune necesar jar-fișier în CLASSPATH și nu deranjez cu încărcare dinamică în Android, această abordare oferă într-adevăr o mulțime de avantaje, cel mai important este faptul că funcționalitatea aplicației poate fi extinsă și actualizată fără a utilizatorului și nimic fără a cere el. În orice moment, aplicația poate descărca un fișier cu o clasă de la server, descărcarea, și apoi ștergeți fișierul.
Orice ar fi fost, încărcare dinamică de clasă - un lucru foarte util, în scris, nu este destul de aplicații „alb“, astfel încât orice securitate specialist ar trebui să știe cum funcționează acest mecanism și modul în care este utilizat în troienii.
exemple simple
Totul să fie scris în continuare mai ușor de înțeles, da doar un exemplu de furcă clasa muncitoare:
În general, totul este simplu: codul încarcă borcan-arhiva / sdcard / AplicațiaMea / modul. borcan cu clasa noastră, o mulțime de ea clasa com.example.modules.simple. Modulul, creează un obiect și a alerga) metoda (apeluri. Să acorde o atenție la trei puncte:
Pentru a testa acest cod pe performanta, a crea un modul simplu:
Nu te grabi pentru a crea un nou proiect în Android Studio, puteți distribui codul în Notepad și compila-l într-un vas de fișier direct din linia de comandă:
Asigurați-vă că directoarele platforme / android-23 și de a construi-tools / 23.0.3 acolo, în cazul dumneavoastră, numele lor pot varia.
Dacă totul merge bine, veți obține module.jar fișierul de ieșire. Va trebui doar să adăugați codul de bootloader în cerere, a pus module.jar pe un card de memorie, a construi și rula aplicația.
reflexe JOS
Reflecția - un lucru bun, dar în acest caz, este doar o piedică. O metodă este nici un argument cu ea pentru că nu este dificil, cu toate acestea, dacă dorim aplicația noastră a fost dezvoltat module API cu o varietate de metode, luând câțiva parametri trebuie să vină cu ceva mai convenabil. De exemplu, utilizați o interfață de pre-definite, care va fi pus în aplicare de către fiecare modul.
Aplicarea acestei abordări la exemplul de mai sus, vom obține următoarele trei fișiere:
ModuleInterface.java fișier cu descrierea API:
2. Module.java fișier cu punerea în aplicare a modulelor noastre:
încărcător modulul 3.Novy (pus în aplicația dvs.):
Asta e tot. Acum putem lucra cu modulul ca un obiect comun. Mai mult decât atât, sistemul va sacrificarii module (clase) care nu sunt compatibile cu interfața, chiar și în momentul pornirii sistemului, deci nu va trebui să ne întrebăm dacă există o metodă pe care doriți să ne modul.
Atunci când modulul este MULT
De exemplu, modulul face parte din pachetul com.example dat mai devreme. modules.simple (a se vedea. pachet de directivă), deci trebuie să fie incluse în simple.jar-borcan arhiva (schimba -output = module.jar pe -output = simplu. borcan în comanda build). Când vine vorba de timp pentru a crea un nou modul (de exemplu, remote_shell), prima linie va specifica pachetul de com în codul său sursă. example.modules.remote_shell.Module; și zapakuesh cod octet compilat în remote_shell.jar-jar arhiva.
Numele Jar-fișier (fără extensie) este, de asemenea, utilizat ca o cheie în heshmape, prin urmare, cunoscând numele modulului, puteți rula întotdeauna metodele sale:
UNITĂȚI lua cu tine
În această etapă, avem deja o aplicație care se poate descărca un număr nelimitat de module în directorul specificat și cu comoditatea de a lucra cu ei. Rămâne să se ocupe de modul de a distribui aceste module. Cea mai evidentă opțiune - să le descărcați de pe server, chiar dacă noastre „cal troian“ pentru a face acest lucru o dată pe zi, iar după descărcarea modulului declanșează un încărcător modul de a le preîncărca în aplicare. Spune-ne cum să facă acest lucru, nu voi fi aici toate elementare, și această sarcină veți găsi la orice articol introductiv sau o carte despre dezvoltarea pentru Android.
O altă opțiune - pentru a include module cu pachetul de aplicare. În acest caz, Troian nostru va avea acces la modulele necesare imediat după primul termen care va proteja de probleme cu accesul la rețea. Când este afișată rețeaua, se poate adăuga la modulele de încărcare de pe server, dacă este necesar.
Pentru a activa modulele din APK, acestea trebuie să fie plasate în catalogul activelor în cadrul proiectului (în acest caz, activele / module), și apoi să pună în aplicare modulul extractor în directorul necesar. În codul, acesta va arata ceva de genul:
Este foarte simplu. Codul modulului din interiorul ambalajului și copiați-le unul câte unul în directorul / sdcard / AplicMea, din care, atunci acestea pot fi pentru a încărca cu ajutorul încărcătorului.