1 puan yazan GN⁺ 2025-10-17 | 1 yorum | WhatsApp'ta paylaş
  • Kindle uygulamasındaki ciddi kararsızlık sorunları nedeniyle, Amazon'dan satın alınan e-kitapları başka bir okuyucuda okumaya çalıştı
  • Amazon web DRM sistemi, birden çok güvenlik katmanı ve rastgeleleştirilmiş karakter eşlemeleriyle katmanlı koruma uyguluyor
  • Her istekte tamamen farklı bir font eşlemesi kullanarak tipik hack girişimlerini zorlaştırıyor
  • Görsel tabanlı hash'leme ve SSIM tabanlı font eşleştirme ile tüm rastgeleleştirilmiş glifleri gerçek karakterlere geri döndüren bir yöntem geliştirdi
  • Sonuç olarak, satın alınan kitabın tamamını Calibre gibi kişisel e-kitap kütüphanelerinde eksiksiz biçimde geri yükleyip saklamayı sağlayan bir çözüm tamamladı

TL;DR

  • İlk Amazon e-kitabını satın aldıktan sonra Kindle Android uygulamasının kararsızlığı yüzünden büyük memnuniyetsizlik yaşadı
  • Sadece çevrimdışı olarak özgürce okumak istiyordu, ancak indirme ve yedekleme yapılamaması bunu zorlaştırdı
  • Amazon web okuyucusunun DRM sistemini analiz ederken, karmaşık rastgeleleştirme ve alfabe eşleme yapısıyla karşılaştı
  • Görsel hash ve font eşleştirme yöntemiyle rastgeleleştirmeyi çözdü ve sahip olduğu kitabı başarıyla geri yükledi
  • Bu kodun kullanımında, satın alınan kitabın sahipliği ve yedekleme hakkının önemine dikkat çekiyor

Amazon Bunu Kişisel Hale Getirdi

İşleri Doğru Yapmaya Çalıştığım Tek Sefer

  • Daha önce e-kitapları çoğunlukla resmi olmayan yollardan edinmişti, ancak yazarı desteklemek için Amazon'dan ilk kez resmi satın alma yapmayı denedi
  • Kindle uygulamasında kitabı açar açmaz sürekli çökme yaşandı ve düzgün şekilde okuyamadı

Ben Sadece Kitabımı Okumak İstiyordum

  • Uygulamanın kararsızlığı nedeniyle web okuyucusunu kullanmaya çalıştı, ancak çevrimdışı indirme ve harici okuyucu desteğinin tamamen engellendiğini fark etti
  • Calibre gibi kişisel kütüphanelerle entegrasyon yok, yedekleme yok, hatta Amazon isterse istediği zaman silebilir durumdaydı
  • Bunun fiilen sahiplik içermeyen bir kiralama modeli olduğunu anladı

İş Kişisel Hale Geliyor

  • Para iadesi istemek ya da resmi olmayan yolları seçmek mümkündü, ancak satın aldığı kitabın sahipliğini göstermek için web istemcisini doğrudan tersine mühendislikle incelemeye karar verdi

  • Kindle Cloud Reader (web) içinde ağ isteklerini analiz ederken /renderer/render endpoint'ini tespit etti

  • İndirme için gereken koşullar

    • Oturum çerezi (Amazon girişi)
    • Render token'ı (startReading API'sinden alınıyor)
    • ADP oturum token'ı (ek kimlik doğrulama)
  • Tarayıcıyla aynı header ve cookie'lerle istek gönderildiğinde TAR dosyası veriliyor

  • TAR dosyası içindeki örnek yapı

    • page_data_0_4.json : (metin bilgisi, ama gerçekte metin değil)
    • glyphs.json : tüm harflerin SVG tanımları
    • toc.json : içindekiler verisi
    • metadata.json : meta bilgiler
    • location_map.json : konum eşleme bilgisi

Amazon'un E-kitap Cehennemindeki Karartma Katmanları

  • Metin çıkarılırken görülen veri örneği

    {
      "type": "TextRun",
      "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...],
      "style": "paragraph"
    }
    
    • Gerçek karakterler yerine glif ID dizilerinden oluşuyor
    • Her glyph ID belirli bir karaktere sabitlenmiyor; SVG tabanlı bir görsel olarak sunuluyor
    • Yerine koymalı şifre (substitution cipher) yapısında olduğu için, karakterlerle glif ID'leri arasındaki eşleme sabit değil

