Bize verilen elf formatındaki dosyayı çalıştırdığımızda aşağıdaki gibi çıktı verip program sonlanmakta.
Ghidra ile dosyayı incelediğimizde main fonksiyonu içerisinden çağırılan diğer fonksiyonların hiyerarşisi şu şekilde :
- main
- header
- set_timer
- alarm_handler
- get_key
- calculate_key
- print_flag
- decrypt_flag
header fonsiyonunda ekrana keep this thing over 50 mph! 28 tane '=' karaterini ekrana bastırıyor .
set_timer fonksiyonunda sighandler veri tipinde bir değişken oluşturulmuş . İnternette bu konu hakkında biraz araştırdığımızda GNU'nun dökümantasyonunda signal handling konusundaki aşağıdaki kod parçasına baktığımızda bize konuyu özetliyor .
Bu konu ile alakalı aşağıdaki dökümanlar detaylı bilgiyi içeriyor .
- https://man7.org/linux/man-pages/man3/sysv_signal.3.html
- https://www.gnu.org/software/libc/manual/html_node/Basic-Signal-Handling.html
- https://www.gnu.org/software/libc/manual/html_node/Alarm-Signals.html
- https://www.gnu.org/software/libc/manual/html_node/Setting-an-Alarm.html
- https://www.gnu.org/software/libc/manual/html_node/Handler-Returns.html
Bu fonksiyonda özetlemek gerekirse küçük bi gecikmenin ardından alarm_handler fonksiyonu tetikleniyor ve ekrana Not fast enough. BOOM! yazısı bastırılıp program sonlanıyor .
get_key fonksiyonuna baktığımızda hiçbir parametre almadığını görüyoruz . key değişkenine calculate_key fonksiyonundan değer döndürülmekte .
Son olarak print_flag fonksiyonundan decrypt_flag fonksiyonu çağırılıyor ve ekrana flag basılıyor . get_key fonksiyonu parametre almadığı için Ghidra ile set_timer fonksiyonunu silip dosyayı kaydetmeye çalışıyorum fakat sürekli segfault hatası alıyorum . Alternatif olarak SavePatch.py gibi scriptleri de denememe rağmen sorunun Ghidra'da olduğunu fark ediyorum . Cutter aracı ile set_timer fonksiyonunu yok ediyorum .
NOP( No operation ) instruction'ı hiçbir etkisi yoktur genellikle ufak gecikme oluşturmak için kullanılır . Çalışması 1 instruction cyle alır . Patchlediğimiz binary dosyayı çalıştırdığımızda sonuca ulaşıyoruz .
No comments:
Post a Comment