Sunday, April 5, 2026

Steelseries Engine 3 ve Rival 100 not connected problemi.

Rival 100 mouse kullanıyorum. Bazen soldaki B4-B5 tuşlarına atadığım ses kontrolü çalışmıyor.

SteelSeries Engine 3'ü açıp bakınca Rival 100'ün yanında Not Connected yazıyor.

Mouse takılı ve çalışıyor, ama Steelseries Engine 3 yazılımı mouse'u görmüyor.

SteelSeries Engine 3, mouse'u tanıyamazsa tüm özel atamalar devre dışı kalıyor. Volume up, volume down, ben sadece bu tuşları kullandığım bunlar gidiyor, muhtemelen diğer atamalar da gidiyordur, denemedim. Çözüm için USB'yi çıkarıp takıyorum ya da bilgisayarı yeniden başlatıyorum, sorun geçici olarak düzeliyor. Ama bu her seferinde yapılacak bir şey değil. Zaten sonra rastgele bir restartta tekrar ediyor.

Rival 100, Windows'a USB Composite Device olarak bağlanıyor. Yani tek bir fiziksel cihaz, Windows'a birden fazla giriş olarak görünüyor. Bunların hepsinin düzgün başlatılması gerekiyor.

Bazen sistem açılışında bu başlatma süreci aksıyor. Mouse fiziksel olarak çalışıyor ama Engine 3 cihazı recognize edememiş oluyor.

Device Manager'da driver uninstall/reinstall yapmak işe yaramıyor.

Yazılımsal çözüm: USBDeview

Fiziksel olarak USB'yi çıkarıp takmanın tam yazılım karşılığı NirSoft'un ücretsiz aracı USBDeview.

İndirme linki: nirsoft.net/utils/usb_devices_view.html

Kurulum yok, portable .exe.

  1. USBDeview yönetici olarak çalıştırılır. (Sağ tık → Run as Administrator)
  2. Listede SteelSeries Rival 100 için üç satır var: USB Composite Device olanı resetlenecek.
  3. Üzerine sağ tıklayıp, Disable+Enable seçilir.
  4. Engine 3 kapatıp açılır.

Mouse connected görünüyor, atamalar geri geliyor.

Neden Composite Device? Çünkü diğer iki girişin (HID ve USB Input Device) ebeveyni o. Onu sıfırlayınca altındaki her şey yeniden başlatılıyor. Tek tek uğraşmaya gerek yok.

Kalıcı çözüm: USB güç tasarrufunu kapatmak

USBDeview sorunu çözüyor. Ama sorun tekrar yaşanıyor. 

Sebep büyük ihtimalle Windows'un USB güç tasarrufu özelliği. Bu seçenek belirli koşullarda USB cihazlarını uyutabiliyor. Mouse fiziksel olarak çalışmaya devam ediyor ama Engine 3 bağlantıyı kaybediyor.

Kapatmak için:

  1. Denetim Masası → Güç Seçenekleri
  2. Aktif planın yanındaki Plan ayarlarını değiştir
  3. Gelişmiş güç ayarlarını değiştir
  4. USB ayarları → USB seçici askıya alma ayarı → Devre dışı

Şimdilik bu kadar. Sorunun tekrarlanıp tekrarlamadığını birkaç gün izleyeceğim.


Friday, April 3, 2026

Açık Kaynağın Karanlık Yüzü: Dependency Hell ve Güvenlik Kabusu

"Sadece npm install yap"


Bir uygulama geliştirmeye karar verdiniz. Modern, açık kaynak araçlar kullanacaksınız. Ücretsiz, özgür, topluluk destekli. Harika.

İlk komutunuzu yazıyorsunuz:

npm install

Ve başlıyor. Ekran dolup taşıyor. Yüzlerce paket, onlarca uyarı, birkaç hata. Beş dakika sonra hâlâ kurulum yapıyor. On dakika sonra bir şeyler ters gidiyor.

Hoş geldiniz. Dependency hell'e düştünüz.

Bu nasıl bir yer?

Bir Node.js projesi açın, node_modules klasörüne bakın. Siz 5 paket istediniz. Ama orada 1.500, belki 2.000 paket vardır. Geri kalanı ne?

Onların bağımlılıkları. Onların bağımlılıklarının bağımlılıkları. Onların bağımlılıklarının bağımlılıklarının bağımlılıkları.

Bir paket "A" ister, A paketi "B v2.x" ister, başka bir paket "B v3.x" ister, ikisi uyuşmaz, Metro bundler çöker, ekran kırmızıya döner. Günün geri kalanı bu hatayla geçer.

npm ekosisteminde 2 milyondan fazla paket var. Bu sayı her gün büyüyor. Hiçbir merkezi denetim mekanizması yok. Herkes her şeyi yayınlayabiliyor.

left-pad: İnternetin 11 Satıra Bağlı Olduğu Gün

2016 yılında Azer Koçulu isminde bir geliştirici, npm'deki "left-pad" adlı paketini sildi. Bir hukuki anlaşmazlık yüzünden kızmıştı, paketi çekti.

left-pad ne yapıyordu? Bir string'in soluna boşluk ekliyordu. 11 satır kod.

Sonuç: React çöktü. Babel çöktü. Binlerce proje build edilemez hale geldi. Dünyanın dört bir yanında CI/CD pipeline'ları durdu. Şirketler saatler içinde milyonlarca dolar kaybetti.

İnternetin önemli bir kısmı, tek bir insanın sinirli bir öğleden sonrasına bağlıydı.

event-stream: Hacker'ın Hediyelik Paketi

2018'de daha da ürkütücü bir şey yaşandı.

