<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Je, ungependa kuona **kampuni yako ikionekana katika HackTricks**? Au ungependa kupata ufikiaji wa **toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **nifuatilie** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwenye** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Programu iliyotangulia ina **vichwa vya programu 9**, kisha, **ramani ya sehemu** inaonyesha katika kichwa cha programu (kutoka 00 hadi 08) **kila sehemu ilipo**.
Vichwa hivi hutumiwa kuonyesha **jinsi ya kusoma faili ya binary kwenye kumbukumbu.**\
Kila kichwa cha **LOAD** kinaonyesha eneo la **kumbukumbu** (ukubwa, ruhusa, na usawazishaji) na inaonyesha herufi za ELF **binary zinazohitaji kuwekwa hapo**.
Kwa mfano, cha pili kina ukubwa wa 0x1190, kinapaswa kuwa kwenye 0x1fc48 na ruhusa za kusoma na kuandika na kitajazwa na 0x528 kutoka kwenye offset 0xfc48 (hakijai kujaza nafasi yote iliyohifadhiwa). Kumbukumbu hii italeta sehemu `.init_array .fini_array .dynamic .got .data .bss`.
Inafafanua eneo la meza za kufungua vifurushi vya safu ya mizunguko ya stack, inayotumiwa na wachunguzi na kazi za kushughulikia-utendaji wa kipekee wa C++.
Inaonyesha usanidi wa RELRO (Relocation Read-Only) wa faili ya binary. Ulinzi huu utaweka alama sehemu fulani za kumbukumbu kama kusoma tu (kama vile `GOT` au meza za `init` na `fini`) baada ya programu kusomwa na kabla haijaanza kukimbia.
Tafadhali kumbuka kuwa RELRO inaweza kuwa ya sehemu au kamili, toleo la sehemu halilindi sehemu ya **`.plt.got`**, ambayo hutumiwa kwa **kufunga kuchelewa** na inahitaji nafasi hii ya kumbukumbu kuwa na **ruhusa za kuandika** ili kuandika anwani za maktaba wakati wa kutafuta mahali pa kwanza.
* **Jedwali la herufi**: Ina zawadi zote zinazohitajika na faili ya ELF (lakini sio zile zinazotumiwa na programu). Kwa mfano, ina majina ya sehemu kama vile `.text` au `.data`. Na ikiwa `.text` iko kwenye kisanduku cha herufi kwenye kisanduku, itatumia nambari **45** kwenye uga wa **jina**.
* Ili kupata wapi kisanduku cha herufi kinapatikana, ELF ina kipanya kwa kisanduku cha herufi.
* **Jedwali la alama**: Ina habari kuhusu alama kama vile jina (kipanya kwenye kisanduku cha herufi), anwani, ukubwa na metadata zaidi kuhusu alama.
* **`.data`**: Visanduku vya kimataifa na thamani iliyowekwa katika programu.
* **`.bss`**: Visanduku vya kimataifa visivyo na thamani (au kuanzishwa kuwa sifuri). Visanduku hapa vinainishwa moja kwa moja kuwa sifuri hivyo kuzuia sifuri zisizo na maana kuongezwa kwenye faili ya binary.
* **`.rodata`**: Visanduku vya kimataifa vya kudumu (sehemu isiyoweza kusomwa).
* **`.tdata`** na **`.tbss`**: Kama .data na .bss wakati wa kutumia visanduku vya eneo la mada (`__thread_local` katika C++ au `__thread` katika C).
* **Vipengele vya kufunga** (dhaifu, ndani au kubwa): Alama ya ndani inaweza kupatikana tu na programu yenyewe wakati alama kubwa zinashirikiwa nje ya programu. Kitu dhaifu ni kwa mfano kazi ambayo inaweza kubadilishwa na nyingine.
* **Aina**: NOTYPE (aina haikufafanuliwa), OBJECT (data ya kawaida ya ulimwengu), FUNC (kazi), SECTION (sehemu), FILE (faili ya msimbo wa chanzo kwa wachunguzi), TLS (variable ya ndani ya wateja), GNU\_IFUNC (kazi isiyo ya moja kwa moja kwa ajili ya uhamishaji)
Directory ya NEEDED inaonyesha kuwa programu **inahitaji kupakia maktaba iliyotajwa** ili iendelee. Directory ya NEEDED inakamilika mara tu maktaba ya pamoja **inapokuwa tayari kwa matumizi na inafanya kazi vizuri**.
Loader pia lazima uhamishe tegemezi baada ya kuyapakia. Uhamishaji huu unaonyeshwa katika jedwali la uhamishaji kwa muundo wa REL au RELA na idadi ya uhamishaji inatolewa katika sehemu za kudumu RELSZ au RELASZ.
Ikiwa **programu imepakia mahali tofauti** na anwani iliyopendelewa (kawaida 0x400000) kwa sababu anwani hiyo tayari inatumika au kwa sababu ya **ASLR** au sababu nyingine yoyote, uhamisho wa stati **unasahihisha viashiria** ambavyo vilikuwa na thamani inayotarajia binary ipakuliwe katika anwani iliyopendelewa.
Uhamisho pia unaweza kurejelea ishara ya nje (kama kazi kutoka kwa tegemezi). Kama vile kazi ya malloc kutoka libC. Kisha, wakati mzigo wa libC katika anwani inayochunguza wapi kazi ya malloc imepakuliwa, itaandika anwani hii kwenye jedwali la GOT (Global Offset Table) (inayoonyeshwa katika jedwali la uhamisho) ambapo anwani ya malloc inapaswa kutajwa.
Kwa hivyo, wakati programu inaita malloc, kimsingi inaita eneo husika la `malloc` katika PLT (`malloc@plt`). Mara ya kwanza inaitwa, inatatua anwani ya `malloc` na kuihifadhi ili wakati ujao `malloc` inaitwa, anwani hiyo itatumika badala ya msimbo wa PLT.
Baada ya programu kupakiwa, ni wakati wake wa kukimbia. Walakini, msimbo wa kwanza unaoruka **siyo daima `main`**. Hii ni kwa sababu, kwa mfano, katika C++ ikiwa **kivinjari cha kawaida ni kitu cha darasa**, kivinjari hiki lazima kiwe **kimezinduliwa kabla** ya kukimbia kwa `main`, kama vile:
Tafadhali kumbuka kuwa hizi ni variables za kawaida zilizopo katika `.data` au `.bss` lakini katika orodha `__CTOR_LIST__` na `__DTOR_LIST__` vitu vya kuanzisha na kuharibu vimehifadhiwa ili kufuatilia vitu hivyo.
Kutoka kwa mtazamo wa compiler, ili kutekeleza hatua hizi kabla na baada ya kazi ya kazi ya `main`, ni muhimu kuunda kazi ya `init` na kazi ya `fini` ambazo zitarejelewa katika sehemu ya kazi ya kazi ya ELF kama **`INIT`** na **`FIN`**. na zinawekwa katika sehemu za `init` na `fini` za ELF.
Chaguo lingine, kama ilivyotajwa, ni kurejelea orodha za **`__CTOR_LIST__`** na **`__DTOR_LIST__`** katika vitu vya **`INIT_ARRAY`** na **`FINI_ARRAY`** katika sehemu ya kuingizwa kwa harakati na urefu wa hizi unatajwa na **`INIT_ARRAYSZ`** na **`FINI_ARRAYSZ`**. Kila kuingizwa ni ishara ya kazi ambayo itaitwa bila hoja.
Wakati huu unapotumiwa, sehemu za **`.tdata`** na **`.tbss`** hutumiwa katika ELF. Ambazo ni kama `.data` (zimeanzishwa) na `.bss` (hazijaanzishwa) lakini kwa TLS.
Kila pembejeo itakuwa na kuingizwa katika kichwa cha TLS kinachotaja ukubwa na kizingiti cha TLS, ambacho ni kizingiti kitakachotumiwa katika eneo la data la kipekee la mfuatano.
`__TLS_MODULE_BASE` ni ishara inayotumiwa kurejelea anwani ya msingi ya uhifadhi wa kipekee wa mfuatano na inaelekeza kwenye eneo kumbukumbu ambalo lina data zote za kipekee za mfuatano wa kikoa.
<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Je, unafanya kazi katika **kampuni ya usalama wa mtandao**? Je, ungependa kuona **kampuni yako ikionekana katika HackTricks**? Au ungependa kupata upatikanaji wa **toleo jipya zaidi la PEASS au kupakua HackTricks kwa PDF**? Angalia [**MPANGO WA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**The PEASS Family**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa kipekee wa [**NFTs**](https://opensea.io/collection/the-peass-family)
* Pata [**swag rasmi ya PEASS & HackTricks**](https://peass.creator-spring.com)
* **Jiunge na** [**💬**](https://emojipedia.org/speech-balloon/) [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au **kikundi cha telegram**](https://t.me/peass) au **nifuate** kwenye **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa** [**repo ya hacktricks**](https://github.com/carlospolop/hacktricks) **na** [**repo ya hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).