Alfabe Her. Beş. Sayfada. Değişiyor.

  • Her 5 sayfada bir glif eşlemesi rastgele sıfırlanıyor
  • Her istekte farklı bir mapping table uygulandığından, e-kitabın tamamını tek seferde eşlemek veya çözmek mümkün olmuyor
  • Örnek olarak 920 sayfalık bir kitapta
    • 184 istek gerekiyor
    • 184 kez rastgele alfabenin çözülmesi gerekiyor
    • Toplam 361 benzersiz glif tespit ediliyor
    • 1,051,745 glifin çözülmesi gerekiyor

Sahte Font İpuçları (İşin İçine Kurnazlık da Katmışlar)

  • SVG path içinde anlamsız çok küçük move komutları (m3,1 m1,6 m-4,-7) bulunuyor
    • Tarayıcıda normal render ediliyor, ancak Python gibi SVG kütüphanelerinde yanlış bağlanan çizgiler oluşuyor
    • Basit path düzeyinde analizle ayrıştırmayı bilerek zorlaştırıyor
  • Gerçek ayrıştırmada, sorunu çözmek için tüm path'in tek seferde eksiksiz render edilmesi gerekiyor

Birden Fazla Font Varyantı

  • Tek bir font değil, 4 ayrı tür (bookerly_normal, italic, bold, bolditalic) kullanılıyor
  • Ligatürler, özel karakterler (ffi, fl vb.) de ayrı glifler olarak bulunuyor; bu da eşlemeyi zorlaştırıyor

OCR Pek de İyi Değil (Başarısız Denemem)

  • Render edilen glif görsellerini mevcut optik karakter tanıma (OCR) araçlarıyla çözmeyi denedi
    • Yaklaşık %51 tanıma oranı elde etti, geri kalanı başarısız oldu
    • Bağlamı olmayan tekil karakterler OCR'da ayırt edilemiyor (1, l, I, noktalama işaretleri vb. karışıyor)

Gerçekten İşe Yarayan Çözüm

  • Her istekte glyphs.json içinde SVG path bilgisi bulunuyor
  • Glif ID'leri her seferinde değişse de, aynı karakter için SVG şekli (görsel) aynı kalıyor

Doğrudan SVG Karşılaştırması Neden Başarısız Oldu

  • SVG path koordinatlarını doğrudan karşılaştırmak, küçük farklar ve farklı path komutları nedeniyle başarısız oldu

Piksel Kusursuzluğunda Eşleştirme

  • SVG'leri görsele dönüştürüp piksel düzeyinde karşılaştırarak aynı glifi tespit etti
    1. Tüm SVG'leri 512x512 çözünürlüklü görsellere dönüştürdü (cairosvg kullanarak)
    2. Her görseli algısal hash (Perceptual hash) ile işledi — aynı biçimdeki glifler için hash değeri eşleşiyor
    3. 184 rastgele alfabe eşlemesini hash değerlerine göre birleştirdi
    4. Gerçek karakterlerle eşleştirmek için Bookerly TTF fontu içindeki her karakteri SSIM (Structural Similarity Index) yöntemiyle karşılaştırdı

SSIM Bunun İçin Neden Mükemmel

  • SSIM, görsel yapıyı karşılaştırarak render'daki küçük farkları, anti-aliasing'i ve boyut uyumsuzluklarını tolere ediyor
  • Bilinmeyen her glif için en yüksek SSIM puanına sahip TTF karakterini eşleştiriyor

Uç Durumların Ele Alınması

  • Ligatürler (ff, fi, fl, ffi, ffl) tek glifte birden fazla karakter içerdiği için, bunlar TTF'ye doğrudan eklenip hash'lendi
  • Özel karakterler ve farklı font stilleri (kalın, italik, kalın italik) de ayrı kütüphaneler olarak yönetildi

Her Şeyin Çalıştığı An

Nihai İstatistikler

=== NORMALIZATION PHASE ===
Total batches processed: 184
Unique glyphs found: 361
Total glyphs in book: 1,051,745

=== MATCHING PHASE ===
Successfully matched 361/361 unique glyphs (100.00%)
Failed to match: 0 glyphs
Average SSIM score: 0.9527

=== DECODED OUTPUT ===
Total characters: 5,623,847
Pages: 920
  • Tüm karakterler eksiksiz biçimde çözüldü ve yüksek doğrulukta geri yükleme sağlandı