"event-stream" popüler bir npm paketiydi. Geliştirici paketi artık aktif olarak sürdürmediğini, devretmek istediğini açıkladı. "right9ctrl" isimli biri gönüllü oldu ve paketi devraldı.

Haftalarca kimse fark etmedi. Ta ki bir araştırmacı, paketin içine gizlenmiş kod parçasını bulana kadar.

O kod ne yapıyordu? Kullanıcıların kripto para cüzdanlarını arıyor, özel anahtarları çalıyordu. Hedef spesifikti: Copay isimli bir Bitcoin cüzdan uygulaması.

Paket bu sürede milyonlarca kez indirilmişti.

Peki kim fark etti? Bir GitHub kullanıcısı. Gönüllü, ücretsiz çalışan biri.

Kim Denetliyor?

Kısa cevap: Kimse.

npm'in otomatik tarama sistemleri var. Bilinen zararlı yazılım imzalarını arıyor. Ama sıfırıncı gün saldırıları için, özellikle hazırlanmış hedefli kötü kod için bu taramalar kör.

Büyük şirketler kendi çözümlerini üretmiş durumda. Google, Meta, Microsoft kritik paketleri fork edip kendi güvenlik ekiplerinden geçiriyor. Ama bu lüks her şirkete nasip olmuyor.

Snyk, Dependabot, Socket gibi araçlar bilinen açıkları takip ediyor. CVE veritabanlarıyla karşılaştırıyor. Faydalılar, ama reaktifler: açık önce bulunuyor, sonra işaretleniyor, sonra siz güncelliyorsunuz. Bu arada ne kadar süre geçiyor?

Açık Kaynak'ın Trajedisi

Burada bir paradoks var.

Açık kaynak, yazılım dünyasını demokratikleştirdi. Bir öğrenci, dünyaca kullanılan bir kütüphane yazabiliyor. Küçük şirketler, enterprise araçları ücretsiz kullanabiliyor. Bilgi paylaşılıyor, ilerleme hızlanıyor.

Ama bu ekosistem, gönüllü emeği üzerine kurulu. Ve gönüllü emek tükeniyor.

"left-pad" geliştiricisi yoruldu, bıraktı. "event-stream" geliştiricisi yoruldu, devretti. Her gün onlarca kritik paket, hayatının farklı bir dönemine geçmiş, artık ilgilenemeyen biri tarafından "sürdürülüyor."

Siz o paketi kullanıyorsunuz. Onun bağımlılığının bağımlılığı olarak. Habersizce.

Microsoft'un Kapalı Dünyası mı Daha İyiydi?

Nostalji tehlikeli. Eski Microsoft dünyasının da bedelleri vardı.

Her şey Windows'a kilitliydi. Lisanslar pahalıydı. Topluluk katkısı neredeyse sıfırdı. "Linux bir kanser" diyen bir şirketten bahsediyoruz. Yenilik yavaştı, her şey Microsoft'un roadmap'ine bağlıydı.

O dünya güvenliydi çünkü dardı. Bugünkü dünya özgür ama kaotik.

İkisi arasında sağlıklı bir denge henüz bulunamadı.

Ne Yapmalı?

Bağımlılıklarınızı tanıyın. npm ls ile dependency tree'ye bakın. Her paketin ne yaptığını en azından kabaca bilin.

Sürümleri kilitleyin. package-lock.json'u commit edin. ^ ve ~ versiyonlarına dikkat edin, her npm install'da farklı bir şey kurulabilir.

Güvenlik taraması yapın. npm audit çalıştırın. Snyk veya Dependabot entegre edin. Mükemmel değil ama hiç yoktan iyi.

Az bağımlılık, daha az risk. Her şey için paket kurmak yerine zaman zaman kendiniz yazın. 11 satırlık bir şey için left-pad kurmayın.

Büyük, aktif topluluğa sahip paketleri tercih edin. Son commit tarihi 4 yıl önceyse, o paket için iki kez düşünün.

Son Söz

Bugün bir uygulama kurarken Node versiyonu uyumsuzluğu, Expo SDK çakışması, TurboModule hatası, babel-preset eksikliği derken saatler harcadım.

Şikâyet etmek kolay. Ama şunu da söylemek lazım: bu kaotik, güvensiz, yorucu ekosistemi gönüllüler inşa etti. Ücretsiz. Bazen gecenin üçünde. Karşılıksız.

Belki de asıl sorun, milyar dolarlık şirketlerin bu gönüllü emeğin üzerine ticari ürünler inşa etmesi ve o emekçilere yeterince geri vermemesi.

Ama bu başka bir yazının konusu.


Bu yazıyı bir React Native uygulaması kurulum hatasının 15. dakikasında yazmaya karar verdim. Uygulama 1.5 saatte çalıştı.

Monday, March 30, 2026

Calibro'dan satın aldığım kitabı okumak için verdiğim uğraş.

Geçen hafta Calibro'dan Cynthia Stokes Brown'ın Büyük Tarih: Büyük Patlamadan Bugüne adlı kitabını e-kitap formatında satın aldım, indirdim, açmaya çalıştım — ve işte o zaman eğlence başladı.

Kitap açılmıyordu. Daha doğrusu, sadece Calibro'nun kendi uygulamasında açılıyordu. Bu uygulamayı telefona kurmayı denedim, Android telefonumda uygulama güncel değil gibi bir hata verdi ve çalışmadı. Bilgisayarda okumayı denedim, olmadı. Satın aldığım bir şeyi okuyamıyordum.

Calibro'ya mail attım. Tweet attım. Yanıt vermediler.

O gece bir karar verdim: Bu kitabı okuyacaktım.


