Assembly-kieli ja x86-tason järjestelmäohjelmointi · Oppitunti

Johdanto disassembly-työkaluihin

Oppikaa käyttämään objdumpin tai IDA Pron kaltaisia disassembler-työkaluja konekoodin muuntamiseen takaisin ihmisluettavaan Assembly-muotoon.

Oppitunti 2/411 vaihetta

Johdanto disassembly-työkaluihin on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Konekoodin avaaminen

Tervetuloa! Tässä oppitunnissa opitte disassemblysta eli konekoodin purkamisesta. Pohjimmiltaan tietokone suorittaa ohjelmia raakamuotoisena konekoodina – binäärilukujen sarjoina.

Disassembly tarkoittaa prosessia, jossa nämä matalan tason käskyt muunnetaan takaisin ihmiselle luettavaan assemblykielen muotoon. Se muistuttaa ohjelman rakennuspiirustusten selvittämistä takaperin, jotta näemme, miten ohjelma on rakennettu.

Sisällön näkemisen voima

Miksi disassembly on niin tärkeää? Sen avulla voimme ymmärtää ohjelmistoja, kun alkuperäistä lähdekoodia ei ole saatavilla. Tämä on tärkeää useilla aloilla:

  • Haittaohjelmien analysointi: Haittaohjelmien toiminnan selvittäminen.
  • Haavoittuvuustutkimus: Käännettyjen ohjelmien tietoturva-aukkojen etsiminen.
  • Ohjelmistojen auditointi: Ohjelman toiminnan varmistaminen erityisesti kriittisissä sovelluksissa.
  • Yhteentoimivuus: Eri ohjelmistokomponenttien matalan tason vuorovaikutuksen ymmärtäminen.

Tavuista käskyiksi

Selvennetään ero:

  • Konekoodi: Raakamuotoisia binäärikäskyjä, jotka esitetään usein heksadesimaalisina tavuina, esimerkiksi 0x8B 0xC0. Suoritin suorittaa nämä suoraan.
  • Assemblykieli: Tarjoaa konekoodille symboliset esitykset eli mnemoniikat, esimerkiksi MOV EAX, EBX. Se on ihmisen luettava muoto suorittimen natiivikäskyistä.

Disassemblerit suorittavat tämän muunnoksen ja tekevät ohjelman taustalla olevasta logiikasta ymmärrettävää.

Ensimmäinen disassemblerinne: objdump

Yksi Linux-järjestelmien yleisimmistä komentorivityökaluista disassemblyyn on objdump. Se kuuluu GNU Binutils -pakettiin.

objdump on monipuolinen työkalu, jolla voi näyttää tietoja objektitiedostoista ja suoritettavista tiedostoista. Disassemblyssä käytämme ensisijaisesti -d-valitsinta, joka purkaa kaikki osiot, joiden odotetaan sisältävän suoritettavia käskyjä.

C:stä assemblyksi objdumpilla

Käytetään yksinkertaista C-ohjelmaa käsitteen havainnollistamiseen. Kun käännätte tämän C-koodin, se muuttuu konekoodiksi. Tämän jälkeen voitte käyttää käännettyyn suoritettavaan tiedostoon objdump-työkalua ja nähdä sen assemblyn!

Linux-järjestelmässä käännätte ohjelman komennolla gcc -o hello hello.c. Sen jälkeen voitte käyttää komentoa objdump -d hello nähdäksenne kääntäjän tuottamat assembly-käskyt.

#include <stdio.h>

int main() {
    printf("Hello, CoddyKit!\n");
    return 0;
}

Disassembly-tulosteen lukeminen

Kun suoritatte komennon objdump -d suoritettavalle tiedostolle, tuloste näkyy useaan sarakkeeseen jäsenneltynä:

  • Ensimmäinen sarake sisältää käskyn muistiosoitteen.
  • Seuraava sarake näyttää raakatason konekooditavut heksadesimaalimuodossa.
  • Lopuksi näette assembly-käskyn (mnemoniikan) ja sen operandit.

Esimerkiksi 40052d: b8 01 00 00 00 mov $0x1,%eax tarkoittaa: "osoitteessa 0x40052d tavut b8 01 00 00 00 edustavat käskyä mov $0x1,%eax", mikä tarkoittaa "siirrä arvo 1 EAX-rekisteriin".