Kusursuz Biçimlendirmeyle EPUB Yeniden Oluşturma

  • JSON verisindeki her metin bloğunun koordinatları, font stili ve dahili bağlantı bilgisi kullanılarak
    • paragraf ayrımları, hizalama, kalın/italik, font boyutu ve dahili bağlantılar dahil olmak üzere orijinale çok yakın bir EPUB üretildi

Asıl Sonuç

  • Amazon'un web DRM için ciddi çaba harcadığı görülüyor
  • Gerçek kullanım için aşırı zahmetli olsa da, bilgi edinme ve teknik demo açısından değer taşıyor
  • Bunun alıcının kendi kitabını yedeklemesi ve sahipliğini koruması amacıyla yapıldığı özellikle vurgulanıyor

Referanslar (açık kaynak kod)

  • PixelMelt/amazon_book_downloader GitHub
    • Amazon web okuyucusunda okunan kitapları yedekleyen araç
    • Bu örnekteki gibi karmaşık DRM yapısını da otomatik çözüyor
    • Kişisel arşivleme, veri koruma ve araştırma için faydalı

1 yorum

 
GN⁺ 2025-10-17
Hacker News görüşleri
  • İlginç bir bilgi paylaşayım. ABD'de bu örnek, savcı açısından <i>cezai</i> yaptırıma konu olabilecek ifade türlerinden biri sayılıyor (gerçekte yaşanmaz umarım; mahkeme Birinci Değişikliği dikkate alırsa düşmesini beklerim). Bu, iftira ya da dolandırıcılık gibi medeni bir mesele değil; polisin gelip doğrudan sizi tutuklayabileceği bir konu. DRM'in mühendisler tarafından neden bu kadar nefret edildiğini merak ediyorsanız, mesele sadece çalışması sinir bozucu bir iş olması değil; bunu kendi bilgisayarınızda bizzat yaşadığınızda ne kadar can sıkıcı olduğunu görüyorsunuz. Daha da kötüsü, bunun ne kadar aptalca, kullanışsız ve aşılması kolay olduğunu birine söylerseniz, bunun bile yasal olarak yasak olması. Ayrıntılar için EFF yazısına bakın.

    • DMCA'den hoşlanmıyorum ama bu yazının kendisinin 17 USC § 1201'i ihlal ettiğini söylemeniz bana şüpheli geliyor. DRM'i aşmanın kendisi ya da bununla ilgili kod sağlamak elbette ihlal olabilir, ama sadece bunu "yazıyla tarif etmenin" cezalandırıldığı bir örnek var mı merak ediyorum. Gerçekten bu yöntemle, yani teknik açıklama yüzünden, dava açılmış bir emsal karar var mı görmek isterim. Kanun, “hiç kimse DRM'i aşmamalıdır” diyor ve yalnızca “teknoloji, ürün veya hizmet” dağıtımını yasaklıyor. Geleneksel gazeteciliğe ya da blog gönderilerine uygulanmaması için dikkatli yazılmış görünüyor. Kanun metnine bakın.

    • Mevcut yasanın kesinlikle değişmesi gerektiğini düşünüyorum. DRM içeren bir eser dağıtılırsa, o eserin sonsuza dek telif koruması dışında kalması gerektiğini savunuyorum. Çünkü DRM, eseri fiilen kalıcı olarak kamu malı olmanın dışında tutuyor. Hatta yanlışlıkla demo ya da önizleme bile olsa DRM'li dağıtılırsa, telif hakkının geçersiz sayılması gerektiğini düşünüyorum.

  • Sadece Amazon'dan satın alınabilen kitaplarda eskiden kitabı satın alıp masaüstü uygulamasıyla indiriyor, sonra Calibre'e ekleyip epub'a dönüştürürken DRM'i de kaldırıp Kobo'da okuyordum. Ama son dönemde Amazon DRM'i güçlendirdi ve bu yöntem kapandı. Bu yüzden artık o kitapları korsan olarak bulup okuyorum.

    • Amazon'un da suçu var ama sorumluluğun bir kısmı büyük yayınevlerinde de. Büyük bir yayınevi, Amazon'a bu DRM açığını mutlaka kapatması için baskı yaptı; aksi halde tüm içeriklerini çekeceklerini söyledi (ben 2017-2019 arasında Kindle'da çalıştım ve OP'nin tersine mühendislik yaptığı kodun geliştirildiği ekipteydim).

    • Tanıdığım biri doğrudan kitap yazan biri ve internet korsanlığı çağında kitapların ne kadar az sattığını bizzat görüyor. Kitabı istediğim gibi kullanma arzusunu anlıyorum ama satın aldıktan sonra gidip korsan kopyasını indirmekle yazarı desteklemek aynı şey değil. Kitabı gerçekten satın alarak yazara destek olabilirsiniz. Kitaplar, sundukları değer ve eğlence süresine kıyasla çok ucuz.

    • Kitaplar gerçekten en ucuz eğlence biçimi. Fiyatına göre inanılmaz değer sunduklarını düşünüyorum. Yazarı ya da yayınevini desteklemek adına resmi satın alma öneririm. Bütçe sıkıntınız varsa kütüphane de iyi bir seçenek. Tanıdığım biri kitapları korsan indirirken streaming ya da battle pass oyunlara yüzlerce dolar harcıyor. Kitaplar bana akıl almaz derecede ucuz geliyor. Brandon Sanderson'ın Storm Archives serisinin tamamını e-kitap olarak $10'a aldım (100 saatlik eğlence). Saat başına 10 sent.

    • Yakın zamanda eşime bir e-okuyucu almayı düşünüyordum; bu arada Louis Rossman'ın Kindle DRM videosunu izledim, burada da Kobo övgülerini gördüm. Sonunda ben de galiba Kobo alacağım.

    • Günün birinde DRM kilitli e-kitapları okumak ya da taramak için fiziksel kitap tarayıcı kameraları kullanacağımız noktaya gelebiliriz.

  • Öfkeli bir mühendisten daha korkutucu bir şey olmadığını hissettim! Bu yazı gerçekten harikaydı ve hacklemenin özünü çok iyi gösteriyor. "Sadece tek bir kitabı okumak mı istemiştim? Hayır. Bir şey kanıtlamak mı istemiştim? Kesinlikle. SVG rendering, perceptual hashing ve font metrics öğrenmem? Muhtemelen evet."

  • Eskiden kullandığım apprenticealf'ın DeDRM aracıyla (şimdi nodrm/DeDRM_tools çatallaması) Kindle PC uygulamasından hâlâ indirme yapılabiliyor mu merak ediyorum. Yalnızca eski PC uygulama sürümlerinde çalışıyor olabilir; ayrıca en güncel sürüm olmasa bile registry hack ile kfx indirmesini engelleyip azw3 formatında almak mümkün olabilir (bir dönem işe yarıyordu). Depodaki README'nin üst kısmındaki wiki bağlantısında, artık bakım yapılmadığını söyleyen bölümde bu bilgi var. Ancak bu şekilde, sadece benzer görünen ekranlar yerine, aslına daha yakın bir e-kitap kopyası alabiliyorsunuz. Böyle şeyler yapmak zorunda olmamızın kendisi bile saçma. Amazon DRM'ini aşmaya çalışırken sabredenlere saygım var.

    • İndirdikten sonra DRM kırma yönteminin çökmesinin sebebi, Amazon'un "USB ile indir ve aktar" özelliğini kaldırmasıydı. O günden beri Amazon e-kitabı bir daha satın almadım. Kitabı satın alıp sonra DRM'siz kopyasını korsan olarak indirmek, kalan tek gerçekçi alternatif gibi görünüyor.

    • Ben epubor adlı ücretli bir araç kullanıyorum; Kindle, Kobo, Adobe dahil neredeyse tüm DRM'leri kaldırıp epub'a dönüştürüyor. Uygulamanın en güncel sürümüyle uyumlu ve engellendiğinde de güncelleme hızlı geliyor. Hem kitabın parasını verip hem de DRM kaldırma aracına para ödemek tuhaf ama gerçeklik bu.

    • Eski PC uygulama sürümlerinde indirme desteği var ama desteklenen sürümlerle de 2025 Nisan sonrası çıkan kitaplar indirilemiyor.

    • Audible kitapları için Libation öneririm.

  • Amazon'da indirme özelliği kalktıktan sonra sahip olduğum tüm kitapları özgürleştirip sistemi tamamen Kavita+koreader'a taşıdım. Bundan sonra Kindle kitabı asla satın almayı düşünmüyorum. İki Kindle cihazımı da jailbreak yapıp koreader kurdum. Artık Kavita ile okuma ilerlemesi senkronizasyonu da olduğu için işlev açısından eksik de hissettirmiyor.

    • Kindle cihazları için son büyük jailbreak yayımlandıktan sonra ben de koreader'ı Scribe'ıma kurup kullanıyorum. İlerleme senkronizasyonu için Hardcover'ı (Goodreads alternatifi) kullanıyorum. Yalnız kitap önerileri benim zevkime henüz pek uymuyor; kullanıcı sayısı arttıkça düzelmesini umuyorum.

    • Calibre'in KOreader'a Wi‑Fi üzerinden kitap gönderme özelliği sayesinde jailbreak gerçekten çok değerli oldu. Bir sonraki okuyucumu, uğraş gerektirmeden KOreader çalıştırabilen kobo ya da başka bir cihazdan seçeceğim.

  • E-kitap DRM'ini kaldırmak adeta standart bir işlem. Aksi halde Kobo'da hiç okuyamıyorum. Adobe'de de okuyucu kaydı yapmadım, Kobo hesabı da açmadım (ilk kurulumu bile atlattım).

  • Kindle DRM durumu gerçekten berbat. Eskiden Calibre'e DeDRM eklentisi ekleyince Kindle for PC uygulamasındaki KFX dosyaları kolayca çözülebiliyordu. 2025 başından sonra bu yol kapatıldı. Uzmanlar hâlâ kırıyor ama artık paylaşmıyorlar. Eklentinin bakımını yapan kişi bile kimliğinin ortaya çıkmasından çekindiği için resmi sürüm yayımlamayı bıraktı. İlgili bağlantı 1, İlgili bağlantı 2 incelenebilir. Bu günlerde Amazon, aşma yöntemlerini gerçekten sert biçimde engelliyor; bu yüzden ihtiyacınız olan bir kitap varsa DRM'ini mümkün olduğunca erken kaldırmak iyi olur.

    • Amazon sorunlu ama bazı büyük yayınevlerinin de payı var. Bir yayınevi Amazon'a DRM aşma açığını mutlaka kapatması için baskı yaptı, aksi halde tüm içeriklerini çekeceklerini söyledi (2017-2019 arasında Kindle ekibinde çalıştım ve OP'nin tersine mühendislik yaptığı kodu yazan ekipteydim).
  • Amazon e-kitap DRM kaldırma yöntemi, Amazon'un manga/grafik romanları için pek iyi çalışmıyor gibi görünüyor. Bu yüzden son dönemde Amazon'u bırakıp, DRM'i daha kolay aşılabilen Kobo'ya tamamen geçtim. Ama Amazon, Comixology'yi satın aldığı için hâlâ en geniş manga koleksiyonuna sahip.

    • Görseller hâlâ tamamen çözülmüş değil; ayrıca ayrı bir obfuscation daha uygulanıyor.

    • Manga için tüm sayfa bir "görsel" gerektiğinden DRM'i kaldırmak kolay değil. Ağ isteklerini analiz ettiniz mi, ya da görsellerin yazar tarafında nasıl ele alındığını merak ediyorum.

    • Bunu zaten biliyor olabilirsiniz ama hoopla üzerinden, kütüphane kartıyla manga içeriğine kolay erişebildim. Bölgenizdeki kütüphane durumuna göre değişir ama aradığım manganın yaklaşık %35'ini bulabildim. En yeni eserler yok ama 6-12 ay önce çıkan yeni yayınlara büyük sorun yaşamadan erişebildim.

  • DMCA her an ayağınıza dolanabilir. Yazarın kimliğini korumaya dikkat etmiş olmasını umuyorum; yoksa ciddi bir geri tepme olabilir. İlgili örnek 1, İlgili örnek 2 incelenebilir.

  • Bu yazıyla doğrudan ilgili değil ama tartışmayla biraz bağlantılı bir bilgi paylaşayım. Amazon'dan kitap indirilemediğinde dolaylı bir yöntem olarak, Overdrive/Libby destekleyen bir kütüphaneden e-kitap almak mümkün. Bazı kütüphane uygulamaları DRM'li dosyayı doğrudan indirmenize izin veriyor ve ardından Adobe+Calibre ile işlenebiliyor. Kütüphane kartı gerekliliği ve istediğiniz kitabın bulunabilirliği değişken ama benim ihtiyaç duyduğum kitapların %90'ını bu yolla çözebiliyorum.