CEN429 Güvenli Programlama · Hafta 14

Tigress ve Çeşitlendirme

CEN429 Güvenli Programlama — Hafta 14

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

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

Bugünün planı (3 saat)

Saat Bölüm Konu
1 0–1 Temel kavramlar · kaynaktan kaynağa gizleme · Tigress · lisans · temel akış
2 2 Dönüşüm aileleri · 9. hafta eşlemesi · dönüşüm hattı · adım adım örnek
3 3–4 Çeşitlendirme · ölçme · sınıf içi akış · derleme hattı (S15) · proje
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Kısa tarihçe — kaynaktan kaynağa gizleme ve çeşitlendirme

  • 1993 — Cohen: çeşitlendirme fikri (aynı işlev, farklı ikili)
  • 1997 — Collberg vd. gizleme taksonomisi (9. haftanın temeli)
  • 2013 — Obfuscator-LLVM: derleyici tabanlı gizleme
  • 2010'lar — Tigress: C için kaynaktan kaynağa + sanallaştırma + çeşitlendirme
  • 2016–17 — Banescu vd. Tigress+KLEE ile dayanıklılığı ölçer

Ana kural: dayanıklılık ↔ maliyet; koruma varlığın değeriyle orantılı seçilir.

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

Bu hafta nereye oturuyor?

  • 9. hafta: gizleme kurallarını el ile öğrendik
  • 11. hafta: anahtar için whitebox
  • Bu hafta (14): aynı kuralları araçla, otomatik ve çeşitlendirilmiş uygulamak → Tigress

Üçü bir bütün; bugün otomasyon adımı.

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

Öğrenme çıktısı

Bu hafta ÖÇ.3 (ikili uygulama korumaları) üstünedir.

Sonunda yapabileceğiniz:

  • Kaynaktan kaynağa gizlemeyi açıklamak
  • Bir dönüşüm hattı kurmayı tarif etmek
  • Gizlemeyi çeşitlendirip ölçmek
  • Gizlemeyi derleme hattına koymak (S15)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Baştan bir hatırlatma

  1. haftanın ana kuralı bu hafta da geçerli:

Gizleme kırılamazlık vermez, maliyet yükseltir.

Tigress bir sihir değil; el ile yaptığımızı otomatikleştirir ve çeşitlendirmeyi kolaylaştırır.

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

0. Temel kavramlar (sıfırdan)

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

Neden bu bölüm?

Bugün "kaynaktan kaynağa", "dönüşüm", "tohum", "derleme hattı" gibi terimler geçecek.

Önce hepsini tek tek tanımlayalım.

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

Hatırlatma · kaynak, derleyici, ikili

  • Kaynak kod: insanın yazdığı program metni (C dosyası).
  • Derleyici: kaynağı makine koduna çeviren program (gcc/clang).
  • İkili dosya: çalıştırılan sonuç.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hatırlatma · gizleme

  • Kod gizleme (obfuscation): davranışı değiştirmeden kodu anlaşılması zor hale getirmek.
  • Amaç: saldırgan için maliyeti artırmak (9. hafta).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Kaynaktan kaynağa (source-to-source)

  • Girdi: C kaynağı. Çıktı: yine C kaynağı — ama gizlenmiş.
  • Sonra normal derleyicinizle derlenir.

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

Dönüşüm (transform) nedir?

  • Dönüşüm: kaynağa uygulanan tek bir gizleme işlemi (ör. düzleştirme).
  • Araç birçok dönüşüm sunar; siz hangisini, nereye seçersiniz.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Dönüşüm hattı (pipeline)

  • Hat: birden çok dönüşümün sırayla uygulanması.
  • Her dönüşüm bir öncekinin çıktısına uygulanır.
  • Sıra önemlidir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Tohum (seed) nedir?

  • Tohum: rastgeleliği yöneten bir başlangıç sayısı.
  • Aynı dönüşüm + farklı tohum = farklı gizlenmiş çıktı.
  • Çeşitlendirmenin anahtarı budur.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çeşitlendirme (diversification)

  • Çeşitlendirme: aynı kaynaktan davranışça eş, yapıca farklı ikili dosyalar üretmek.
  • Bir kopyaya yazılan saldırı diğerinde çalışmaz (9. hafta Kural 2).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

CLI (komut satırı) nedir?

  • CLI (Command-Line Interface): komutları yazarak çalıştırdığınız arayüz.
  • Tigress bir CLI aracıdır: tigress --Transform=... dosya.c.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Birim testi (unit test)

  • Birim testi: bir fonksiyonun doğru çalıştığını otomatik denetleyen küçük test.
  • Gizlemeden sonra aynı testler geçmeli (davranış korunmalı).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

CFG hatırlatma

  • CFG (Control Flow Graph): temel blokları düğüm, geçişleri kenar yapan şema.
  • Gizlemenin gücünü düğüm/kenar sayısıyla ölçeriz (9. hafta).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Sembolik yürütme (kısaca)

  • Sembolik yürütme: program yollarını matematiksel kısıt olarak çözen otomatik analiz (ör. KLEE).
  • Gizlemeye karşı bir deobfuscation yöntemidir; dayanıklılığı bununla sınarız.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Şimdi hazırız

Terimler:

kaynaktan kaynağa · dönüşüm · hat · tohum · çeşitlendirme · CLI · birim testi · CFG · sembolik yürütme

Şimdi: Tigress nedir ve nasıl çalışır?

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

1. Kaynaktan kaynağa gizleme ve Tigress

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

El ile gizlemenin üç sorunu

  1. haftada kuralları el ile uyguladık. Öğreticiydi ama:

  2. Hataya açık — davranışı bozabilir

  3. Bakımı zor — kaynak okunamaz olur

  4. Çeşitlendirilemez — her kopyayı elle farklılaştıramazsınız

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

