CEN429 Güvenli Programlama · Hafta 9

Gelişmiş Kod Gizleme ve Çeşitlendirme

CEN429 Güvenli Programlama — Hafta 9

Dr. Öğr. Üyesi Uğur CORUH · 13.11.2026

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bugünün planı (3 saat)

Saat Bölüm Konu
1 1–2 Gizleme neden kural? · MATE · taksonomi · kural şablonu
2 3 Kontrol akışı kuralları (K-01…K-06)
3 4–6 Veri kuralları · sanallaştırma/dinamik · çeşitlendirme · ölçme

Öğrenme çıktısı (ÖÇ.3): gizlemeyi bir güvenlik kuralı olarak yazmak · her tekniğin maliyetini/sınırını söylemek · bir korumayı ölçüp gerekçelendirmek

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Önceki haftalardan gelenler

  • Beyaz kutu / MATE saldırgan modeli — cihazı elinde tutan kullanıcının aynı zamanda saldırgan olduğu tehdit modeli (Hafta 1)
  • Hata ayıklayıcı (debugger) — programı adım adım çalıştıran, değişkenleri gösteren araç (gdb, lldb); RASP bağlamında çalışma anında algılamasını görmüştük (Hafta 6)
  • Entropi — bir verinin baytlarının ne kadar düzensiz göründüğünün ölçüsü; şifreli/paketli içerik tespitinde ve rastgele sayı üretiminde gördük (Hafta 2, 3)
  • Derleme bayrağı, strings ve sembol tablosu — derleyici seçenekleri ve bir binary dosyanın okunabilir metinlerini/isim listesini gösteren araçlar; gizlemenin giriş seviyesi adımları (Hafta 4)
  • Tersine derleme — bir binary/bayt kodunu geri, okunabilir koda yaklaştırma; JVM bayt kodu üzerinde gördük (Hafta 5)
  • XOR — iki bit farklıysa 1, aynıysa 0; a^b^b=a ile kendini geri alır; Java dize gizlemede elle çözmüştük (Hafta 5)
  • Günlük (log) — çalışırken yazılan bilgi mesajları; hassas bilgi düşerse saldırgan okur (Hafta 2)

Bu hafta: bu araçları ve kavramları ileri düzeyde ve ölçülebilir biçimde kullanıyoruz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bu haftanın kavramları

Her terim, gövdede ilk geçtiği yerde tanımlanır; burada yalnız nerede olduğunu işaretliyoruz.

Kavram Nerede
Gizleme bir güvenlik kuralı olarak, MATE Bölüm 1
Gizleme taksonomisi (beş aile) Bölüm 2
"Koruma kuralı" şablonu (neyi korur/maliyet/sınır/ölçüm) Bölüm 2
Kontrol akışı kuralları (K-01–K-06) Bölüm 3
Veri gizleme kuralları (K-07–K-09) Bölüm 4
Program bütünü kuralları (K-10–K-12) Bölüm 4
Çeşitlendirme Bölüm 5
Gizlemenin dört ölçütü (güç/dayanıklılık/gizlilik/maliyet) Bölüm 5
Deobfuscation (karşı tarafın araçları) Bölüm 5
Katmanlı savunmadaki yeri, proje S9 Bölüm 6
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kaynak kod nedir?

  • Sizin yazdığınız, insanın okuyabildiği program metni (ör. C dosyası).
  • Örnek: int topla(int a, int b) { return a + b; }

Kaynak kod derlenir ve makinenin çalıştırdığı biçime döner.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Derleyici ve binary dosya

  • Derleyici (compiler): kaynak kodu makine koduna çeviren program (gcc, clang).
  • Binary dosya (binary): derleme sonucu; bilgisayarın doğrudan çalıştırdığı dosya (.exe, .so).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Makine kodu ve assembly

  • Makine kodu: işlemcinin anladığı sayısal komutlar.
  • Assembly: makine kodunun insana biraz daha okunur hali (mov, cmp, jmp).

Binary dosyayı açtığınızda gördüğünüz şey budur.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Tersine mühendislik nedir?

Tersine mühendislik (reverse engineering): binary dosyaya bakıp programın ne yaptığını anlamaya çalışmak.

Saldırganın temel işi budur.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Tersine derleyici (decompiler)

  • Tersine derleyici (decompiler): binary dosyayı geri, okunabilir koda yakın bir biçime çeviren araç.
  • Örnekler: Ghidra, IDA.

Amaç: kaynağa erişimi olmayan biri, binary'ye bakarak mantığı çıkarsın.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bit, bayt, onaltılık

  • Bit: 0 veya 1.
  • Bayt: 8 bit.
  • Onaltılık (hex): 0x ile yazılır; 0x2A = 42.

Kodda 0x5A gibi değerler göreceğiz; bunlar sadece sayılardır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

XOR nedir?

  • XOR (^): iki bit farklıysa 1, aynıysa 0.
  • Özelliği: a ^ b ^ b == a → kendini geri alır.
c = a ^ 0x5A;   /* encode */
a = c ^ 0x5A;   /* decode */

Gizlemede çok kullanılır çünkü tersine çevrilebilir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Entropi (rastgelelik) nedir?

  • Entropi: bir verinin ne kadar "rastgele" göründüğü.
  • Kriptografik anahtarlar yüksek entropili görünür (düzensiz baytlar).

Saldırgan, binary'de yüksek entropili bir blok görürse "burada anahtar olabilir" der.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Fonksiyon, dal, koşul

  • Fonksiyon: bir işi yapan kod bloğu (grant_access).
  • Dal (branch): if gibi bir yol ayrımı.
  • Koşul: dalın hangi yöne gideceğini belirleyen ifade.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Temel blok (basic block)

  • Temel blok: dalsız, baştan sona akan komut dizisi.
  • Bir if gelince blok biter, iki yeni blok başlar.

Program = temel blokların birbirine bağlanması.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kontrol akışı grafiği (CFG)

  • CFG (Control Flow Graph): temel blokları düğüm, geçişleri kenar yapan şema.
  • Programın "yol haritası"dır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bir cümlede bu haftanın sorusu

Programı kullanıcıya teslim ettim; saldırgan artık ona sahip. Kodumu okumasını ve değiştirmesini nasıl
zorlaştırırım?

Yanıt: kod gizleme kuralları. Başlıyoruz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

1. Gizleme neden bir kuraldır?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Önce bir soru

Bir mobil uygulamayı kullanıcıya teslim ettiniz.

  • Kod artık kimin makinesinde çalışıyor?
  • Sunucudaki güvenlik denetimleriniz burada geçerli mi?
  • Saldırgan kaç kez deneyebilir?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

MATE: uçtaki saldırgan

Man-At-The-End = programın kendisine sahip saldırgan.

  • Binary dosya onda
  • Belleği okuyup değiştirebilir
  • Tersine derleyici, hata ayıklayıcı elinde
  • İstediği kadar dener

