1 पॉइंट द्वारा GN⁺ 2025-10-17 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Kindle ऐप की गंभीर अस्थिरता की वजह से, Amazon से खरीदी गई ebook को किसी दूसरे reader में पढ़ने की कोशिश की गई
  • Amazon वेब DRM सिस्टम कई security layers और randomized character mapping के साथ दोहरी-तिहरी सुरक्षा लागू करता है
  • हर request पर पूरी तरह अलग font mapping इस्तेमाल की जाती है, जिससे सामान्य hacking attempts मुश्किल हो जाते हैं
  • image-based hashing और SSIM-आधारित font matching के जरिए सभी randomized glyphs को असली characters में बहाल करने का तरीका विकसित किया गया
  • नतीजतन, खरीदी गई पूरी किताब को Calibre जैसी personal ebook library में पूरी तरह restore और archive करने का समाधान पूरा किया गया

TL;DR

  • पहली Amazon ebook खरीदने के बाद Kindle Android ऐप की अस्थिरता से बहुत असंतोष हुआ
  • बस offline में आज़ादी से पढ़ना चाहता था, लेकिन download और backup असंभव होने से असुविधा महसूस हुई
  • Amazon web reader के DRM सिस्टम का विश्लेषण करते हुए, जटिल randomization और alphabet mapping structure का सामना हुआ
  • image hash और font matching तरीके से randomization को हल किया गया और अपनी खरीदी हुई किताब को सफलतापूर्वक restore किया गया
  • इस code के उपयोग में, खरीदी हुई किताब के ownership और backup के अधिकार के महत्व पर ज़ोर दिया गया है

Amazon Made This Personal

The One Time I Tried To Do Things The Right Way

  • पहले ज़्यादातर unofficial रास्तों से ebooks हासिल करता था, लेकिन लेखक को support करने के लिए पहली बार Amazon से आधिकारिक खरीद की कोशिश की
  • Kindle ऐप में किताब खोलते ही लगातार crash होने लगा, जिससे ठीक से पढ़ना असंभव हो गया

I Just Wanted To Read My Book

  • ऐप की अस्थिरता की वजह से web reader इस्तेमाल करना चाहा, लेकिन पाया कि offline download और external reader integration दोनों रोके गए हैं
  • Calibre जैसी personal library के साथ integration नहीं, backup नहीं, यहाँ तक कि Amazon कभी भी इसे हटा सकता है
  • तब एहसास हुआ कि यह असल में ownership के बिना rental जैसा मॉडल है

It Becomes Personal

  • refund या unofficial रास्ता चुना जा सकता था, लेकिन खरीदी हुई किताब पर ownership साबित करने के लिए सीधे web client की reverse engineering करने का फैसला किया

  • Kindle Cloud Reader (web) में network requests का विश्लेषण करते समय /renderer/render endpoint मिला

  • download के लिए ज़रूरी शर्तें

    • session cookie (Amazon login)
    • rendering token (startReading API से प्राप्त)
    • ADP session token (अतिरिक्त authentication)
  • browser जैसे ही headers और cookies के साथ request भेजने पर TAR file मिलती है

  • TAR file के भीतर संरचना उदाहरण

    • page_data_0_4.json : (text information, लेकिन वास्तव में text नहीं)
    • glyphs.json : सभी अक्षरों की SVG definitions
    • toc.json : table of contents data
    • metadata.json : metadata
    • location_map.json : location mapping information

Amazon's Obfuscation Layers of Ebook Hell

  • text extract करने पर मिलने वाले data का उदाहरण

    {
      "type": "TextRun",
      "glyphs": [24, 25, 74, 123, 91, 18, 19, 30, 4, ...],
      "style": "paragraph"
    }
    
    • यह असली characters नहीं, बल्कि glyph ID array से बना होता है
    • हर glyph ID किसी खास character से स्थायी रूप से जुड़ा नहीं होता, बल्कि SVG-आधारित image के रूप में दिया जाता है
    • यह substitution cipher जैसी संरचना है, जिसमें character और glyph ID mapping स्थिर नहीं रहती

The Alphabet Changes Every. Five. Pages.

  • हर 5 pages पर glyph mapping random तरीके से reset हो जाती है
  • हर request पर अलग mapping table लागू होती है, इसलिए पूरी ebook को एक बार में map या interpret नहीं किया जा सकता
  • उदाहरण के तौर पर, 920-page किताब के मामले में
    • 184 requests की ज़रूरत
    • 184 random alphabets को decode करना ज़रूरी
    • कुल 361 unique glyphs की पहचान
    • कुल 1,051,745 glyphs decode करने पड़े

