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ümAçı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

  • .jpg içine malware gömebilir

  • Sahte 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:

ParametreAnlam
-sBaşlangıç offset
-lUzunluk

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

ParametreAçı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 xxd

  • info xxd

  • Vim 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:

Bash:
xxd supheli_dosya.bin

Çıktı Formatı:

xxd çıktısı genellikle üç sütundan oluşur:

  1. Offset (Konum): Baytların dosya içindeki adresi (örneğin: 00000000:).

  2. Hexadecimal (Onaltılık) Değerler: Dosyadaki verinin hex karşılığı (örneğin: 4d5a 9000 ...).

  3. 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:

Bash:
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:

  1. Dosyanın hex dökümünü alın:

    Bash:
    xxd hedef_program > program_hex.txt
    
  2. Metin editörü ile düzenleyin:

    Oluşturduğunuz program_hex.txt dosyasını nano veya vim ile açın. İlgili bellek adresindeki hex kodunu değiştirin (örneğin 74 - JZ komutunu EB - JMP komutuna çevirin).

  3. 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.

Bash:
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ı:

C:
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:

Bash:
# Dosyayı okumaya 0x1000 (4096) adresinden başla
xxd -s 0x1000 bellek_dokumu.raw | less

Ayrıca grep ile birleştirilerek belirli karakter dizileri aranabilir:

Bash:
xxd imaj_dosyasi.dd | grep -i "password"

En Çok Kullanılan 'xxd' Parametreleri Özeti

ParametreAçıklamaSiber Güvenlikte Kullanım Amacı
xxd dosyaStandart 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.
-rHex 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:

C:
#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:

Bash:
gcc kontrol.c -o kontrol

Programı çalıştırdığımızda beklediğimiz gibi yetki hatası alacağız:

Bash:
./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:

Bash:
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:

Plaintext:
  ...
  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:

Bash:
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:

Bash
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:

Plaintext:
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:

Plaintext:
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:

Bash:
xxd -r kontrol_hex.txt > kontrol_patched

İşletim sisteminin bu yeni dosyayı çalıştırabilmesi için ona çalıştırma izni verelim:

Bash:
chmod +x kontrol_patched

Adım 6: Zafer Anı (Sonucu Test Etme)

Şimdi yamalanmış (patched) dosyamızı çalıştıralım:

Bash:
./kontrol_patched

Beklenen Çıktı:

Plaintext:
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

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu