7/2/13

Android Hacking Level +1

Η αρχή έγινε με το rooting, αργότερα συνέχισα με την εγκατάσταση custom roms και τώρα εμβάθυνα ακόμη περισσότερο στον κόσμο του android. 

Η ιστορία ξεκίνησε με την εφαρμογή του ξυπνητηριού του xperia (SemcClock.apk) η έκδοση του οποίου από το Xperia Ultimate HD rom που φοράει το android μου έχει μερικές επιπλέον δυνατότητες πέρα του να σε ξυπνάει το πρωί. Μία από αυτές είναι το παγκόσμιο ρολόι το οποίο μπορεί να δείξει την ώρα και τον καιρό σε διάφορες πόλεις του κόσμου. Ίσως για τον τυπικό χρήστη να μην αποτελεί καθημερινό εργαλείο, παρόλα αυτά λόγω της δυνατότητας εμφάνισης καιρού πέραν της ώρας είναι ένας γρήγορος τρόπος να δεις τι καιρό κάνει αυτήν την στιγμή σε διάφορες απομακρυσμένες πόλεις. Δυστυχώς όμως οι πόλεις που μπορεί κάποιος να προσθέσει στην λίστα είναι συγκεκριμένες και αν κάποια πόλη δεν υπάρχει στην λίστα δεν μπορεί να προστεθεί. Τις περισσότερες φορές πρόκειται μόνο για μια πόλη, την πρωτεύουσα, της κάθε χώρας. Για την Ελλάδα για παράδειγμα υπάρχει μόνο η Αθήνα.

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

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


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

ΟΝΟΜΑΠΟΛΗΣ#ΓΕΩΓΡΑΦΙΚΗ/ΠΕΡΙΟΧΗ#ΧΧΧΧΧΧΧ#ΥΥΥΥΥ

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

Σε έναν εύκολο κόσμο η επεξεργασία αυτής της λίστας ίσως αρκούσε για την προσθήκη επιπλέον πόλεων στο παγκόσμιο ρολόι. Δυστυχώς όμως, η προσθήκη περισσότερων πόλεων προκάλεσε κάποιο δυσλειτουργικό σφάλμα στην εφαρμογή. Μάλλον επειδή είναι προγραμματισμένη για να διαβάσει έναν συγκεκριμένο αριθμό καταχωρίσεων από την λίστα. Για αυτόν τον λόγο με σύντομες διαδικασίες αποφασίστηκε πως οι πόλεις Saint John του Καναδά και Yakutsk από τα βάθη της Σιβηρίας της Ρωσίας θα έδιναν την θέση τους για την Θεσσαλονίκη και το Μόναχο. Αυτό, με έφερε ένα βήμα πιο κοντά στο επιθυμητό αποτέλεσμα. Πλέον στην λίστα με τις πόλεις της εφαρμογής υπήρχαν δύο καταχωρήσεις που δεν εμφάνιζαν μεν όνομα αλλά είχαν τις ίδιες ωρολογιακές ζώνες με την Θεσσαλονίκη και το Μόναχο. Δεν αρκεί οπότε απλώς η επεξεργασία του αρχείου «cities». Υπάρχουν ακόμη περισσότερα δεδομένα μέσα αρχεία της εφαρμογής που χρειάζεται να επεξεργαστούν. 

Όπως ανέφερα παραπάνω ως έναν βαθμό είναι δυνατή η επεξεργασία των εφαρμογών με ένα πρόγραμμα συμπίεσης/αποσυμπίεσης. Για πλήρη επεξεργασία όμως χρειάζεται το apktool. Το οποίο μπορεί να αποσυνθέσει και αποκωδικοποιήσει τις εφαρμογές android επιτρέποντας πλήρη επεξεργασία του κώδικά τους. Αλλά και να ξανά συνθέσει πάλι τον κώδικα στην apk μορφή μαζί με τις οποιαδήποτε αλλαγές έχουν γίνει.


Με αυτό το εργαλείο κατάφερα να εντοπίσω όλες τις καταχωρίσεις για το Saint John και Yakutsk και να τις αντικαταστήσω με τις ανάλογες για Θεσσαλονίκη και Μόναχο. Με λίγα λόγια τελικά κατάφερα με αυτόν τον τρόπο να έχω το επιθυμητό αποτέλεσμα: