Δημοσιεύουμε εφαρμογές στο Google Play και κερδίζουμε εκατομμύρια. Πώς να χρησιμοποιήσετε τη λειτουργία υπογραφής εφαρμογής στο Google Play Πώς να υπογράψετε ένα apk με πρωτότυπη υπογραφή

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

Προϋπόθεση για αυτό είναι η παρουσία ενός υπογεγραμμένου αρχείου APK. Θα μάθετε πώς να υπογράφετε ένα αρχείο apk σε αυτό το άρθρο.

Μια μικρή υποχώρηση

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

Αρχικά στοιχεία

Υποθέτω ότι έχετε ρυθμίσει τα πάντα για να αναπτύξετε υβρίδια. εφαρμογές για κινητάχρησιμοποιώντας το Apache Cordova. Πρέπει να εγκατασταθεί:
  • Απάτσι Κόρντοβα
  • Java Development Kit
  • Εργαλεία Android SDK
Το όνομα του έργου και της εφαρμογής είναι lcf. Αντικαταστήστε με το όνομα του έργου σας όπου χρειάζεται.

Πηγαίνω

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

$ cordova plugin rm cordova-plugin-console
Για να δημιουργήσετε μια έκδοση έκδοσης για Android, χρησιμοποιήστε την εντολή χτίζωμε σημαία --ελευθέρωση:

$ cordova build -- απελευθέρωση android
Αυτή η εντολή θα δημιουργήσει ανυπόγραφοΑρχείο APK στον κατάλογο:

Πλατφόρμες/android/build/outputs/apk
Για παράδειγμα, πλατφόρμες/android/build/outputs/apk/ android-release-unsigned.apk. Τότε θα χρειαστεί να υπογράψουμε αυτό το αρχείο και να εκτελέσουμε το βοηθητικό πρόγραμμα zipalignγια βελτιστοποίηση και προετοιμασία του αρχείου για Google Play.

Για να υπογράψετε ένα αρχείο χρειάζεστε πιστοποιητικό. Ας το δημιουργήσουμε χρησιμοποιώντας το βοηθητικό πρόγραμμα κλειδίπου περιλαμβάνεται στο JDK:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000
Σπουδαίος

Η τιμή της παραμέτρου -alias πρέπει να απομνημονευθεί ή καλύτερα να γραφτεί. Στο παραπάνω παράδειγμα, ισούται με lcf (με βάση τα πρώτα γράμματα του ονόματος της εφαρμογής Loyal Client Free). Δεν θα δώσω λεπτομέρειες εδώ, αν σας ενδιαφέρει γράψτε στα σχόλια, θα σας πω αναλυτικότερα.

Το ψευδώνυμο χρησιμοποιείται κάθε φορά που υπογράφετε * εφαρμογές. Για να είναι πιο εύκολη η απομνημόνευση, χρησιμοποιήστε το όνομα του αρχείου αποθήκευσης κλειδιών ως ψευδώνυμο, για παράδειγμα:


-keystore hello-world.keystore -alias hello-world -keystore weather-app.keystore -alias weather-app -keystore todo.keystore -alias todo
* Πρέπει να υπογράφετε την εφαρμογή κάθε φορά που κυκλοφορούν ενημερώσεις

Χρησιμότητα κλειδίκάνει μια σειρά ερωτήσεων. Θα είναι συνολικά 8. Για να έχετε μια ιδέα για τις ερωτήσεις και τις κατά προσέγγιση απαντήσεις εκ των προτέρων, δίνονται όλες παρακάτω, κάτω από το spoiler.

Ερωτήσεις βασικού εργαλείου και δείγματα απαντήσεων σε αυτά

1. Εισαγάγετε τον κωδικό πρόσβασης αποθήκευσης κλειδιών:
Εδώ πρέπει να εισαγάγετε έναν κωδικό πρόσβασης για το αρχείο (τουλάχιστον 6 χαρακτήρες). Ο εισαγόμενος κωδικός πρόσβασης πρέπει να γράφεται σε ασφαλές μέρος· είναι απαραίτητος κάθε φορά που υπογράφετε την αίτηση.

2. Εισαγάγετε ξανά νέο κωδικό πρόσβασης:
Εισαγάγετε ξανά τον κωδικό πρόσβασής σας.

3. Ποιο είναι το ονοματεπώνυμό σας;
: Ιβάν Πετρόφ
Το όνομα και το επίθετό σας. Αξία σε αγκύλεςείναι η προεπιλεγμένη τιμή.

