CTF Çözümleri
Phemis's notes
REV100 ~ CANYOUPWN.ME
HEDEF REV UYGULAMASI : https://drive.google.com/file/d/0B5i8WVYofXg6Q3RrdkVCQTZVNVU/view
CTF çözümüne geçmeden önce rev100 binary dosyamıza execute Permission'u verelim.
chmod +x rev100file ./rev100 komudu ile bilgi toplayalım ;
./rev100: ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=ba4af00e33952924b7754847fbf7ac8e4cefa2ec, not strippedfile komudu bize dosyanın 32-bit bir pie executable olduğunu söyledi..
GDB İLE ÇÖZÜMÜ
Dosyamızı gdb üzerinde başlatabilmek için ;
gdb ./rev100 komudunu girelim.

br main Komudu ile programımızın başlangıç yerine breakpoint koyalım.

run Komudu ile çalıştıralım.

Programımızı çalıştırdıktan sonra gördüğümüz gibi program birinci Breakpoint'e gelmiş oldu. (Zaten bir tane koymuştuk ama sayısını gösterme amaçlı (: )
disassemble main Komudu ile main'i disassemble edelim yani Assembly kodlarına ulaşalım.

Burada işimize yarar bir şey olmadığından dolayı c ' ye basıp enterladıktan sonra asıl yere gelelim :)

Evet , c ' ye bir kere basıp enterladıktan sonra Assembly kodlarımızın sonuna ulaştığımızın bilgisini bize veriyor. Bizim amacımızda zaten buraya ulaşmaktı :)
En başta gördüğümüz cmp komutu ne işe yarıyor bakalım ;

CMP bir karşılaştırma komutudur deger1 ile deger2 ' yi karşılaştırır.
cmp $0x58f , %eax Kodu 0x58f ile eax'daki değerin karşılaştırıldığını söylüyor. Karşılaştırdıktan sonra JNE ile atlama yapıyor. JNE : Jump If Not Equal (Eşit değil ise atla)
0x58f buradaki anahtar değerimiz.
GDB üzerinde p 0x58f kodunu uygularsak bize hexadecimal to decimal halini gösterecektir ; (16'lık tabandan 10'luk tabana geçiş)

Evet anahtarımızın 1423 olduğunu gördük.

RADARE2 İLE ÇÖZÜMÜ
CTF çözümüne geçmeden önce rev100 binary dosyamıza execute Permission'u verelim.
Radare2 ' yi debugging modunda başlatalım :
r2 -d ./rev100

Evet başlattıktan sonra karşımıza gelen ekran bu şekilde..
aaa Kodu ile kodlarımızı analiz ettirelim.

pdf @ main Kodu ile programımızı disassemble edelim.

Evet yeniden cmp noktasına bakacak olursak yanında comment satırı olarak 1423 ' ün eklendiğini görüyoruz. Bunu nasıl patchleyebiliriz bakalım ;
db <Adress> Kodunu kullanarak noktaya bir breakpoint koyalım.
dc Kodunu kullandıktan sonra fake serial vererek devam edelim.
dr eax=0x58fKodunu kullanarak eax değerine 0x58f atayalım.
dcİle devam edelim.

CrackMe 2 X64 ELF ~ RİNGZER0CTF.COM
CTF çözümüne geçmeden önce CrackME 2 binary dosyamıza execute Permission'u verelim.
chmod +x crackme
RADARE2 İLE ÇÖZÜMÜ
Programımızı radare2 üzerinde debugging modunda başlatalım.
r2 -d ./crackme

aa Komutu ile programımızı analiz ettirelim.

pdf @ main Komutu ile programımızın main kısmındaki kodlarını disassemble edelim.

0x004006f1 adresinde JNE komutumuzu gördük hemen üstüne baktığımızda CMP ile eax ve edx ' in karşılaştırıldığını gördük (CMP = Compare). Burada yapmamız gereken şey Karşılaştırılan yere breakpoint koyarak eax'ın register value'sini değiştirmek.
db 0x004006ef Komutu ile CMP noktasına breakpoint koyalım.
dc Komutu ile devam ettirdikten sonra fake serial vererek enterladığımızda ;

İstediğimiz noktada durdu gördüğümüz gibi başarısız mesajı vermedi.
dr eax=edx Komutunu girerek eax ve edx'in valuesini birbirine eşitliyoruz.
dc Komutu ile devam ettiğimizde mutlu son :))

Parkour ~ CRACKMES.ONE
Hedef Rev Uygulaması : https://crackmes.one/crackme/5d3220cc33c5d444ad3017d0
X64DBG İle çözümü
Programımızı x64dbg ile çalıştıralım.

Symbols kısmından parkour.exe ' ye iki kere tıklayarak içine girelim.
Sağ Tık > Search For > Current Module > String References
Diyerek String ' leri önümüze alalım.


Aslında biz orda flag'ı gördük.Ama devam edeceğiz.
Programı normal olarak başlattığınızda first stage'yi geçtiğini görüyorsunuz.

Amacımız Second stage'deki kontrol yapısını patchlemek.
00000000004015D7 Adresine Breakpoint koyalım
Programı ilerletelim.

Programı bir kere ilerlettiğimizde gördüğümüz gibi breakpoint hitledi.

Ve oynama yok..
JE kısmını JNE olarak değiştirelim.



Patch file diyerek kaydedelim.
Şimdi başlattığımızda Second Stage'yi de atlattığını göreceksiniz.

Şifre sorma ekranında da strings kısmında gördüğümüz flag doğru cevap :))
"flag{th3_cr3d3n14ls_4r3_s4f3}"
Last updated