Buna beyaz kutu da denir (1. hafta).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

MATE saldırgan modeli — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kara kutu ≠ beyaz kutu

Kara kutu Beyaz kutu (MATE)
Görür Girdi/çıktı Her şey
Ortam Uzak sunucu Saldırganın cihazı
Deneme Sınırlı Sınırsız
Savunma Kripto, doğrulama + gizleme, RASP, whitebox

Kripto kara kutu varsayar; teslimde bu varsayım çöker.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kısa tarihçe — kod gizleme nereden geldi?

  • 1976 — Diffie & Hellman: "anlaşılmaz ama çalışır" fikri (çaba-yoluyla koruma)
  • 1997 — Collberg vd. taksonomi + güç–dayanıklılık–gizlilik–maliyet (bu dersin beş ailesi)
  • 2000 — Wang vd.: kontrol akışı düzleştirme — kesin analiz genel durumda NP-zor (K-04)
  • 2001 — Barak vd.: kusursuz gizleme imkânsızdır → "kırılamazlık" değil maliyet
  • 2002 — Chow vd. whitebox AES (11. hafta) · 2015 Obfuscator-LLVM (Junod vd., K-11) · Tigress (14. hafta)

Gizleme, bir imkânsızlık teoreminin üzerine kurulmuş pratik bir geciktirme disiplinidir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Dürüst gerçek

Yeterli zamanı, becerisi ve motivasyonu olan saldırgan her gizlemeyi çözer.

Cookbook (Tarif 12.1): anti-tampering "kırılamaz" değildir.

Öyleyse amaç ne?

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Amaç: kırmayı ekonomik olmaktan çıkarmak

Gizleme bir maliyet yükseltme aracıdır, sır saklama değil.

  • Kırmayı pahalı yap
  • Otomatikleştirmeyi zorlaştır
  • Diğer katmanlara zaman kazandır

Bunları üç kurala dökelim.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kural 1 — Maliyeti değerin üstüne çıkar

Saldırı, korunan varlıktan pahalı olmalı.

  • 10 TL'lik sırrı 1000 TL'lik çabayla korumak: israf
  • 1000 TL'lik sırrı 10 TL'lik çabayla korumak: yetersiz

Önce varlığın değerini belirle, sonra korumayı seç.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kural 2 — Otomasyonu kır

Bir kopyada işe yarayan saldırı, bütün kopyalarda işe yaramasın.

  • Bunun adı çeşitlendirme (bu haftanın 5. bölümü)
    1. haftada araçla (Tigress --Seed)

Bir kırık, her yeri açmamalı.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kural 3 — Diğer katmanlara zaman kazandır

Gizleme tek başına savunma değil; bir katman.

  • RASP (6. hafta) çalışırken korur
  • Bütünlük denetimi, sunucu denetimi
  • Anahtar/sürüm yenilenene kadar dayanmak yeter
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kaynağın dili: her önlem bir "kural"

Teknik kılavuz her önlemi üç başlıkla yazar:

  • Açıklama — neyi korur
  • Uygulama — nasıl yapılır
  • Örnek kullanım — nerede

Çoğu zaman bir uyum kimliğiyle (ör. "hassas veri düz loglanmaz").

Biz de öyle yazacağız: neyi korur · nasıl · maliyet · sınır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

2. Taksonomi ve kural şablonu

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizleme neyi gizler?

Collberg'in sınıflandırması: gizlemeyi neyi gizlediğine göre ayırırız.

Beş aile var. Sırayla görelim.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Aile 1 — Düzen (layout)

Neyi gizler? Adları, biçimi, meta veriyi.

  • Sembolleri görünmez yapmak
  • Fonksiyon/dosya adlarını anlamsızlaştırmak
  • Sürümde günlüğü kaldırmak

4. haftada tanıştık; bu hafta derinleştiriyoruz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Aile 2 — Veri

Neyi gizler? Sabitleri, dizeleri (string), değişkenleri.

  • Dize kodlama
  • Sabit dönüşümleri
  • Değişken bölme/birleştirme
  • Opak boolean

→ Bu haftanın 4. bölümü.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Aile 3 — Kontrol akışı

Neyi gizler? Algoritmanın yapısını.

  • Kontrol akışı düzleştirme
  • Opak yüklemler
  • Sahte ve ölü dallar
  • Rastgele çıkış

→ Bu haftanın 3. bölümü (birazdan).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Aile 4 — Önleyici (anti-analysis)

Neyi gizler? Analiz araçlarının işini.

  • Tersine derleyiciyi yanıltan yapılar
  • Çalışma anında kod çözme

→ Kavram bu hafta, RASP 6. hafta.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Aile 5 — Sanallaştırma

Neyi gizler? Makine kodunun kendisini.

  • Fonksiyonu özel bir VM'in bayt koduna çevirmek

→ Kavram bu hafta (K-10), araçla 14. hafta (Tigress Virtualize).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Sanallaştırma — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Beş aile: özet

Aile Gizler
Düzen Ad, biçim
Veri Sabit, dize, değişken
Kontrol akışı Yapı
Önleyici Araç işini
Sanallaştırma Makine kodu

Kural: aileler tek başına değil, birlikte kullanılır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Beş aile — güç ↑ maliyet ↑

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Sahada: hepsi bir arada

Sertifikalı bir üründe listelenen native önlemler bu haritanın tamamını kapsar:

sembol gizleme · ad anlamsızlaştırma · aritmetik dönüşüm · dize kodlama · opak boolean · sahte işlem · ölü dal · düzleştirme · rastgele çıkış · günlük kaldırma

Hiçbiri tek başına güçlü değil; güç birliktelikten.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Beş aile, tek fonksiyon

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Beş aile — uç durum (hepsi geçerli)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizleme ne VERİR?

  • Statik analize gecikme (strings, sembol, tersine derleme)
  • Otomatik saldırıya direnç (çeşitlendirmeyle)
  • Diğer katmanlara zaman
  • Ölçülebilir bir maliyet artışı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizleme ne VERMEZ?

  • Bir sırrın gizliliği → o kriptonun işi
  • Bellekten okumaya koruma → RASP, whitebox
  • Kalıcı güvenlik → "kırılamaz" yoktur
  • Bedava koruma → her gizleme maliyet getirir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizleme ne verir, ne vermez — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

⚠️ En sık hata

Gizlemeyi anahtar saklama sanmak.

  • Gömülü/gizlenmiş anahtar yine oradadır
  • Program çalışırken onu kullanmak zorunda → bellekte açığa çıkar
  • Çözme mantığı da içeride

Gizlilik kriptonun işidir, gizlemenin değil. (3. hafta)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

"Koruma kuralı" şablonu

