Új hozzászólás Aktív témák

  • borg25

    senior tag

    válasz Gabás #42 üzenetére

    Mert kihasznál egy puffer túlcsordulási hibát.

    A hibát pedig úgy lehet kihasználni, hogy eredetileg ez van a programkódban:

    innen: byte array(2000)
    ide: byte array(200)
    egyeb valtozo:

    fuggveny start:
    blabla1
    API másolj át egy sztringet innen ide
    blabla2

    Mikor a program elér a API másolj át egy sztringet innen ide részhez, akkor a proci elmenti az aktuális sor címét, és elugrik az API másolj át egy sztringet függvényre.

    Ha nem azt a függvényt hívtad meg, hogy API másol át egy sztringet max 200 hosszan, akkor a másolás egészen addig tart, míg a sztringnek nincs vége, azaz nem zárja le egy 0 karakter. A program elkezd másolni. Másol 200 karaktert, teljesen felülírta a ide részt, de még nem jött 0 szóval folytatja, felülírja az egyeb valtozo részt, 0 nem jött, eléri a fuggveny start címet, 0 sehol, szóval másolja tovább az innen rész tartalmát, jah, hogy közben épp nekiállt felülírni az eredeti programkódot? Van ez így. Elér az API másolj át egy sztringet innen ide címhez, azt is felülírja, majd jön a következő rész felülírja a blabla2t is, egész addig míg az a várva várt 0 nem érkezik. Megjön. Az API másolj át egy sztringet függvény befejezte a dolgát, azt mondja, hogy lementetem a címet honnan hívtak meg, ugorjunk vissza és folytassuk tovább a programot a blabla2 résszel, csak ha figyeltél ott már nem a blabla2 rész van, hanem valami más:

    innen: byte array(2000)
    ide: byte array(200) ; Felülírva tökmindegy mivel
    egyeb valtozo: ; Felülírva tökmindegy mivel

    fuggveny start: ; Felülírva
    blabla1 ; Felülírva
    API másolj át egy sztringet innen ide ; Felülírva
    start_ransomware ; Új kód szeretettel neked

    Abban igazad van, hogy a támadást nem feltétlen a start_ransomware végzi. Mert ha figyeltél, akkor arra a kódra említettem egy fontos megkötést: Nem tartalmazhat 0-t! Sehol se. Se akkor amikor egy változónak értéket adsz, se a programkódban. Pl a LDA #$00 felejtős, de a LDA $3200,x is. Ilyen megkötésű kódot meg nem szívesen ír az ember hosszasan.

    #46:
    Megelőzés, elég ha valamilyen jegyzettömb programmal (pl Notepad++) belenézel a letöltött feliratba. Ha egy résznél jön a kriksz-kraksz, akkor felejtsd el.

    [ Szerkesztve ]

Új hozzászólás Aktív témák