4. Πώς λέγεται η οργανωτική σας μονάδα;
: ΤΟ
Το όνομα του τμήματος της εταιρείας σας. Μπορείτε να το αφήσετε κενό, το υποδεικνύω.

5. Ποιο είναι το όνομα του οργανισμού σας;
: 2 προγραμματιστές
Το όνομα του οργανισμού σας. Σημειώστε εάν είναι διαθέσιμο.

6. Ποιο είναι το όνομα της πόλης ή της περιοχής σας;
: Μόσχα
Ονομα Πόλης

7. Ποιο είναι το όνομα της Πολιτείας ή της Επαρχίας σας;
: Μ.Ο.
Όνομα περιοχής

8. Ποιος είναι ο κωδικός χώρας δύο γραμμάτων για αυτήν τη μονάδα;
: RU
Κωδικός της χώρας. Δηλώνω RU.

: y

Επιβεβαιώστε εάν όλα είναι σωστά ή πατήστε Enter για να εισέλθετε ξανά.


Στο τέλος, θα εμφανιστεί ένα μήνυμα που υποδεικνύει την επιτυχή δημιουργία κλειδιού. Θα σας ζητηθεί να ορίσετε έναν κωδικό πρόσβασης για το ιδιωτικό κλειδί (αν θέλετε να το αφήσετε ίδιο με το πιστοποιητικό, πατήστε Enter):

Δημιουργία ζεύγους κλειδιών RSA 2 048 bit και αυτουπογεγραμμένο πιστοποιητικό (SHA256withRSA) με ισχύ 10 000 ημερών για: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key κωδικό πρόσβασης για (ΕΠΙΣΤΡΟΦΗ εάν είναι ίδιος με τον κωδικό πρόσβασης του keystore):
Θα δημιουργηθεί ένα αρχείο στον τρέχοντα κατάλογο lcf.keystore.

Σπουδαίος

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

Απομένουν δύο βήματα και θα έχετε έτοιμο για διανομή ένα αρχείο APK. Ας προχωρήσουμε στην υπογραφή.

Για να υπογράψετε το αρχείο apk, χρησιμοποιήστε το βοηθητικό πρόγραμμα jarsigner, το οποίο περιλαμβάνεται επίσης στο JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Το όνομα του πιστοποιητικού υποδεικνύεται μετά την παράμετρο - κλειδοθήκη, ψευδώνυμο - μετά το όνομα του αρχείου.

Τέλος, για να βελτιστοποιήσουμε το αρχείο apk, θα χρησιμοποιήσουμε το βοηθητικό πρόγραμμα zipalign:

$ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk
Η τελευταία παράμετρος είναι το όνομα του αρχείου που θα ανεβάσετε στο Google Play.

Σπουδαίος.

Χρησιμότητα zipalignείναι μέρος των εργαλείων Android SDK και μπορείτε να το βρείτε εδώ:

/path/to/Android/sdk/build-tools/VERSION/zipalign

συμπέρασμα

Τώρα έχετε ένα αρχείο apk έτοιμο για διανομή που μπορεί να μεταφορτωθεί στο Google Play. Συμπληρώστε την περιγραφή, καθορίστε τη βαθμολογία της αίτησής σας και μην διστάσετε να κάνετε κλικ στο «Δημοσίευση».

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

Σπουδαίος!Για να χρησιμοποιήσετε τα πακέτα εφαρμογών Android (η προτεινόμενη μορφή δημοσίευσης εφαρμογών), πρέπει να εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογών Google Play πριν ανεβάσετε το App Bundle στο Play Console.

Η εγγραφή είναι ανοιχτή σε κατόχους λογαριασμών και χρήστες με παγκόσμια δικαιώματα διαχείρισης παραγωγής που έχουν αποδεχτεί τους Όρους Παροχής Υπηρεσιών. Μπορείτε να εγγράψετε μόνο μία εφαρμογή κάθε φορά στο Πρόγραμμα υπογραφής εφαρμογών Google Play.

Αρχές εργασίας

Όταν χρησιμοποιείτε τη λειτουργία υπογραφής εφαρμογής του Google Play, τα κλειδιά σας αποθηκεύονται στην ίδια υποδομή που αποθηκεύει τα κλειδιά της Google και προστατεύονται από μια αποκλειστική υπηρεσία διαχείρισης κλειδιών. Λεπτομερείς πληροφορίεςΗ τεχνική υποδομή της Google βρίσκεται στην τεκμηρίωση του Google Cloud Security.

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