Çözüm: araca yaptır

  • Gizlemeyi bir araç yapsın.
  • Siz okunur kaynağı koruyun.
  • Gizleme, derleme hattında otomatik bir adım olsun.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Kaynaktan kaynağa fikri

Bakım maliyeti okunur kaynakta kalır; dağıtılan kaynak gizli.

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

Dönüşüm hattı — şema

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

Tigress nedir?

  • Arizona Üniversitesi'nden Collberg ve ekibinin geliştirdiği kaynaktan kaynağa C gizleyici/çeşitlendirici.
    1. haftadaki el ile kuralların otomatik karşılığı.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Tigress · özellikler

  • Çok platform: Linux, macOS, Windows, Android
  • Mimariler: Intel, ARM, WebAssembly
  • Derleyiciler: GCC, Clang, MSVC
  • Güncel sürüm: v4
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

⚠️ Lisans (önemli)

  • Kâr amacı gütmeyen (akademik/araştırma) kullanım: ücretsiz.
  • Ticari kullanım: Arizona Üniversitesi'nden lisans gerekir.
  • Kaynak kodu açık değil; araştırmacılar şifreli kaynağa erişim isteyebilir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

⚠️ Derste kullanım kuralı

  • Derste Tigress ikilisi ya da eski sürüm dağıtılmaz.
  • Öğrenciler güncel sürümü resmî siteden (tigress.wtf) kendileri indirir.
  • Lisans koşulunu orada doğrular.
  • Yalnız kendi kodunuza, kendi makinenizde uygularsınız.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Neden araç, el ile değil? (1)

El ile (9. hafta) Araçla (Tigress)
Öğreticidir Ölçeklenir
Hataya açık Davranışı korur (test edilmiş)
Kaynak okunamaz Okunur kaynak sizde
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Neden araç, el ile değil? (2)

El ile Araçla
Çeşitlendirme elle olmaz Tohumla otomatik
Tek tip, tanınabilir Dönüşüm+tohum ile değişken
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ama araç da sihir değil

  • Tigress de kırılamazlık vermez, maliyet yükseltir.
  • İyi bilinen bir aracın kalıpları zamanla tanınabilir.
  • Bu yüzden çeşitlendirme ve katmanlı savunma (RASP, sunucu) yine şart.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Temel akış · tek dönüşüm

# girdi: temiz.c → çıktı: gizli.c
tigress --Transform=Flatten --Functions=erisim_ver \
        --out=gizli.c temiz.c
cc -o program gizli.c
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Temel akış · üç fikir

  1. --Transform=... hangi dönüşüm (Flatten = düzleştirme, 9. hafta K-04)
  2. --Functions=... hangi fonksiyonlara (yalnız hassas olanlara — maliyet kuralı)
  3. Çıktı yine C; kendi derleyicinizle derlersiniz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Neden --Functions ile hedef seçiyoruz?

  • Gizleme her fonksiyona uygulanırsa program çok yavaşlar/şişer.
  • Yalnız hassas fonksiyonları (lisans, anahtar türetme, bütünlük) hedefleriz.
  • Bu, 9. haftadaki "maliyet kuralının" araçtaki hâli.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

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

  1. Kaynaktan kaynağa gizleme nedir?
  2. El ile gizlemeye göre üç avantaj?
  3. Tigress derste neden dağıtılmaz?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Bölüm 1 — cevaplar

  1. Kaynak koda dönüşüm uygulanıp yeni kaynak (yine C) üretilir, sonra normal derlenir. Tigress C alır, gizlenmiş C verir.
  2. Tekrarlanabilir/otomatik (her build), tutarlı ve ölçekli (çok fonksiyon), orijinal kaynak temiz kalır + tohumla çeşitlendirme.
  3. Lisans/kullanım koşulları; herkes kendi indirir. Demolar Tigress yoksa temiz türev/fallback ile çalışır.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

2. Dönüşüm aileleri ve hat

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

Dönüşümler = 9. hafta kuralları

Tigress dönüşümleri, 9. haftadaki gizleme ailelerine karşılık gelir.

Grup grup görelim; her birini bir K-kuralına bağlayacağız.

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

Dönüşüm ↔ kural eşlemesi — şema

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

Kontrol akışı dönüşümleri

  • Flatten: kontrol akışını düzleştirir → K-04
  • InitOpaque / AddOpaque / UpdateOpaque: opak yüklem + sahte dal → K-01, K-03
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Veri dönüşümleri

  • EncodeArithmetic: aritmetiği denk karmaşık ifadeyle (MBA) → K-02
  • EncodeLiterals: sabit ve dizgeleri kodlar → K-07, K-08
  • EncodeData: değişken gösterimini kodlar → K-09
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Fonksiyon dönüşümleri

  • Split / Merge: fonksiyonları böler/birleştirir → K-06
  • Virtualize: fonksiyonu özel VM bayt koduna → K-10
  • Jit: kodu çalışma anında üretir → K-12 (dinamik)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Analiz-önleme dönüşümleri

  • AntiBranchAnalysis / AntiAliasAnalysis / AntiTaintAnalysis: statik analiz tekniklerini zorlaştırır → önleyici aile
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çeşitlendirme dönüşümleri

  • RandomFuns: rastgele sahte fonksiyonlar
  • RndArgs: sahte parametreler
  • Tohumla birleşince her yapı farklı → çeşitlendirme, K-06
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Uzayda/zamanda çeşitlendirme — şema

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

Dönüşüm ↔ kural · tablo

Tigress Ne yapar 9. hafta
Flatten Düzleştirme K-04
AddOpaque Opak yüklem/sahte K-01, K-03
EncodeArithmetic Aritmetik kodlama K-02
EncodeLiterals Sabit/dize K-07, K-08
Virtualize Sanallaştırma K-10
RandomFuns/RndArgs Çeşitlendirme K-06
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Aileler ve maliyet

  • Ucuz: EncodeArithmetic, EncodeLiterals
  • Orta: Flatten, opak yüklemler
  • Pahalı: Virtualize (onlarca kat yavaşlama)

