Python ile ikili veri ve protokol çözümleme
Bayt düzeyinde düşünür; ikili dosya biçimlerini ve ağ protokollerini güvenli biçimde ayrıştırır, kendi ayrıştırıcını bulanık testle sağlamlaştırırsın.
Seviye 501 · 16 ders · 15 pratik lab
Dersler
Bayt düzeyi
- bytes, bytearray ve onaltılık gösterim
- Bayt sırası ve struct biçimleri
- Bit alanları ve bayraklar
- Değişken uzunluklu tamsayı ve TLV kodlama
- Kısa görev: bir dosya başlığını ayrıştır
Dosya biçimleri
- PNG yığınlarını okumak
- ELF başlığını Python ile okumak
- pcap dosya biçimini elle ayrıştırmak
- Bildirimsel ayrıştırma: construct
- Kısa görev: sihirli baytlarla dosya türü tanıyıcı
Protokoller ve sağlamlık
- DNS mesajını baytlarından çözmek
- Belgesi verilen özel protokole istemci yazmak
- Savunmacı ayrıştırma: uzunluk, sınır ve kaynak sınırları
- atheris ile ayrıştırıcıyı bulanık test etmek
- Kısa görev: bulanık testin bulduğu çökmeleri düzelt
Bitirme
- Bitirme görevi: özel protokol için tam ayrıştırıcı ve test takımı
Pratik lablar
- Onaltılık döküm satırları üretmek: Bayt dizisini ofset, onaltılık ve yazdırılabilir karakter sütunlarıyla on altışar baytlık satırlara döken fonksiyonu yaz.
- Dosya başlığını doğru bayt sırasıyla çözmek: Sürüm, kayıt sayısı ve zaman damgası içeren başlığı struct ile çöz; yanlış bayt sırasıyla saçma değer veren mevcut kodu düzelt.
- Yarım kalan kayıt dosyasını güvenle okumak: Sabit boyutlu kayıtları iter_unpack ile okuyan aracı son kaydı yarım kalan dosyalarda çökmeyecek, kayıp bayt sayısını bildirecek şekilde sertleştir.
- Bayrak baytından izinleri çıkarmak: Tek bayta sıkıştırılmış okuma, yazma, silme ve paylaşma bayraklarını IntFlag ile çözen ve geri kodlayan fonksiyonları yaz.
- Değişken uzunluklu tam sayı kodlayıcı: Yedi bitlik gruplarla değişken uzunluklu tam sayı kodlama ve çözme fonksiyonlarını yaz; gidiş-dönüş ve aşırı uzun girdi testlerini geç.
- İç içe TLV yapısını sınırlarla ayrıştırmak: İç içe tür-uzunluk-değer kayıtlarını ayrıştır; bildirilen uzunluk kalan veriyi aşarsa ya da derinlik sınırı geçilirse anlaşılır hatayla dur.
- Sihirli baytlardan dosya türünü tanımak: Uzantıya güvenmeden ilk baytlara bakarak PNG, PDF, ZIP, GZIP ve ELF dosyalarını tanıyan fonksiyonu yaz.
- PNG parçalarını ve CRC'lerini doğrulamak: PNG dosyasının parçalarını sırayla gez, her parçanın CRC'sini doğrula ve bozuk parçanın türünü ve ofsetini raporla.
- pcap dosyasını elle okumak: Hazır yakalama dosyasının genel başlığından bayt sırasını belirle, paket kayıtlarını gez ve en çok konuşan beş IPv4 çiftini say.
- DNS başlığını baytlardan çözmek: On iki baytlık DNS başlığından kimlik, bayraklar ve kayıt sayılarını çözen ve yanıt kodunu ada çeviren fonksiyonu yaz.
- Sıkıştırılmış DNS adlarını çözmek: İşaretçilerle sıkıştırılmış alan adlarını çöz; kendine dönen işaretçide sonsuz döngüye girmeden hata ver.
- Belgelenmiş özel protokole istemci yazmak: Lab hedefinin konuştuğu ikili protokol için belgeye göre el sıkışma, istek ve sağlama toplamı doğrulaması yapan istemciyi yaz.
- Uzunluk alanını veriyle karşılaştırmak: Bildirilen uzunluğa körü körüne güvenen mesaj ayrıştırıcısına sınır denetimi ekle ve kısa girdide IndexError yerine alan hatası döndür.
- Başlığı construct ile bildirimsel tanımlamak: Elle yazılmış struct çağrılarını construct tanımına çevir; ayrıştırıp yeniden kurmanın aynı baytları verdiğini testle göster.
- Fuzzer'ın bulduğu çökmeleri kapatmak: Kendi ayrıştırıcın için atheris koşumu yaz, bulunan çökme girdilerini regresyon testine çevir ve bellek ile süre sınırlarını ekleyerek hepsini kapat.
Kurs hakkında
Bayt düzeyinde düşünür; ikili dosya biçimlerini ve ağ protokollerini güvenli biçimde ayrıştırır, kendi ayrıştırıcını bulanık testle sağlamlaştırırsın.
Ne öğreneceksin
- Bayt düzeyi
- Dosya biçimleri
- Protokoller ve sağlamlık
- Bitirme
Ön koşullar
Aynı yolun 401 düzeyine kadar olan konularında deneyimli olmalısın.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde ve ona bağlı özel bir lab ağında geçer. Kurulum gerekmez.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 501 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.