Σημείωση.Η χρήση της δυνατότητας υπογραφής εφαρμογής του Google Play είναι προαιρετική. Μπορείτε να κατεβάσετε APK και να διαχειριστείτε τα δικά σας κλειδιά χωρίς να χρησιμοποιήσετε πακέτα εφαρμογών. Ωστόσο, εάν χάσετε την πρόσβαση στο χώρο αποθήκευσης κλειδιών ή παραβιαστεί, δεν θα μπορείτε να ενημερώσετε την εφαρμογή σας και θα πρέπει να την δημοσιεύσετε ξανά με διαφορετικό όνομα πακέτου.

Περιγραφές κλειδιών, αντικειμένων και εργαλείων
Συνθήκες Περιγραφή
Κλειδί υπογραφής εφαρμογής

Το κλειδί που χρησιμοποιείται από το Google Play για την υπογραφή αρχείων APK που παραδίδονται στη συσκευή του χρήστη. Όταν εγγράφεστε στο πρόγραμμα υπογραφής εφαρμογής Google Play, μπορείτε να ανεβάσετε ένα υπάρχον κλειδί υπογραφής ή να αφήσετε την Google να δημιουργήσει ένα νέο.

Κλειδί λήψης

Υπάρχουν δύο τρόποι για να δημιουργήσετε ένα κλειδί λήψης:

  • Χρησιμοποιήστε το κλειδί υπογραφής της εφαρμογής.Εάν επιτρέψατε στην Google να δημιουργήσει ένα κλειδί υπογραφής εφαρμογής κατά την εγγραφή σας στο πρόγραμμα, το κλειδί μεταφόρτωσης θα είναι το κλειδί που χρησιμοποιήσατε για να υπογράψετε την πρώτη έκδοση της εφαρμογής.
  • Χρησιμοποιήστε ένα ξεχωριστό κλειδί λήψης.Εάν παρείχατε το δικό σας κλειδί υπογραφής εφαρμογής κατά την εγγραφή σας στο πρόγραμμα, μπορείτε να δημιουργήσετε ένα νέο κλειδί λήψης για ασφάλεια. Εάν δεν θέλετε να το κάνετε αυτό, χρησιμοποιήστε το κλειδί υπογραφής εφαρμογής ως κλειδί λήψης για να υπογράψετε νέες εκδόσεις.
Πιστοποιητικό (.der ή .pem)

Ένα πιστοποιητικό που περιέχει το δημόσιο κλειδί και Επιπλέον πληροφορίεςσχετικά με τον ιδιοκτήτη του. Ένα πιστοποιητικό δημόσιου κλειδιού επιτρέπει σε οποιονδήποτε να γνωρίζει ποιος υπέγραψε ένα αρχείο App Bundle ή APK. Αυτό το πιστοποιητικό μπορεί να είναι κοινόχρηστο επειδή δεν περιλαμβάνει ιδιωτικό κλειδί.

Για να καταχωρίσετε τα κλειδιά σας σε παρόχους API, μπορείτε να κάνετε λήψη του δημόσιου πιστοποιητικού για το κλειδί υπογραφής της εφαρμογής σας από Υπογραφή αιτήσεωνστο Play Console. Ένα πιστοποιητικό δημόσιου κλειδιού μπορεί να κοινοποιηθεί σε όλους, επειδή δεν περιλαμβάνει ιδιωτικό κλειδί.

Ψηφιακό αποτύπωμα του πιστοποιητικού

Ένα σύντομο και μοναδικό αναγνωριστικό για το πιστοποιητικό. Το δακτυλικό αποτύπωμα μαζί με το όνομα του πακέτου ζητείται συχνά από τους παρόχους API για να παρέχουν πρόσβαση στις υπηρεσίες τους.

Ψηφιακά δακτυλικά αποτυπώματα MD5, SHA-1 και SHA-256 λήψης και πιστοποιητικών υπογραφής εφαρμογής βρίσκονται στη σελίδα Υπογραφή αιτήσεωνστο Play Console. Μπορεί επίσης να λάβετε διαφορετικό τύπο ψηφιακού αποτυπώματος. Για να το κάνετε αυτό, κάντε λήψη του αρχικού πιστοποιητικού σε μορφή DER στην ίδια σελίδα.