DRM Nedir?

DRM (Digital Rights Management), dijital içerikleri korumak için kullanılan şifreleme sistemidir. Teoride mantıklıdır: İçerik üreticilerinin haklarını korur. Pratikte ise satın aldığın bir şeyi kullanamamana neden olur.

Calibro, PocketBook'un PBDRM sistemini kullanıyor. Kitap .lndrm uzantılı bir dosya olarak geliyor. İçini hex editörle açınca şunu gördüm:

50 42 44 52 4D ...  →  "PBDRM" magic bytes

Adobe ADEPT altyapısı üzerine kurulu, RSA + AES-128-CBC şifreleme kullanıyor. Yani:

  1. Kitabın içeriği AES-128-CBC ile şifrelenmiş
  2. AES anahtarı RSA ile şifrelenmiş
  3. RSA şifrelemek için Calibro'nun sunucu tarafındaki public key kullanılmış
  4. Çözmek için Calibro'nun elindeki private key gerekiyor

İlk Hamle: Adobe Digital Editions

İlk denediğim şey Adobe Digital Editions (ADE) ve DeDRM plugin'iydi. Bu ikili çoğu e-kitap DRM'ini kaldırabiliyor. Ama ADE denemeye başlamadan önce şöyle bir hata verdi:

E_ADEPT_NO_TOKEN

Bu hata, ADE'nin Adobe'nin lisans sunucusundan (adeactivate.adobe.com) token alamaması anlamına geliyor. Çözüm denemeleri:

  • ADE'yi deauthorize edip yeniden authorize etmek
  • VPN'i kapatmak
  • Hosts dosyasında Adobe sunucularının bloklanıp bloklanmadığını kontrol etmek (/etc/hosts veya C:\Windows\System32\drivers\etc\hosts)
  • ADE'yi güncellemek

Hiçbiri işe yaramadı. Üstelik DeDRM plugin, PBDRM formatını zaten tanımıyordu — bu Adobe'nin standart ADEPT formatı değil, PocketBook'un özel bir implementasyonu.


Memu Emülatörü

Calibro Reader yalnızca Android'de çalışıyor ve güncel telefonlarda çalışmıyor. Çözüm: Memu — Windows'ta Android uygulamaları çalıştıran bir emülatör.

Memu → Android x86_64 emülatör
Calibro Reader APK → ARM binary

Uygulama kuruldu ve kitap açıldı. Bu aşamada kitabı sadece Memu altında okuyabilecektim, aradığım çözüm bu değildi elbette.


PBDRM Header Analizi

Kitap dosyasını Python ile incelemeye başladım:

data = open('kitap.lndrm', 'rb').read()
print(data[:32].hex())
# 5042 4452 4d00 0100 a896 3191 69d0 5969...
# P B D R M

Header yapısı:

OffsetUzunlukİçerik
0x005 bytePBDRM magic
0x052 byte0x0001 type
0x072 byte0x00a8 = 168 (şifreli anahtar uzunluğu)
0x09168 byteRSA ile şifreli AES anahtarı
0x12016 byteIV (initialization vector)
0x130~AES ile şifreli içerik

168 byte ilginçti — RSA-1024 için 128 byte olması gerekir. Fazladan 40 byte'ta ne var? Bunun üzerinde saatlerce çalıştım: IV mi, salt mı, başka bir şey mi?


activation.xml

Uygulamanın data dizininde kritik dosyalar vardı:

adb shell "ls /data/data/com.calibro.reader/app_resources/"
# activation.xml
# device.xml

activation.xml Adobe ADEPT formatındaydı. İçinde iki önemli şey:

  1. privateLicenseKey: RSA-1024 private key (base64 encoded)
  2. pkcs12: Şifreli PKCS12 sertifikası
import base64, xml.etree.ElementTree as ET
from Crypto.PublicKey import RSA

tree = ET.parse('activation.xml')
pk_b64 = tree.find('.//{http://ns.adobe.com/adept}privateLicenseKey').text
pk_der = base64.b64decode(pk_b64)
rsa_key = RSA.import_key(pk_der)
print(f"Key boyutu: {rsa_key.size_in_bytes()} bytes")  # 128

privateLicenseKey ile .lndrm dosyasındaki 168 byte'lık bloğu çözmeye çalıştım. 168 byte içinde 128 byte'lık RSA bloğunun hangi offset'te olduğunu bulmak için brute force:

from Crypto.Cipher import PKCS1_v1_5

full_block = data[0x09:0x09+168]

for offset in range(0, 41):
    rsa_block = full_block[offset:offset+128]
    cipher = PKCS1_v1_5.new(rsa_key)
    result = cipher.decrypt(rsa_block, b'\xff' * 32)
    if result != b'\xff' * 32:
        print(f"[+] offset={offset}: {result.hex()}")

Hiçbir offset'te başarılı decrypt elde edemedim. Neden? Çünkü privateLicenseKey kullanıcı kimlik doğrulama anahtarıydı — kitap şifreleme anahtarı değildi. Gerçek şifre çözme anahtarı Calibro'nun sunucusundaydı.

PKCS12 sertifikasının şifresini kırmayı denedim — cihazın fingerprint'i, device ID, salt gibi değerleri şifre olarak denedim. Hepsi başarısız oldu.


Frida ile Hook Denemesi

Eğer anahtarı statik analiz ile bulamıyorsam, uygulama çalışırken dinamik olarak yakalamayı deneyebilirdim. Frida bunun için ideal araç — çalışan bir process'e JavaScript kodu enjekte etmeyi sağlıyor.

Plan: libpb_reader.so veya libadobe_rmsdk.so içindeki AES/RSA fonksiyonlarını hook'layıp şifre çözme anında anahtarı yakalamak.