Bu yüzden Virtualize yalnız küçük, kritik fonksiyonlara; --Functions ile hedeflenir.

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

Dönüşüm hattı

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

"Tek teknik değil, birlikte"

  1. haftanın en önemli kuralı.

Tigress'te bu, dönüşümleri sırayla uygulamak demektir.

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

Kavramsal hat

tigress \
  --Transform=EncodeLiterals   --Functions=erisim_ver \
  --Transform=EncodeArithmetic --Functions=erisim_ver \
  --Transform=Flatten          --Functions=erisim_ver \
  --Transform=AddOpaque        --Functions=erisim_ver \
  --out=gizli.c temiz.c
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat ne yapıyor?

Tek denetimi (erisim_ver):

  1. Sabit/dize kodla
  2. Aritmetiğini kodla
  3. Düzleştir
  4. Opak yüklemlerle güçlendir

= 9. haftada K-04'ün "güçlendirilmiş düzleştirme" dediği şeyin otomatik hâli.

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

⚠️ Sıra ve test kuralı

  • Dönüşüm sırası sonucu etkiler; kimi sıra başarımı gereksiz bozar.
  • Kural: her hattan sonra birim testlerini çalıştır (davranış korunmuş mu?) ve boyut/hız ölç.
  • Gizleme davranışı asla değiştirmemeli; değiştiriyorsa hat yanlış.

Bu, 12. haftadaki "S16 sonuçları"na bağlanır.

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

Adım adım örnek

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

Adım adım güçlendirme — şema

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

Başlangıç · temiz.c

int erisim_ver(const char *jeton) {
    if (jeton_gecerli(jeton)) return IZIN;  /* tek dal */
    return RED;
}

Korumasız: tek dal, strings, tek bayt yamasıyla atlanır.

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

Adım 0 · saldırgan

  • strings → IZIN/RED
  • Tersine derle → tek if
  • Başarısızlık dalını başarıya çevir

Süre: dakikalar.

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

Katman katman

Adım Dönüşüm Ne değişir Maliyet
0 — Tek bayt yamasıyla atlanır —
1 EncodeLiterals IZIN/RED düz görünmez Çok düşük
2 EncodeArithmetic Karşılaştırma karmaşık Düşük
3 Flatten Tek dal görünmez Orta
4 AddOpaque Sahte dallar Orta
5 Virtualize (gerekirse) VM bayt kodu Yüksek
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çıkarım

  • Her adım saldırıyı biraz daha pahalı yapar.
  • Her adım bir maliyet ekler.
  • Nerede duracağınız: varlık değeri + ölçtüğünüz maliyet.

Adım 5 (Virtualize) çoğu denetim için gereksiz.

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

Bu tablo → S9'un ta kendisi

Bu "adım / dönüşüm / ne değişir / maliyet" tablosu,

projede S9 koruma tablonuzun doğrudan karşılığıdır.

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

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

  1. Flatten, EncodeArithmetic, Virtualize hangi K-kurallarına karşılık?
  2. Neden --Functions ile hedef seçilir?
  3. Her hattan sonra mutlaka yapılacak iki şey?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Bölüm 2 — cevaplar

  1. Flatten = kontrol akışı düzleştirme; EncodeArithmetic = aritmetik/veri gizleme; Virtualize = sanallaştırma (en güçlü, en pahalı).
  2. Her fonksiyonu gizlemek maliyeti/performansı patlatır; yalnız hassas fonksiyonları seçmek dayanıklılığı oraya yoğunlaştırır.
  3. (1) Davranışı test et (birim testi geçmeli), (2) maliyeti ölç (boyut/hız/komut sayısı, önce-sonra).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

3. Çeşitlendirme ve ölçme

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

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ı 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 14

Çeşitlendirme nedir?

Aynı kaynaktan davranışça eş, yapıca farklı ikili dosyalar.

Tigress bunu bir tohum ile yapar:

  • Aynı dönüşümler + farklı tohum → opak yüklem, sahte dal, durum değerleri değişir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

İki tohum, iki farklı ikili

tigress --Seed=1001 --Transform=Flatten --Transform=AddOpaque \
        --Functions=erisim_ver --out=gizli_a.c temiz.c
tigress --Seed=2002 --Transform=Flatten --Transform=AddOpaque \
        --Functions=erisim_ver --out=gizli_b.c temiz.c

gizli_a ve gizli_b aynı işi yapar; makine kodları farklı.

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

İki tür çeşitlendirme

  • Uzayda: farklı kullanıcı/cihaza farklı tohumlu kopya → bir kopyanın saldırısı diğerinde çalışmaz.
  • Zamanda: her sürüm yeni tohum → eski saldırı yeni sürümde bozulur.
  1. haftadaki anahtar/sürüm yenilemeyle birlikte çalışır.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çeşitlendirme neyi engeller?

  • Gizlemenin gücünü artırmaz (bir kopyayı kırmak yine mümkün).
  • Ama ölçeklenmesini engeller.

RandomFuns, RndArgs de tohumla birleşince yapıyı değiştirir.

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

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

  • Aynı kaynağı iki 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 14

Gizlemeyi ölçmek

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

Tigress'in öğretim değeri

  1. haftada gizlemeyi dört boyutta (güç, dayanıklılık, gizlilik, maliyet) ölçmeyi öğrendik.

Tigress bu ölçümleri somut yapmanızı sağlar: aynı programı gizle, önce/sonra ölç.

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

Maliyet ölçümü (kolay, zorunlu)

Her hat için ölç ve S9/S15'e yaz:

Ölçüt Nasıl
İkili boyut size / ls -l
Çalışma süresi Aynı girdiyle N kez, ortalama
CFG karmaşıklığı Tersine derleyicide temel blok sayısı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Maliyet ölçümü · komut

size ./program_temiz ./program_gizli   # boyut farkı
# süre: aynı girdiyle N kez çalıştır, ortalamayı karşılaştır

Basit ama kanıt üretir.

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

Maliyet · örnek tablo

Ölçüt Önce Sonra
Boyut 100 KB 130 KB
Süre 1.0× 1.8×
Temel blok (hedef fn.) 5 40

Rakamlar örnek; siz kendi ölçtüğünüzü yazarsınız.

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

Dayanıklılık ölçümü (ileri, kavram)

  • Dayanıklılık = otomatik araca (sembolik yürütme) direnç.
    1. hafta: "iddia değil, ölçülen bir nicelik".
  • Tigress bu araştırmanın merkezinde.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Banescu vd. · Tigress + KLEE

Tigress dönüşümlerinin sembolik yürütmeye ne kadar dayandığını ölçen çalışma. Bulgular:

  • Tek dönüşüm (yalnız Flatten) → çoğu zaman geri açılır.
  • Dönüşümleri birleştirmek + durum uzayını büyütmek → çözücüyü üstel zorlar.
  • Ama maliyet de artar.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Dayanıklılık ↔ maliyet — şema

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

Ders için çıkarım

Dayanıklılık ve maliyet ödünleşir (9. haftadaki gibi).

"Güçlü" deme; "şu araca karşı şu boyutta problemi şu sürede çözdürmedi" de.

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

Ölçüm kuralı (S9/S15)

Bir gizleme kararını ölçüyle savun:

"Flatten + AddOpaque hattı boyutu %30 büyüttü, işlemi 1.8× yavaşlattı; hedef fonksiyonun temel blok sayısı 8 katına çıktı."

Ölçülmemiş gizleme = değerlendiricide (12. hafta) iddia.

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

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

  1. Tohum çeşitlendirmeyi nasıl sağlar?
  2. Uzayda ve zamanda çeşitlendirme farkı?
  3. Banescu vd.'nin ana kuralı? (dayanıklılık ↔ maliyet)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Bölüm 3 — cevaplar

  1. Aynı kaynağı farklı tohumla gizleyince araç farklı rastgele seçimler yapar → her build farklı ikili (aynı davranış).
  2. Uzayda: farklı kopyalar/kullanıcılar farklı (bir kırık herkesi kırmaz). Zamanda: sürümler arası değişir (kırık kalıcı olmaz).
  3. Daha güçlü gizleme daha çok dayanıklılık ama daha çok maliyet; koruma varlığın değeriyle orantılı seçilir.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

4. Sınıf içi akış (adım adım)

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

Sınıf içi akış — şema

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

Ne yapacağız?

Kendi küçük, sentetik programınızı:

gizle → davranışı doğrula → karşılaştır → ölç → çeşitlendir → raporla

Adım adım gidelim.

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

Adım 1 · Hazırlık

  • Küçük, sentetik bir program yaz (ör. erisim_ver).
  • Birim testleriyle doğru çalıştığını göster.
  • Bu senin "temiz" temel çizgin.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Adım 2 · Gizle

tigress --Transform=EncodeLiterals --Transform=EncodeArithmetic \
        --Transform=Flatten --Transform=AddOpaque \
        --Functions=erisim_ver --out=gizli.c temiz.c
cc -o program_gizli gizli.c

Bir dönüşüm hattı uygula.

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

Adım 3 · Davranışı doğrula

  • Aynı birim testlerini gizli sürümde çalıştır.
  • Sonuç birebir aynı olmalı.
  • Farklıysa: hat yanlış → düzelt.

Gizleme davranışı asla değiştirmez.

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

Adım 4 · Karşılaştır

  • Tersine derleyicide (Ghidra/objdump) temiz ve gizli sürümü aç.
  • Kontrol akışını karşılaştır.
  • Temel blok sayısındaki artışı not et.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Adım 5 · Ölç

size ./program_temiz ./program_gizli
# süre: aynı girdiyle N kez çalıştır, ortalamayı karşılaştır

Boyut ve süre farkını yaz.

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

Adım 6 · Çeşitlendir

  • Aynı hattı iki farklı tohumla çalıştır.
  • İki ikilinin farklı olduğunu göster (bayt farkı).
tigress --Seed=1001 ... --out=gizli_a.c temiz.c
tigress --Seed=2002 ... --out=gizli_b.c temiz.c
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Adım 7 · Raporla

Bulguları bir tabloya dök:

Dönüşüm Boyut Süre Blok Tohum farkı
… … … … …

Bu tablo doğrudan S9/S15'e girer.

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

⚠️ Etik ve güvenli kullanım

  • Tigress yalnız kendi kodunuza.
  • Örnek program bilgisayara zarar vermez: sistem ayarı değiştirmez, ağa dokunmaz.
  • Bütün değerler sentetik.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Sınıf içi · özet akış

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

Adım adım akış · neden bu sıra?

  • Önce davranış (testler) — bozulmadığından emin ol.
  • Sonra kanıt (CFG, ölçüm) — kazancı göster.
  • Sonra çeşitlendirme — ölçeklenmeyi kır.

Ölçmeden "güçlü" deme.

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

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

  1. Gizledikten sonra ilk mutlaka yapılacak şey?
  2. Çeşitlendirmeyi nasıl gösterirsin?
  3. Rapor tablosu hangi proje bölümlerine gider?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Bölüm 4 — cevaplar

  1. Davranışın değişmediğini test et (birim testi geçmeli); gizleme işlevi bozmamalı.
  2. İki farklı tohumla üret; ikilileri karşılaştır (hash/boyut/komut farklı) ama aynı girdi→aynı çıktı (diff/objdump).
  3. S9 (kod sağlamlaştırma) ve S15 (derleme/dağıtım hattı); önce/sonra ölçüm kanıt olarak.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