Java Key Store (.jks ή .keystore) Αποθήκευση πιστοποιητικών ασφαλείας και ιδιωτικών κλειδιών.
Εργαλείο PEPK

Ένα εργαλείο για την εξαγωγή ιδιωτικών κλειδιών από τον χώρο αποθήκευσης Java και την κρυπτογράφηση τους για μεταφορά στο Google Play.

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

Διαδικασία υπογραφής αίτησης

Μπορείτε να κατεβάσετε αρχεία APK υπογεγραμμένα με το αρχικό κλειδί υπογραφής εφαρμογής πριν ή μετά την υπογραφή της εφαρμογής στο Google Play.

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

  1. Υπογράφετε το App Bundle ή το APK και το ανεβάζετε στο Play Console.
  2. Η διαδικασία υπογραφής εφαρμογής εξαρτάται από αυτό που κατεβάζετε.
    • Πακέτο εφαρμογής.Η Google βελτιστοποιεί τα αρχεία APK από το App Bundle και στη συνέχεια τα υπογράφει με ένα κλειδί υπογραφής εφαρμογής.
    • Αρχείο APK υπογεγραμμένο με το κλειδί λήψης.Η Google επαληθεύει την υπογραφή σας, την αφαιρεί και υπογράφει ξανά τα αρχεία APK με το κλειδί υπογραφής εφαρμογής.
    • Ένα αρχείο APK υπογεγραμμένο με το κλειδί υπογραφής εφαρμογής.Η Google επαληθεύει την υπογραφή.
  3. Η Google παραδίδει υπογεγραμμένα αρχεία APK στους χρήστες.

Πώς να εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογής Google Play

Νέες εφαρμογές

Βήμα 1: Δημιουργήστε ένα κλειδί λήψης

  1. Δημιουργήστε ένα κλειδί λήψης ακολουθώντας τις οδηγίες.
  2. Υπογράψτε το νέο αρχείο APK με το κλειδί λήψης.

Βήμα 2: Προετοιμάστε την απελευθέρωση

  1. , ακολουθώντας τις οδηγίες.
  2. Αφού επιλέξετε τον τύπο της έκδοσής σας, διαμορφώστε τις ρυθμίσεις υπογραφής της εφαρμογής σας στην ενότητα "Επιτρέψτε στην Google να προστατεύει και να διαχειρίζεται το κλειδί υπογραφής της εφαρμογής σας".
  3. Εάν κάνετε κλικ Να συνεχίσει, το κλειδί που δημιουργείται θα γίνει το κλειδί λήψης που θα χρησιμοποιηθεί για την υπογραφή μελλοντικών εκδόσεων. Μπορείτε επίσης να επιλέξετε το εξής Προηγμένες ρυθμίσεις:
    • Χρησιμοποιήστε ένα κλειδί για διαφορετικές εφαρμογές στον λογαριασμό προγραμματιστή (επιλογή 2).
    • Ανεβάστε το κλειδί υπογραφής μιας υπάρχουσας εφαρμογής (επιλογή 2, 3 και 4), επιλέγοντας την καταλληλότερη μέθοδο εξαγωγής και λήψης. Μόλις κάνετε λήψη του κλειδιού υπογραφής μιας εφαρμογής και του δημόσιου πιστοποιητικού της, μπορείτε είτε να το χρησιμοποιήσετε ως κλειδί υπογραφής της εφαρμογής.

Σημείωση.Για να συνεχίσετε, πρέπει να αποδεχτείτε τους Όρους Χρήσης και να εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογής.

Βήμα 3: Καταχωρίστε το κλειδί υπογραφής της εφαρμογής σας στους παρόχους API

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

  1. Συνδεθείτε στο Play Console.
  2. Επιλέξτε μια εφαρμογή.
  3. Από το μενού στα αριστερά, επιλέξτε Διαχείριση απελευθέρωσης > Υπογραφές αίτησης.
    • Εάν ο πάροχος API απαιτεί διαφορετικό τύπο δακτυλικού αποτυπώματος, μπορείτε να κάνετε λήψη του αρχικού πιστοποιητικού σε μορφή DER και να το μετατρέψετε όπως απαιτείται χρησιμοποιώντας τα κατάλληλα εργαλεία.
Δημοσιευμένες Εφαρμογές

