Pardus Linux’ta xxd Komutu
xxd, dosyaları hexadecimal (onaltılık) biçimde görüntülemeye ve tekrar eski hâline dönüştürmeye yarayan güçlü bir Linux aracıdır. Özellikle:
Zararlı yazılım analizi
Adli bilişim (forensics)
Binary inceleme
Payload analizi
Dosya imza (magic number) kontrolü
Tersine mühendislik
Ağ paket inceleme
gibi siber güvenlik alanlarında yoğun şekilde kullanılır.
Pardus Linux’ta genellikle varsayılan olarak bulunur çünkü çoğu sistemde vim-common paketiyle gelir.
xxd Komutunun Temel Mantığı
Bir dosyanın içeriğini:
Hexadecimal değerler
ASCII karakter karşılıkları
Bellek ofsetleri
ile birlikte gösterir.
Örneğin:
xxd dosya.bin
çıktısı şu tarz görünür:
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0300 3e00 0100 0000 8074 0000 0000 0000 ..>......t......
Burada:
| Bölüm | Açıklama |
|---|---|
00000000 | Offset (adres) |
7f45 4c46 | Hex veriler |
.ELF | ASCII karşılık |
xxd Kurulumu
Pardus’ta kurulu değilse:
sudo apt install vim-common
Kurulum sonrası test:
xxd --version
Temel Kullanımlar
1. Dosyanın Hex Çıktısını Görüntüleme
xxd belge.pdf
Bu işlem dosyanın tüm binary içeriğini gösterir.
2. İlk Satırları Görüntüleme
xxd belge.pdf | head
Siber güvenlikte çok kullanılır çünkü:
Dosya imzası kontrol edilir
Dosya türü doğrulanır
Gizli payload aranır
3. Dosya Türünü Magic Number ile Tespit Etme
PDF Örneği
xxd belge.pdf | head
Çıktı:
00000000: 2550 4446
ASCII:
%PDF
Bu PDF dosya imzasıdır.
PNG Örneği
xxd resim.png | head
Çıktı:
8950 4e47
Bu PNG magic number’dır.
Siber Güvenlikte Önemi
Saldırganlar:
Zararlı dosyaları farklı uzantıyla saklayabilir
.jpgiçine malware gömebilirSahte PDF hazırlayabilir
xxd sayesinde gerçek dosya tipi anlaşılır.
4. ASCII Gösterimini Kapatma
xxd -p dosya.bin
Sadece saf hex çıktı verir:
7f454c4602010100
Bu kullanım:
Payload üretimi
Shellcode inceleme
Exploit geliştirme
alanlarında önemlidir.
5. Satır Başına Byte Sayısını Ayarlama
xxd -c 8 dosya.bin
Her satırda 8 byte gösterir.
Tersine mühendislikte okunabilirliği artırır.
6. Belirli Byte Aralığını Okuma
İlk 64 byte:
xxd -l 64 dosya.bin
Offset kullanımı:
xxd -s 128 -l 64 dosya.bin
Açıklama:
| Parametre | Anlam |
|---|---|
-s | Başlangıç offset |
-l | Uzunluk |
Siber Güvenlikte Kullanımı
Bu yöntem:
Malware header inceleme
ELF analiz
Paket analizi
Firmware inceleme
işlerinde kullanılır.
7. Hex Dump’ı Tekrar Binary’ye Çevirme
xxd sadece görüntülemez, geri dönüştürür.
Hex oluştur:
xxd malware.bin > dump.hex
Geri dönüştür:
xxd -r dump.hex geri.bin
-r = reverse
Siber Güvenlikte Kullanımı
Bu özellik:
Payload yeniden oluşturma
Zararlı örnekleri güvenli paylaşma
CTF çalışmaları
Exploit geliştirme
için çok önemlidir.
8. C Dilinde Byte Dizisi Üretme
xxd -i shellcode.bin
Çıktı:
unsigned char shellcode_bin[] = {
0x7f, 0x45, 0x4c
};
Kullanım Alanları
Bu özellik:
Shellcode geliştirme
Exploit yazımı
Firmware gömme
Malware analiz laboratuvarları
için yaygın kullanılır.
9. Ağ Trafiği Analizinde xxd
Örnek:
tcpdump -i eth0 -c 5 -w trafik.pcap
Sonra:
xxd trafik.pcap | head
Böylece:
Paket header’ları
Protokol imzaları
Şüpheli veri
incelenebilir.
10. Binary İçindeki Metinleri Görme
xxd dosya.bin | less
ASCII bölümünde:
URL
IP adresi
Komutlar
API anahtarları
tespit edilebilir.
Zararlı Yazılım Analizinde xxd
Örnek Senaryo
Şüpheli dosya:
fatura.pdf.exe
İnceleme:
xxd fatura.pdf.exe | head
Çıktı:
4d5a
ASCII:
MZ
Bu:
Windows PE executable
Yani EXE dosyası
olduğunu gösterir.
Saldırgan kullanıcıyı kandırmaya çalışmıştır.
xxd ile Shellcode İnceleme
xxd shellcode.bin
veya:
xxd -p shellcode.bin
Analistler:
NOP sled
Opcode
Syscall dizileri
inceleyebilir.
xxd ve Adli Bilişim (Forensics)
Disk imajlarında:
xxd image.dd | head
kullanılarak:
Dosya imzaları
Silinmiş veri kalıntıları
Partition yapıları
Gizli payload
tespit edilebilir.
xxd ile Dosya Yamalama
Önce dump alınır:
xxd program.bin > patch.hex
Düzenleme yapılır.
Sonra:
xxd -r patch.hex yeni.bin
Bu yöntem:
Binary patching
Lisans bypass analizleri
Malware davranış inceleme
için kullanılır.
xxd Parametre Özeti
| Parametre | Açıklama |
|---|---|
-p | Saf hex çıktı |
-r | Hex’i binary’ye çevir |
-c | Satır başına byte |
-l | Uzunluk |
-s | Offset |
-i | C array üret |
-u | Büyük harf hex |
Siber Güvenlikte xxd
1. Malware Analizi
Binary yapı çözümlemesi yapılır.
2. Reverse Engineering
ELF, PE ve shellcode incelenir.
3. Incident Response
Şüpheli dosya hızlı analiz edilir.
4. Adli Bilişim
Disk imajı ve ham veri incelenir.
5. Exploit Development
Payload ve opcode analizinde kullanılır.
6. CTF Yarışmaları
Hex tabanlı sorularda temel araçtır.
xxd ile Birlikte Kullanılan Araçlar
| Araç | Amaç |
|---|---|
file | Dosya türü tespiti |
strings | Yazı dizileri çıkarma |
hexdump | Alternatif hex görüntüleme |
objdump | Binary analiz |
readelf | ELF inceleme |
tcpdump | Ağ paketi toplama |
grep | Hex içinde arama |
Gerçek Hayat Siber Güvenlik Senaryosu
Şüpheli Görsel Dosyası
Dosya:
manzara.jpg
Kontrol:
xxd manzara.jpg | head
Normal JPG:
ffd8 ffe0
Ama çıktı:
4d5a
ise:
Bu bir EXE dosyasıdır
Dosya uzantısı değiştirilmiştir
Büyük ihtimalle malware içerir
Performans İpucu
Büyük dosyalarda:
xxd büyük.img | less
kullanmak sistemi rahatlatır.
Sonuç
xxd, Pardus Linux üzerinde çalışan siber güvenlik uzmanları için vazgeçilmez araçlardan biridir.
Özellikle:
Malware analizi
Binary inceleme
Forensics
Payload çözümleme
Tersine mühendislik
Ağ trafiği analizi
alanlarında son derece güçlüdür.
Linux dünyasında “ham veriyi görmenin en temel yollarından biri” olarak kabul edilir.
Pratik Laboratuvar Çalışmaları
Lab 1 — PDF İmzası İncelemesi
xxd dosya.pdf | head
Lab 2 — Shellcode Hex Çıkarma
xxd -p shellcode.bin
Lab 3 — Binary Patch
xxd program.bin > patch.hex
nano patch.hex
xxd -r patch.hex yeni.bin
Lab 4 — Sahte Dosya Tespiti
xxd supheli.jpg | head
Faydalı Kaynaklar
man xxdinfo xxdVim Documentation
Linux Hexdump Documentation
Malware Unicorn Labs
OpenSecurityTraining
Pardus Linux'ta 'xxd' Komutu: Siber Güvenlik Uzmanının İsviçre Çakısı
Pardus Linux, yerli ve güvenli bir işletim sistemi olmasının yanı sıra, siber güvenlik uzmanları ve sistem yöneticileri için içinde güçlü araçlar barındıran sağlam bir platformdur. Bu araçların en temellerinden ve en yeteneklilerinden biri de xxd komutudur.
xxd, bir dosyanın veya standart girdinin onaltılık (hexadecimal) dökümünü (hexdump) oluşturan ve aynı zamanda bu onaltılık dökümü tekrar orijinal ikili (binary) formata dönüştürebilen komut satırı tabanlı bir araçtır.
Siber güvenlik bağlamında xxd; zararlı yazılım analizi (malware analysis), tersine mühendislik (reverse engineering), adli bilişim (digital forensics) ve zafiyet geliştirme (exploit development) süreçlerinde kritik bir rol oynar. GUI (Grafik Kullanıcı Arayüzü) araçlarının bulunmadığı sunucu ortamlarında hayat kurtarır.
1. Temel Okuma ve Yapı Analizi (Zararlı Yazılım Analizi)
Bir siber güvenlik analisti olarak, sistemde bulduğunuz şüpheli bir dosyanın içeriğini çalıştırmadan incelemeniz gerekir. xxd, dosyanın ham baytlarını (bytes) okumanızı sağlar.
Temel Kullanım:
xxd supheli_dosya.bin
Çıktı Formatı:
xxd çıktısı genellikle üç sütundan oluşur:
Offset (Konum): Baytların dosya içindeki adresi (örneğin:
00000000:).Hexadecimal (Onaltılık) Değerler: Dosyadaki verinin hex karşılığı (örneğin:
4d5a 9000 ...).ASCII Çıktısı: Hex değerlerinin okunabilir metin (ASCII) karşılığı. Okunamayan karakterler nokta (
.) ile gösterilir.
Senaryo: Dosya İmzası (Magic Bytes) Tespiti
Saldırganlar genellikle zararlı dosyaların uzantılarını değiştirerek güvenlik duvarlarını atlatmaya çalışırlar (Örneğin, bir .exe dosyasını .jpg yapmak). Dosyanın gerçek türünü anlamak için başlığındaki "Magic Bytes" (Sihirli Baytlar) kontrol edilir.
Dosyanın sadece ilk 16 baytını okumak için -l (length/uzunluk) parametresi kullanılır:
xxd -l 16 sahte_resim.jpg
Eğer çıktıda hex olarak 4d 5a (ASCII karşılığı MZ) görüyorsanız, bu dosya bir JPEG değil, bir Windows çalıştırılabilir dosyasıdır (PE/EXE). Eğer 7f 45 4c 46 görüyorsanız, bu bir Linux çalıştırılabilir dosyasıdır (ELF).
2. Tersine Mühendislik ve "Patching" (Yama Yapma)
xxd sadece okumakla kalmaz, aynı zamanda hex kodlarını düzenleyip dosyayı yeniden oluşturmanıza da olanak tanır. Bu özellik, tersine mühendislikte bir programın akışını değiştirmek (örneğin, bir atlama - JMP komutunu NOP - No Operation ile değiştirmek) için kullanılır.
Adım Adım Patch İşlemi:
Dosyanın hex dökümünü alın:
Bash:xxd hedef_program > program_hex.txtMetin editörü ile düzenleyin:
Oluşturduğunuz
program_hex.txtdosyasınınanoveyavimile açın. İlgili bellek adresindeki hex kodunu değiştirin (örneğin74- JZ komutunuEB- JMP komutuna çevirin).Hex dosyasını tekrar binary formata çevirin (Reverse işlemi):
-r(reverse) parametresi, hex dökümünü alır ve çalıştırılabilir bir ikili dosyaya geri dönüştürür.
xxd -r program_hex.txt > yamalanmis_program
```
*Not: Orijinal dosyanın üzerine yazmak için `-r` parametresini direkt dosya üzerine yönlendirebilirsiniz, ancak yedek almak her zaman daha güvenlidir.*
---
### 3. Zafiyet Araştırması ve Shellcode Hazırlama (Exploit Development)
Zafiyet sömürü kodları (exploit) geliştirirken, hazırladığınız "shellcode"un (belleğe enjekte edilecek makine kodu) bir C veya Python dizisi (array) olarak formatlanması gerekir. `xxd`, bu dönüştürme işlemi için mükemmel bir araçtır.
`-i` (include) parametresi, dosyayı C dili sentaksına uygun bir dizi olarak dışa aktarır.
**Kullanım:**
xxd -i payload.bin
Örnek Çıktı:
unsigned char payload_bin[] = {
0x31, 0xc0, 0x50, 0x68, 0x2f, 0x2f, 0x73, 0x68, 0x68, 0x2f, 0x62, 0x69,
0x6e, 0x89, 0xe3, 0x50, 0x53, 0x89, 0xe1, 0xb0, 0x0b, 0xcd, 0x80
};
unsigned int payload_bin_len = 23;
Bu sayede, elde ettiğiniz çıktıyı doğrudan sömürü kodunuzun (.c dosyanızın) içine kopyalayıp yapıştırabilirsiniz.
4. Adli Bilişim (Forensics) ve Spesifik Veri Arama
Büyük bir disk imajı veya bellek dökümü (memory dump) içinde belirli bir şifreyi, anahtarı veya gizlenmiş veriyi bulmanız gerektiğinde, dosyanın tamamını okumak yerine belirli bir adresten (offset) başlamak isteyebilirsiniz.
-s (seek) parametresi ile okumaya başlayacağınız bayt konumunu belirleyebilirsiniz.
Kullanım:
# Dosyayı okumaya 0x1000 (4096) adresinden başla
xxd -s 0x1000 bellek_dokumu.raw | less
Ayrıca grep ile birleştirilerek belirli karakter dizileri aranabilir:
xxd imaj_dosyasi.dd | grep -i "password"
En Çok Kullanılan 'xxd' Parametreleri Özeti
| Parametre | Açıklama | Siber Güvenlikte Kullanım Amacı |
xxd dosya | Standart hexdump. | Dosya içeriğinin genel analizi. |
-l [bayt] | Sadece belirtilen sayıda bayt okur. | Dosya başlıklarını (Magic Bytes) kontrol etmek. |
-s [offset] | Okumaya belirtilen adresten başlar. | Büyük dosyalarda/imajlarda hızlı gezinme. |
-r | Hex dökümünü ikili (binary) formata çevirir. | Kötü amaçlı yazılım yamalama (patching) ve ikili dosya onarımı. |
-i | Çıktıyı C dizisi (array) formatında verir. | Exploitler için Shellcode oluşturma. |
-g [bayt] | Hex sütunlarının gruplanma şeklini değiştirir (Örn: -g 1 bayt bayt ayırır). | Farklı işlemci mimarilerine (Endianness) göre veriyi daha rahat okuma. |
Pardus üzerinde xxd kullanmak, harici hiçbir program kurmadan doğrudan sistemin çekirdek yetenekleriyle veri manipülasyonu yapmanızı sağlar. Bu senaryoları sanal bir ortamda kendi oluşturduğunuz metin veya binary dosyaları üzerinde deneyerek el alışkanlığı kazanabilirsiniz.
Harika! Bu senaryo, siber güvenlikte "Binary Patching" (İkili Dosya Yamalama) olarak bilinen tersine mühendislik tekniğinin en temel ve en keyifli uygulamalarından biridir.
Aşağıdaki adımları Pardus (veya herhangi bir Linux) terminalinizde uygulayarak bir programın mantığını kaynak koduna sahip olmadan nasıl değiştirebileceğimizi görelim.
Adım 1: Hedef Programı (Kurbanı) Oluşturma
Öncelikle, aşmamız gereken bir "yetki kontrolü" barındıran basit bir C programı yazalım.
Terminalinizi açın ve nano kontrol.c komutuyla bir dosya oluşturup içine şu kodları yapıştırın:
#include <stdio.h>
int main() {
int yetki_seviyesi = 0; // 0: Normal Kullanıcı, 1: Admin
// Yetki kontrolü yapılıyor
if (yetki_seviyesi == 1) {
printf("Tebrikler! YETKI VERILDI. Gizli verilere erisiliyor...\n");
} else {
printf("HATA: YETKI YOK! Erisim engellendi.\n");
}
return 0;
}
Dosyayı kaydedip çıkın (Ctrl+O, Enter, Ctrl+X).
Şimdi bu kodu derleyerek çalıştırılabilir bir ikili dosya (binary) elde edelim:
gcc kontrol.c -o kontrol
Programı çalıştırdığımızda beklediğimiz gibi yetki hatası alacağız:
./kontrol
# Çıktı: HATA: YETKI YOK! Erisim engellendi.
Adım 2: Analiz ve "Zayıf Noktayı" Bulma
xxd dosyanın içeriğini değiştirmemizi sağlar, ancak nereyi değiştireceğimizi bulmak için programın makine dilindeki (assembly) haritasına bakmamız gerekir. Bunun için Linux'un standart araçlarından objdump'ı kullanacağız.
Programın assembly kodlarını inceleyelim:
objdump -d kontrol | grep -A 15 "<main>:"
Çıktınız sisteminizin mimarisine göre değişiklik gösterecektir, ancak şuna benzer kritik bir bölüm arıyoruz:
...
401131: 83 7d fc 01 cmp DWORD PTR [rbp-0x4],0x1 # yetki_seviyesi == 1 kontrolü
401135: 75 0e jne 401145 <main+0x2f> # Eşit DEĞİLSE (Yetki yoksa) atla!
401137: 48 8d 3d d6 0e 00 00 lea rdi,[rip+0xed6] # Yetki Verildi metni
40113e: e8 ed fe ff ff call 401030 <puts@plt>
401143: eb 0c jmp 401151 <main+0x3b>
401145: 48 8d 3d f8 0e 00 00 lea rdi,[rip+0xef8] # Yetki Yok metni
...
Kritik Nokta: 401135 adresindeki 75 (JNE - Jump if Not Equal) komutudur. Program "Eğer değer 1'e eşit değilse, hata mesajına zıpla" diyor.
Planımız: Bu koşullu zıplamayı, "Hiçbir şey yapma ve bir alt satırdan devam et" anlamına gelen NOP (No Operation) komutuyla değiştirmek. NOP komutunun hex karşılığı 90'dır. 75 0e (2 bayt) olan kısmı 90 90 yapacağız.
(Not: Sizin sisteminizde 75 yerine 74 (JE) olabilir veya offset adresleri (örn: 1135) farklı olabilir. Kendi çıktınızdaki cmp komutunun hemen altındaki adresi not alın.)
Adım 3: xxd ile Hex Dökümü Alma
Artık ne aradığımızı biliyoruz. Dosyanın onaltılık dökümünü bir metin dosyasına çıkaralım:
xxd kontrol > kontrol_hex.txt
Adım 4: Düzenleme (Patching) İşlemi
Oluşturduğumuz hex dosyasını bir metin editörüyle açalım:
nano kontrol_hex.txt
Şimdi nano içinde arama yaparak (Ctrl+W) objdump'ta bulduğumuz bellek adresinin son üç veya dört hanesini aratın (Örneğimize göre 1130: veya 1135'in bulunduğu satır).
Şöyle bir satır bulacaksınız:
00001130: 0000 0083 7dfc 0175 0e48 8d3d d60e 0000 ....}..u.H.=....
Dikkatlice incelediğimizde 0175 0e48 kısmını görüyoruz.
Buradaki 75 0e bizim jne komutumuzdur. Bu iki baytı siliyoruz ve yerine iki adet 90 yazıyoruz.
Değişimden Önce: 0175 0e48
Değişimden Sonra: 0190 9048
Satırın yeni hali şöyle görünmelidir:
00001130: 0000 0083 7dfc 0190 9048 8d3d d60e 0000 ....}....H.=....
Dosyayı kaydedin ve çıkın (Ctrl+O, Enter, Ctrl+X).
Adım 5: xxd ile İkili Dosyayı Geri Oluşturma (Reversing)
Değiştirdiğimiz metin tabanlı hex dökümünü, çalıştırılabilir yeni bir ikili dosyaya (binary) dönüştürmek için xxd'nin -r parametresini kullanıyoruz:
xxd -r kontrol_hex.txt > kontrol_patched
İşletim sisteminin bu yeni dosyayı çalıştırabilmesi için ona çalıştırma izni verelim:
chmod +x kontrol_patched
Adım 6: Zafer Anı (Sonucu Test Etme)
Şimdi yamalanmış (patched) dosyamızı çalıştıralım:
./kontrol_patched
Beklenen Çıktı:
Tebrikler! YETKI VERILDI. Gizli verilere erisiliyor...
Neler Oldu?
Programdaki değişken hala 0. Ancak biz programın "Eğer 1 değilse hata mesajına git" diyen trafik polisini (75) ortadan kaldırıp yerine "Geçip gidebilirsin, bir şeye karışma" diyen iki adet NOP (90 90) koyduk. Program koşulu kontrol etti, sonucu umursamadı ve doğrudan alt satırdaki "Yetki Verildi" mesajını okumaya devam etti.
Yorumlar