Fake Font Hints (They're Getting Sneaky)

  • SVG path के भीतर अर्थहीन सूक्ष्म move commands (m3,1 m1,6 m-4,-7) शामिल हैं
    • browser में यह सामान्य render होता है, लेकिन Python जैसी SVG libraries में गलत connecting lines बनती हैं
    • यानी simple path-level analysis से parsing को विफल करने की कोशिश की गई
  • असली parsing में पूरे path को एक बार में faithfully render करना पड़ता है, तभी समस्या हल होती है

Multiple Font Variants

  • font भी एक नहीं, बल्कि 4 प्रकार (bookerly_normal, italic, bold, bolditalic) अलग-अलग इस्तेमाल होते हैं
  • ligatures और special characters (ffi, fl आदि) भी अलग glyphs के रूप में मौजूद हैं, जिससे mapping और कठिन हो जाती है

OCR Is Mid (My Failed Attempt)

  • rendered glyph images को मौजूदा OCR tools से पढ़ने की कोशिश की गई
    • लगभग 51% recognition rate, बाकी विफल
    • context के बिना single characters को OCR अलग नहीं कर पाता (1, l, I, punctuation आदि में भ्रम)

The Solution That Actually Worked

  • हर request में glyphs.json के भीतर SVG path information शामिल होती है
  • glyph ID हर बार बदल सकती है, लेकिन अगर character वही है, तो SVG shape (image) वही रहती है

Why Direct SVG Comparison Failed

  • SVG path coordinates की सीधी तुलना करने पर, सूक्ष्म अंतर और अलग path commands की वजह से विफलता हुई

Pixel-Perfect Matching

  • SVG को image में render करने के बाद, pixel-level comparison से समान glyphs पहचाने गए
    1. सभी SVGs को 512x512 resolution वाली images में बदला गया (cairosvg का उपयोग)
    2. हर image को perceptual hash से process किया गया — समान shape होने पर hash value एक जैसी
    3. 184 random alphabet mappings को hash values के आधार पर unify किया गया
    4. असली characters से match करने के लिए Bookerly TTF font के हर character को SSIM (Structural Similarity Index) तरीके से compare किया गया

Why SSIM Is Perfect For This

  • SSIM image structure की तुलना करता है, इसलिए rendering के सूक्ष्म अंतर, anti-aliasing, size mismatch को सहन कर लेता है
  • हर unknown glyph के लिए सबसे ऊँचे SSIM score वाला TTF character match किया गया

Handling The Edge Cases

  • ligatures (ff, fi, fl, ffi, ffl) कई characters को एक glyph में संभालते हैं, इसलिए इन्हें सीधे TTF में जोड़कर hash किया गया
  • special characters और विभिन्न font styles (bold, italic, bold italic) सभी को अलग libraries के रूप में manage किया गया

The Moment It All Worked

Final Statistics

=== 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
  • सभी characters सटीक रूप से decode हो गए, और उच्च गुणवत्ता वाला restoration हासिल हुआ

EPUB Reconstruction With Perfect Formatting

  • JSON data में मौजूद हर text block के coordinates, font style, internal links का उपयोग करके
    • ऐसा EPUB बनाया गया जो paragraph breaks, alignment, bold·italic, font size, internal links तक मूल के काफ़ी करीब बना रहे

The Real Conclusion

  • यह पुष्टि हुई कि Amazon ने web DRM पर काफ़ी मेहनत की है
  • practical use के लिए यह effort बहुत ज़्यादा है, लेकिन knowledge gain और technical demo के रूप में इसकी क़ीमत है
  • इस सामग्री का उद्देश्य खरीदार की अपनी किताब का backup और ownership की रक्षा है, इस बात पर ज़ोर दिया गया है

संदर्भ सामग्री (open source code)

  • PixelMelt/amazon_book_downloader GitHub
    • Amazon web reader में पढ़ी जाने वाली किताबों का backup लेने का tool
    • इस लेख के उदाहरण की तरह जटिल DRM structure को भी अपने आप हल करता है
    • personal archive, data protection और research के लिए उपयोगी

1 टिप्पणियां

 
GN⁺ 2025-10-17
Hacker News राय
  • एक दिलचस्प तथ्य साझा कर रहा हूँ। अमेरिका में यह मामला अभियोजन पक्ष की नज़र में उन बयानों में से एक हो सकता है जिन पर <i>आपराधिक</i> कार्रवाई संभव है (उम्मीद है कि ऐसा वास्तव में न हो, और अगर अदालत First Amendment का सम्मान करे तो इसे खारिज कर देगी)। यह मानहानि या धोखाधड़ी जैसा कोई दीवानी मामला नहीं है; पुलिस सीधे आकर गिरफ़्तार भी कर सकती है। अगर आप सोचते हैं कि इंजीनियर DRM से इतनी नफ़रत क्यों करते हैं, तो वजह सिर्फ़ यह नहीं कि इसके साथ काम करना झंझट है, बल्कि अपने ही कंप्यूटर पर इससे जूझना बेहद चिढ़ पैदा करता है। उससे भी बुरी बात यह है कि अगर आप किसी को बता दें कि यह कितना बेवकूफ़ाना, असुविधाजनक और बाईपास करना आसान है, तो वह भी क़ानूनी रूप से निषिद्ध हो सकता है। इस बारे में विस्तार से EFF लेख देखें.

    • मुझे DMCA पसंद नहीं है, लेकिन यह कहना कि यह पोस्ट खुद 17 USC § 1201 का उल्लंघन करती है, थोड़ा संदिग्ध लगता है। DRM को बाईपास करना या उससे जुड़ा कोड देना तो निश्चित ही उल्लंघन होगा, लेकिन सिर्फ़ 'वाक्यों में उसका वर्णन' करने भर पर सज़ा हुई हो, ऐसा कोई मामला है क्या, यह जानने की जिज्ञासा है। क्या इस तरह के तकनीकी विवरण के आधार पर कभी अभियोजन हुआ है? कोई मिसाल जानना चाहूँगा। क़ानून कहता है, “कोई भी DRM को बाईपास न करे,” और “तकनीक·उत्पाद·सेवा” के वितरण पर रोक लगाता है। इसे काफ़ी सावधानी से इस तरह लिखा गया है कि पारंपरिक पत्रकारिता या पोस्ट जैसी चीज़ों पर लागू न हो। क़ानून का पूरा पाठ देखें.

    • मेरा मानना है कि मौजूदा क़ानून को हर हाल में बदलना चाहिए। मेरा तर्क है कि अगर DRM सहित कोई कॉपीराइटेड रचना वितरित की जाती है, तो उस रचना को हमेशा के लिए कॉपीराइट सुरक्षा से बाहर कर देना चाहिए। वजह यह है कि DRM किसी रचना को स्थायी रूप से public domain में जाने से रोकने का काम करता है। यहाँ तक कि अगर गलती से किसी demo या preview को भी DRM लगाकर वितरित किया गया हो, तो भी कॉपीराइट अमान्य हो जाना चाहिए।

  • जो किताबें सिर्फ़ Amazon पर मिलती थीं, उनके लिए मैं पहले किताब खरीदता था, उसे desktop app से डाउनलोड करता था, फिर Calibre में डालकर epub में बदलते समय DRM भी हटा देता था और Kobo पर पढ़ता था। लेकिन हाल में Amazon ने DRM कड़ा कर दिया, इसलिए यह तरीका बंद हो गया। अब मैं बस उन किताबों की pirated copy ढूँढ़कर पढ़ लेता हूँ।

    • Amazon की गलती है, लेकिन कुछ ज़िम्मेदारी बड़े publishers की भी है। एक बड़े publisher ने Amazon पर दबाव डाला था कि इस DRM कमजोरी को हर हाल में बंद करे, नहीं तो वह अपना पूरा content हटा देगा (मैं 2017-2019 के दौरान Kindle में काम करता था, और OP जिस code को reverse engineer कर रहा था, उसके development team में था)।

    • मैं किसी ऐसे व्यक्ति को जानता हूँ जो खुद किताबें लिखता है, इसलिए इंटरनेट piracy के दौर में किताबें कितनी कम बिकती हैं, यह करीब से देखा है। मैं समझता हूँ कि आप खरीदी हुई किताब को अपनी मर्ज़ी से इस्तेमाल करना चाहते हैं, लेकिन खरीदने के बाद फिर उसकी pirated copy लेना और लेखक को support करना, ये दो अलग बातें हैं। आप किताब सचमुच खरीदकर लेखक की मदद कर सकते हैं। किताबें अपने मूल्य और उनसे मिलने वाले entertainment time की तुलना में बहुत सस्ती होती हैं।

    • किताबें शायद सबसे सस्ता entertainment हैं। मुझे लगता है price-to-value ratio कमाल का है। लेखक या publisher को support करने के लिए official purchase की सलाह है। अगर आर्थिक दिक्कत हो तो library भी बढ़िया विकल्प है। मैं किसी ऐसे व्यक्ति को जानता हूँ जो किताबें illegally download करता है, लेकिन streaming या battle pass games पर सैकड़ों डॉलर खर्च कर देता है। मेरे लिए यह समझ से बाहर है कि किताबें इतनी सस्ती हैं। मैंने Brandon Sanderson की Storm Archives पूरी ebook श्रृंखला $10 में खरीदी थी (100 घंटे का entertainment)। यानी प्रति घंटा 10 सेंट।

    • हाल ही में मैं अपनी पत्नी के लिए एक e-reader लेने वाला था, तभी Louis Rossman का Kindle DRM वाला वीडियो देखा, और यहाँ भी Kobo की तारीफ़ सुनी। अब लगता है कि मैं भी Kobo ही खरीदूँगा।

    • आख़िरकार वह दिन भी आ सकता है जब लोग physical book scanner camera से DRM-locked ebooks पढ़ें या scan करें।

  • गुस्साए हुए इंजीनियर से ज़्यादा डरावनी चीज़ शायद ही कोई हो! यह लेख सच में शानदार था और hacking की आत्मा को बहुत अच्छी तरह दिखाता है। "क्या मैं सिर्फ़ एक किताब पढ़ना चाहता था? नहीं। क्या मैं अपना point साबित करना चाहता था? बिल्कुल। क्या मैंने SVG rendering, perceptual hashing, और font metrics इसलिए सीखे? शायद हाँ।"

  • मैं सोच रहा हूँ कि apprenticealf का पुराना DeDRM tool (अब nodrm/DeDRM_tools fork) अभी भी kindle PC app downloads के साथ काम करता है या नहीं। हो सकता है यह सिर्फ़ PC app के पुराने version पर चले, और latest version न होने पर भी registry hack से kfx download रोककर azw3 format में लिया जा सकता है (एक समय यह काम करता था)। repo के README के ऊपर wiki link में, जहाँ लिखा है कि अब यह maintain नहीं हो रहा, वहीं यह बात भी है। ऐसा करके ही source के ज़्यादा क़रीब ebook मिल सकती है (सिर्फ़ वैसा दिखने वाला screen output नहीं)। यह तथ्य ही बेतुका है कि इतना सब करना पड़ता है। Amazon DRM तोड़ने की कोशिश में लगे लोगों को मेरा सलाम।

    • download के बाद DRM hack वाली पद्धति इसलिए टूट गई क्योंकि Amazon ने “Download & transfer via USB” feature हटा दिया। उसके बाद से मैंने Amazon ebooks दोबारा कभी नहीं खरीदीं। किताब खरीदकर DRM-मुक्त copy को illegally download करना ही अब सबसे व्यावहारिक विकल्प लगता है।

    • मैं epubor नाम का paid tool इस्तेमाल करता हूँ, जो kindle, kobo, Adobe आदि लगभग सभी DRM हटाकर epub में convert कर देता है। यह app के latest version के साथ compatible रहता है, और अगर block हो जाए तो updates भी जल्दी आ जाते हैं। किताब के पैसे भी दो और DRM removal tool के भी, यह अजीब तो है, लेकिन यही हक़ीक़त है।

    • पुराने PC app version में download support है, लेकिन supported version 2025 के अप्रैल के बाद जारी हुई किताबों को download नहीं कर पाता।

    • Audible किताबों के लिए Libation की सिफारिश है।

  • Amazon से download feature हटने के बाद मैंने अपनी सारी किताबों को मुक्त कर लिया और पूरा system Kavita+koreader पर शिफ्ट कर दिया। आगे से kindle किताबें कभी नहीं खरीदूँगा। दोनों kindle devices को jailbreak करके koreader डाल दिया है। अब Kavita के साथ progress sync भी हो जाता है, इसलिए features की भी कोई कमी नहीं बची।

    • Kindle devices के लिए आख़िरी बड़ा jailbreak public होने के बाद मैंने भी अपने Scribe पर koreader डालकर इस्तेमाल करना शुरू किया। progress sync के लिए मैं Hardcover (Goodreads का विकल्प) इस्तेमाल करता हूँ। बस recommended books अभी मेरे taste से बहुत मेल नहीं खातीं, लेकिन उम्मीद है कि users बढ़ने पर यह बेहतर होगा।

    • Calibre का वह feature, जिससे वह wifi के ज़रिए KOreader में किताबें भेज देता है, jailbreak को पूरी तरह वाजिब बना देता है। मेरा अगला reader शायद kobo या कोई और होगा जिसमें बिना hassle के KOreader चल सके।

  • ebook DRM हटाना तो एक तरह का standard है। नहीं तो Kobo पर पढ़ना ही संभव नहीं होता। मैंने Adobe में reader register भी नहीं किया, और Kobo account भी नहीं बनाया (initial setup भी bypass किया)।

  • Kindle DRM की हालत सच में सबसे बुरी है। पहले Calibre में DeDRM plugin जोड़कर Kindle for PC app की KFX files को आसानी से decrypt किया जा सकता था। 2025 की शुरुआत के बाद से इसे असंभव बना दिया गया है। विशेषज्ञ अब भी इसे तोड़ लेते हैं, लेकिन अब share नहीं करते। plugin maintainers तक अपनी पहचान उजागर होने के डर से official releases बंद कर चुके हैं। संबंधित लिंक1, संबंधित लिंक2 देखें। आजकल Amazon बाईपास तरीकों को बहुत आक्रामक रूप से बंद कर रहा है, इसलिए अगर कोई ज़रूरी किताब है तो जितनी जल्दी हो सके उसका DRM हटा लेना बेहतर है।

    • Amazon की गलती है, लेकिन कुछ बड़े publishers भी ज़िम्मेदार हैं। एक publisher ने Amazon पर दबाव डाला था कि DRM bypass की इस कमजोरी को हर हाल में बंद करे, नहीं तो वह अपना पूरा content हटा देगा (मैं 2017~2019 में Kindle team में था, और OP ने जिस code को reverse engineer किया, उसे लिखने वाली team में था)।
  • Amazon ebook DRM हटाने का तरीका शायद Amazon के comics/graphic novels पर ठीक से काम नहीं करेगा। इसलिए हाल में मैंने Amazon छोड़कर पूरी तरह Kobo अपना लिया, जहाँ DRM तोड़ना अपेक्षाकृत आसान है। लेकिन Amazon ने Comixology का अधिग्रहण किया है, इसलिए अब भी उसके पास comics का सबसे बड़ा collection है।

    • images का मामला अभी पूरी तरह हल नहीं हुआ है, और उस पर अलग से obfuscation भी जोड़ी गई है

    • comics में पूरे page की 'image' चाहिए होती है, इसलिए DRM removal आसान नहीं है। क्या किसी ने network requests का analysis किया, या यह पता लगाया कि images लेखक तक कैसे पहुँचती हैं?

    • शायद आपको पहले से पता हो, लेकिन मुझे hoopla पर library card के ज़रिए comics content काफ़ी आसानी से मिला है। यह स्थानीय library की स्थिति पर निर्भर करता है, लेकिन मैं जो comics चाहता था उनमें से लगभग 35% वहाँ मिल गईं। सबसे नए titles नहीं थे, लेकिन 6~12 महीने पहले निकली नई चीज़ें बिना ज़्यादा दिक्कत के मिल जाती थीं।

  • DMCA कभी भी मुसीबत खड़ी कर सकता है। उम्मीद है लेखक ने अपनी पहचान सुरक्षित रखने पर ध्यान दिया होगा, नहीं तो बड़ा backlash हो सकता है। संबंधित मामला1, संबंधित मामला2 देखें.

  • यह बात इस पोस्ट से सीधे जुड़ी नहीं है, लेकिन चर्चा से कुछ हद तक संबंधित एक जानकारी साझा कर रहा हूँ। जब Amazon से किताब download नहीं हो पाती, तो एक niche workaround यह है कि Overdrive/libby सपोर्ट करने वाली library से ebook ली जाए। कुछ library apps DRM-लगी files को सीधे download करने देती हैं, और फिर Adobe+Calibre से उन्हें process किया जा सकता है। library card की ज़रूरत और मनचाही किताब की उपलब्धता अलग बात है, लेकिन मेरी ज़रूरत की लगभग 90% किताबें इस तरीके से मिल जाती हैं।