Βήμα 1: Εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογής Google Play

  1. Συνδεθείτε στο Play Console.
  2. Επιλέξτε μια εφαρμογή.
  3. Από το μενού στα αριστερά, επιλέξτε Διαχείριση απελευθέρωσης > Υπογραφές αίτησης.
  4. Εάν είναι απαραίτητο, διαβάστε τους Όρους Χρήσης και κάντε κλικ Αποδέχομαι.

Βήμα 2: Υποβάλετε το αρχικό κλειδί στην Google και δημιουργήστε ένα κλειδί λήψης

  1. Βρείτε το αρχικό κλειδί υπογραφής της εφαρμογής.
  2. Συνδεθείτε στο Play Console.
  3. Επιλέξτε μια εφαρμογή.
  4. Από το μενού στα αριστερά, επιλέξτε Διαχείριση απελευθέρωσης > Υπογραφές αίτησης.
  5. Ανεβάστε ένα υπάρχον κλειδί υπογραφής εφαρμογής με τη μέθοδο που ταιριάζει καλύτερα στη διαδικασία έκδοσης.
  1. και ανεβάστε το πιστοποιητικό στο Google Play.
    • Μπορείτε επίσης να χρησιμοποιήσετε το κλειδί υπογραφής της εφαρμογής ως κλειδί λήψης.
  2. Αντιγράψτε τα ψηφιακά δακτυλικά αποτυπώματα (MD5, SHA-1 και SHA-256) του πιστοποιητικού υπογραφής της αίτησης.
    • Για τη διεξαγωγή δοκιμών, μπορεί να χρειαστεί να καταχωρίσετε ένα πιστοποιητικό κλειδιού εκκίνησης στον πάροχο API χρησιμοποιώντας το δακτυλικό αποτύπωμα του πιστοποιητικού και το κλειδί υπογραφής εφαρμογής.

Βήμα 4: Υπογράψτε την επόμενη ενημέρωση της εφαρμογής σας με το κλειδί λήψης

Οι ενημερώσεις εφαρμογών που κυκλοφόρησαν πρέπει να υπογράφονται με κλειδί λήψης.

Πώς να δημιουργήσετε ένα κλειδί λήψης και να ενημερώσετε τα καταστήματα κλειδιών

Μπορείτε να δημιουργήσετε ένα κλειδί λήψης όταν εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογής Google Play ή μπορείτε να δημιουργήσετε ένα αργότερα στο Διαχείριση απελευθέρωσης > Υπογραφές αίτησης.

Για να δημιουργήσετε ένα κλειδί λήψης, ακολουθήστε τα εξής βήματα:

  1. Ακολουθήστε τις οδηγίες στον ιστότοπο Android Developers. Φυλάξτε το κλειδί σε ασφαλές μέρος.
  2. Εξαγάγετε το πιστοποιητικό για το κλειδί εκκίνησης σε μορφή PEM. Αντικαταστήστε τα ακόλουθα ορίσματα με μια υπογράμμιση:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Όταν σας ζητηθεί κατά τη διαδικασία έκδοσης, πραγματοποιήστε λήψη του πιστοποιητικού για να το καταχωρήσετε στην Google.

Εάν χρησιμοποιείτε κλειδί λήψης:

  • Το κλειδί λήψης καταχωρείται στην Google μόνο για τον έλεγχο ταυτότητας της ταυτότητας του δημιουργού της εφαρμογής.
  • Η υπογραφή σας αφαιρείται από όλες τις λήψεις APK προτού φτάσουν στους χρήστες.
Περιορισμοί
  • Το κλειδί λήψης πρέπει να χρησιμοποιεί κρυπτογράφηση RSA και να έχει μέγεθος τουλάχιστον 2048 bit.
  • Τα κλειδιά DSA και EC δεν υποστηρίζονται, ούτε τα κλειδιά RSA είναι μικρότερα από 2048 bit.
Ενημέρωση κλειδιών

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

  • τοπικό σύστημα?
  • προστατεύονται τοπικός διακομιστής(με διαφορετικές λίστες ελέγχου πρόσβασης).
  • σύστημα cloud (με διάφορες λίστες ελέγχου πρόσβασης).
  • ειδικές υπηρεσίες διαχείρισης κλειδιών·
  • Αποθετήρια Git.

Πώς να ενημερώσετε το κλειδί υπογραφής για νέες εγκαταστάσεις εφαρμογών

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

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

