picoCTF | Need For Speed

 



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 .

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

Hack The Box | MetaTwo

  Makinayı nmap ile tarıyoruz . 21/tcp open  ftp? | fingerprint-strings: |   GenericLines: |     220 ProFTPD Server (Debian) [::ffff:10.10.1...