5. Derleme hattı (S15) ve proje

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

Gizleme "en sonda elle" değil

Gizleme, derleme hattının bir adımı olmalı.

Vize sonrası projenizin S15 bölümü tam bunu belgeler.

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

Derleme hattı · şema

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

Hat kuralı 1 · yalnız hassas fonksiyonlar

  • --Functions ile yalnız hassas fonksiyonları gizle.
  • Gerekçesini yaz (hangi fonksiyon, neden).
  • Maliyet kuralı (9. hafta).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat kuralı 2 · her sürüm çeşitlendirilir

  • Her sürüm bir tohumla çeşitlendirilir.
  • Tohum ve sürüm kimliği kaydedilir.
  • Zamanda çeşitlendirme (bölüm 3).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat kuralı 3 · imzalama gizlemeden sonra

  • Önce gizle, sonra imzala.
  • Sürüm kimliği ve özet değerleri (12. haftadaki TOE) tutarlı olsun.
  • Neden sonra? İmza, dağıtılan son ikiliyi kapsamalı.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat kuralı 4 · CI'da otomatik

  • Hat, sürekli entegrasyonda (CI) çalışır.
  • Her sürümde: birim testleri + boyut/hız ölçümü otomatik.
  • Davranış bozulursa yapı durur.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

9, 11, 14 birlikte

  • 9: gizleme kuralları (kod)
  • 11: whitebox (anahtar)
  • 14: otomasyon + çeşitlendirme (bu hafta)

Ortak kural: koruma = gecikme; güç katmanlardan ve ölçümden.

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

Proje · S9 ileri + S15 hat — 1

1. Dönüşüm hattı (S9): hangi fonksiyonlar, hangi dönüşümler, hangi sırayla, neden.

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

Proje · S9 + S15 — 2

2. Ölçüm tablosu: boyut, süre, (varsa) blok sayısı — önce/sonra.

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

Proje · S9 + S15 — 3

3. Çeşitlendirme: iki tohumla üretim + fark ölçütü; uygulamayacaksanız gerekçe.

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

Proje · S9 + S15 — 4, 5

4. S15 hattı: gizleme + imzalama + sürüm kimliği adımlarını diyagramla belgele.

5. Davranış kanıtı: gizli sürümün birim testlerini geçtiğini göster (S16 bağı).

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