Θα πρέπει να ζητήσετε ενημέρωση κλειδιού υπογραφής εφαρμογής στις ακόλουθες περιπτώσεις:

  • Χρειάζεστε ένα πιο ασφαλές κλειδί.
  • Το κλειδί υπογραφής εφαρμογής έχει παραβιαστεί.

Σημείωση.Το αίτημα για ενημέρωση του κλειδιού υπογραφής εφαρμογής στο Play Console δεν σχετίζεται με την αντικατάσταση κλειδιών στο Android P και σε νεότερες εκδόσεις. Αυτή η αντικατάσταση κλειδιού δεν υποστηρίζεται προς το παρόν από το Google Play.

Σημαντικές σημειώσεις σχετικά με την ενημέρωση των κλειδιών

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

  • Εάν χρησιμοποιείτε το ίδιο κλειδί υπογραφής για πολλές εφαρμογές για να χρησιμοποιούν τον ίδιο κωδικό ή δεδομένα, θα πρέπει να ενημερώσετε τις εφαρμογές για να αναγνωρίζουν τόσο το νέο όσο και το παλαιού τύπου κλειδί.
  • Εάν η εφαρμογή σας χρησιμοποιεί API, φροντίστε να καταχωρίσετε τα πιστοποιητικά για τα νέα και παλαιού τύπου κλειδιά υπογραφής εφαρμογής στον πάροχο API πριν αναβαθμίσετε την εφαρμογή σας. Τα πιστοποιητικά είναι διαθέσιμα στη σελίδα Υπογραφή αιτήσεων Play Console.
  • Εάν πολλοί χρήστες της εφαρμογής σας εγκαταστήσουν ενημερώσεις μέσω δικτύων κοινής χρήσης αρχείων, θα μπορούν να εγκαταστήσουν μόνο ενημερώσεις υπογεγραμμένες με το ίδιο κλειδί με την εφαρμογή που είναι εγκατεστημένη στις συσκευές τους. Εάν οι εφαρμογές δεν μπορούν να ενημερωθούν επειδή εγκατεστημένη έκδοσηυπογεγραμμένο με διαφορετικό κλειδί, οι χρήστες μπορούν να το απεγκαταστήσουν και να το επανεγκαταστήσουν για να λαμβάνουν ενημερώσεις.
Ζητήστε μια βασική ενημέρωση για νέες εγκαταστάσεις. Για να το κάνετε αυτό, ακολουθήστε τα εξής βήματα:
  1. Συνδεθείτε στο Play Console.
  2. Επιλέξτε μια εφαρμογή.
  3. Από το μενού στα αριστερά, επιλέξτε Διαχείριση απελευθέρωσης > Υπογραφές αίτησης.
  4. Στην κάρτα "Ενημέρωση κλειδιού υπογραφής για νέες εγκαταστάσεις εφαρμογών", επιλέξτε Ζητήστε μια ενημέρωση κλειδιού.
  5. Επιλέξτε τι να κάνετε με τη συσκευή.
    • Ανάλογα με την επιλογή που θα επιλέξετε, ίσως χρειαστεί να επικοινωνήσετε με την υποστήριξη για να ολοκληρώσετε το αίτημά σας.
  6. Επιτρέψτε στο Google Play να δημιουργήσει ένα νέο κλειδί υπογραφής εφαρμογής (συνιστάται) ή να κατεβάσει ένα.
    • Μετά την ενημέρωση του κλειδιού υπογραφής της εφαρμογής σας, εάν το κλειδί ταιριάζει με το κλειδί λήψης, μπορείτε να συνεχίσετε να χρησιμοποιείτε το παλιό κλειδί υπογραφής εφαρμογής ως κλειδί λήψης ή να δημιουργήσετε ένα νέο.
  • Εάν έχετε δημοσιεύσει επίσης την εφαρμογή σας εκτός του Google Play ή σκοπεύετε να το κάνετε, μπορείτε να δημιουργήσετε ένα κοινόχρηστο κλειδί υπογραφής εφαρμογής και να το ανεβάσετε στην Google όταν εγγραφείτε στο Πρόγραμμα υπογραφής εφαρμογής Google Play.
  • Για την προστασία του λογαριασμού σας, ενεργοποιήστε την επαλήθευση σε δύο βήματαγια όλους τους λογαριασμούς που έχουν πρόσβαση στο Play Console.
  • Αφού δημοσιευτεί το App Bundle στη δοκιμή ή έκδοση εργασίαςΜπορείτε να ανοίξετε το πρόγραμμα περιήγησης App Bundle και να κάνετε λήψη ενός αρχείου ZIP που περιέχει όλα τα αρχεία APK για μια συγκεκριμένη συσκευή. Αυτά τα αρχεία APK είναι ήδη υπογεγραμμένα με το κλειδί υπογραφής εφαρμογής. Μπορείτε να τα εγκαταστήσετε στη συσκευή σας από ένα αρχείο ZIP χρησιμοποιώντας το βοηθητικό πρόγραμμα γραμμή εντολών bundletool.
  • Για μεγαλύτερη ασφάλεια, δημιουργήστε ένα νέο κλειδί λήψης που είναι διαφορετικό από το κλειδί υπογραφής της εφαρμογής.
  • Εάν θέλετε να δοκιμάσετε ένα APK υπογεγραμμένο με κλειδί μεταφόρτωσης, καταχωρίστε το κλειδί σε μια υπηρεσία ή API που χρησιμοποιεί την υπογραφή της εφαρμογής για έλεγχο ταυτότητας (όπως API Χάρτες Googleή Facebook Developer Pack).
  • Εάν χρησιμοποιείτε το Google API, μπορείτε να καταχωρήσετε το πιστοποιητικό μεταφόρτωσης στο Google Cloud Console.

