HAKATEMIA
32Loppu

Yhteenveto ja jatkopolku

Helppo10MIN

Yhteenveto ja jatkopolku

Olet käynyt läpi x86-assemblyn perusteet: konekielestä rekistereihin, hypyistä ja silmukoista funktioihin ja kutsupinoon, idiomien lukemisesta puskurin ylivuodon (buffer overflow) mekaniikkaan. Lopuksi siirryit selaimesta oikeaan ympäristöön: nasm, ld ja oikeat Linux-syscallit. Tämä on iso pala matalan tason ymmärrystä. Kerrataan, mitä reppuun jäi.

Kurssin keskeiset aiheet ja kolme jatkopolkua: Binäärit ja GDB, reverse engineering, exploit-kehitys.

Mitä opimme

  • Konekieli ja assembly: prosessori suorittaa numeroita; assembly on niiden ihmisystävällinen muoto, jonka assembleri kääntää konekieleksi.
  • Numerojärjestelmät, datatyypit, endianness, two's complement: sama bittikuvio voidaan tulkita monella tavalla; tulkinta on aina ohjelman vastuulla.
  • Rekisterit (register) ja MOV: 32-bittiset EAX-EDX ja osoitin- ja indeksirekisterit; 64-bittiset RAX-R15, ja miksi MOV EAX, X nollaa RAX:n ylemmän puoliskon.
  • Aritmetiikka: ADD, SUB, INC, DEC; EFLAGS-liput; MUL/IMUL ja DIV/IDIV käyttävät EDX:EAX-paria.
  • Bittioperaatiot ja siirrot: AND (maskaus), OR (asettaminen), XOR (kääntäminen, nollaus, XOR-cipher), SHL/SHR/SAR kahden potenssin kerto- tai jakolaskuna, ROL/ROR.
  • LEA: kompakti aritmetiikan ja osoitelaskennan oikotie, joka ei sotke lippuja.
  • Vertailu ja hypyt: CMP ja TEST päivittävät liput; ehdolliset hypyt (JE/JNE/JL/JG/...) rakentavat if/else-rakenteet; JMP on ehdoton.
  • Silmukat: nimiö ja ehdollinen hyppy taaksepäin; LOOP yhdistää DEC ECX + JNZ.
  • Muisti ja .data-osio: db/dw/dd, hakasulkeet, osoitteenmuodostus [kanta + indeksi*skaalaus + poikkeama], taulukoiden läpikäynti.
  • Funktiot ja kutsupino: CALL/RET, ENTER/LEAVE, pinokehys (stack frame), parametrit [EBP + 8]:sta eteenpäin, paluuarvo EAX/RAX:ssä, cdecl-siivous.
  • Kutsutavat: cdecl, stdcall ja fastcall 32-bittisesti; System V AMD64 64-bittisesti (parametrit RDI, RSI, RDX, RCX, R8, R9); kutsujan tallentamat vs. kutsutun tallentamat rekisterit, pinon kohdistus ja red zone.
  • Merkkijono- ja muistioperaatiot: MOVS/STOS/LODS/SCAS ja REP-prefiksi; miltä memcpy, memset ja strlen näyttävät kääntäjän tulosteessa.
  • NASM käytännössä: section .text ja section .data, globaalit symbolit, output-formaatit (-f elf32, -f elf64, -f bin), linkitys ld:llä, C-bridge extern/global-paria käyttäen, makrot, ja capstone-harjoitus jossa kirjoitit strlen-toteutuksen alusta loppuun.
  • x86-64-siirtyminen ja ABI (Application Binary Interface): REX-prefix, nollalaajennus 32-bittisistä operaatioista, RIP-suhteellinen osoitus, PIE (Position Independent Executable), syscall-ABI (syscall vs. int 0x80) ja pinon 16-tavun kohdistus CALL-hetkellä.
  • Stack-pohjainen puskurin ylivuoto: miten paluuosoite ylikirjoittuu pinossa ja miksi modernit suojaukset (stack canary, ASLR, NX) tekevät klassisesta hyökkäyksestä vaikean. Käsiteltiin osiossa "Lue ja ymmärrä konekoodia".
1 / 5
Hakatemia Pro

Hakkeroinnin oppiminen alkaa tästä

Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.