H5-Se elää!
Date: 24-11-2024
Ympäristö:
OS: Debian GNU/Linux 12 "Bookworm"
Browser: Firefox 128.3.1esr (64-bit)
Hardware Model: innotek Gmhb VirtualBox
Memory: 5.7 GiB
Prosessor: AMD Ryzen 9 3900X - 6 cores used
Disk: 21.5 GB
Network: NAT
A) Lab1. Tutkiminen mikä on ohjelmassa vialla ja miten se korjataan. lab1.zip
Ensiksi latasin gdb:n komennolla sudo apt-get install gdb
. Tämän jälkeen avasin ohjelman ja
lähdin
debugamaan. Ajoin muutaman kerran ohjelaman ilman mitään brakepointteja ja vastaukseksi tuli "Program
received signal SIGSEGV, segmentation fault."
En tosiaankaan tiennyt mitä tämä tarkoittaa,
joten aloin
debuggaamaan asettamalla brakepointteja ja watchpointteja. Itselleni tärkein watchpoint oli
"message"
koska, kun ohjelma ensimmäisellä kerralla ajoi good_message
stringin, sieltä tuli oletettu
vastaus, joka
kertoi että ohjelman logiikassa ei välttämättä ole ongelmaa.
Debugaus vaiheessa kun oli vuoro kääntää "bad_message"
niin ohjelma heitti kyseisen
errorin. Tästä siis
totesin, että ongelma löytyy jotenkin tähän muuttujaan liittyen. Kun aloin katsomaan tarkemmin tähän
liittyvää koodia, totesin hypoteesikseni, että ongelma löytyy riviltä 7. Laitoin siis hypoteesini
chatGPT ja kysyin että voisiko tämä olla ongelma.
Tarkka prompti = "if im getting SIGSEGV segmentation fault error, and my input is NULL but in
the printf
the format specifier is %c. Is the error because it is specified? so if i change it to something
else or
remove it compleatly would that fix the error?"
Vastaukseksi tuli, että ongelma voisi johtua juuri tästä, sillä %c
ei osaa tulkita NULL
syötettä, minkä
takia se sitten tämän errorin syöttää. Näin lähdin muuttamaan koodia sitten hypoteesin pohjalta.
Tässä oli korjattu source. Kun lähdin testaamaan että toimiko ratkaisu, selvisikin, että nyt
"good_message"
ei toimi ja se palautti samaa erroria.
Onneksi tässä kohtaa ongelma oli todettu, ja nytten piti vain löytää oikea korjaus tähän ongelmaan, niin
että molemmat menee läpi halutulla tavalla. Seuraavaksi rupesin miettimään, mikä voisi olla toimiva tapa
ratkaista tämä. Ensimmäisenä ajatuksena tuli erottaa do while lauseessa oleva silmukka if lauseella, eli
erottaa kokonaan syötteet.
Tässä oli toinen yritys, kun olin lisännyt if lauseen.
Ja ihan vain ajamalla ohjelman niin selvisi, että korjaus toimi ja ongelma oli ratkaistu onnistuneesti.
(Anna 9.6.2019)
B) Lab2. Selvitä salasana ja lippu + kirjoita raportti siitä miten aukesi. lab2.zip
Tein tätä tehtävää monen päivän ajan ja tutkin kaikkia mahdollisia rekistereitä, että mistä mahdollinen
salasana voisi löytyä. Jossain vaiheessa tajusin, että nyt ei löytymällä löydy kyl millään, ja kun tuli
ilmi myös että source on compressattu ja on käytetty hashausta ja oletin että salasana on varmaan myös
pilkottu osiin tai jotain vastaavaa niin lopulta luovutin salasanan etsimisen.
Aloin sitten kuitenkin tutkimaan tarkemmin main funktiota, ja mitä siinä oikeasti tapahtuu. Siitä melko
nopeasti selvisi, että < main+135 >
tapahtuu hyppy. Eli kyseessä on if lause,
joka antaa tämän
perusteellaa vastauksen.
Tämän jälkeen kysyin chatGPT:ltä miten gdb:ssä voi muuttaa jonkin rekisterin tietoa. Josta se antoi
vastaukseksi, että komennollaset {rekisteri} = 0x1
voi muuttaa ohjelman logiikan kulkua. Eli
lähdin
kokeilemaan tätä, ja tässä tapauksessa olin tunnistanu mahdolliseksi %eax
rekisterin, koska
se oli
rekisteri mikä oli koko ajan joko 1 tai 0.
Ja kun ennen tämä hyppäsi seuraavaksi < main+153 >
kohtaan, mutta muutoksen
jälkeen se ei tehnytkään
hyppäystä, vaan jatkoi suoritusta rivi kerrallaan ja lopuksi palautti lipun.
Eli en koskaan löytänyt oikeaa salasanaa, mutta sain kuitenkin lipun selville.
Lippu =FLAG{Lari-rsvRDx04WMBZpuwg4qfYwzdcvVa0oym}
c) Lab3. Kokeile Nora Crackmes harjoituksia tehtävä 3 ja 4 ja loput vapaaehtoisia. Tindall 2023: NoraCodes / crackmes.
Kokeilin tehtäviä, mutta en ehtinyt ratkaista niitä, koska aika loppui kesken tällä viikolla ja tehtävät piti palauttaa. (Yritän palata näihin ja myös vapaaehtoiseen lab4, kun siiihen löytyy aika)
Lähteet
1. Anna 9.6.2019. What means the -c or the -d in C language. Sololearn. Luettavissa: https://www.sololearn.com/en/Discuss/1836131/what-means-the-c-or-the-d-in-c-language Luettu: 21-11-2024
2. Tero Karvinen. 2022. Application Hacking. Luettavissa: https://terokarvinen.com/2022/application-hacking/ Luettu: 24-11-2024
3. GDB Tutorial with Examples. Cprogramming. Luettavissa: https://www.cprogramming.com/gdb.html Selattu: 24-11-2024
4. GDB Tutorial. SEAS UPenn. Luettavissa: https://www.seas.upenn.edu/~ese5320/fall2021/handouts/hw1/gdb_tutorial.html Selattu: 24-11-2024
5. NoraCodes. 2023. Crackmes. Luettavissa: https://github.com/NoraCodes/crackmes Viertailtu: 24-11-2024