Legimi na Kindle #2 – DRM

2 min.

„Unikalny DRM” w Legimi dla Kindle jest… nieunikalny. W przypadku formatu MOBI istnieje tylko jeden rodzaj DRM-u – opracowany 16 lat temu przez firmę MobiPocket Inc., czyli w czasach przed wykupieniem jej przez Amazona.

Dając upust precyzji dopowiem, że chodzi o DRM uzależniający możliwość otwarcia pliku od konkretnego urządzenia. Poza tym, firma MobiPocket Inc. opracowała dwa inne rodzaje DRM-u, ale obecnie nie mają one już zastosowania.

Co to za DRM?

DRM zastosowany m.in. przez Legimi to standardowy mechanizm obsługiwany przez serwery Amazona i np. OverDrive. Oparty jest na identyfikatorze uzyskanym z numeru seryjnego urządzenia. W przypadku Kindle składa się z ciągu 7 wielki liter lub cyfr, gwizdki i 2 kolejnych znaków alfanumerycznych. Litery to tylko 26 znaków występujących w alfabecie łacińskim. PID ten wykorzystywany jest przy dekodowaniu plików. DRM szyfruje tylko treść e-booka – metadane pozostają jawne.

Na potrzeby zdejmowania DRM-u wystarczy znać część przed gwiazdką, czyli kombinację zaledwie 7 znaków. 2 znaki po gwiazdce są zależne od tych przed nią i skrypt wykorzystywany m.in. przez calibre potrafi sobie je wyliczyć. Na przykład jeśli uruchomimy ten skrypt z podaniem PID-u ABCDEFG*00, to najpierw pojawi się ostrzeżenie:

Warning: PID ABCDEFG*00 has incorrect checksum, should have been ABCDEFG*8Z,

a następnie nastąpi użycie PID-u ABCDEFG*8Z.

To jednak tylko ciekawostka. Przy zdejmowaniu DRM-u w calibre podajemy po prostu SN czytnika, a resztę robi już program.

Druga ciekawostka: w czasach procesorów Core i9 i podobnych, DRM opracowany 16 lat temu może zostać przełamany na domowym komputerze metodą siłową (bez znajomości PID-u), w czasie liczonym w godzinach.

Działanie w praktyce

Na poniższych obrazkach prezentuję próbę otwarcia zabezpieczonego pliku bez uprawnień. Po lewej – na innym czytniku, po prawej – po przekroczeniu czasu wypożyczenia.

Legim_DRM_czytnik Legim_DRM_czas

Komunikaty oczywiście są w języku interfejsu czytnika – u mnie po polsku.

Grafiki te przedstawiają dwa mechanizmy zabezpieczeń. Zaczynając od tego drugiego – znacznik wypożyczenia i czas ważności są zdefiniowane w metadanych pliku MOBI, a dokładnie w polach:

Numer Nazwa
405 Rental Flag
406 Rental Expiration Date

Zmiana tych pół pozwola wydłużyć czas wypożyczenia o dowolną ilośc dni, usunięcie – bezterminowo. To jednak pozostawię bez rozwijania – DRM zdejmujemy by poprawić sobie wygląd e-booka, a po takim zabiegu i tak przy zapisywaniu uaktualnionej kopii, te metadane nie będą zamieszczone.

Drugi rodzaj zabezpieczenia, to ograniczenie otwarcia pliku do autoryzowanych czytników. Tego pozbędziemy się przy pomocy programu calibre, z odpowiednią wtyczką.

Wtyczka deDRM

Wtyczkę deDRM dla calibre (i nie tylko) można pobrać ze strony Apprentice. Dokładnie chodzi o plik DeDRM_tools_6.5.5.zip.

Po otworzeniu pobranego archiwum, wtyczkę dla calibre znajdziemy w katalogu DeDRM_calibre_plugin. Jest to plik DeDRM_calibre_plugin.zip. Przed wczytaniem jej do programu wymagana jest jednak drobna zmiana – inaczej pliki ze znacznikiem wypożyczenia będą ignorowane.

Zmiany wymaga plik mobidedrm.py. Otwieramy go w edytorze tekstu i wyszukujemy linijki 437–441. Wyglądają one tak:

437:      if 406 in self.meta_array:
438:          data406 = self.meta_array[406]
439:          val406, = struct.unpack('>Q',data406)
440:          if val406 != 0:
441:              raise DrmException(u"Cannot decode library or rented ebooks.")

Na początku każdej z nich (w praktyce wystarczy zająć się tylko dwoma ostatnimi) stawiamy znak #, co w Pythonie oznacza komentarz. Ewentualnie można też te linijki po prostu usunąć.

Zapisujemy plik i podmieniamy w archiwum DeDRM_calibre_plugin.zip. Tak przygotowaną wtyczkę możemy wczytać w calibre. Jeśli wcześniej była wgrana inna wersja tego rozszerzenia, to należy ją usunąć z calibre.

W calibre wchodzimy w Ustawienia > Wtyczki > Wczytaj wtyczkę z pliku. Wskazujemy powyżej wspomniany ZIP i zatwierdzamy dodanie wtyczki. Od razu trzeba ją skonfigurować. W tym celu klikamy dwukrotnie na nazwę wtyczki na liście (jest domyślnie podświetlona) i wybieramy eInk Kindle ebooks. Dodajemy, wybierając +, numer seryjny swojego czytnika, wpisując go w polu obok etykiety EInk Kindle Serial Number:. Zatwierdzamy, zapisujemy zmiany i już wszystko gotowe. Od teraz aby pozbyć się DRM-u wystarczy wczytać zabezpieczony plik, a calibre zdejmie DRM automatycznie.

Teraz można już rozpakować plik MOBI (skryptem lub wtyczką do calibre – kindleunpack), poprawić i zbudować nową lepszą wersję.

Tagi:

Kategorie:

Ostatnia aktualizacja: