Ghidra Kullanarak Sublime Text Binary Dosyasında Hex Patch Uygulama
1. Ghidra Kurulumu ve Proje Oluşturma
Ghidra, NSA tarafından geliştirilen bir reverse engineering aracıdır. İkili dosyalar üzerinde analiz yaparak, makine kodunu insan okunabilir hale getirmeye ve gerekli düzenlemeleri yapmaya olanak tanır.
1.1. Ghidra’yı Kurma
Ghidra’yı henüz kurmadıysanız, aşağıdaki adımları takip edebilirsiniz:
- Resmi Ghidra sitesinden en güncel versiyonu indirin: https://ghidra-sre.org
- Dosyayı zipten çıkartın ve terminalde dizine giderek
ghidraRun
komutunu çalıştırın:1 2
cd /path/to/ghidra ./ghidraRun
1.2. Yeni Bir Proje Oluşturma
- Ghidra’yı başlatın ve “New Project” seçeneğini tıklayın.
- Proje Adını ve Kayıt Konumunu belirleyin.
- Proje oluşturduktan sonra, “Import File” seçeneğini kullanarak
/opt/sublime_text/sublime_text
binary dosyasını içe aktarın. - “OK” butonuna basarak analiz işlemini başlatın.
2. Hex Dizisini Bulma
Binary dosya içinde belirli bir hex kod dizisini bulmak için aşağıdaki adımları takip edin:
- Ghidra’da proje yüklendikten sonra “Search” → “Search Memory” menüsüne girin.
- Aramak istediğiniz hex dizisini girin:
1
80 79 05 00 0F 94 C2
- “Search” butonuna basarak arama yapın.
- Eğer hex kod bulunursa, ilgili bellek adresine giderek disassembly kodunu inceleyin.
3. Assembly Kodunun Analizi
Bulunan hex kodunun disassembly karşılığı aşağıdaki gibidir:
cmp byte [rcx+0x5], 0 ; RCX + 5 adresindeki byte'ı 0 ile karşılaştır
sete dl ; Eğer değer 0 ise DL = 1, değilse DL = 0
ret ; Fonksiyondan çık
Bu kod, bir doğrulama mekanizmasını temsil etmektedir.
cmp
talimatı bir bellek adresindeki baytı kontrol eder.sete
talimatı, şartın sonucuna göre bir register’ı (DL) 1 veya 0 yapar.ret
ile fonksiyon sonlandırılır.
4. Patchleme: Yeni Hex Kodunu Uygulama
Doğrulama kontrol mekanizmasını bypass etmek veya değiştirmek için yeni bir hex dizisi ile değişiklik yapılabilir.
4.1. Assembly Kodunun Değiştirilmesi
Yeni hex kodunun disassembly karşılığı şu şekilde olabilir:
mov byte [rcx+0x5], 1 ; RCX + 5 adresindeki byte'ı doğrudan 1 yap
mov dl, 0 ; DL register'ını sıfırla
nop ; No operation (gereksiz kod atlama)
Bu koşullu kontrol mekanizmasını kaldırmakta ve değişmez bir değer atamaktadır.
4.2. Patchleme Adımları
- Bulduğunuz hex dizesinin üzerine sağ tıklayın ve “Patch Instruction” seçeneğini seçin.
- Yeni hex kodunu girin:
1
C6 41 05 01 B2 00 90
- Değişiklikleri kaydedin.
- Disassembly penceresinde güncellenmiş kodu kontrol edin.
5. Patchlenmiş Binary’yi Kaydetme
Düzenlenmiş binary dosyasını kaydetmek için:
- “File” → “Export Binary” seçeneğini tıklayın.
- Patchlenmiş binary’yi dışa aktarın ve orijinal binary dosyası ile değiştirin:
1 2
sudo mv sublime_text_patched /opt/sublime_text/sublime_text sudo chmod +x /opt/sublime_text/sublime_text
6. Son Kontroller
Patch’in doğru uygulandığını test etmek için:
1
ndisasm -b 64 /opt/sublime_text/sublime_text | grep "1000"
Bu komut, belirli bir adres aralığında disassembly sonucunu kontrol etmek için kullanılabilir.
Tek komutla işlemleri sağlama:
1
sudo perl -pi -e 's/\x80\x79\x05\x00\x0F\x94\xC2/\xC6\x41\x05\x01\xB2\x00\x90/' /opt/sublime_text/sublime_text
Sonuç
Ghidra kullanarak binary dosya içindeki belirli bir hex dizesini başka bir hex dizesiyle değiştirme işlemi başarıyla tamamlandı. Bu işlem, belirli bir kontrol mekanizmasını atlamak veya sistemin davranışını değiştirmek amacıyla yapılmaktadır.
Not/Dikkat: Bu işlem, tamamen deneysel olup, yalnızca eğitim amaçlı olarak hazırlanmıştır. Çalışma, hex string üzerinde tersine mühendislik eğitimi kapsamında gerçekleştirilmekte olup, herhangi bir w*raz/nulled script amacı taşımamaktadır.