Τι να κάνετε εάν το κλειδί χαθεί ή χακαριστεί

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

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

Σπουδαίος!Η επαναφορά του κλειδιού λήψης δεν επηρεάζει το κλειδί υπογραφής εφαρμογής, το οποίο χρησιμοποιεί το Google Play για να υπογράψει αρχεία APK πριν τα στείλει στους χρήστες.

Ήταν χρήσιμες αυτές οι πληροφορίες;

Πώς μπορεί να βελτιωθεί αυτό το άρθρο;

Μερικές φορές ορισμένες εφαρμογές στο 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 ή αποσυμπίεση κονσόλας στο 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## και στη συνέχεια εύρεση της γραμμής Device ID. Κατά τη συμπλήρωση, χρειάζεται μόνο να εισαγάγετε το αναγνωριστικό χωρίς το πρόθεμα 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 παρέχει στον χρήστη μια διαισθητική GUI, με το οποίο μπορείτε να εκτελέσετε εργασίες αποσυσκευασίας, αποσυναρμολόγησης και αποσυμπίλησης με λίγα κλικ. Αυτό το εργαλείο είναι 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. Ωστόσο, έχοντας βασικές γνώσεις, είναι μόνο θέμα χρόνου να τα καταλάβουμε όλα.

Προβολές ανάρτησης: 5.618

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

Εάν χρησιμοποιείτε σύστημα κατασκευής Gradleγια να δημιουργήσετε τις εφαρμογές σας, μπορείτε επίσης να διαμορφώσετε πολλές επιλογές για τη δημιουργία υπογραφών για τις εφαρμογές σας.

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

Πριν ξεκινήσετε την υπογραφή της αίτησής σας, πρέπει να δημιουργήσετε μια νέα ιδιότητα στο αρχείο gradle.properties. Ας τον φωνάξουμε Keys.repoκαι, ως τιμή, καθορίστε τη διαδρομή προς το φάκελο όπου θα βρίσκεται στη συνέχεια η αποθήκευση κλειδιών και το αρχείο με ιδιότητες (για παράδειγμα, C:/Users/UserName/.υπογραφή).

Keys.repo=C:/Users/UserName/.signing

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

RELEASE_STORE_FILE=/YourProjectName/KeyStoreName.jks RELEASE_STORE_PASS=****** RELEASE_ALIAS=KeyAlias‎RELEASE_KEY_PASS=******

Πώς να δημιουργήσετε ένα θησαυροφυλάκιο κλειδιών;

Εάν δεν έχετε κατάστημα κλειδιών, μπορείτε εύκολα να δημιουργήσετε ένα με χρησιμοποιώντας AndroidΣτούντιο. Για να το κάνετε αυτό, επιλέξτε το στοιχείο μενού Χτίζω -> Δημιουργία υπογεγραμμένου APK.