Java.perform(function() {
    var EVP_DecryptInit_ex = Module.findExportByName(
        "libpb_reader.so",
        "EVP_DecryptInit_ex"
    );
    Interceptor.attach(EVP_DecryptInit_ex, {
        onEnter: function(args) {
            var key = args[3].readByteArray(16);
            console.log("[+] AES KEY: " + bytesToHex(key));
        }
    });
});

Ama Frida modülleri listelerken libpb_reader.so ve libadobe_rmsdk.so hiç görünmüyordu. Neden? Houdini.

Houdini Nedir?

Memu x86_64 tabanlı bir emülatör. Calibro Reader ise ARM binary. Intel'in Houdini katmanı ARM kodunu gerçek zamanlı olarak x86'ya çevirerek çalıştırıyor. Bu işlem Frida'nın göremediği ayrı bir memory space'de gerçekleşiyor.

Frida → x86_64 process görüyor
Houdini → ARM kütüphanelerini kendi içinde çalıştırıyor
libpb_reader.so (ARM) → Frida'ya görünmüyor

Memu'yu ARM moduna geçirdim (System Settings → Preferences → ABI → ARM). Fark etmedi — Android sistemi x86_64 kalmaya devam etti, Frida hala ARM kütüphanelerine ulaşamadı.


/proc/pid/mem — Memory Dump Denemesi

Belki şifresi çözülmüş veriyi doğrudan RAM'den okuyabilirdim. EPUB dosyaları ZIP formatındadır, magic bytes: PK\x03\x04. Uygulama kitabı render ettiğinde bu veri bir an için RAM'de olmalı.

frida-ps -U | grep calibro
# 5254  com.calibro.reader:viewer

adb shell "su 0 cat /proc/5254/maps" > maps.txt

maps.txt'e bakınca libpb_reader.so ve libadobe_rmsdk.so ARM binary olarak yüklenmiş görünüyordu. Heap bölgelerini dump etmeye çalıştım:

cmd = f'adb shell "su 0 dd if=/proc/5254/mem bs=4096 skip={start//4096} count={size//4096}"'
# Sonuç: boş

/proc/pid/mem okuma bu Memu kurulumunda root ile bile çalışmıyordu.


Sonuç: DRM Kırılamazdı.

Şifre çözme anahtarı Calibro'nun sunucusunda. Cihaza hiçbir zaman tam olarak gönderilmiyor. Native ARM kod (Houdini altında) onu alıp kullanıyor, dışarıya sızdırmıyor. Frida ARM kütüphanelerine erişemiyor.

Bu noktada stratejimi değiştirdim.


Plan B: Ekran Görüntüsü Otomasyonu

Uygulama kitabı ekranda gösteriyordu. Ekranda olan her şey yakalanabilir :)

İlk deneme:

adb shell screencap -p /sdcard/test.png

Sonuç: Tamamen beyaz, boş PNG. Neden? FLAG_SECURE. Bu Android flag'i ekran görüntüsü alınmasını engeller.

Ama Memu'nun kendi screenshot mekanizması bu flag'i atlıyordu. Peki bunu ADB ile tetikleyebilir miydim?

adb shell "input keyevent 120"
# 120 = KEYCODE_SYSRQ = screenshot keycode

Evet! Bu komut FLAG_SECURE'u atlıyordu. Sayfa çevirmek için de klavye ok tuşu çalışıyordu:

adb shell "input keyevent 22"
# 22 = KEYCODE_DPAD_RIGHT = sağ ok tuşu

Ekrana tap bazı sayfalarda dipnot linklerine denk geliyordu. Klavye tuşu bu sorunu çözdü.


Otomasyon Scripti

import subprocess, time, os

output_dir = r'C:\Users\hicbi\Downloads\kitap_pages'
os.makedirs(output_dir, exist_ok=True)

popup_wait = 10.0
page_turn_delay = 1.5

def adb(cmd):
    subprocess.run(f'adb shell {cmd}', shell=True, capture_output=True)

def get_latest_screenshot():
    result = subprocess.run(
        'adb shell "ls -t /sdcard/Pictures/Screenshots/"',
        shell=True, capture_output=True, text=True
    )
    files = [f.strip() for f in result.stdout.strip().split('\n') if f.strip()]
    return files[0] if files else None

def capture_page(page_num):
    local = os.path.join(output_dir, f'page_{page_num:04d}.png')
    adb('"input keyevent 120"')
    time.sleep(popup_wait)
    latest = get_latest_screenshot()
    subprocess.run(
        f'adb pull "/sdcard/Pictures/Screenshots/{latest}" "{local}"',
        shell=True, capture_output=True
    )

def next_page():
    adb('"input keyevent 22"')
    time.sleep(page_turn_delay)

for i in range(1, 283):
    capture_page(i)
    if i < 282:
        next_page()

Karşılaşılan Sorunlar ve Çözümleri

1. Screenshot popup'ı
Her screenshot sonrası "Screenshot saved" popup'ı çıkıyordu. ADB ile kapatmayı denedim (input tap, keyevent 4 vs.) — olmadı. Çözüm: Popup 7-10 saniye sonra otomatik kapanıyor, popup_wait = 10 yaptım.

2. Dipnot linkleri
input tap 1200 450 koordinatı bazı sayfalarda dipnot linkine denk geliyordu. Çözüm: input keyevent 22.

3. Screenshots klasörünün dolması
Yüzlerce PNG birikince ls -t yavaşladı, timing bozuldu. Çözüm: Her 50 sayfada bir temizle:

adb shell "rm /sdcard/Pictures/Screenshots/*"

