Objects in memory
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CF* објекти долазе из CoreFoundation, који пружа више од 50 класа објеката као што су CFString
, CFNumber
или CFAllocator
.
Све ове класе су инстанце класе CFRuntimeClass
, која када се позове враћа индекс у __CFRuntimeClassTable
. CFRuntimeClass је дефинисан у CFRuntime.h:
Većina podataka koje koristi ObjectiveC runtime će se menjati tokom izvršavanja, stoga koristi neke sekcije iz __DATA segmenta u memoriji:
__objc_msgrefs
(message_ref_t
): Reference poruka
__objc_ivar
(ivar
): Instancne promenljive
__objc_data
(...
): Promenljivi podaci
__objc_classrefs
(Class
): Reference klasa
__objc_superrefs
(Class
): Reference superklasa
__objc_protorefs
(protocol_t *
): Reference protokola
__objc_selrefs
(SEL
): Reference selektora
__objc_const
(...
): Klasa r/o
podaci i drugi (nadamo se) konstantni podaci
__objc_imageinfo
(version, flags
): Koristi se tokom učitavanja slike: Verzija trenutno 0
; Zastavice specificiraju unapred optimizovanu GC podršku, itd.
__objc_protolist
(protocol_t *
): Lista protokola
__objc_nlcatlist
(category_t
): Pokazivač na Non-Lazy Kategorije definisane u ovoj binarnoj datoteci
__objc_catlist
(category_t
): Pokazivač na Kategorije definisane u ovoj binarnoj datoteci
__objc_nlclslist
(classref_t
): Pokazivač na Non-Lazy Objective-C klase definisane u ovoj binarnoj datoteci
__objc_classlist
(classref_t
): Pokazivači na sve Objective-C klase definisane u ovoj binarnoj datoteci
Takođe koristi nekoliko sekcija u __TEXT
segmentu za čuvanje konstantnih vrednosti ako nije moguće pisati u ovu sekciju:
__objc_methname
(C-String): Imena metoda
__objc_classname
(C-String): Imena klasa
__objc_methtype
(C-String): Tipovi metoda
Objective-C koristi određeno mangle-ovanje za kodiranje selektora i tipova promenljivih jednostavnih i složenih tipova:
Primitivni tipovi koriste prvo slovo tipa i
za int
, c
za char
, l
za long
... i koristi veliko slovo u slučaju da je bez znakova (L
za unsigned Long
).
Drugi tipovi podataka čija su slova korišćena ili su posebna, koriste druga slova ili simbole kao što su q
za long long
, b
za bitfields
, B
za booleans
, #
za classes
, @
za id
, *
za char pointers
, ^
za generičke pointers
i ?
za undefined
.
Nizovi, strukture i unije koriste [
, {
i (
Selektor bi bio processString:withOptions:andError:
id
se kodira kao @
char *
se kodira kao *
Puno kodiranje tipa za metodu je:
Return Type (NSString *
): Kodiran kao @
sa dužinom 24
self
(instanca objekta): Kodiran kao @
, na offsetu 0
_cmd
(selektor): Kodiran kao :
, na offsetu 8
Prvi argument (char * input
): Kodiran kao *
, na offsetu 16
Drugi argument (NSDictionary * options
): Kodiran kao @
, na offsetu 20
Treći argument (NSError ** error
): Kodiran kao ^@
, na offsetu 24
Sa selektorom + kodiranjem možete rekonstruisati metodu.
Klase u Objective-C su strukture sa svojstvima, pokazivačima na metode... Moguće je pronaći strukturu objc_class
u izvornom kodu:
Ova klasa koristi neke bitove polja isa da bi ukazala na određene informacije o klasi.
Zatim, struktura ima pokazivač na strukturu class_ro_t
koja je smeštena na disku i sadrži atribute klase kao što su njeno ime, osnovne metode, svojstva i instance varijable.
Tokom izvršavanja, dodatna struktura class_rw_t
se koristi i sadrži pokazivače koji se mogu menjati, kao što su metode, protokoli, svojstva...
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)