Στο παράθυρο που εμφανίζεται, πρέπει να κάνετε κλικ Δημιουργία νέου...Ως αποτέλεσμα, θα ανοίξει ένα παράθυρο στο οποίο μπορείτε να καθορίσετε πού θα βρίσκεται η αποθήκευση κλειδιών (για αυτό το μάθημα, είναι καλύτερα να επιλέξετε αμέσως τη διαδρομή που καθορίσατε YourProjectName.propertiesστην ιδιοκτησία RELEASE_STORE_FILE), καθώς και βασικές πληροφορίες.

Στη συνέχεια, πρέπει να δημιουργήσετε έναν φάκελο YourProjectNameκαι μετακινήστε το εκεί απαιτούμενο αρχείοκαταστήματα κλειδιών.

Τώρα μπορείτε να προχωρήσετε απευθείας στη διαδικασία υπογραφής. Για να το κάνετε αυτό, πρέπει να ανοίξετε το αρχείο στο έργο σας χτίζω.gradle(βρίσκεται στο φάκελο της εφαρμογής). Μέσα σε αυτό στο μπλοκ androidπρέπει να προσθέσετε τον παρακάτω κώδικα.

SigningConfigs ( εντοπισμός σφαλμάτων ( /* χωρίς αλλαγές εδώ */ ) έκδοση ( if (project.hasProperty("Keys.repo")) ( def projectPropsFile = file(project.property("Keys.repo") + "/YourProjectName.properties " ) if (projectPropsFile.exists()) ( Properties props = new Properties() props.load(new FileInputStream(projectPropsFile)) storeFile file(file(project.property("Keys.repo") + props["RELEASE_STORE_FILE"] ) ) storePassword props["RELEASE_STORE_PASS"] keyAlias' props["RELEASE_ALIAS"] keypassword props["RELEASE_KEY_PASS"] ) ) other ( println "=================== = ====================================" println " - Διαμορφώστε το περιβάλλον έκδοσης-μεταγλώττισης - π.χ. ~/. υπογραφή καταλόγου" println "========================================== =============================" ) ) )

Ποια είναι τα διαφορετικά συστήματα για την απόκτηση υπογραφής;

Υπάρχουν δύο σχήματα για την απόκτηση υπογραφής APK: v1 JARΚαι v2 Πλήρες APK.

Στην πρώτη περίπτωση υπογράφεται ΔΟΧΕΙΟ-αρχείο, που είναι παραδοσιακό τρόπουπογραφή. Η υπογραφή v1 δεν προστατεύει ορισμένα μέρη του APK, όπως τα μεταδεδομένα ZIP. Ο επαληθευτής APK πρέπει να χειρίζεται πολλές αναξιόπιστες (δεν έχουν ακόμη επαληθευτεί) δομές δεδομένων και στη συνέχεια να απορρίπτει δεδομένα που δεν είναι υπογεγραμμένα, αφήνοντας μεγάλη επιφάνεια επίθεσης. Επιπλέον, ο επαληθευτής APK πρέπει να αποσυμπιέσει όλες τις συμπιεσμένες καταχωρήσεις, κάτι που σπαταλά πολύ χρόνο και μνήμη. Για την επίλυση αυτών των προβλημάτων, έχει αναπτυχθεί το δεύτερο σχήμα v2 Full APK.

Το Scheme v2 παρουσιάστηκε στο Android 7.0 Nougat (API 25)και λειτουργεί ξεκινώντας από την έκδοση Android Studio 2.2Και Προσθήκη Android Gradle 2.2. Αυτό το σχήμα παρέχει ταχύτερη εγκατάσταση εφαρμογής και καλή προστασία από μη εξουσιοδοτημένες αλλαγές στο APK. Το περιεχόμενο APK κατακερματίζεται και υπογράφεται και, στη συνέχεια, προκύπτει Μπλοκ υπογραφής APKεισάγεται στο APK.

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

Η νέα μορφή είναι συμβατή προς τα πίσω, επομένως τα APK που έχουν υπογραφεί με το νέο σχήμα μπορούν να εγκατασταθούν σε παλαιότερες συσκευές (οι οποίες απλώς θα αγνοήσουν τη νέα υπογραφή), εφόσον αυτά τα APK είναι επίσης υπογεγραμμένα με το σχήμα v1.

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

V1SigningEnabled false

V2SigningEnabled false

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

Μόλις προστεθεί ο κώδικας, συμπεριλάβετε αυτόν τον κωδικό σε ένα μπλοκ buildTypesμέσα ελευθέρωση. Για παράδειγμα:

BuildTypes (έκδοση ( minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" signingConfig signingConfigs.release ) )

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


Μπλουζα