KURAL K-xx: <teknik>
  Neyi korur?  : hangi varlık / kod bölümü
  Hangi tehdit?: statik / dinamik / otomatik / kurcalama
  Nasıl?       : bir cümle (kavram)
  Maliyet      : boyut, hız, bakım, hata ayıklama
  Sınır        : neyi korumaz
  Ölçüm        : etkinlik nasıl doğrulanır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Neden "Ölçüm" satırı şart?

Gizleme "var/yok" değildir.

  • Değerlendirici (13. hafta) her katmanın saldırıyı ne kadar geciktirdiğini sorar
  • Ölçümsüz koruma = iddia, kanıt değil

Projede S9'u bu şablonla yazacaksınız.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Dört ölçüt — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Koruma kuralı şablonu

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Koruma kuralı şablonu — uç durum (yalnız kavramsal varlık)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 2 — kısa sınama

  1. MATE saldırgan kara kutudan nasıl ayrılır?
  2. Gizlemenin üç kuralı neydi?
  3. Gizleme bir anahtarı korur mu? Neden?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 2 — cevaplar

  1. MATE programa sahiptir (kod/bellek onda, sınırsız deneme); kara kutu yalnız girdi/çıktıyı görür.
  2. Maliyeti değerin üstüne çıkar · otomasyonu kır (çeşitlendir) · diğer katmanlara zaman kazandır.
  3. Hayır. Anahtar çalışırken bellekte açığa çıkar ve çözme mantığı içeridedir; gizlilik kriptonun işidir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

3. Kontrol akışı kuralları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bu bölümün amacı

CFG'yi (ön bilgide tanımladık) bu bölümün iskeleti sayıyoruz; saldırganın ilk işi bu iskeleti çıkarmaktır.

4. haftada düzleştirmeye giriş yaptık.

Bu bölümde onu güçlendiren kuralları ekliyoruz:

K-01 opak yüklem · K-02 aritmetik kodlama · K-03 sahte/ölü · K-04 düzleştirme (derin) · K-05 rastgele çıkış · K-06 çağrı gizleme

Tüm örnekler sentetik, tek denetim: grant_access.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Opak yüklemler ve döngüler

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Opak yüklem — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Neyi korur?

  • Bir dalın hangi koşulda alındığını
  • Bir döngünün kaç kez döndüğünü

Fikir: değeri programcının bildiği ama aracın kolay çözemediği bir ifadeyle dallan.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Opak yüklem örneği

/* x*(x+1) is always even → result is always true */
static int opaque_true(unsigned x) {
    return ((x * (x + 1)) & 1u) == 0;
}

Programcı bilir: hep true. Statik analiz bunu kolay kanıtlayamaz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Nasıl kullanılır?

if (opaque_true(counter)) {
    state = real_step(state);   /* always entered */
} else {
    state = fake_step(state);    /* dead path: never runs */
}

Analist iki yolu da "gerçek" sanır; zamanını sahte yola harcar.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Opak döngü

Kılavuz döngüleri ayrı kural yapar:

  • for/while doğrudan görünmez
  • Düzleştirmenin içine gizlenir
  • Gövde küçük bloklara bölünür
  • Yineleme bir durum değişkeniyle yönetilir

"Şu döngü N kez dönüyor" bilgisi CFG'den okunmaz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-01 · Maliyet ve sınır

  • Maliyet: düşük–orta (fazladan aritmetik/dal)
  • Sınır: bilinen opak yüklem kalıpları otomatik tanınır
  • Karşı önlem: çeşitlendir (bölüm 5)
  • Ölçüm: önce/sonra temel blok sayısı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Opak yüklem ekleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Opak yüklem — uç durum (büyük değerler)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-02 · Aritmetik kodlama

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-02 · Neyi korur?

Sabitleri ve basit hesapları.

"Bu sayı 0x1F, bu işlem bir XOR" gibi doğrudan okunabilir ipuçlarını gizler.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-02 · Denk ifadeler (MBA)

Bir işlemi, sonucu değişmeyen ama karmaşık görünen denkiyle değiştir:

a + b   ≡   (a ^ b) + 2*(a & b)
x * 2   ≡   x << 1

Sonuç aynı, görünüm karmaşık. (MBA = mixed boolean-arithmetic)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-02 · Sabiti gizle

/* 0x2A is not written directly; produced from two parts */
static uint8_t threshold(void) {
    uint8_t a = 0x37, b = 0x1D;
    return (uint8_t)(a ^ b);   /* = 0x2A */
}

Binary dosyada 0x2A araması sonuç vermez.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-02 · Maliyet ve sınır

  • Maliyet: düşük
  • Sınır: MBA sadeleştiriciler (arybo/msynth) birçok ifadeyi açar
  • Kural: tek başına zayıf → kontrol akışıyla birleştir
  • Ölçüm: sabit için bayt/strings araması boş dönmeli
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · Sahte işlem ve ölü dal

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Sahte işlem ≠ ölü dal — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · İkisi farklıdır!

Kılavuz bunları ayrı kurallar yapar. Fark kritik:

  • Sahte işlem: çalışır, sonucu değiştirmez
  • Ölü dal: hiç çalışmaz (opak yüklemle korunur)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · Karşılaştırma

Sahte işlem Ölü dal
Çalışır mı? Evet Hayır
Sonuç Değişmez (çalışmaz)
Amaç Gerçeği kalabalıkta gizle Sahte yol göster
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · Sahte işlem örneği

crc = crc32_update(crc, data, n);
crc ^= (constant ^ constant);   /* = crc; result unchanged */

constant ^ constant == 0 → CRC değişmez, ama kod kalabalıklaşır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · Ölü dal örneği

if (opaque_false()) {        /* always false */
    fake_check();        /* never runs */
}