4. Windows uyku modu
Uzun süre hareketsiz kalınca Memu dondu. Çözüm: Güç ayarlarından uyku modunu "Hiçbir zaman" yap. Android için:

adb shell "settings put system screen_off_timeout 3600000"

5. EPUB sayfa numarası tutarsızlığı
282 sayfalık kitap 413 ekran görüntüsüne çıktı. EPUB'da sayfa numarası font boyutuna ve ekran boyutuna göre değişiyor.

6. Performans şişmesi
Uzun süreli çalışmada Memu RAM'i doldu. Çözüm: 50'şer sayfa batch'ler halinde çalıştır.


OCR: Görüntüden Metne

413 ekran görüntüsü elimdeydi. Tesseract OCR ile metni çıkardım:

pip install pytesseract pillow
import pytesseract
from PIL import Image
import os

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

folder = r'C:\Users\hicbi\Downloads\kitap_pages'
files = sorted([f for f in os.listdir(folder) if f.endswith('.png')])

with open('buyuk_tarih.txt', 'w', encoding='utf-8') as out:
    for i, filename in enumerate(files):
        img = Image.open(os.path.join(folder, filename))
        text = pytesseract.image_to_string(img, lang='tur')
        out.write(text)
        out.write(f'\n\n--- Sayfa {i+1} ---\n\n')

Türkçe karakter tanıma (ş, ğ, ü, ö, ı, ç) neredeyse hatasız çalıştı.


Sonuç Olarak

Bir kitap için 10+ saat harcadım. Sırasıyla şunları denedim:

  1. ✗ Adobe Digital Editions + DeDRM plugin → PBDRM formatını tanımıyor
  2. ✗ PBDRM header analizi + RSA brute force → Yanlış anahtar
  3. ✗ PKCS12 şifre kırma → Şifre bulunamadı
  4. ✗ Frida hook → Houdini ARM emülasyonu engel
  5. ✗ /proc/pid/mem dump → İzin yok
  6. ✓ ADB screenshot otomasyonu → Çalıştı

DRM sistemi beni değil, içerik üreticisini korudu. Ben yasal olarak satın aldığım bir içeriği okumak için bu kadar çaba harcadım. Korsanlık yapan biri bu adımların hiçbirini atmak zorunda kalmaz — DRM kırılmış versiyonunu internetten bulur.

DRM'in asıl kurbanları içeriğe para veren legal kullanıcılardır. Bunun Netflix gibi streaming servislerinde de örneği bol. Örneğin TV'niz eskiyse Netflix DRM zincirini (Widevine) beğenmeyip HD abonesi olduğunuz içeriği SD çözünürlükte ve düşük bitrate'le görüntüleyebiliyor. Fakat korsan izlerseniz aynı içerikler 4k olarak hemen her yerde mevcut.


Kullanılan Araçlar

AraçAmaç
MemuAndroid emülatör
ADB (Android Debug Bridge)Cihaz kontrolü
FridaDynamic instrumentation
Python + pycryptodomeRSA/AES analizi
Tesseract OCRGörüntüden metin
Hex editörPBDRM format analizi

Bu yazı tamamen kişisel kullanım amacıyla yapılan bir deneyin belgesidir. Hiçbir içerik üçüncü şahıslarla paylaşılmamıştır.

Saturday, March 21, 2026

How Hard Can It Be? — DirectX’in Doğuşu

James R. Hagerty

1990’ların başında, Microsoft’un Windows işletim sistemi ofis uygulamalarında baskındı ancak bilgisayar oyunları dünyasında zayıf kalıyordu. Windows, oyun programları ile bilgisayar donanımı arasına girerek grafik ve animasyonları yavaşlatıyordu. Oyun geliştiricileri, bu tür kısıtlamalar getirmeyen DOS işletim sistemini tercih ediyordu.

Bu durum, Microsoft içindeki üç “asi” mühendis için bir fırsat yarattı: Eric Engstrom, Alex St. John ve Craig Eisler.

1 Aralık’ta 55 yaşında hayatını kaybeden Engstrom ve arkadaşları, Microsoft içinde oyun problemini çözmeye çalışan küçük bir ekip kurdular. Başta meslektaşlarıyla fikirlerini paylaşmamışlardı çünkü o kadar rahatsız edici bulunuyorlardı ki Windows iş biriminin başındaki Brad Silverberg onlara “Beastie Boys” lakabını takmıştı. Silverberg sık sık onları işten kovma taleplerini geri çevirmek zorunda kalıyordu.

Ama geliştirdikleri çözüm, DirectX, Microsoft’un kaderini değiştirdi. DirectX, oyunları tanınan bir platform haline getirdi ve geliştiricilere bilgisayarın grafik yeteneklerine doğrudan erişim sağladı—böylece DOS’tan bile daha iyi oyun deneyimi sunabildi.

Silverberg, “Harikaydı” dedi. 1995’te piyasaya sürülen DirectX, oyun geliştiricileri için adeta bir patlama yarattı ve Windows’a büyük bir ivme kazandırdı. Microsoft daha sonra Xbox konsolunu geliştirerek bu alandaki başarısını sürdürdü.

Engstrom, Seattle’daki bir hastanede hayatını kaybetti. Eşi Cindy Engstrom, ağrıları için aldığı Tylenol’ün yanlışlıkla fazla doz alınması sonucu karaciğer hasarı oluştuğunu belirtti.

Son yıllarında danışmanlık yaptı ve çeşitli iş fikirleri üzerinde çalıştı. Ayrıca drone teknolojileri ve soğuk füzyondan enerji üretimi gibi konularla ilgileniyordu. Teknik bir problemle karşılaştığında genelde “Bunu ne kadar zor olabilir ki?” diye yaklaşırdı.


