Objects in memory
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CF* αντικείμενα προέρχονται από το CoreFoundation, το οποίο παρέχει περισσότερες από 50 κλάσεις αντικειμένων όπως CFString
, CFNumber
ή CFAllocator
.
Όλες αυτές οι κλάσεις είναι στιγμιότυπα της κλάσης CFRuntimeClass
, η οποία όταν καλείται επιστρέφει έναν δείκτη στον __CFRuntimeClassTable
. Η CFRuntimeClass ορίζεται στο CFRuntime.h:
Most of the data used by ObjectiveC runtime will change during the execution, therefore it uses some sections from the __DATA segment in memory:
__objc_msgrefs
(message_ref_t
): Αναφορές μηνυμάτων
__objc_ivar
(ivar
): Μεταβλητές στιγμής
__objc_data
(...
): Μεταβλητά δεδομένα
__objc_classrefs
(Class
): Αναφορές κλάσεων
__objc_superrefs
(Class
): Αναφορές υπερκλάσεων
__objc_protorefs
(protocol_t *
): Αναφορές πρωτοκόλλων
__objc_selrefs
(SEL
): Αναφορές επιλεγέων
__objc_const
(...
): Δεδομένα κλάσης r/o
και άλλα (ελπίζουμε) σταθερά δεδομένα
__objc_imageinfo
(version, flags
): Χρησιμοποιείται κατά τη φόρτωση εικόνας: Έκδοση αυτή τη στιγμή 0
; Οι σημαίες καθορίζουν υποστήριξη προ-βελτιστοποιημένου GC, κ.λπ.
__objc_protolist
(protocol_t *
): Λίστα πρωτοκόλλων
__objc_nlcatlist
(category_t
): Δείκτης σε Μη-Τεμπέλικες Κατηγορίες που ορίζονται σε αυτό το δυαδικό
__objc_catlist
(category_t
): Δείκτης σε Κατηγορίες που ορίζονται σε αυτό το δυαδικό
__objc_nlclslist
(classref_t
): Δείκτης σε Μη-Τεμπέλικες κλάσεις Objective-C που ορίζονται σε αυτό το δυαδικό
__objc_classlist
(classref_t
): Δείκτες σε όλες τις κλάσεις Objective-C που ορίζονται σε αυτό το δυαδικό
It also uses a few sections in the __TEXT
segment to store constan values of it's not possible to write in this section:
__objc_methname
(C-String): Ονόματα μεθόδων
__objc_classname
(C-String): Ονόματα κλάσεων
__objc_methtype
(C-String): Τύποι μεθόδων
Objective-c uses some mangling to encode selector and variable types of simple and complex types:
Primitive types use their first letter of the type i
for int
, c
for char
, l
for long
... and uses the capital letter in case it's unsigned (L
for unsigned Long
).
Other data types whose letters are used or are special, use other letters or symbols like q
for long long
, b
for bitfields
, B
for booleans
, #
for classes
, @
for id
, *
for char pointers
, ^
for generic pointers
and ?
for undefined
.
Arrays, structures and unions use [
, {
and (
Ο επιλεγέας θα είναι processString:withOptions:andError:
id
κωδικοποιείται ως @
char *
κωδικοποιείται ως *
Η πλήρης κωδικοποίηση τύπου για τη μέθοδο είναι:
Τύπος Επιστροφής (NSString *
): Κωδικοποιημένος ως @
με μήκος 24
self
(αντικείμενο στιγμιότυπο): Κωδικοποιημένος ως @
, στη θέση 0
_cmd
(επιλογέας): Κωδικοποιημένος ως :
, στη θέση 8
Πρώτη παράμετρος (char * input
): Κωδικοποιημένος ως *
, στη θέση 16
Δεύτερη παράμετρος (NSDictionary * options
): Κωδικοποιημένος ως @
, στη θέση 20
Τρίτη παράμετρος (NSError ** error
): Κωδικοποιημένος ως ^@
, στη θέση 24
Με τον επιλογέα + την κωδικοποίηση μπορείτε να ανακατασκευάσετε τη μέθοδο.
Οι κλάσεις στην Objective-C είναι μια δομή με ιδιότητες, δείκτες μεθόδων... Είναι δυνατόν να βρείτε τη δομή objc_class
στον πηγαίο κώδικα:
Αυτή η κλάση χρησιμοποιεί κάποια bits του πεδίου isa για να υποδείξει κάποιες πληροφορίες σχετικά με την κλάση.
Στη συνέχεια, η δομή έχει έναν δείκτη στη δομή class_ro_t
που αποθηκεύεται στο δίσκο και περιέχει χαρακτηριστικά της κλάσης όπως το όνομά της, τις βασικές μεθόδους, τις ιδιότητες και τις μεταβλητές στιγμής.
Κατά τη διάρκεια της εκτέλεσης, χρησιμοποιείται μια επιπλέον δομή class_rw_t
που περιέχει δείκτες οι οποίοι μπορούν να τροποποιηθούν, όπως μέθοδοι, πρωτόκολλα, ιδιότητες...