How to remove DRM protection from EPUB ebooks
Barnes & Noble uses its own DRM scheme for some EPUB books. It's a variant of the Adobe ADEPT scheme, and all the Adobe SDK users will get access to it eventually. The problem is that many consumers can’t read B&N books on their ebook readers.
Circumventing Barnes & Noble DRM for EPUB
Quote:
| The basic idea behind the B&N EPUB scheme is the same as that used by the ill-fated eReader format B&N acquired: step 1: generate an encryption key from the book-purchaser's name + credit card # step 2: hope that they don't like giving that information out to strangers. They like to call this a form of "social DRM", although I believe a more appropriate term is "silly". It would be very bad form for an application to keep user CC#s just sitting around on disk, so the Windows version of the Barnes & Noble Desktop Reader application (BDReader) just holds on to the generated key and not the source info. A wise decision, for which I congratulate them. It then stores this key in plain text in a sqlite3 database. An... interesting... decision, for which I thank them. Update: and then it turned out the key-generation algorithm was pretty easy too... |
Software to remove DRM from B&N EPUB ebooks:
A Windows-only key-retrieval script: ignoblekey (version 2)
Code:
| http://pastie.org/751573 |
An any-platform key-generation script: ignoblekeygen (version 1)
Code:
| http://pastie.org/753985 |
And an any-platform book-decryption script: ignobleepub (version 1)
Code:
| http://pastie.org/751366 |
You need the decryption script and one of either the key-retrieval or key-generation scripts. They produce the same output. The key-generator works on any platform. The Windows key-retrieval script can get access to your credit card (despite being an open-source script).
If you get the following error after running ignoblekey.pyw
"Error: Problem decoding key; unexpected DB format?"
you can
either find and delete your 'ClientAPI_v012.db' file then re-authorize BDReader with your account information,
or just use the key-derivation script (ignoblekeygen).
Both ignoblekey and ignoblekeygen will produce the same output when they work correctly.