George Eric Engstrom

25 Ocak 1965’te doğdu ve Washington eyaletinin küçük Colville kasabasında büyüdü. Kanadalı olan annesi, bir süre önce ABD’ye taşınmıştı. Babası ise eyer, bot ve diğer kovboy ekipmanları satan bir dükkân işletiyordu.

Çocukken astronot kostümü giyer ve 1969’da Neil Armstrong’un Ay’a inişini aile televizyonundan izlerdi. Kısa sürede kendisinin de Mars’a giden ilk insan olma planını ilan etti.

Babasının dükkânında çalışmak onu hayal kırıklığına uğrattı. Küçük sohbetlerden hoşlanmaz, müşteriyle uğraşmayı sevmezdi. “Hayatımın büyük kısmını halkla ilişkiler içinde geçirdim ve bundan pek hoşlanmadım” demişti 2003’te.

Gençlik yıllarında bilgisayar programlama yaparak para kazandı. Washington State Üniversitesi’nde birkaç ders aldı ama mezun olmadı. Freelance programcı olarak çalıştıktan sonra önemli bir müşterisini kaybedince ailesinin evine geri döndü. Bir süre oto yıkamada çalıştı.

Sonra bir arkadaşı onu Microsoft’a başvurmaya ikna etti. Ekose gömlek ve ütülü kot pantolonla mülakata gitti. “Sanki taşradan yeni gelmiş gibiydim” diye anlatmıştı. Buna rağmen kısa süreli bir müşteri hizmetleri işi buldu ve bu süreçte kendi kendine Fortran öğrenmek zorunda kaldı.

Geçici işi bittikten sonra hem Microsoft’tan hem de Oracle’dan teklif aldı. Microsoft’ta daha düşük maaş almasına rağmen hisse opsiyonları nedeniyle orayı seçti. “Ekose gömlekli insanların beni karıştırmak için yaptığı bir şey sandım” demişti. “İlk 10 milyon dolarımı böyle kaybettim—ve son da olmadı.”

1991’de Microsoft’a geri döndü ve oyun teknolojileri üzerine çalışan bir ekipte yer aldı. Eisler ve St. John ile tanıştı; birlikte spor yaparken onu oyun teknolojileri üzerine çalışmaya ikna ettiler.

2000’de Microsoft’tan ayrıldı ve cep telefonlarına farklı görünümler ve grafik özellikler kazandıran Wildseed Ltd. şirketini kurdu. Ancak bu girişim başarılı olamadı.

Eşi Cindy Smith ile Wildseed’de tanıştı (o şirketin pazarlama başkanıydı). 2005’te Groundhog Day’de evlendiler çünkü Engstrom’un tarihi hatırlayabileceğini düşündüler—yine de ilk evlilik yıldönümlerini unuttu. Geride eşi ve dört çocuğu kaldı.




Friday, March 13, 2026

Nerd Canon: Zihin, Matematik ve Hacker Kültürü Üzerine 20 Kitap

Bazen bazı kitaplar vardır; sadece bilgi vermezler, dünyaya bakış şeklini değiştirirler. Matematik, bilgisayar bilimi, bilinç felsefesi ve teknoloji kültürü etrafında dönen bir “entelektüel hat” vardır.

Bu yazıda o hattın önemli kitaplarından oluşan küçük bir okuma listesi topladım. Liste popüler bilimden biraz farklı: daha çok büyük fikirler, bilgi teorisi, bilinç, computation ve hacker kültürü etrafında dönüyor.


Matematik, zihin ve gerçeklik

Bu kitaplar matematiksel düşünce, formal sistemler ve bilincin doğası gibi konulara giriyor.

Gödel, Escher, Bach — Douglas Hofstadter

Muhtemelen yazılmış en ilginç popüler bilim kitaplarından biri. Matematik, sanat, müzik ve zihin felsefesini tek bir yapı içinde birleştiriyor. Gödel teoremleri üzerinden bilinç ve formal sistemler tartışılıyor.

The Mind’s I — Hofstadter & Dennett

Bilinç ve yapay zekâ üzerine klasik metinlerin ve düşünce deneylerinin bir derlemesi.

The Emperor’s New Mind — Roger Penrose

Penrose burada insan zihninin salt algoritmik olmayabileceğini savunuyor ve Gödel teoremleri üzerinden güçlü bir tartışma kuruyor.

Shadows of the Mind — Roger Penrose

Penrose’un önceki kitabındaki argümanı daha da ileri götürdüğü eser.

Mind and Cosmos — Thomas Nagel

Materyalist doğa anlayışına radikal bir eleştiri. Bilinç ve aklın evrendeki yeri üzerine düşündürücü bir kitap.

The Recursive Universe — William Poundstone

Cellular automata ve basit kurallardan karmaşıklığın nasıl ortaya çıkabileceğini anlatan çok keyifli bir kitap.

The Black Hole War — Leonard Susskind

Kara delik bilgi paradoksu üzerinden modern fiziğin en ilginç tartışmalarından biri.


Bilim insanlarının hikâyeleri

Bilimin ve merakın arkasındaki insanları görmek için.

Surely You're Joking, Mr. Feynman! — Richard Feynman

Feynman’ın anıları. Bilimsel merakın neye benzediğini gösteren eğlenceli bir kitap.

The Man from the Future — Ananyo Bhattacharya

John von Neumann’ın biyografisi. Modern dünyanın matematiksel mimarlarından biri hakkında.


Hacker kültürü ve bilgisayar tarihi