Analist bu bloğu "gerçek" sanıp inceler; zaman kaybeder.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-03 · Maliyet ve sınır

  • Maliyet: düşük (sahte işlem) → orta (ölü dallar CFG'yi büyütür)
  • Sınır: ölü kod eleme, opak yüklem çözülürse dalı atar
  • Bağımlılık: opak yüklemin kalitesine bağlı
  • Ölçüm: ölü/gerçek dalı ayırt etme süresi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Kontrol akışı düzleştirme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Neyi korur?

Algoritmanın yapısını:

  • Blokların doğal komşuluğunu
  • "Hangi bloktan hangisine gidilir" bilgisini
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Fikir: dikey → yatay

  • Normal: bloklar birbirini izler (dikey akış)
  • Düzleştirilmiş: tüm bloklar tek switch dağıtıcıda (yatay)
  • Sıra yalnız bir durum değişkeninden okunur
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Şablon

int state = START;
for (;;) switch (state) {
  case START: state = STEP1; break;
  case STEP1: state = condition ? STEP2 : FAIL; break;
  case STEP2: state = DONE; break;
  case FAIL:  return DENIED;
  case DONE:  return GRANTED;
  default:    return DENIED;   /* random exit (K-05) */
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Tek başına zayıf

4. haftada söylemiştik: bu şablon deneyimli analiste kısa sürede çözülür.

Güç, güçlendirmelerden gelir. Sırayla:

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Güçlendirme 1 — durum değerleri (K-02)

  • case 1, 2, 3 yerine dağınık, aritmetikle üretilen değerler
  • Ardışıklık görünmez
  • Hangi adımın hangisini izlediği okunmaz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Güçlendirme 2 — sahte/ölü (K-03)

  • Sahte case'ler eklenir
  • Hangi case gerçek, ayırt etmek zorlaşır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Güçlendirme 3 — rastgele çıkış (K-05)

  • Hata, default dalından öngörülemeyen durumla çıkar
  • Başarısızlığın nerede olduğu okunmaz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Güçlendirme 4 — opak geçişler (K-01)

  • case geçişleri sabit değil, opak koşullara bağlı
  • Statik izleme daha da zorlaşır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-04 · Maliyet ve sınır

  • Maliyet: orta–yüksek (blok/dal çok artar, başarım düşer)
  • Sınır: yalnız düzleştirme → sembolik yürütmeyle açılır (bölüm 5)
  • Güç: güçlendirmelerden
  • Ölçüm: CFG düğüm/kenar sayısı, izleme süresi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Kontrol akışı düzleştirme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Düzleştirme — uç durum (en kısa yol)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-05 · Rastgele çıkış

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-05 · Neyi korur?

Bir denetimin nerede başarısız olduğunu.

Saldırgan tipik olarak:

  • "Başarısızlık dalını" bulur
  • Onu "başarı dalına" çevirir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-05 · Nasıl?

if (!signature_valid(p)) {
    state = unpredictable_value();  /* not defined in the switch → default */
    break;
}

Doğrudan return DENIED yok; durum öngörülemeyen bir değere gider.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-05 · Başarı da benzer çıksın

  • Başarılı çıkış da aynı yöntemle
  • Böylece başarı ve başarısızlık akışta birbirine benzer
  • Analist "işte kabul dalı" diyemez
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-05 · Maliyet ve sınır

  • Maliyet: düşük
  • Sınır: tek başına değil, düzleştirmeyle anlamlı
  • Hedef: tek bayt yaması denetimi atlatmaya yetmesin
  • Ölçüm: "başarısızlık dalını bul ve çevir" süresi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-06 · Çağrı ve bağımlılık gizleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-06 · Neyi korur?

İpuçlarını: "Şu fonksiyon memcmp çağırıyor → bir karşılaştırma yapıyor."

Standart kütüphane çağrıları ne yaptığınızı söyler.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-06 · Nasıl?

  • Kritik yolda memcmp yerine kendi sabit-zamanlı esit_mi
  • Bağlantı çözümleyicide tanınan ad görünmez
  • Sahte parametreler: hiç kullanılmayan parametreler ekle → imza yanıltıcı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-06 · ⚠️ Sabit zamanlılığı bozma

Kendi karşılaştırmanı yazarken sabit zamanlı olsun (3. hafta).

  • Erken çıkışlı karşılaştırma → yan kanal açar
  • Koruma eklerken yeni açık yaratma
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-06 · Maliyet ve sınır

  • Maliyet: düşük–orta (kendi sürümleri bakım ister)
  • Sınır: davranış analizi ne yaptığını yine gösterebilir → bu bir gecikme
  • Ölçüm: binary dosyada tanınan kütüphane çağrısı sayısı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 3 — özet

  • K-01 opak yüklem/döngü · K-02 aritmetik kodlama
  • K-03 sahte işlem ≠ ölü dal
  • K-04 düzleştirme (güçlendirmelerle)
  • K-05 rastgele çıkış · K-06 çağrı gizleme

Hiçbiri tek başına yeterli değil; birlikte ve ölçülmüş.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 3 — kısa sınama

  1. Sahte işlem ile ölü dal farkı?
  2. Düzleştirmeyi güçlendiren 4 kural?
  3. Rastgele çıkış hangi saldırıyı zorlaştırır?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 3 — cevaplar

  1. Sahte işlem çalışır ama sonucu değiştirmez; ölü dal opak yüklemle hiç çalışmaz.
  2. Durum değerlerini gizle (K-02) · sahte/ölü blok (K-03) · rastgele çıkış (K-05) · opak yüklem geçişleri (K-01).
  3. "Başarısızlık dalını bul ve başarıya çevir" saldırısını; artık tek-bayt yama yetmez.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

4. Veri ve program bütünü kuralları

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Veri gizleme kuralları K-07–K-09 — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kontrol akışı ≠ veri

  • Kontrol akışı (bölüm 3): algoritmanın yapısını gizler
  • Veri gizleme (bu bölüm): programın işlediği değerleri gizler

Dizeler, sabitler, tablolar, değişkenler.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · Dize kodlama

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · Neyi korur?

Binary dosyadaki okunabilir metinleri.

En ucuz saldırı adımı: strings.

"Lisans gecersiz" ya da bir URL → saldırgana nereye bakacağını söyler.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · Fikir

  • Hassas dize derleme öncesi kodlanır (ör. XOR)
  • Binary dosyada kodlanmış durur
  • Kullanım anında çözülür
  • İş biter bitmez silinir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · Örnek (sentetik)

static const uint8_t HIDDEN[] = {0x3B,0x2A,0x2E,0x2E,0x2D};
void use(void) {
    char tmp[sizeof HIDDEN];
    for (size_t i=0;i<sizeof HIDDEN;i++)
        tmp[i] = HIDDEN[i] ^ 0x5A;      /* decode */
    process(tmp, sizeof HIDDEN);
    secure_wipe(tmp, sizeof tmp); /* wipe immediately */
}
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · ⚠️ Kritik sınır

  • Çalışırken çözülmüş dize bellekte açık
  • Çözme anahtarı da binary dosyada
  • Bu bir statik tarama önlemidir

Sahada: çözme anahtarı parçalanır ve dağıtılır, çözme fonksiyonu ek denetimlerle korunur.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-07 · Dize gizleme ≠ anahtar saklama

Tekrar: dize gizleme strings'i durdurur, anahtar korumaz.

  • Anahtar için → whitebox (11. hafta) ya da donanım
  • Ölçüm: strings çıktısında hassas dize bulunmamalı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Dize şifreleme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Dize şifreleme — uç durum (hiçbiri geçerli değil)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-08 · Opak boolean

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-08 · Sorun: düz 0/1 tehlikeli

Bir denetimin sonucunu düz 0/1 döndürmek:

  • Saldırgan tek baytı çevirir
  • "Başarısız" → "başarılı" olur
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-08 · Fikir

Doğru/yanlış değerini:

  • Birden çok değere bağla
  • Tek bayt yamasıyla çevrilemeyecek biçimde tut

Fonksiyonlar düz boolean yerine opak dönüş kodu verir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-08 · Örnek (kavram)

typedef struct { uint32_t a, b; } Karar;
static Karar izin_ver(void) {
    return (Karar){ 0xA3C1u, 0x5C3Eu };  /* a ^ b == 0xFFFF */
}
static int karar_izin_mi(Karar k) {
    return (k.a ^ k.b) == 0xFFFFu;
}

Çağıran taraf iki alanı da doğrular.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-08 · Maliyet ve sınır

  • Maliyet: düşük
  • Sınır: yeterince incelenirse çözülür
  • Amaç: tek-bayt yamayı ve kaba dal-çevirmeyi engellemek
  • Ölçüm: sonucu çevirmek için gereken bağımsız nokta > 1
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Veri kodlama (opak boolean)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Veri kodlama — uç durum (hepsi geçerli)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-09 · Değişken bölme ve yeniden yapılandırma

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-09 · Neyi korur?

Hassas bir değişkenin bellekteki tanınabilir izini.

"32 baytlık blok = AES anahtarı" gibi kalıplar yol gösterir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-09 · Nasıl?

  • Değişkeni böl (32-bit'i iki 16-bit paydan üret)
  • Birden çok değişkeni tek söze birleştir
  • Dizileri yeniden düzenle
  • Tampon boyut/sıra/yerleşimini değiştir
  • Kullanımdan sonra rastgele değerle doldur
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-09 · Maliyet ve sınır

  • Maliyet: düşük–orta
  • Sınır: yalnız statik/kalıp analizini yavaşlatır
  • Ölçüm: hassas tamponun kalıptan tanınma süresi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Program bütünü: K-10, K-11, K-12

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-10 · Sanallaştırma (kavram)

Neyi korur? Bir fonksiyonun makine kodunu.

Nasıl? Fonksiyon → özel bir VM'in bayt koduna; binary'ye bayt kodu + küçük yorumlayıcı gömülür.

Saldırgan tanıdık kodu değil, önce çözmesi gereken özel komut kümesini görür.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-10 · Maliyet ve sınır

  • Maliyet: yüksek (yorumlanan kod yavaş; bakım pahalı)
  • Kullanım: yalnız en kritik, küçük, sık değişmeyen fonksiyonlar
  • Sınır: VM bir kez çözülürse tüm korunanlar açılır; çeşitlendirilmezse tüm kopyalar aynı
    1. hafta: Tigress Virtualize
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-11 · Derleyici tabanlı (O-LLVM)

Neyi korur? Yukarıdaki kuralları, el ile değil derleyici geçişiyle.

  • LLVM tabanlı gizleyiciler: düzleştirme, sahte akış, komut değiştirme geçişleri
  • Kaynak okunur kalır; koruma bir derleme seçeneği
  • Her sürümde farklı tohum → çeşitlendirme kolay
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-11 · Maliyet ve sınır

  • Maliyet: orta (geçişlere bağlı)
  • Sınır: bilinen geçiş kalıpları tanınır; araç sürümüyle güncel kal
  • Ölçüm: farklı tohumların ürettiği binary'ler arası fark
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-12 · Dinamik şifreleme (kavram)

Neyi korur? En hassas kod bölümlerini, binary'de şifreli tutarak.

Nasıl? Bölüm şifreli durur → yalnız çalışacağı an çözülür → sonra yeniden şifrelenir/silinir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-12 · ⚠️ Risk

  • OS bellek korumalarıyla (DEP/NX, W^X) doğrudan çatışır
  • Yanlış uygulanırsa hem çöker hem yeni açık yaratır
  • Çalışırken bir an kod bellekte açık → döküm yakalar
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

K-12 · Kural

Bir koruma eklerken başka bir korumayı kapatıyorsan, net kazancı ölç ve ödünleşim kaydına yaz.

Uygulamada çok seçici, küçük bölümlerde kullanılır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Java/yönetilen taraf (5. haftadan)

  • Bu haftanın kuralları native (C/C++) için
  • Yönetilen dilde karşılığı: ProGuard/R8 ad gizleme + ölü kod eleme + küçültme
  • -keep ve reflection ile çağrılan API'ler
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

İki taraf birlikte çalışır

  • Java tarafı R8 ile gizlenir
  • Native taraf bu haftanın kurallarıyla
  • Çapraz denetim: native Java'nın bütünlüğünü, Java native'in sağlamasını denetler (6. hafta RASP)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 4 — özet

  • K-07 dize kodlama · K-08 opak boolean · K-09 değişken bölme
  • K-10 sanallaştırma (pahalı) · K-11 derleyici (O-LLVM) · K-12 dinamik (riskli)

Veri gizleme, kontrol akışı gizlemeyi tamamlar.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 4 — kısa sınama

  1. Dize gizleme anahtarı korur mu?
  2. Opak boolean neden tek-bayt yamayı zorlaştırır?
  3. Sanallaştırmanın iki büyük maliyeti?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bölüm 4 — cevaplar

  1. Hayır. Çözülen dize bellekte açıktır, çözme anahtarı içeridedir; yalnız statik (strings) taramayı durdurur.
  2. Sonuç birden çok değere bağlıdır; sonucu çevirmek için >1 bağımsız noktayı değiştirmek gerekir.
  3. Yüksek başarım (onlarca kat yavaş) ve yüksek bakım maliyeti; bu yüzden yalnız küçük/kritik fonksiyonlara.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

5. Çeşitlendirme ve ölçme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Çeşitlendirme — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Çeşitlendirme: Kural 2'yi hatırla

Bir kopyada işe yarayan saldırı, bütün kopyalarda işe yaramasın.

Saldırgan bir kopyayı kırıp yamayı/betiği herkese dağıtabiliyorsa, bir kırık her yeri açar.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kökeni: biyolojiden ödünç bir fikir

  • 1993 — Fred Cohen, "Operating System Protection Through Program Evolution": sistemi zaman içinde
    değiştiren yazılım → zamanda çeşitlendirmenin köküdür
  • 1997 — Forrest, Somayaji, Ackley, "Building Diverse Computer Systems" (HotOS): davranışı değiştirmeyen
    rastgeleleştirme (ör. yığın çerçevesi boyutu) bir arabellek taşmasını bile bozar → uzayda çeşitlendirmenin köküdür

Doğada çeşitlilik bir hastalığın türün tamamını değil yalnız dirençsizleri öldürmesini sağlar; yazılımda da
aynı fikir bir kırığın tüm kopyaları açmasını önler.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Çeşitlendirme nedir?

Aynı kaynaktan davranışça eş, yapıca farklı binary dosyalar üretmek.

Opak yüklemler, sahte bloklar, durum değerleri kopyadan kopyaya değişir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

İki tür çeşitlendirme

  • Uzayda: her yapı/dağıtım farklı tohumla
    • Bir kopyaya yazılan saldırı diğerinde çalışmaz
  • Zamanda: her sürüm yeni düzenle
    • Eski sürüme yazılan saldırı yeni sürümde bozulur

10. haftadaki anahtar/sürüm yenilemeyle birlikte çalışır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Çeşitlendirme neyi engeller?

  • Gizlemenin gücünü artırmaz (bir kopyayı kırmak yine mümkün)
  • Ama ölçeklenmesini engeller
  1. hafta: Tigress --Seed, RandomFuns ile araçla.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Çeşitlendirme etkinliği: basit ölçüt

  • Aynı kaynağı iki farklı tohumla derle
  • Korunan fonksiyonların bayt farkını ölç
  • Fark ne kadar yüksekse, bir saldırının diğerinde çalışma olasılığı o kadar düşük

Ölçütü S9'a yaz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Çeşitlendirme

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Çeşitlendirme — uç durum (uzunluk hiç uymuyor)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizlemeyi ölçmek

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Neden ölçmek?

Bir koruma kararını savunmak için.

Collberg'in çerçevesi: dört boyut.

Bu dördü 13. haftadaki saldırı potansiyeli puanlamasının temeli.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ölçüt 1 — Güç (potency)

Soru: insana ne kadar anlaşılmaz?

Nasıl: karmaşıklık ölçütleri — CFG düğüm/kenar, çevrimsel karmaşıklık, iç içe geçme derinliği (önce/sonra).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ölçüt 2 — Dayanıklılık (resilience)

Soru: otomatik araca ne kadar dayanır?

Nasıl: bir deobfuscation aracının (sembolik yürütme, sadeleştirici) korumayı geri açma süresi/başarısı.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ölçüt 3 — Gizlilik (stealth)

Soru: gizleme kendini ele veriyor mu?

Nasıl: gizlenmiş kod normal koddan istatistiksel ayırt edilebiliyor mu?

Ayırt edilirse saldırgan nereye bakacağını bilir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ölçüt 4 — Maliyet (cost)

Soru: bize ne kadara mal oluyor?

Nasıl: boyut artışı, çalışma süresi, bellek, bakım, hata ayıklama zorluğu.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Düzleştirme öncesi (kavram)

Az düğüm, okunur akış.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Düzleştirme sonrası (kavram)

Çok düğüm, tek merkez; "sonra hangi blok" okunmaz.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Güç ölçümü örneği

Ölçüt Önce Sonra
Temel blok 5 34
Kenar 6 60
Çevrimsel karmaşıklık 3 28

Rakamları tersine derleyiciden alıp S9'a yazarsınız.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Maliyet ölçümü örneği

size ./program_clean ./program_obfuscated   # boyut
# süre: aynı girdiyle N kez çalıştır, ortalama
Ölçüt Önce Sonra
Boyut 100 KB 128 KB
İşlem süresi 1.0× 1.7×
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ölçümü yorumlamak

  • Güç ↑ (34 blok) ve maliyet ↑ (%28 boyut, 1.7× süre)
  • Bu ödünleşim beklenir
  • Karar: kazanç, varlık değerine göre kabul edilebilir mi?

"Güçlü" deme; bu sayıları göster.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Gizlemenin ölçülmesi

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Ölçüm — uç durum (en pahalı yol)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Dört ölçüt ödünleşir

Artırınca Olan
Güç ↑ / dayanıklılık ↑ Maliyet ↑
Karmaşıklık ↑ Gizlilik ↓ (daha çok dikkat çeker)

İyi karar: varlığın değerine göre dört boyutu dengele.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Karar kuralı (S9'a yazılır)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Deobfuscation ve dayanıklılık

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Neden karşı tarafın araçlarını bilmeliyiz?

Dayanıklılığı doğru ölçmek için.

Bunları savunmayı sınamak için öğreniriz — saldırı için değil.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Karşı tarafın araçları — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Araç 1 — sembolik yürütme (KLEE)

  • Program yolları matematiksel kısıt olarak çözülür
  • Opak yüklem ve düzleştirme bu yolla açılabilir

Dayanıklılık kuralı: opak yüklemleri çözmesi pahalı (çarpanlara ayırma, karma) yapılara bağla, durum uzayını büyüt — ama maliyeti ölç.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Deobfuscation

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Animasyon · Deobfuscation — uç durum (sıralı çift/tek)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Araç 2 — MBA sadeleştirici

  • Aritmetik kodlamayı (K-02) açar

  • Karşı önlem: kodlanmış sabitleri de opak yüklemlere bağla — birbirine bağlı katmanları ayrı ayrı çözmek zorlaşır

Kural: aritmetik kodlamayı tek başına bir sır katmanı sayma; kontrol akışıyla birleştir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Araç 3 — kalıp tanıma

  • Bilinen kütüphane/geçiş kalıplarını tanır

Kural: çeşitlendir; tek bir opak yüklem kalıbına ya da tek VM tasarımına bağlı kalma.

(uzayda: birden çok kalıp/tohum · zamanda: her sürümde kalıpları değiştir)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Ana çıkarım

Banescu vd. (Tigress + KLEE): hangi dönüşüm sembolik yürütmeye ne kadar dayanıyor, ölçülür.

Dayanıklılık bir iddia değil, ölçülen bir niceliktir.

"Güçlü" deme; bir sayı üret: "şu dönüşüm hattı, şu araca karşı, şu boyutta bir problemi şu sürede çözdürmedi."

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

6. Katmanlı savunma, proje, kapanış

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Katmanlı savunmada gizleme — şema

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Gizlemenin katmanlı savunmadaki yeri

Katman Hafta İlişki
Bellek güvenliği/derleme 4 Yerine geçmez; birlikte
RASP 6 Gizleme RASP'ı gizler; RASP gizlemeyi korur
Whitebox 11 Anahtarın asıl koruması; gizleme kabuk
Anahtar yenileme 10 "Yenilenene kadar" zaman
Sertifikasyon 12–13 Geciktirme puanlanır
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Sahadan bir gözlem

Sertifikalı üründe native önlemler bu haftanın kurallarının tümünü kapsar.

Ama belge her önlemin yanına: "tek başına güçlü değildir."

Değerlendiriciyi ikna eden: birliktelik + çeşitlendirme + ölçülmüş geciktirme.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Uçtan uca: katman katman koruma

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bu örneğin amacı

Tek bir sentetik denetimi (grant_access) alıp katman katman koruyacağız.

Her adımda: ne eklendi · ne kazandık · ne ödedik.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 0 · Korumasız başlangıç

int grant_access(const char *token) {
    if (token_valid(token))
        return GRANTED;      /* single branch, single return */
    return DENIED;
}

Zayıflık: tek dal, strings, tek bayt yamasıyla atlanır.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 0 · Saldırgan ne yapar?

  • strings → GRANTED/DENIED ve ilgili dizeler
  • Tersine derle → tek if, iki dönüş
  • Başarısızlık dalını başarıya çevir (tek bayt)

Süre: dakikalar. Uzmanlık: düşük.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 1 · K-07 dize/sabit kodla

/* GRANTED/DENIED and strings no longer appear in plain text */
static int grant_code(void){ return 0x9E ^ 0x9F; } /* =1 */
  • Kazanç: strings hassas metni bulmaz
  • Maliyet: çok düşük
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 1 · Ölçüm

Ölçüt Adım 0 Adım 1
strings hassas dize 3 0
Binary boyut temel +%0.5

İlk katman en ucuz, en yüksek getiri.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 2 · K-02 aritmetik kodla

/* comparison turns into a complex but equivalent expression */
int threshold = ((a ^ b) + 2*(a & b));   /* = a + b */
  • Kazanç: sabit/hesap doğrudan okunmaz
  • Maliyet: düşük
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 3 · K-04 düzleştir

int state = START;
for(;;) switch(state){
  case START: state = check()?STEP:FAIL; break;
  case STEP:  state = DONE; break;
  case FAIL:  return DENIED;
  case DONE: return GRANTED;
}

Tek if yok; sıra durum değişkeninde.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 3 · Ne değişti?

  • CFG artık "yatay" — bloklar tek switch'te
  • "Hangi dal başarı" doğrudan okunmaz
  • Maliyet: orta (blok/dal artar, biraz yavaşlar)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 4 · K-05 rastgele çıkış

if (!check()) { state = unpredictable_value(); break; } /* →default */
  • Hata nerede yakalandı, akıştan okunmaz
  • Tek bayt yaması artık yetmez
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 5 · K-03 sahte + ölü

crc ^= (s ^ s);            /* bogus operation: result unchanged */
if (opaque_false()) fake(); /* dead branch: never runs */
  • Gerçek mantık kalabalık içinde
  • Maliyet: orta
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 6 · K-08 opak boolean

Decision k = allow();               /* a^b==0xFFFF */
if (decision_grants(k)) apply();
  • Sonuç düz 0/1 değil → tek bayt çeviremez
  • Çevirmek için birden çok nokta gerekir
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Katmanların birikimli etkisi

Adım Kural Saldırı süresi (nispi) Maliyet
0 — 1× —
1 K-07 2× çok düşük
2 K-02 3× düşük
3 K-04 8× orta
4–6 K-05/03/08 20×+ orta

(Nispi, örnek amaçlı; gerçek değerler ölçülür.)

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Adım 7 · K-10 sanallaştırma?

  • Yalnız en kritik fonksiyon için
  • Maliyet: yüksek (onlarca kat yavaş)
  • Çoğu denetim için gereksiz

Kural: değeri düşükse buraya gelme.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Uçtan uca: çıkarım

  • Her katman saldırıyı biraz daha pahalı yaptı
  • Her katman bir maliyet ekledi
  • Nerede durduğun varlığın değerine ve ölçtüğüne bağlı

Bu tablo, S9'a koyacağın koruma tablosunun ta kendisidir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Proje · S9 (ileri sağlamlaştırma) — 1

1. Koruma tablosu

2–3 kritik bölüm için (lisans, anahtar türetme, bütünlük) kural şablonunu doldur:

neyi korur · tehdit · nasıl · maliyet · sınır · ölçüm

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Proje · S9 — 2

2. Ölçüm

En az bir teknik için önce/sonra:

  • strings çıktısındaki hassas dize sayısı
  • CFG düğüm sayısı
  • binary boyut, bir işlemin süresi
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Proje · S9 — 3, 4

3. Çeşitlendirme kararı: evet/hayır + gerekçe

4. Sınır ve kalan risk: her koruma neyi korumaz?

"Bu dize gizleme anahtarı korumaz; anahtar için S8 whitebox/donanım."

İleride: S15 (14. hafta, gizlemeyi derleme hattına koymak) · S16 (12. hafta, davranışın bozulmadığının testi).

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Değerlendirici gözüyle

S9'da aranan: "çok teknik kullandım" değil.

Aranan: her tekniğin gerekçesi ve ölçüsü.

Ölçülmemiş koruma = iddia. Kanıt değil.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kendini sınama (1–6)

  1. MATE ne? Kriptografiyi neden tek başına yetersiz bırakır?
  2. "Pahalı kılar" — varlık değeri örneğiyle?
  3. Sahte işlem ≠ ölü dal?
  4. Düzleştirme neden tek başına zayıf? 3 güçlendirici?
  5. Rastgele çıkış hangi saldırıyı zorlaştırır?
  6. Dize gizleme anahtarı korur mu?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kendini sınama — cevaplar (1–6)

  1. MATE = Man-At-The-End: saldırgan cihaza tam sahip (bellek, debugger, anahtar). Kripto güvenli uç varsayar; MATE'de anahtar çalışırken açığa çıkar → kripto tek başına yetmez.
  2. Gizleme kırılamazlık değil, saldırıya daha çok zaman/beceri/araç gerektirir. 100 TL'lik içeriği kırmak 10.000 TL emek isterse saldırgan vazgeçer.
  3. Sahte işlem çalışır ama sonucu kullanılmaz (analizciyi yorar); ölü dal opak yüklemle hiç çalışmaz.
  4. Düzleştirmede dispatcher deseni tanınır, durum değişkeni izlenir. Güçlendirici: opak yüklem · durum değişkeni şifreleme · sahte durum/bloklar + rastgele çıkış.
  5. Desen/eşleştirme ve otomatik betik saldırılarını (aynı giriş→aynı kalıp bekleyen) ve sembolik yürütmeyi zorlaştırır.
  6. Hayır. Dize/tablo gizleme statik strings'i zorlaştırır ama anahtar çalışırken bellekte açığa çıkar → whitebox/HSM gerekir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kendini sınama (7–12)

  1. Sanallaştırmanın iki maliyeti?
  2. Kendini değiştiren kod hangi OS korumasıyla çatışır?
  3. Dört ölçüt; hangileri ödünleşir?
  4. Çeşitlendirme gücü mü ölçeklenmeyi mi engeller?
  5. KLEE hangi kuralları zorlar? Dayanıklılık nasıl artar?
  6. Bir bölüm için kural şablonunu doldur.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kendini sınama — cevaplar (7–12)

  1. Büyük performans cezası (yorumlayıcı yavaş) + boyut artışı (VM + bytecode); bakım/hata ayıklama zorluğu.
  2. W^X / DEP-NX (yazılabilir+çalıştırılabilir bellek yasağı); kod sayfasını yazmak mprotect/VirtualProtect ister, engellenir/şüphelidir.
  3. Güç · dayanıklılık · gizlilik · maliyet. Güç/dayanıklılık ↑ → maliyet ↑ ve gizlilik ↓ (anormal görünür). Başlıca ödünleşim: dayanıklılık ↔ maliyet.
  4. Ölçeklenmeyi engeller — tek kopyanın gücünü artırmaz; bir kırık tüm kopyalara yayılmaz (saldırının yeniden kullanımını kırar).
  5. KLEE sembolik yürütme; opak yüklem/düzleştirmeyi çözebilir. Kural: yüklemleri sembolik yürütmeye dayanıklı (girdi-bağımlı, çözülmesi zor) yap; yol patlatan yapılar dayanıklılığı artırır.
  6. Örnek: Kural [düzleştirme] → Amaç [akışı gizle] → Nasıl [Tigress Flatten + opak yüklem] → Ölçüm [boyut +%X, hız −%Y, komut N→M]. Ölçüm satırı şarttır.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Terimler sözlüğü (1)

Terim Anlam
MATE / beyaz kutu Programa sahip saldırgan
Opak yüklem Değeri programcının bildiği, aracın zor çözdüğü koşul
Düzleştirme Akışı tek switch'e taşıma
Sahte işlem Çalışan ama sonucu değiştirmeyen kod
Ölü dal Hiç çalışmayan (opak yüklemli) dal
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Terimler sözlüğü (2)

Terim Anlam
Opak boolean Tek baytla çevrilemeyen doğru/yanlış
Sanallaştırma Fonksiyonu özel VM bayt koduna çevirme
Çeşitlendirme Aynı kaynaktan yapıca farklı kopyalar
Güç/dayanıklılık/gizlilik/maliyet Gizleme ölçütleri
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Kaynaklar

  • Cookbook (Viega & Messier) Bölüm 12 — anti-tampering
  • Güvenli programlama teknik kılavuzu — native karşı önlemler
  • Collberg & Nagra, Surreptitious Software — taksonomi, ölçme
  • Schrittwieser vd. (ACM CSUR 2016) — genel bakış, deobfuscation
  • Banescu vd. — Tigress + KLEE dayanıklılık ölçümü
  • Obfuscator-LLVM — derleyici tabanlı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 9

Bir sonraki hafta

10. hafta — Sertifikalar ve kriptografik yöntemler

Bu hafta "gizleme anahtarı korumaz" dedik; 10. haftada anahtarların doğru seçimi, yaşam döngüsü ve PKI ile korunması işlenir. Kural (bu hafta) → whitebox (11. hafta) → otomasyon (14. hafta): bu üç hafta bir bütündür.

Gizleme bir kale değil, bir geciktirme katmanıdır: kırılamazlık vermez, maliyet yükseltir; gücü birliktelikten, çeşitlendirmeden ve ölçülmüş olmaktan gelir.

RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz

Konuşma notu: Bu hafta ileri kod gizleme kurallarını işliyoruz. Çerçeve: gizleme kırılamaz kılmaz, pahalı kılar. Her tekniği bir güvenlik kuralı olarak veriyoruz — neyi korur, maliyeti, sınırı, nasıl ölçülür. Anahtar koruması gizleme değildir (11. hafta).

Konuşma notu: Bugün 4. haftadaki gizleme girişini ileri düzeye taşıyoruz ve ölçmeyi ekliyoruz. Ana çerçeve: gizleme kırılamazlık vermez, maliyet yükseltir. Her tekniği bir "kural" olarak veriyoruz.

Konuşma notu: Öğrencilere sordurun. Cevap: saldırganın makinesinde, sunucu denetimi geçersiz, sınırsız deneme.

Konuşma notu: Dört aileyi gerçek grant_access/obfuscated.c satırlarıyla gösterin, sonra dağıtıcıyı 10 jetonla çalıştırıp davranışın korunduğunu canlı izleyin.

Konuşma notu: 10 jetonun onu da geçerli — dağıtıcı her seferinde tam dolaşım yapar, hepsi GRANTED.

Konuşma notu: 5 gerçek kural x 2 varlık (ölçülmüş grant_access, kavramsal lisans_dogrula) — hangisinin ölçüldüğünü, hangisinin örnek olduğunu vurgulayın.

Konuşma notu: 10 satırın onu da lisans_dogrula — hiç ölçüm yok, "ölçtük" ile "örnekledik" farkını burada net gösterin.

Konuşma notu: önce sordur, sonra bu slaytı aç.

Konuşma notu: grant_access'in gerçek opaque_zero(x)=(x*(x+1))&1'ini birçok x için tarayın; hepsi 0 çıkıyor. Sonra gerçek kullanım satırını (40) gösterin.

Konuşma notu: JS güvenli tamsayı sınırının hemen altındaki büyük x değerlerinde de özdeşlik hâlâ 0 çıkıyor.

Konuşma notu: clean.c'nin doğal if-zinciri ile obfuscated.c'nin switch dağıtıcısını aynı jetonlarla yan yana çalıştırın.

Konuşma notu: hepsi yanlış uzunlukta — dağıtıcı DECODE/COMPARE'a hiç girmeden en kısa yoldan default'a düşüyor.

Konuşma notu: önce sordur, sonra aç.

Konuşma notu: ENCODED[]'in gerçek yaşam döngüsü — kodlu bekler, çözülür, HEMEN silinir; sonra bu döngünün her çağrıda tekrarlandığını gösterin.

Konuşma notu: 10 jetonun hiçbiri geçerli değil — yine de çöz+sil döngüsü her seferinde aynen çalışıyor, canlı doğrulayın.

Konuşma notu: saf int result (0/1) ile Decision{a,b} yan yana; bellek dökümünde hangisi anlamı hemen ele veriyor?

Konuşma notu: 10 jetonun onu da geçerli — a^b her seferinde 0xFFFF, hiçbir zaman değişmiyor.

Konuşma notu: önce sordur, sonra aç; ardından 5. bölüm.

Konuşma notu: iki makale de 30+ yıllık; Tigress'in --Seed'i bu fikri tek bir bayrağa indirger (14. hafta).

Konuşma notu: SEED=1001 ve SEED=2002 için MASK/ENCODED farklı ama 10 jetonda da GRANTED/DENIED aynı çıkıyor — canlı gösterin.

Konuşma notu: iki tohum da en kısa yoldan anında reddediyor — anlaşma yalnız "tam yolda" değil, her yolda geçerli.

Konuşma notu: gerçek 27->49 komut / 4->9 dal-çağrı sayılarını gösterin, sonra dinamik maliyeti (jeton başına adım) 10 jetonla canlı izleyin.

Konuşma notu: hepsi geçerli jeton — dağıtıcı her seferinde en uzun (6 adım) yolu izliyor, dinamik maliyet tavanda.

Konuşma notu: gerçek opaque_zero'yu periyodik kanıtla (x mod 2) sabit katlayın; sonra R-04/R-05/R-07'nin HÂLÂ ayakta olduğunu vurgulayın — dayanıklılık != maliyet.

Konuşma notu: x=0..9 sırayla — periyodu (2) doğrudan gözle gösterir, "yalnız 2 kalan sınıfı yeterli" iddiasını somutlaştırır.

Konuşma notu: Bu bölüm bütün kuralları tek örnekte birleştirir; tahtada canlı yapılabilir.