iOS UIPasteboard

Υποστήριξη HackTricks

Η κοινή χρήση δεδομένων εντός και μεταξύ εφαρμογών σε συσκευές iOS διευκολύνεται από τον μηχανισμό UIPasteboard, ο οποίος χωρίζεται σε δύο κύριες κατηγορίες:

  • Γενικό σύστημα pasteboard: Χρησιμοποιείται για την κοινή χρήση δεδομένων με οποιαδήποτε εφαρμογή και έχει σχεδιαστεί για να διατηρεί δεδομένα κατά τη διάρκεια επανεκκινήσεων της συσκευής και απεγκαταστάσεων εφαρμογών, μια δυνατότητα που είναι διαθέσιμη από το iOS 10.

  • Προσαρμοσμένα / Ονομασμένα pasteboards: Αυτά είναι ειδικά για την κοινή χρήση δεδομένων εντός μιας εφαρμογής ή με άλλη εφαρμογή που μοιράζεται το ίδιο team ID, και δεν έχουν σχεδιαστεί για να διατηρούνται πέρα από τη διάρκεια της διαδικασίας εφαρμογής που τα δημιουργεί, ακολουθώντας τις αλλαγές που εισήχθησαν στο iOS 10.

Σκέψεις ασφαλείας παίζουν σημαντικό ρόλο κατά τη χρήση των pasteboards. Για παράδειγμα:

  • Δεν υπάρχει μηχανισμός για τους χρήστες να διαχειρίζονται τις άδειες πρόσβασης των εφαρμογών στο pasteboard.

  • Για να μετριαστεί ο κίνδυνος μη εξουσιοδοτημένης παρακολούθησης του pasteboard στο παρασκήνιο, η πρόσβαση περιορίζεται όταν η εφαρμογή είναι στο προσκήνιο (από το iOS 9).

  • Η χρήση μόνιμων ονομασμένων pasteboards αποθαρρύνεται υπέρ των κοινών containers λόγω ανησυχιών για την ιδιωτικότητα.

  • Η δυνατότητα Universal Clipboard που εισήχθη με το iOS 10, επιτρέποντας την κοινή χρήση περιεχομένου μεταξύ συσκευών μέσω του γενικού pasteboard, μπορεί να διαχειριστεί από τους προγραμματιστές για να ορίσουν την ημερομηνία λήξης των δεδομένων και να απενεργοποιήσουν τη αυτόματη μεταφορά περιεχομένου.

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

Στατική Ανάλυση

Για στατική ανάλυση, αναζητήστε στον πηγαίο κώδικα ή το δυαδικό αρχείο:

  • generalPasteboard για να προσδιορίσετε τη χρήση του γενικού συστήματος pasteboard.

  • pasteboardWithName:create: και pasteboardWithUniqueName για τη δημιουργία προσαρμοσμένων pasteboards. Ελέγξτε αν είναι ενεργοποιημένη η διατήρηση, αν και αυτό είναι αποσυρμένο.

Δυναμική Ανάλυση

Η δυναμική ανάλυση περιλαμβάνει την παρακολούθηση ή την ιχνηλάτηση συγκεκριμένων μεθόδων:

  • Παρακολουθήστε το generalPasteboard για τη χρήση σε επίπεδο συστήματος.

  • Ιχνηλατήστε το pasteboardWithName:create: και pasteboardWithUniqueName για προσαρμοσμένες υλοποιήσεις.

  • Παρακολουθήστε τις κλήσεις της αποσυρμένης μεθόδου setPersistent: για να ελέγξετε τις ρυθμίσεις διατήρησης.

Κύριες λεπτομέρειες που πρέπει να παρακολουθούνται περιλαμβάνουν:

  • Ονόματα pasteboard και περιεχόμενα (για παράδειγμα, έλεγχος για συμβολοσειρές, URLs, εικόνες).

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

  • Επιλογές λήξης και τοπικής μόνο ελέγχοντας τη μέθοδο setItems:options:.

Ένα παράδειγμα χρήσης εργαλείου παρακολούθησης είναι ο παρακολούθηση pasteboard του objection, ο οποίος ελέγχει το generalPasteboard κάθε 5 δευτερόλεπτα για αλλαγές και εξάγει τα νέα δεδομένα.

Ακολουθεί ένα απλό παράδειγμα σεναρίου JavaScript, εμπνευσμένο από την προσέγγιση του objection, για να διαβάσει και να καταγράψει τις αλλαγές από το pasteboard κάθε 5 δευτερόλεπτα:

const UIPasteboard = ObjC.classes.UIPasteboard;
const Pasteboard = UIPasteboard.generalPasteboard();
var items = "";
var count = Pasteboard.changeCount().toString();

setInterval(function () {
const currentCount = Pasteboard.changeCount().toString();
const currentItems = Pasteboard.items().toString();

if (currentCount === count) { return; }

items = currentItems;
count = currentCount;

console.log('[* Pasteboard changed] count: ' + count +
' hasStrings: ' + Pasteboard.hasStrings().toString() +
' hasURLs: ' + Pasteboard.hasURLs().toString() +
' hasImages: ' + Pasteboard.hasImages().toString());
console.log(items);

}, 1000 * 5);

Αναφορές

Υποστήριξη HackTricks

Last updated