Bilgisayar kültürünün doğuşunu anlatan klasik kitaplar.

Hackers: Heroes of the Computer Revolution — Steven Levy

MIT hackerlarından kişisel bilgisayar devrimine kadar hacker kültürünün tarihini anlatır.

Where Wizards Stay Up Late — Katie Hafner & Matthew Lyon

ARPANET ve internetin doğuşu.

The Soul of a New Machine — Tracy Kidder

Bir minicomputer geliştiren mühendis ekibin hikâyesi. Donanım mühendisliği kültürünü çok iyi anlatır.

Out of Their Minds — Dennis Shasha

Bilgisayar biliminin öncülerinin röportajlarından oluşan bir kitap.

The Cuckoo's Egg — Clifford Stoll

İlk hacker avlarından biri. Gerçek bir siber güvenlik hikâyesi.


Computer science klasiği

Structure and Interpretation of Computer Programs

MIT’de yıllarca okutulmuş efsane ders kitabı. Programlamayı düşünme biçimi olarak ele alır.


Neal Stephenson romanları

Stephenson’ın romanları teknoloji, kriptografi ve bilim kültürünü kurgu içinde anlatır.

Cryptonomicon

II. Dünya Savaşı kriptografisi ile modern hacker kültürünü birleştiren dev roman.

Snow Crash

Cyberpunk klasiği. Metaverse fikrinin erken örneklerinden biri.

Anathem

Matematik, felsefe ve paralel evrenler üzerine yazılmış ilginç bir bilimkurgu.


Baroque Cycle (Neal Stephenson)

Modern dünyanın doğuşunu anlatan büyük bir tarihsel seri.

Quicksilver 
The Confusion 
The System of the World

Bilim devrimi, finans sistemleri ve erken modern bilim kültürü üzerine.

Felsefi klasik

What Is It Like to Be a Bat? — Thomas Nagel

Bilinç felsefesinin en ünlü makalelerinden biri. Başka bir zihnin deneyimini bilmenin mümkün olup olmadığını tartışır.


Bonus: Okuma listesinin doğal devamı

Bu kitapları sevenlerin çoğu genellikle şu kitabı da keşfeder:

The Fabric of Reality — David Deutsch

Kuantum mekaniği, evrim, computation ve bilgi teorisini tek bir çerçevede açıklamaya çalışan iddialı bir eser.


Sonuçta bu liste aslında tek bir sorunun etrafında dönüyor: 
Zihin nedir ve evren bilgiyle nasıl ilişkilidir?

Matematik, bilgisayar bilimi, fizik ve felsefe bu sorunun farklı taraflarını aydınlatmaya çalışıyor.

Bu kitapların ortak noktası da şu:
hepsi dünyaya bakış biçimini biraz değiştirebilecek büyük fikirler içeriyor.

Thursday, January 1, 2026

Sony PS3, CELL BE, IBM güvenlik mimarisi ve hack meselesi...

Sony PlayStation 3'ün hacklenme hikayesi meraklısı için oldukça ilginç teknik detaylarla doludur. Temelde PS3 hacklenmiş olması sistemin kök güvenlik anahtarlarının ele geçirilmiş olduğu anlamına gelmemekte, bu da konuyu oldukça ilginç kılmaktadır.

ps3’te güvenlik zinciri metldr ile başlar. metldr cpu’nun içinde, mask rom ya da efuse benzeri bir yapıya gömülü olarak bulunur. Yazılımla erişilemez, dump edilemez, ram’e kopyalanmaz. metldr’den sonra bootldr gelir, ardından lv0, lv1 yani hypervisor ve en üstte lv2 yani gameos çalışır. bu zincirin güvenliği aşağıdan yukarıya doğru kuruludur ve en alt halka olan metldr kırılmadığı sürece zincirin tamamı teknik olarak ayakta kalır.

metldr’nin kullandığı anahtarlar bir dosya değildir. flash bellekte durmazlar, ram’de değişken olarak bulunmazlar, register’dan okunamazlar. cpu bu anahtarları “bilmez”. anahtarlar cpu’nun içindeki güvenlik bloğuna gömülüdür ve cpu sadece bu anahtarlarla işlem yaptırır. imza doğrulama ve decrypt işlemleri bu güvenlik bloğunda yapılır. anahtar hiçbir zaman system bus’a çıkmaz.

ps3’ün hacklenme sebebi donanım değildir. donanım tarafında sony anahtarları doğru yere koymuştur. kırılma noktası kriptografi uygulamasında yapılan hatadır. sony ecdsa imzasında nonce’u tekrar eden ya da sabit şekilde kullanmıştır. bu hata sayesinde yeterince imzalanmış binary toplandığında private signing key matematiksel olarak hesaplanabilmiştir.

ele geçirilen bu anahtar root of trust anahtarı değildir. metldr’nin anahtarı değildir. decrypt anahtarı değildir. bu anahtar yalnızca imza kontrolünü kandırır. yani sistem artık “bu kod sony tarafından imzalanmış mı” sorusunu sormaz hâle gelir. bu durum fake signed eboot’ların çalışmasına ve custom firmware’in mümkün olmasına yol açar.

crack denilen şey tam olarak budur. ps3’te crack, çalıştırma izninin kaldırılmasıdır. sistem hangi kodun çalıştırılabileceğine karar verirken imzaya bakmaz hâle gelmiştir. ama bu, şifre çözme yetkisinin ele geçirildiği anlamına gelmez. decrypt işlemi hâlâ donanımın içindedir ve metldr zinciri tarafından kontrol edilir.