Değerlendirici gözüyle

  • "Çok dönüşüm kullandım" değil.
  • Her dönüşümün gerekçesi ve ölçüsü.
  • Ölçülmemiş gizleme = iddia (12. hafta).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

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

  1. İmzalama neden gizlemeden sonra?
  2. "Yalnız hassas fonksiyonlar" kuralının gerekçesi?
  3. S15 hattının adımları?
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Bölüm 5 — cevaplar

  1. İmza son ikiliyi korur; önce imzalayıp sonra gizlersen ikili değişir → imza geçersiz. Sıra: derle → gizle → imzala.
  2. Bütünü gizlemek performans/boyutu patlatır ve çoğu kod hassas değil; korumayı kritik fonksiyonlara yoğunlaştır → maliyet düşük, etki yüksek.
  3. Kaynak → (statik analiz) → derle → gizle → çeşitlendir (tohum) → paketle/SBOM → imzala → dağıt (hepsi CI'da kayıtlı).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çözümlü kendini sınama

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

Soru 1

Kaynaktan kaynağa gizleme nedir? El ile gizlemeye göre üç avantajı?

Cevap: Araç C kaynağı alıp gizli C kaynağı üretir. Avantajlar: davranışı korur (hataya kapalı), okunur kaynak sizde kalır, tohumla çeşitlendirme kolay.

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

Soru 2

Tigress'in dersteki yeri; hangi lisans, neden derste dağıtılmaz?

Cevap: 9. hafta kurallarının otomatik hâli. Kâr amacı gütmeyen kullanım ücretsiz, ticari için Arizona lisansı. Kaynak kapalı → ikilisi derste dağıtılmaz; öğrenci resmî siteden indirir.

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

Soru 3

Şu dönüşümleri 9. hafta kurallarıyla eşle: Flatten, EncodeArithmetic, EncodeLiterals, Virtualize, AddOpaque.

Cevap: Flatten→K-04, EncodeArithmetic→K-02, EncodeLiterals→K-07/K-08, Virtualize→K-10, AddOpaque→K-01/K-03.

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

Soru 4

Bir dönüşüm hattı neden tek dönüşümden güçlü? Sıra neden önemli?

Cevap: Katmanlar birbirini güçlendirir (9. hafta "birlikte"). Sıra sonucu ve başarımı etkiler; kimi sıra gereksiz yavaşlatır ya da zayıf sonuç verir.

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

Soru 5

Her dönüşüm hattından sonra hangi iki şeyi mutlaka yaparsın?

Cevap: (1) Birim testlerini çalıştır (davranış korunmuş mu?), (2) boyut/hız ölç (maliyet).

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

Soru 6

Virtualize neden yalnız küçük ve kritik fonksiyonlara uygulanır?

Cevap: Maliyeti çok yüksek (onlarca kat yavaşlama, boyut). Getirisi ancak en değerli, küçük fonksiyonlarda maliyeti haklı çıkarır.

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

Soru 7

Tohum (--Seed) çeşitlendirmeyi nasıl sağlar? Uzayda/zamanda fark?

Cevap: Farklı tohum → farklı opak yüklem/sahte dal/durum. Uzayda: farklı kopyalar aynı anda. Zamanda: her sürüm yeni tohum.

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

Soru 8

Çeşitlendirme gizlemenin gücünü mü, ölçeklenmesini mi engeller?

Cevap: Gücünü artırmaz (bir kopya yine kırılabilir); ölçeklenmesini engeller — bir kırık her yeri açmaz.

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

Soru 9

Banescu vd. çalışmasının ders için ana kuralı?

Cevap: Dayanıklılık ölçülen bir niceliktir. Dönüşümleri birleştirmek sembolik yürütmeyi üstel zorlar; ama maliyet de artar → dayanıklılık ↔ maliyet ödünleşir.

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

Soru 10

Gizlemeyi derleme hattına koyarken imzalama neden gizlemeden sonra?

Cevap: İmza, dağıtılan son ikiliyi kapsamalı. Önce gizlenir, sonra imzalanır; sürüm kimliği/özet tutarlı olur.

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

Soru 11

S15'te "yalnız hassas fonksiyonlar gizlenir" kuralının gerekçesi?

Cevap: Her fonksiyonu gizlemek programı çok yavaşlatır/şişirir. Maliyeti yalnız değerli fonksiyonlarda üstlenmek mantıklı.

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

Soru 12

9, 11 ve 14. haftaların ortak kuralını bir cümleyle yaz.

Cevap: Koruma kırılamazlık değil gecikme sağlar; gücü katmanların birleşiminden, çeşitlendirmeden ve ölçülmüş olmaktan gelir.

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

Kapanış · üç hafta

  • 9: gizleme kuralları (el ile)
  • 11: whitebox (anahtar)
  • 14: otomasyon + çeşitlendirme

Hepsi aynı çerçeve: maliyet + katman + ölçüm.

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

Ek A · İşlenmiş ölçüm

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

Senaryo

erisim_ver fonksiyonunu iki hatla gizleyip ölçelim:

  • Hat A: EncodeLiterals + EncodeArithmetic (hafif)
  • Hat B: Hat A + Flatten + AddOpaque (ağır)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Önce · temel çizgi

program_temiz:
  boyut: 100 KB
  işlem süresi: 1.00× (referans)
  erisim_ver temel blok: 5
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat A · ölçüm (örnek)

boyut: 103 KB   (+%3)
süre:  1.05×
blok:  7
strings hassas dize: 0  (öncesi 3)

Ucuz; dize gizleme büyük getiri.

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

Hat B · ölçüm (örnek)

boyut: 131 KB   (+%31)
süre:  1.80×
blok:  40

Güç arttı (blok 5→40); maliyet de arttı.

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

Karşılaştırma tablosu

Ölçüt Temiz Hat A Hat B
Boyut 100 KB 103 KB 131 KB
Süre 1.00× 1.05× 1.80×
Blok 5 7 40
Hassas dize 3 0 0
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Karar

  • Varlık değeri düşük → Hat A yeter.
  • Varlık değeri yüksek → Hat B (maliyeti kabul et) + çeşitlendirme.

Karar sayılara dayanır, hisse değil.

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

Çeşitlendirme ölçümü (örnek)

  • Hat B'yi tohum 1001 ve 2002 ile üret.
  • Korunan fonksiyonun bayt farkı: %92.
  • Yorum: bir kopyaya yazılan yama diğerinde büyük olasılıkla çalışmaz.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ek B · Mini vaka

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

Vaka · kurgu

Sentetik bir uygulamada bir lisans denetimi ve bir anahtar türetme fonksiyonu var.

İkisini de mi ağır gizleyeceğiz?

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

Vaka · karar

  • Lisans denetimi: orta değer → Hat B (Flatten + AddOpaque).
  • Anahtar türetme: yüksek değer → Hat B + Virtualize (küçük olduğu için maliyet kabul edilebilir).
  • Gerisi: gizlenmez (maliyet gereksiz).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Vaka · çeşitlendirme + hat

  • Her sürüm farklı tohum.
  • Derleme hattı: gizle → imzala → sürüm kimliği.
  • CI'da birim testleri + ölçüm otomatik.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Vaka · S9/S15 çıktısı

Fonksiyon Hat Boyut/süre Gerekçe
lisans_dogrula B +%31 / 1.8× orta değer
anahtar_turet B+Virtualize +%60 / 3× yüksek değer, küçük fn.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Vaka · kalan risk

  • Yeterince kararlı saldırgan tek kopyada çözebilir.
  • Telafi: çeşitlendirme + kısa ömürlü anahtar + sunucu denetimi.
  • Açıkça yazılır.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ek C · Alternatif ve sınırlar

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

O-LLVM (derleyici tabanlı)

  • Obfuscator-LLVM: dönüşümleri derleme sırasında uygular.
  • Kaynaktan kaynağa değil; LLVM ara temsili üstünde.
    1. hafta K-11. Tigress'e bir alternatif.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Tigress mi, O-LLVM mi?

Tigress O-LLVM
Nerede Kaynak (C→C) Derleyici (IR)
Görünürlük Gizli kaynağı görebilirsin Derleme adımı
Dönüşüm zenginliği Çok (Virtualize dahil) Daha sınırlı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ortak sınır

  • İkisi de iyi bilinir → kalıpları tanınabilir.
  • İkisi de çeşitlendirme ve katmanlı savunma ister.
  • İkisi de kırılamazlık vermez.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Terimler sözlüğü

Terim Anlam
Kaynaktan kaynağa C girip gizli C çıkaran gizleme
Dönüşüm Tek gizleme işlemi
Hat Dönüşümlerin sıralı bütünü
Tohum Rastgeleliği yöneten sayı (çeşitlendirme)
Sembolik yürütme Yol-çözen otomatik analiz (KLEE)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Kaynaklar

  • Tigress resmî sitesi/çalışma sayfaları (tigress.wtf) — dönüşümler, sözdizimi, v4, lisans
  • Collberg & Nagra, Surreptitious Software — taksonomi, ölçme
  • Banescu vd. — Tigress + KLEE dayanıklılık ölçümü
  • Obfuscator-LLVM — derleyici tabanlı alternatif
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Özet: bu haftanın tek cümlesi

Tigress, 9. haftanın gizleme kurallarını otomatik ve çeşitlendirilmiş uygular; ama kural aynı: gizleme
kırılamazlık değil gecikme; birleştir, çeşitlendir, ölç.

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

Sonraki hafta

15. hafta — Final proje gösterimleri (RAP2)

Dönem içeriği tamamlandı. Final raporunda bu haftanın hattı (S15) ve ölçümleri (S9) beklenir. 16. hafta: Quiz-2.

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

Ek D · Dönüşüm dönüşüm

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

Neden tek tek?

Bir hat kurarken hangi dönüşümü neden seçtiğinizi bilmelisiniz.

Her dönüşümü: ne yapar · ne zaman · maliyet.

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

Flatten

  • Ne yapar: kontrol akışını tek switch'e taşır (K-04).
  • Ne zaman: algoritma yapısını gizlemek için; çoğu hatta.
  • Maliyet: orta.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

AddOpaque / InitOpaque

  • Ne yapar: opak yüklemler ve sahte dallar ekler (K-01, K-03).
  • Ne zaman: Flatten'ı güçlendirmek için.
  • Maliyet: orta.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

EncodeArithmetic

  • Ne yapar: aritmetiği denk karmaşık ifadeyle değiştirir (K-02).
  • Ne zaman: hesap/karşılaştırma içeren fonksiyonlarda.
  • Maliyet: düşük.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

EncodeLiterals

  • Ne yapar: sabit ve dizgeleri kodlar (K-07, K-08).
  • Ne zaman: neredeyse her zaman (ucuz, yüksek getiri).
  • Maliyet: çok düşük.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

EncodeData

  • Ne yapar: değişkenlerin gösterimini kodlar (K-09).
  • Ne zaman: hassas değişkenleri gizlemek için.
  • Maliyet: düşük–orta.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Split / Merge

  • Ne yapar: fonksiyonları böler/birleştirir; yapıyı bulanıklaştırır (K-06).
  • Ne zaman: fonksiyon sınırlarını gizlemek için.
  • Maliyet: düşük–orta.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Virtualize

  • Ne yapar: fonksiyonu özel VM bayt koduna çevirir (K-10).
  • Ne zaman: yalnız en kritik, küçük fonksiyonlar.
  • Maliyet: yüksek (onlarca kat yavaşlama).
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Jit

  • Ne yapar: kodu çalışma anında üretir (dinamik, K-12).
  • Ne zaman: çok seçici; ileri kullanım.
  • Maliyet: yüksek; OS korumalarıyla dikkat.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

AntiBranchAnalysis / AntiAliasAnalysis / AntiTaintAnalysis

  • Ne yapar: ilgili statik analiz tekniğini zorlaştırır (önleyici aile).
  • Ne zaman: belirli analiz tehdidine karşı.
  • Maliyet: değişken.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

RandomFuns / RndArgs

  • Ne yapar: rastgele sahte fonksiyon/parametre ekler.
  • Ne zaman: çeşitlendirmeyi güçlendirmek için (tohumla).
  • Maliyet: düşük–orta.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hangi dönüşüm önce?

Tipik sıra (kavramsal):

  1. EncodeLiterals (ucuz temizlik)
  2. EncodeArithmetic
  3. Flatten
  4. AddOpaque
  5. (gerekirse) Virtualize
  6. RandomFuns/RndArgs (çeşitlendirme)
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ek E · Gizleme kararı akışı

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

"Bu fonksiyonu gizlemeli miyim?" — 1

Soru 1: Bu fonksiyon hassas mı? (lisans, anahtar, bütünlük, denetim)

  • Hayır → gizleme; maliyeti boşa harcama.
  • Evet → devam.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

"Bu fonksiyonu gizlemeli miyim?" — 2

Soru 2: Değeri yüksek mi?

  • Orta → EncodeLiterals + EncodeArithmetic + Flatten + AddOpaque.
  • Yüksek ve küçük → yukarısı + Virtualize.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

"Bu fonksiyonu gizlemeli miyim?" — 3

Soru 3: Her durumda:

  • Çeşitlendir (tohum)
  • Ölç (boyut, süre, blok)
  • Birim testleriyle davranışı doğrula
  • S9/S15'e yaz
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Karar akışı · tek bakış

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

Ek F · Sık yapılan hatalar

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

Hata · her şeyi gizlemek

  • Tüm fonksiyonları gizlemek programı çok yavaşlatır/şişirir.
  • Yalnız hassas ve değerli fonksiyonlar.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hata · testsiz gizleme

  • Gizlemeden sonra birim testleri çalıştırılmazsa, bozuk davranış fark edilmez.
  • Her hattan sonra test zorunlu.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hata · ölçmeden "güçlü" demek

  • Ölçüm yoksa değerlendirici (12. hafta) bunu iddia sayar.
  • Boyut/süre/blok sayılarını yaz.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hata · çeşitlendirmeyi atlamak

  • Tek tip gizleme → bir kırık her kopyayı açar.
  • Her sürüm/dağıtım farklı tohum.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hata · imzayı gizlemeden önce yapmak

  • İmza dağıtılan son ikiliyi kapsamalı.
  • Önce gizle, sonra imzala.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hata · eski/dağıtılan Tigress kullanmak

  • Derste ikili dağıtılmaz; güncel sürümü resmî siteden indir.
  • Lisans koşulunu doğrula.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ek · kapanış notu

Bu ekler size kendi hattınızı kurmanın somut kalıbını verdi:

  • dönüşüm dönüşüm seçim
  • karar akışı
  • kaçınılacak hatalar

Doğru araç + doğru ölçüm + çeşitlendirme = savunulabilir bir S9/S15.

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

Ek G · İkinci işlenmiş hat

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

Yeni örnek · bütünlük denetimi

int dosya_saglam(const uint8_t *veri, size_t n,
                 const uint8_t *beklenen) {
    uint8_t ozet[32];
    ozet_hesapla(veri, n, ozet);        /* SHA-256 benzeri */
    return sabit_zamanli_esit(ozet, beklenen, 32);
}

Sürüm bütünlüğünü denetleyen sentetik bir fonksiyon.

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

Neden bunu gizleyelim?

  • Saldırgan bu denetimi bulup atlatmak ister (kurcalanmış dosyayı geçirmek için).
  • Denetimin dönüş noktası ve karşılaştırması hedef.
    1. hafta: opak boolean + rastgele çıkış burada kritik.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Hat seçimi

tigress \
  --Transform=EncodeLiterals \
  --Transform=EncodeArithmetic \
  --Transform=Flatten \
  --Transform=AddOpaque \
  --Functions=dosya_saglam \
  --out=gizli.c temiz.c
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Adım adım · ne olur?

  • EncodeLiterals: 32 ve varsa dizgeler düz görünmez.
  • EncodeArithmetic: karşılaştırma karmaşıklaşır.
  • Flatten: tek dönüş noktası görünmez.
  • AddOpaque: sahte dallar; "başarı" dalı tek yerde değil.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Davranış doğrulama (zorunlu)

  • Doğru özetli dosya → geçer.
  • Bozuk özetli dosya → reddedilir.
  • Gizli sürümde de aynı sonuç → hat doğru.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

CFG önce/sonra (kavram)

Denetimin nerede geçtiği/kaldığı akıştan okunmaz.

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

⚠️ Sabit zamanlılık korunmalı

  • sabit_zamanli_esit gizlense de sabit zamanlı kalmalı.
  • Gizleme uğruna erken çıkış eklenirse yan kanal açılır (3. hafta).
  • Dönüşümlerin bunu bozmadığını test et.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ölçüm (örnek)

Ölçüt Önce Sonra
Boyut 100 KB 128 KB
Süre 1.0× 1.7×
Blok (dosya_saglam) 4 33
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Çeşitlendirme

  • İki tohumla üret → iki farklı ikili.
  • "Bütünlük denetimini atla" yaması bir kopyada işe yarasa bile diğerinde yaramaz.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

İkinci örnek · çıkarım

  • Bütünlük denetimi gibi atlatma hedefi fonksiyonlarda gizleme değerlidir.
  • Ama asıl güç: gizleme + RASP (6. hafta) + sunucu denetimi.
  • Gizleme tek başına atlatmayı geciktirir, engellemez.
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Ek H · Hızlı başvuru

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

Dönüşüm seçim kılavuzu

İstediğin Dönüşüm
Dizge/sabit gizle EncodeLiterals
Hesabı gizle EncodeArithmetic
Yapıyı gizle Flatten
Sahte/opak ekle AddOpaque
Makine kodunu gizle Virtualize (pahalı)
Çeşitlendir --Seed, RandomFuns
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Kontrol listesi

  • [ ] Yalnız hassas fonksiyonlar (--Functions)
  • [ ] Hat sırası mantıklı (ucuzdan pahalıya)
  • [ ] Birim testleri geçiyor (davranış)
  • [ ] Boyut/süre/blok ölçüldü
  • [ ] İki tohumla çeşitlendirildi
  • [ ] İmza gizlemeden sonra
  • [ ] S9/S15'e yazıldı
RTEÜ Bilgisayar Mühendisliği · 2026-2027 Güz
CEN429 Güvenli Programlama · Hafta 14

Son söz (14. hafta)

Araç güçlüdür ama karar sizindir: neyi, neden, hangi maliyetle gizliyorsunuz?

Ölç, çeşitlendir, katmanla. Gizleme kırılamazlık değil, kazanılan zamandır.

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

Konuşma notu: Bu hafta 9. haftadaki gizleme kurallarının otomatik karşılığı Tigress ile kaynaktan kaynağa gizleme ve çeşitlendirme işleniyor. Ana kural: gizleme kırılamazlık vermez, maliyet yükseltir; dönüşümleri birleştir, çeşitlendir, ölç. Tigress yalnız kendi koda uygulanır; ikili derste dağıtılmaz.

Konuşma notu: Bu hafta 9. haftadaki el ile gizleme kurallarını araçla (Tigress) otomatikleştiriyoruz. Ana mesaj aynı: gizleme kırılamazlık vermez, maliyet yükseltir; birleştir, çeşitlendir, ölç.

Konuşma notu: Hiçbir ön bilgi varsaymıyoruz; 9. haftanın terimlerini kısaca hatırlatıp yenilerini ekliyoruz.

Konuşma notu: Sonra dönüşüm aileleri.

Konuşma notu: Dönüşüm adları sürümle küçük değişebilir; resmî belgeden doğrulanmalı. Kavramı 9. hafta kurallarına bağlıyoruz.

Konuşma notu: Ara sonrası çeşitlendirme ve ölçme.

Konuşma notu: Sonra sınıf içi akış, S15, proje.

Konuşma notu: Öğrenci Tigress'i kendi indirir, kendi küçük programına uygular. Tümüyle savunma amaçlı; kendi kodunu korur ve ölçer.

Konuşma notu: Sonra derleme hattı (S15) ve proje.

Konuşma notu: Sonra çözümlü kendini sınama.

Konuşma notu: Önce öğrenciye sordurun, sonra cevabı açın.

Konuşma notu: Somut, sentetik sayılarla bir ölçüm turu; tahtada yapılabilir.

Konuşma notu: En çok kullanılan dönüşümleri tek tek, ne yaptığı/ne zaman/maliyeti ile ele alıyoruz.

Konuşma notu: İkinci bir sentetik örnekle hattı pekiştiriyoruz; farklı bir fonksiyon türü.