Edistynyt disassembly IDA Prolla

Vaikka objdump sopii erinomaisesti nopeaan komentorivillä tehtävään tarkasteluun, IDA Pro (Interactive Disassembler Professional) tarjoaa vakavaan käänteismallinnukseen huomattavasti monipuolisemman ja vuorovaikutteisemman kokemuksen.

IDA Pro tarjoaa graafisen käyttöliittymän, tunnistaa funktiot automaattisesti, muodostaa ohjausvuokaavioita ja mahdollistaa laajan analyysin ja kommentoinnin. Se tukee lukuisia suoritinarkkitehtuureja ja tiedostomuotoja, joten se on alan standardi.

Disassemblerin keskeiset ominaisuudet

Edistyneissä disassemblereissa on tehokkaita ominaisuuksia, jotka helpottavat huomattavasti monimutkaisten binääritiedostojen ymmärtämistä:

  • Ohjausvuokaavio (CFG): Visuaalinen esitys kaikista funktion mahdollisista suorituspoluista.
  • Ristiviittaukset: Näyttää, missä dataan tai funktioihin viitataan eli niitä luetaan, kirjoitetaan tai kutsutaan.
  • Symbolien tunnistus: Tunnistaa ja nimeää tunnetut funktiot, kuten printf-funktion, sekä järjestelmäkutsut automaattisesti.
  • Vuorovaikutteinen uudelleennimeäminen: Käyttäjät voivat antaa merkityksellisiä nimiä osoitteille, muuttujille ja funktioille.
  • Laajennustuki: Laajentaa toiminnallisuutta kolmannen osapuolen tai mukautettujen skriptien avulla.

Disassemblyn haasteet

Disassembly ei ole aina suoraviivaista. Kehittäjät tai haittaohjelmien tekijät saattavat käyttää tekniikoita, jotka vaikeuttavat analysointia:

  • Koodin hämärtäminen: Koodin tahallinen vaikeuttaminen sen rakennetta muuttamalla.
  • Disassemblyn estotekniikat: Tietyt koodimallit, joiden tarkoitus on hämmentää disassembleria tai saada se kaatumaan.
  • Puuttuvat symbolit: Ilman virheenkorjaussymboleja funktioiden ja muuttujien nimet poistetaan, ja niiden tilalle jäävät yleiset nimet.
  • Dynaaminen koodi: Koodi, joka luodaan tai jota muutetaan suorituksen aikana, kuten itseään muokkaava koodi, on erityisen haastavaa staattisille disassemblereille.

Testatkaa disassembly-tietonne

Oppimamme perusteella: mitkä ovat yleisiä syitä käyttää disassembleria?

Disassembly: näkymä matalan tason toimintaan

Hienoa työtä! Tässä oppitunnissa tutustuimme disassemblyyn eli tärkeään prosessiin, jossa raaka konekoodi muunnetaan takaisin ihmiselle luettavaksi assemblykieleksi.

Näimme, kuinka objdump-työkalut tarjoavat perustason näkymän, kun taas tehokkaat työkalut, kuten IDA Pro, mahdollistavat edistyneen ja vuorovaikutteisen analyysin. Disassembly on keskeistä käänteismallinnuksessa ja tietoturva-analyysissä sekä sen syvällisessä ymmärtämisessä, miten ohjelmat todella toimivat suorittimen tasolla.

Seuraavaksi perehdymme käytännön käänteismallinnustekniikoihin!

Aloita maksutta

Opi Assembly tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Johdanto disassembly-työkaluihin” ilmainen?

Kyllä – oppitunnin ”Johdanto disassembly-työkaluihin” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Johdanto disassembly-työkaluihin”?

Oppikaa käyttämään objdumpin tai IDA Pron kaltaisia disassembler-työkaluja konekoodin muuntamiseen takaisin ihmisluettavaan Assembly-muotoon. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Johdanto disassembly-työkaluihin”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?

Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. GDB:n käyttö Assembly-virheenjäljityksessä
  2. Johdanto disassembly-työkaluihin
  3. Käänteistekniikan perusteet
  4. Dynaaminen analyysi jäljityksen ja hookien avulla
← Takaisin: Assembly-kieli ja x86-tason järjestelmäohjelmointi