oyun çalıştırıldığında eboot.bin zaten runtime’da çözülür. bu çözme işlemi cpu içindeki güvenlik motorunda gerçekleşir. anahtar bu sırada da görünmez. anahtar ram’e yazılmaz, cache’te tutulmaz, register’da bulunmaz. plaintext kod execution pipeline’a girer ama anahtar ortada yoktur. multiman gibi araçların yaptığı şey şifre çözmek değildir. multiman, ps3’ün zaten çalışırken çözdüğü kodu hdd’ye kopyalayarak kalıcı hâle getirir. anahtar yine ortada yoktur, sadece çıktısı vardır.

bu yüzden pc tarafında aynı işlem yapılamaz. pc’de metldr yoktur. pc’de bootldr yoktur. pc’de lv0 anahtarları yoktur. ps3dec gibi araçlar yalnızca disc encryption katmanını açabilir. asıl yürütülebilir kodun şifresi hâlâ çözülemez. rpc s3 gibi emülatörler bu donanımsal davranışı taklit etmeye çalışır ama her oyunda birebir aynı sonucu veremez.

decap ve mikroskop saldırılarının işe yaramamasının sebebi de budur. çünkü ortada klasik anlamda okunacak bir rom tablosu yoktur. anahtar bir bit dizisi olarak saklanmaz. anahtar cpu logic’inin davranışına gömülüdür. transistörleri görebilirsin ama “bu bit 1, bu bit 0” diyemezsin. anahtar hiçbir zaman internal bus’tan geçmediği için logic analyzer, bus sniff veya ram dump gibi yöntemler sonuç vermez.

sonuç olarak ps3 hacklenmiştir ama root of trust zinciri kırılmamıştır. imza kontrolü bypass edilmiştir ama decrypt anahtarları ele geçirilmemiştir. sony kriptografi tarafında büyük hata yapmıştır ama anahtarları silikona gömerek sistemin tamamen çökmesini engellemiştir. bu yüzden bugün hâlâ pc’de ps3 gibi birebir decrypt eden bir sistem yoktur ve ps3 güvenliği akademik olarak hâlâ anlatılmaktadır.

bu mimarinin tesadüf olmadığını anlamak için cell işlemcinin nereden geldiğine bakmak gerekiyor. cell, sony’nin tek başına tasarladığı bir tüketici işlemcisi değildir. cell broadband engine, ibm, sony ve toshiba ortaklığında geliştirilmiştir ve mimarinin omurgası doğrudan ibm’in server dünyasından gelir.

özellikle cell’in ppe çekirdeği, ibm’in power mimarisinin bir türevidir. bu mimari, playstation’dan çok önce ibm’in kurumsal ve yüksek güvenlikli sistemlerinde kullanılıyordu. cell’de gördüğümüz güvenlik anlayışı, “oyun konsolu güvenliği” olarak tasarlanmadı. bu anlayış, ibm’in yıllardır bankacılık, finans ve kritik altyapılarda kullandığı server güvenliği yaklaşımının küçültülmüş ve uyarlanmış hâlidir.

ibm, bu tarz donanımsal root of trust ve izolasyon teknolojilerini özellikle mainframe ve yüksek güvenlikli power server’larda kullanıyordu. z serisi mainframe’ler, power systems server’lar ve hsm benzeri güvenli modüller bu mimarinin asıl doğduğu yerlerdir. bu sistemler bankalarda, finans kurumlarında, borsa altyapılarında, sigorta sistemlerinde ve devlet kurumlarında kullanılır. bu ortamlarda tehdit modeli, bir kullanıcının oyun kopyalaması değildir. tehdit modeli, içeriden saldırı, fiziksel erişim, yan kanal saldırısı ve devlet seviyesinde aktörlerdir.

bu yüzden ibm’in güvenlik yaklaşımı, anahtarların yazılımla korunmasına dayanmaz. anahtarlar cpu’nun içinde, ayrı clock domain’lerde, ayrı güvenlik bloklarında tutulur. anahtarın ram’e çıkmaması, bus’tan geçmemesi, register’da görünmemesi gibi kararlar, ps3 için “abartı” gibi görünse de finans ve mainframe dünyasında standarttır. çünkü bu sistemlerde ram dump alınabileceği, bus sniff yapılabileceği ve fiziksel erişimin mümkün olduğu varsayılır.

cell işlemcideki security engine ve metldr benzeri yapılar, bu server dünyasının doğrudan mirasıdır. sony bu teknolojiyi oyun konsoluna taşıyarak, tüketici elektroniğinde o güne kadar pek görülmeyen bir güvenlik seviyesini hedeflemiştir. ps3’ün pahalı, karmaşık ve “zor kırılan” bir cihaz olmasının sebebi de budur. sony oyun konsolu yaparken, ibm tarafı neredeyse banka server’ı gibi düşünmüştür.

burada ilginç olan nokta şudur. sony kriptografi uygulamasında hata yapmış olmasına rağmen, ibm kökenli donanım güvenliği yaklaşımı sayesinde sistem tamamen çökmedi. imza kontrolü bypass edildi ama anahtarlar ortalığa saçılmadı. bu durum, server dünyasında yıllardır bilinen bir gerçeği ps3 üzerinden tekrar gösterdi. yazılım hata yapar ama donanım doğru tasarlanmışsa hasar sınırlı kalır.

ps3 güvenliğinin bugün hâlâ ilginç bulunmasının sebebi de buradan gelir. ps3 bir oyun konsoludur ama güvenlik mimarisi bir finans server’ının tehdit modelinden türemiştir. bu yüzden hacklenmiş olmasına rağmen root of trust zinciri ayakta kalmıştır ve bu yüzden pc’de ps3 gibi decrypt eden bir sistem hâlâ yoktur.