How To Remove DRM from MOBI and PRC eBooks

kindle   How To Remove DRM from MOBI and PRC eBooksMobi and PRC are the default ebook formats used by the popular MobiPocket. In 2005, the company was aquired by Amazon, so yes, even the celebrated Amazon Kindle now works with these files. When you buy an ebook online from one of the major retailers, you can be pretty sure you’re getting a Mobi book.

Now, don’t get me wrong. It’s a great format and I’ve enjoyed many wonderful books on my Windows Mobile device using the MobiPocket reader. However, most of these encrypted files are a real pain if you want to throw them on different devices or use other software.

Today, we’ll show you how to crack the encryption of these files, so you can enjoy them however you want. In other words, we’ll show you how to remove drm from MOBI and PRC files. When you’re done, you’ll be able to read them on any system or device, convert those MOBI or PRC ebooks to PDF or any other format you’d like and you’ll – once again – own those books that you’ve payed for.

DISCLAIMER – Stripping the encryption of your ebooks might be illegal in your country of residence. Distribution of decrypted ebooks almost certainly is illegal. MakeUseOf is not responsible for any legal problems you might face. Act wisely, or face the consequences personally if you don’t.

With that said, let’s get going.


A tool that has been able to break nearly every mobi/prc encryption is MobiDeDrm, courtesy of pdurrant. This download contains four simple python scripts; versions 0.01, 0.02 and 0.05.

Downloading Python

These scripts should run on any OS, given you’ve got the right files installed. So, before we can get started, you’ll have to download Python and a Python extension module like wxPython. What you need to do is to visit this site and you will be greeted by a webpage as seen below:

openrpg  online virtual tabletop   How To Remove DRM from MOBI and PRC eBooks

In both steps 1 and 2, choose the Python and wxPython module according to your operating system.

After these applications are installed, Python scripts should run flawlessly on Windows, Mac and Linux.

Finding Your PID

Your PID is the personal key that your reader uses to encrypt and read the file. We’re going to need this key if we’re to permanently strip the DRM from the ebook.

Because MobiPocket is designed to be used with different devices, the PIDs are out in the open for the user to grab. If your ebook is hosted on another device (i.e. Kindle), simply sync it up with the software before you proceed.

pid   How To Remove DRM from MOBI and PRC eBooks

In MobiPocket on your desktop, go to Devices, and you’ll see the PID of said reader in Details. Note that a PID is both device and ebook-specific. Upon transfering your ebook, the PID is also altered, so you’ll need the PID of the right device or the decryption will fail.

When buying a Mobi ebook online, you’re most often asked for your PID before downloading. Obviously, this is the PID you’ll need to use. However, sometimes the process is turned around.

If you’re asked for the store username and password upon adding the book, it hasn’t and won’t be matched with your PID. Instead, you’ll first need to transfer the ebook to another device (e.g. Kindle or Windows Mobile) and use that PID. With me so far?

Removing Encryption

Once we have the right PID, most of the work is already behind us. We’ll now deploy the scripts to permanently remove the encryption. For accessibility, it’s advised to put your eBook and the python scripts in the same folder.

drmfiles   How To Remove DRM from MOBI and PRC eBooks

First, open the Terminal or command screen.

In Windows XP, go to Start – Run, type cmd and hit enter. In Vista, go to Start, type cmd in the search box and hit enter.

The Terminal application is located in /Applications/Utilities for Mac OS X.

And if you’re using Linux, you’ll probably know the location. In most distributions, this will also be located at Applications/Utilities.

cmd   How To Remove DRM from MOBI and PRC eBooks

Next, you navigate to the folder containing your files. To do this, type cd, followed by the full file path to your folder, and hit enter. In my case, that’ll make for cd /home/simon/ebook. If your filepath contains spaces, put single quotes ( ‘ ) around it.

cd   How To Remove DRM from MOBI and PRC eBooks

Now, all you need to do is run the script. Type python PID and hit enter. Substitute “”, “” and “PID” with the appropriate filenames, file extensions and the PID respectively. In my case, that’ll make for python ebook.prc outfile.prc 1234567$ab

If you’re experiencing trouble, try putting your PID between single quotes ( ‘ ) or using one of the previous script versions (e.g. Some ebooks refuse to work with the later versions (strangely) but work perfectly well with the first one.

files   How To Remove DRM from MOBI and PRC eBooks

If all went well, you’ll now be the proud owner of another, unencrypted version of your ebook.

You can sync this with any device you want without too much of a hassle, or convert it to an easier to use format like pdf, rtf or html. Calibre and ABC Palm are great free resources to help you achieve the conversion, and a simple Google search will show even more.

How did that work out for you? Do you like reading your ebooks on one device or prefer the liberty to choose your own? Let us know in the comments.

The comments were closed because the article is more than 180 days old.

If you have any questions related to what's mentioned in the article or need help with any computer issue, ask it on MakeUseOf Answers—We and our community will be more than happy to help.


Gary Hartstein

Hi. This is great. Just bought a book as a prc. I use an intel mac with brand new sony PRS 505. I dont have windows installed on the mac. How do i get a PID for this machine in order to use the terminal tool to remove the DRM from what is MY file (paid for and all!)?

Thanks for the help.

Simon Slangen


a) You downloaded the eBook with a specific PID, which makes that the one you’ll have to use.

b) You did not ~, in which case you’ll have to copy it to another (supported) device first, and use that PID.

Tom Bates

@Gary: I think when installing reader software on a computer, and certainly a device like a phone or pda, you can retrieve the PID from the program (‘about’ menu on symbian devices), then tell the control panel of where ever you bought the book this PID, then download the file and use the PID… off you go!

My own question – I’ve got my PID, run the two earlier scripts (latest didn’t work)… the script seems to start, and it creates a file, but then my CPU spikes and hold there until eventually I abort the script. The created file is DRM free but seems to be empty. I’m trying to decrypt a dictionary, so it might be too complex?

Simon Slangen

A more complex document should only affect the duration of the conversion, not kill the process.

Are you getting any messages in the terminal window?

If not, I’d try to let it run for a while longer, perhaps while you don’t need the computer for a time.

Tina S.

I have a bunch of ebooks in PRC format that don’t require a PID for my Kindle in order to read, but I would like to remove the DRM so that I can edit the Metadata using Calibre. I have many books where the Title is poorly formatted or the Author’s name doesn’t show up on my device. Can this script be used to remove the DRM for this purpose. Since I am using a Mac I’m not sure how to get my PID for the Kindle.

Simon Slangen

This ought to be well possible.

To the extent of my knowledge, you have two possible ways to handle this.

1) Team up your Kindle with MobiPocket software. Because you’re a Mac user, you’ll have to use a friend’s computer, or emulation software.

2) Calculate your PID using your Kindle’s serial number – people figured this one out when Kindle PIDs were still ‘well-hidden’. This script should do the job. Like the one’s above, this is a Python script, so it runs on multiple platforms and requires the same apps installed.

Kathy L

I’ve tried this with both versions but I keep getting a invalid PID checksum (using a Mac) It’s the right one. I’ve tried with quotes too. Any suggestions?

Simon Slangen

My suggestion would be to transfer it to a portable device (e.g. Palm/Win Mobile/…) and use that PID.



Thanks for providing this info. I’ve followed all the steps you mentioned. Unfortunately, I’m having problems running python on my machine. I keep getting ‘python is not a recognized internal command…’ I’ve followed all the steps you mentioned. Any suggestions would be greatly appreciated.


Just copy scripts and the books to python install directory (c:\Python26 in my case) and run cmd prompt from there.


Hi, got just one book I need to remove drm from. Followed your instructions. Running Visa all I got was, Python is not recognized as an internal or externalcommand, operable program or batch file.

Can you help. I am a virgin when it comes to using the command line so please dont assume prior knowladge.

Regards michael

Simon Slangen

Make sure you’ve got wxpython installed, this is needed to execute python scripts.

Furthermore, if the ‘python’ command does not work on your computer, try to disclude it.
python PID will become simply PID.

Explanation: because your computer doesn’t listen, you stop telling it it’s a ‘python’ script – instead you just tell it to open ‘the’ file / run ‘the’ script.


Thanks for your help Simon. Worked a treat, after a few problems with long filenames. But re nameing the file worked.

regards Michael


Daniusoft Media Converter software can remove DRM from protected wmv, wma, m4p, m4v, m4a, aac files that purchased and downloaded from online music store and convert to general video and audio formats, you can enjoy playing on portable media players, such as iPod, Zune, Creative Zen, MP3 player, PSP.


Daniusoft Media Converter( ) software can remove DRM from protected wmv, wma, m4p, m4v, m4a, aac files that purchased and downloaded from online music store and convert to general video and audio formats, you can enjoy playing on portable media players, such as iPod, Zune, Creative Zen, MP3 player, PSP.


I don’t wish to remove DRM from music files. Al I want to do is remove DRM from one mMobi Book.


Justn Angel

Thanks! This was exactly what I was looking for.

I just bought a secure mobipocket and wanted to use it on a machine (open inkpot) that doesn’t support DRM. Excellent solution all around. And a wonderful walkthrough for sure.

Way to go mate,
— Justin

Uwe Brauer

Problems with the PID seems not correct.

Here is what I do:
I obtained an electronic dictionary in mobi format which I read with the mobireader.
I copied the .mobi file into the folder where the scripts
are and renamed it. Not sure whether this is such a smart idea.
Looking up the PID the way you described
I obtain
C2BBJBX$U8 I presume this symbol between X and U is a dollar sign?
In any case when I run the script I obtain invalid checksum.

not sure what to do, any ideas?


In any case all of the py sc

Uwe Brauer


I retried it again reinstalled everyting the first 2 scripts give the error
invalid encryption type and the last one wrong PID


Simon Slangen

Easiest way to solve this is to team it up with a different device, thus getting a different PID.

Uwe Brauer

Hi, these devices will be PC with XP, since the program does not run on a handheld.
SO you mean to repeat the entire process on a different PC, installing the dict program python etc?

Couldn’t it be that this ebook a dictionary is encrypted with a different alg?

Simon Slangen

The most probable reason is that the ebook is paired with a PID different from that of your computer (it’ll still open there because the password matches, or…)

When copying the ebook to a different device (other PC, mobile), the ebook encryption is ‘changed’ to work with that device’s PID. From that point on, you can be definitely sure you’re using the correct PID.

If it still wouldn’t work, maybe the encryption has been changed (although that chance is a lot less likely, near nil).


Simon: I’ll be trying out your excellent instructions for the first time, trying to remove the DRM from my purchased Mobibook (Joyce’s Ulysses”), but am a bit confused by the folliwng aspect of your instructions:

“python PID and hit enter. Substitute “”, “” and “PID” with the appropriate filenames, file extensions and the PID respectively. In my case, that’ll make for python ebook.prc outfile.prc 1234567$ab”

Although using Windows XP in this regard, in past years I have worked my way about Linux and am fairly familiar with command line use. However, even though you give an example, I still don’t know exactly what specifically to substitute in the command. Can you elaborate a bit further? Many thanks.


Trying further with my Linux knowledge assisting, I figured out how to insert the correct values in the command line order to get it to work — but even then this was only possible with the above further instruction to remove the initial “python” designation in the command line. Many thanks for this excellent tutorial.


Simon: I’ve converted a number of titles with success using your recommended command line, but with some recent titles I get the following error message: “String Index Out Of Range”

Does this mean anything to you? Thanks. Jim

Simon Slangen

Have you tried using one of the other version scripts? That solves the problem most of the time.

Jim Ascher

Simon: It took me a few days to realize that the email alert to your response wasn’t spam. Sorry for the delay in getting back to you. I was finally able to remove the DRM from the recalcitrant titles by copying the titles from an alternate source on my hard-drive. Don’t ask me to explain why this made a difference, and I don’t expect you to risk hazarding an opinion also. The important thing is that it worked! Many thanks, Jim

Ryan didn’t work but did.

python in.prc out.prc PID#

Thank you so much! I was able to get Robert Heinlein’s “Stranger in a Strange Land” on my Kindle! :)


Hi Simon,

I’ve tried following the instructions above, and keep getting an error “Error: invalid encryption type: 0″. This is my first foray into anything to do with the command line, so do you have any suggestions??

Thanks, Bailey

Simon Slangen

You should be able to read them without stripping it of any encryption. Try renaming the file to or filename.prc.

If not (especially if they’ve got a .TPZ or .AZW1 file extension — these are nearly always encrypted), the DRM cannot be removed.


I downloaded the PDC file – pdf file locked by DRM and now I am not able to open it on other machine .
How can i remove the DRM so i can read pdf.


Simon Slangen

Although I’ve got no experience with PDC’s, a Google querie turns coughs up some applications that might be of use.


Just thought I’d drop a line to those interested, I made an easy, GUI, batch-capable wrapper for the mobidedrm python scripts. Nothing fancy, but it’s got its uses. This version has an exe wrapper and is pretty windows specific but if anyone wants it for a *nix platform I can put out a platform independent jar.



I downloaded your ebookUtility, but haven’t been able to get it to work. When I start it I get the message “This application has failed to start because MSVCR7.dll was not found. Reinstalling the application may fix this problem” (doesn’t) and then it asks for the Kindle Serial number (found that on the back of the Kindle) but when entered I get “Cannot Generate Pin, invalid Serial Number? DRM Functionality won’t work.”

Any ideas what I should do or am doing wrong?


I believe you need to install the .net framework pack, you could simply download that dll by itself, but using the link below and downloading the install pack will be cleaner.

Microsoft .NET Framework Version 2.0 Redistributable Package (x86)

Another way to get your kindle serial number is to go to the settings screen and type 411 on the keypad, that’ll bring up an information page with, among other things, your serial number. Once you’ve installed the .NET package, hopefully the pin generating will work. Also, please download the latest version of ebook utility which can be found here

You can always find the latest version of ebook utility as well as ask questions here


Hi, I have been working on this for days- Just trying to read a mobi book I purchased on my Sony reader. I’m sure there is something simple I am doing wrong but can’t get beyond the Dark Reverser text and the words:

mobiderm PID.

Here is what I’m entering: ( my ebook is called duchess) duchess.prc outfile.prc ‘JKIOUH$UH’ (I made up this PID as an example)

I have a saved txt file called duchess with the script of duchess.prc outfile.prc JKIOUH$UH inside. I have saved the files to this folder and the ebook.

Is my script correct? I have also tried adding python in front of modidedrm… example: python duchess.prc outfile.prc ‘JKIOUH$UH’

Any help appreciate.


Simon Slangen

Have you tried putting those lines through a command prompt?


I am having trouble with the path to my ebooks its not working

Rich Knack

My reader is old and unsupported: a REB 1100, that uses the .rb format. I have Calibre, which can convert other formats to .rb (and vice-versa), but I want to be able to strip the DRM from legally purchased e-books, so I CAN do the conversion and use them on my reader. I don’t know how to access the PID of my reader. How do I go about accomplishing my goal?


I have a whole library of DRM mobipocket books which I read on my BeBook. In their next release of software, endless ideas is removing mobipocket drm support for some reason. I’d like to be able to take the firmware update for other reasons, but don’t want to lose my mobipocket library. Is there a batch removal tool available? It would take an age to individually remove the drm from each prc book and I’d be grateful for a batch method if you know of one.


Hi Guys. I have a whole library of DRM mobipocket books which I read on my BeBook. In their next release of software, endless ideas is removing mobipocket drm support for some reason. I’d like to be able to take the firmware update for other reasons, but don’t want to lose my mobipocket library. Is there a batch removal tool available? It would take an age to individually remove the drm from each prc book and I’d be grateful for a batch method if you know of one.



That’s exactly what the tool I’ve been developing can do, right now it supports stripping DRM from prc and azw files, it was made with the kindle in mind, but if you check the readme file it gives directions on how to get it working without a kindle serial. (Be aware there’s a typo in the readme, it should say “ebook.props”) You can find the tool here. Another place I post and answer questions about the tool at is here.

This is a nice, batch-capable GUI wrapper for the mobidedrm scripts, so you still need Python installed still.

Hope this helps.


Brilliant! Thanks a lot for this. It will save me ages and preserve my library. As you can imagine, I was a bit gutted to think that I’d lose my library if I didn’t buy yet another ebook.

Thanks once again.


Tried and failed I’m afraid. I ran the program from the eBook utility folder after creating the id file. (I put the folder in my python directory). I set my input directory; set my output directory and I got one yellow light then nothing. My output directory is empty.

I can’t find any other step by step instructions. Sorry for my ignorance – What am I doing wrong.


Did the output box show anything? If it’s still showing a yellow light and it didn’t try to process anything it sounds like it isn’t finding any .prc or .azw files in your source directory.


I’m afraid it goes yellow, then green, but nothing happens and the outbox folder remains empty. There are 56 books in the input folder. Is this too many? Could you possibly mail a step-by-step and I will set up again and make sure I’m doing it right. I am running Vista on a quad core, so it should process reasonably fast?

Thanks again for the help.


Sure, if you want to post your email I’ll get in touch with you about it. In the mean time, try selecting one individual file and see what it does, it’s possible it’s a bug, but I’d like to get some more details so I can look into fixing it, if so. I ran a test case on my development box with the 0.4 release and a folder with 96 files and it worked fine, so I’m leaning towards something acting wonky on the requirements end (i.e. java or python).


Single did not work either. I am and I’d appreciate any step bty step help you can give me if you have the time.



Revx: On July 20 I posted the following message:

“Simon: I’ve converted a number of titles with success using your recommended command line, but with some recent titles I get the following error message: “String Index Out Of Range”

Does this mean anything to you? Thanks. Jim”

I then followed it up a day later with the following:

“…I was finally able to remove the DRM from the recalcitrant titles by copying the titles from an alternate source on my hard-drive. Don’t ask me to explain why this made a difference, and I don’t expect you to risk hazarding an opinion also. The important thing is that it worked! Many thanks, Jim”

Well, after having successfully converted many more titles in the interim, using exactly the same methodology, the former error message of “String Index Out Of Range” has reared its ugly head again, and this time I’m not able to resolve the problem. What exactly does that error message mean, and what if anything can I do about it? Many thanks, Jim


Revx: With perseverance I finally, once again, got it to work. Instead of using “” as I had always successfully done previously, I instead removed the “002” and simply used “”. Why this should have worked in this instance, I again have no idea. Regards, Jim


( best hd video converter


I’m releasing a new version of eBookUtility with a serious bug fix which prevented the program from decrypting entire directories correctly. (Thanks to all who provided feed back) It also fixes a number of other minor bugs, such as correctly reporting when it can’t find python. The next version (0.5) will have more advanced threading and concurrency controls.

You can get the bug fixed version of (0.4a) at


After a few weeks of development, I’m releasing version 0.5 of eBookUtility, in both a Windows exe wrapped version and a platform independent jar.


Platform Independent:

eBookUtility 0.5 – 09/18/2009
– Complete revamp of the underlying threading system and external process call methods
– All selection method bugs appear to be squashed
– NEW: Thread monitoring tab with progress bar
– NEW: Only dedrm errors are output instead of all output
– NEW: 5 threads run concurrently to process selected book(s) (assuming you’ve selected 5+ books)


Great update. Thank you for all your hard work on our behalf. Really appreciate it.


The version of MobiDeDRM 0.05 included in the download is faulty. The lines

if checksumPid(pid[0:-2]) != pid:
raise DrmException(“invalid PID checksum”)
pid = pid[0:-2]

have been duplicated, so the script never accepts a PID as valid. Just remove the duplication and all should be well.

Rae H

I do believe my laptop hates me because every time I type the file path, I get the “path does not exist…” What am I doing wrong?

Simon Slangen

Are you sure you’re using the correct file path?


I’m having a similar problem, it tells me it cannot find the specified path.



I tried and it worked for a normal book.

then I tried to buy this dictionnary :

and I’am stuck with “Decrypting. please wait …” for 30 minutes and nothing happen.

Shall I wait longer ?

I tried the three decoder for the same result

any ideas ?


ok finaly it did work well with the 005 version of mobidedrm

I just had to wait 40 minutes, probably because it is a big file.


@RevX, I was wondering if your GUI interface can work with devices other than the Kindle? I have a BeBook that I would love to use this interface with. Being in Australia you can’t even buy a Kindle here!! Thanks


Craig, if you look in the readme.txt file it gives directions on how to use the program without a kindle. It’s pretty easy to do. :)


Craig – I use it with my bebook. No problems at all. If you mail me with a pm I can send you a step by step.


I just couldn’t get this to work. It kept telling me either invalid file format or invalid PID.
Any suggestions?

Simon Slangen

Have you tried revx’s releases? They seem to work like a charm!


I finally got it to work with .azw books, but haven’t got it to work yet with .prc books (they aren’t coded to a particular PID). What about .tpz books (I have three of those)?


Does anyone know if there is a way to remove DRM from .tpz books. Have gotten it to work on .azw but not my .prc (ones that aren’t assigned to a specific PID but can’t be read in Stanza because of DRM).


As far as I’m aware topaz encryption is entirely separate from the mobi encryption used in prc and azw files and it has not been broken yet. As far as your comment above, I’m fairly certain the scripts work with prc’s as that’s just standard mobi, you’d do well to make sure you have the most up to date version of the dedrm scripts though, with the latest community patches I think they are up to version 0.06


Installed Python and Simon’s scripts, etc on WinXP and can report some, but not flawless, success. Often I get “invalid PID checksum” error messages when I know that I only have two PIDs and neither seems to work. I will try installing another ebook reader as a device (in order to generate a third PID) and report further.

I’m running WinXP and using MobiPocket Reader to buy/download mobi .prc files to read on an Iliad ERO100 eReader. I also have a Sony PRS500 (but haven’t tried reading .prc files on that – not sure if you can?)

Also installed revx’s GUI Utility. As I don’t have a Kindle I’ve got the require ebook.props file but having the same problem – the PID is seen as invalid and thus won’t allow conversion. I also can’t get the program to recognise that Python is installed when it clearly is.

Kudos – and thanks – to you both for your work on this. If there’s any future development to the Utility, it would be good to fix this “python not detected” thing.


Just because you have python installed doesn’t mean it has a correct association setup, make sure you have the python directory in your system’s path variable. A good way to test this is to open up a command prompt window and then type in python, if it’s unrecognized, you don’t have your path variable setup correctly.

In terms of your PID, I’ve heard of other people having issues with getting a book stripped with the DeDRM scripts depending on where the books were purchased from. All the script is telling you is that the PID provided doesn’t match up. It can’t do anything other than that.


Still haven’t been able to strip any of the books that are .PRC that I purchased from online bookstores. These files can be read on my Kindle or in Mobipocket Reader, but not in Stanza or the reader in Calibre. When checking the properties in Mobipocket, it shows that they are “Content Encrypted”. They are NOT encrypted to a specific device however. I am only interested in stripping them so a) I can fix the metadata that is all screwed up and b) so I can read them in Stanza because I use a Mac and do not like switching to PC mode in order to use Mobipocket Reader.

How do I strip them when they don’t require a PID?


Can you open the file in Mobipocket Creator? If so, in the publishing folder I believe it stores a raw html file of the PRC — I’ve used this to get around some bad formatting and metadata before.


I have Mobipocket Creator, but I don’t know how to open a PRC file in that program.


I am following all your suggestions to remove the drm. I am running vista and have retrieved my PID. When I run the mobidedrm scripts I get a message that says:

err no 13 permission denied “’ion contained here and was hoping that you had another suggestion for me. Thank you,Ken

I have tried all the suggest


This sounds like it is most likely a Vista permissions issue, UAC can be a pain — I just disable it on my Vista/Win7 machines. One way to get around this is to open up the command prompt window you’re working in as an administrator, thereby lifting the UAC limitations. To do this right click on the command prompt icon and hit run as administrator, then proceed to use the dedrm scripts normally and see if that has solved your issue.


Thank You, revx your suggestion to run under administrator worked perfectly. Ken


I can’t get this to work at all. can someone please help me? I am trying to do azw books and i am on a mac.


Where are you stuck?


At the beginning. Lol. I need step by step instructions…please.


Do you have all the python scripts downloaded? Did you locate terminal?


also what kind of ereader do you have?


Kindle 2 now but am changing to a Sony


Do you have the PID? Did you download the python scripts? Did you locate terminal on your mac?


sorry, just got home. I have the PID and located terminal. On another site, it said that python is already on macs so there wasn’t a need to download it…is this correct? I also tried to do this from a windows laptop but gave up after getting the PID.


python is already on terminal but you still need mobidedrm downloaded. They are the python scripts that are used to remove the DRM. What I did was download them and put them in a separate file on my desktop (to make it easier for me) Once you download the scripts, it should work fine.


I downloaded it but I still can’t figure it out. I’m ready to give up



You can give it a shot with my utility, it makes a graphical, easier process — you’ll need Java installed if you haven’t got it already (odds are you do) — you can get my program from here, just launch the .jar file and give it a go.


Where are you getting stuck? are you getting any kind of error message? It took me awhile too, don’t give up! This is exactly what I did. I opened terminal, typed in cd/ and dragged the folder with my mobidedrm scripts on to terminal. Making sure there is a space between the /. Also make sure you put all the books you want to strip in that same folder.

Let me know how that goes


I get syntax error


I feel like a big freakin’ handitard! I’m actually pretty smart, believe it or not. This stuff is just wonky to me…I really appreciate everyone’s patience and help. I’ll keep working on it.


OMG!!! I LOVE YOU GUYS!!!! It worked. whew….thank you, kat and revx. you 2 rock!!!!


This works great for most of my DRM titles (about 75), but there are about a dozen or so that it fails on. The script doesn’t indicate an error and just says the usual “Decrypting. Please wait… done”, but when I try to open the resulting .prc file in the Reader app, I get an “Error: File corrupted” message… Any ideas or thoughts I can try? I know it’s nothing with the filename because I’m using the same command-line command for all of the .prc files, simply cutting and pasting the names back afterward…


Doh, never mind! Looks like I needed to use v0.02 of the script for these specific files for some reason. Both v0.01 and v0.05 resulted in corrupted files, but v0.02 works just great…

Thanks again for this great writeup. Took care of my .lit purchases awhile ago, so now I just need to find something to handle my .pdb eReader books…



I have .PDC file downloaded (protected pdf (by DRM) done by locklizard software)
How can i remove DRM from .PDC files (pdf files) ?
Any code or command that can be used?



I’m having a problem removing the DRM from my Mobi files. I do not have a Kindle, I just want the DRM gone from the books I’ve purchased on my PC.

I downloaded eBookUtility0.5 as well as ActiveState ActivePython. Because I don’t have a Kindle I created the text file as requested in the ReadMe file of eBookUtility.

When I try to launch the .jar file I get an error “can’t find properties, please enter your Kindle serial number” then it cycles through some other error messages: “no serial found, exiting, DRM functionality won’t work” “python scripts are missing, DRM functionality won’t work” “cannot generate PIN, invalid serial number? DRM functionality won’t work” before going to a screen where I guess you enter the titles you want stripped.

I have tested Python and it is working. What the heck am I doing wrong? Thank you!


Two things:

First, in terms of the text file, make sure it’s named “ebook.props” and has no “.txt” extension, otherwise it’s not going to be recognized. Also make sure that the format for the serial and pid follows that provided in the readme. This does work, others on here have used it.

Second, it sounds like you don’t have python setup in your path variable. A good way to test this is to open up a command prompt and type in python, if it says command not recognized, then you need to modify your path variable. You can do this by right clicking on “My Computer” and hitting properties. Then go to the “Advanced” tab and click the “Environment Variables” button, find the variable “Path” under “System Variables” and hit “Edit”, then add a “;” at the end of the variable string followed by the directory where the python executable resides — typically “C:\Python26″ (Don’t include the quotes when adding to this variable) — which seems to be the same for regular python (as downloaded from or activestate python.


Woops, scratch the first comment, I think I know what’s going on. You’re launching the jar by clicking on it, yes? Odds are the working directory isn’t be set correctly. I’m assuming you’re using windows here, so please download the windows version which provides an exe version instead of a .jar verison. It’s still a jar, just wrapped in an exe which takes care of finding the correct version of java and setting the working directory, etc. If you aren’t using windows, make sure you are in the directory where the jar resides when you launch it via a java command.


Thank you for the help. Unfortunately I’m still not able to get it to work. I am using Windows. I’m in the directory and it says exe jar file. I’m still getting the same error messages. I am a total noob when it comes to working with scripts and commands, so I’m sure it’s something I’m doing wrong.

I was able to use the scripts by using a working folder and a .bat file. A clunky process to be sure, but I got what I needed. Thanks again for responding!


I’m releasing the newest version of the program. I’ve updated the ReadMe to include in detail instructions on how to solve the Python path issue, please read it if you’re having problems!


Platform Independent:


eBookUtility 0.6 – 10/26/2009
– Not much new in this release, I haven’t had any reports of bugs, and only one feature request.
– NEW: Added a checkbox to allow overwriting of the source files — many people didn’t like the ‘-stripped’ name addition, and it was easy enough to implement, so now you have it. :)
– NEW: The DeDRM scripts provided with the utility are now 0.06 so there’s no need to upgrade.


Thanks to some prompt feedback I was able to catch a severe bug in the 0.6 release and pulled it immediately.


Hi RevX

I have downloaded the eBookUtility. I have Java and Python installed on my computer. When I double click on eBookUtility it asks for the serial number (of my Kindle, I assume).

I enter the serial number, taken directly from the back of my Kindle, and it says that it “Cannot generate PIN. Invalid Serial Number?”

Any advice? My Kindle is a Kindle 2 International. The Serial number is definitely correct. I even know its PID.

Many thanks. I want to use your application to strip a Mobipocket ebook of its DRM so I can read it on my Kindle 2.

Cheers, Will


Okay, I’m in using the new download. :) Now, after I enter my source and my output I get a yellow light and nothing. The threads all show idle. I’ll keep playing around with it, but any tips would be appreciated!



This was my fault, some of the changes I put in caused a few bugs. It was quietly throwing a stack trace and doing nothing else. Please grab the replaced version of the 0.6 release from the post above and give it a go.


This is the error message I’m getting: Error for C:\Documents and Settings\XXX\My Documents\My eBooks\XXX.prc Error: invalid PID checksum
I’ve checked and rechecked my PID. The DRM’d book opens fine on my computer.
At least I got past the yellow light this time. ;)


I did a quick bit of research. Is this a PID for your PC? If so, is it 10 digits long? If this is the case, try leaving off the last two digits and give the program only the first 8 digits as your PID, see what happens.

Brad Taylor


Thank you for creating such an important and helpful tool. I want to apologize in advance if you have previously addressed this issue. Several coworkers and I frequently use Mobipocket Reader 6.2 for Windows, primarily because Mobipocket includes the AutoScroll feature. We find AutoScroll indispensable; it is enormously helpful for speed reading and becoming a faster and more efficient reader.

Unfortunately, it appears that none of the standalone ereaders (including the Kindle) has the AutoScroll feature. Therefore, we’d like to be able to convert Kindle books for use with Mobipocket. Our intent is neither to obtain a book free nor distribute it to anyone else. We simply would like to be able to use auto scroll with books we’ve purchased from Amazon. Until Amazon includes auto scroll on the Kindle, this appears to be our only option.

Can you tell us if there is a method to convert Kindle books for use with Mobipocket Reader without having a Kindle? We are all running Windows 7 desktop computers. Thanks again for your help. If you take PayPal donations for this endeavor, please let us know as we’d like to contribute.


Kindle books are mobi books, plain and simple, the difference being the file extension. First strip the DRM, then rename the file to include a .prc or .mobi extension, it should then work just find with the mobipocket reader program.


I should qualify that statement, though, if the books you’re dealing with are topaz (.tpz or .azw1) you’re out of luck as no one has been able to strip the DRM or decode them yet.


Well, it seems the question of why I am having so difficult a time with some of the books I have has been answered. I sent a file to Calibre and got this reponse back.

“That file uses an ancient form of MOBI DRM called password DRM. Such files open automatically using mobipocket software so people think they dont have DRM, but they do.”

Not sure how it is they open on the Kindle then. Luckily some of the stores I have contacted have been kind enough to fix the books since they all told me they didn’t have DRM. Two never even responded about the problem and which format I should be purchasing to read on my Mac.


Hi Simon,

I have followed your instructions, and validated the PID of my Kindle with MobiPocket Reader 6.0 which displays the PID on the screen. I also checked it with the script going around.

I have the dedrm files in the same folder as the ebook that I want to strip of DRM to make it readable on my Kindle.

I have correctly accessed the folder through the command prompt, I am familiar with using this command function.

However when I follow the instructions of your script, using Mobidedrm, or Mobidedrm002, or Mobidedrm 005, it always responds that the PID is not valid. I have tried it with these ‘ around the PID as you suggest, but it still says the PID is not valid.

I can assure you that the PID is valid. I have verified it through two sources now. Do you have any other advice or is there a fault with the script(s)?

Many thanks


Hi revx,

I’m getting the same error message as Will, despite having the correct serial number: “cannot generate pin, invalid serial number? DRM functionality won’t work.”

I’ve got the up-to-date Microsoft framework installed, too, so that isn’t the problem. I’ve checked the serial using the 411 method on the settings page and on the back. I’m running Windows 7 ultimate edition and using a Kindle 2 international edition. Any ideas?




My guess is that the kindlepid script doesn’t properly handle Kindle 2 International serials. I haven’t seen anything on this, nor have I seen an updated version of the script that handles them correctly, but I have seen a number of people with similar complaints. What is the prefix of your serial number? (i.e. B002)

I didn’t write these scripts, my program merely makes calls to them, so hopefully there is an updated version of the script out there, or it might be as easy as adding a new prefix clause to the script (if your prefix isn’t B002) but I’m doubting that as I’ve seen other people mentioning that they can generate the PID, it just doesn’t work. Will’s problem above mentions that he already has a PID but that the scripts don’t acknowledge it as valid.


I figured it out but forgot to come back and post. You are correct. All it took was adding a new prefix clause to the script to account for International serials.



I updated the version of included with eBookUtility so that it now supports Kindle 2 international serials, nothing changed other than that. There are no outstanding bugs that I’m aware of and I haven’t received any feature requests that I have to time to implement — one was basically asking to wrap other popular ebook scripts as well, which I may do at some point, but not right now.

Please report any bugs you find and send any feature requests you have.


I happen to have converted the utility over to C++ if anyone is interested. My main reason for offering to do this was one of deployment. In reading this discussion, I noticed that several of the readers had trouble installing python on their windows boxes. With the C++ version, if compiled, all one needs to do is download the single file and run it with the serial number on the command line. If this interests anyone, I can post the source.


That would be brilliant Evan. Thanks for doing this.


Ok, so here’s the source:


using namespace std;

typedef boost::crc_optimal mycrc_32_type;
typedef unsigned int uint;
typedef unsigned char uchar;
typedef vector SerialChars;

//Class for implementing code originally from ""
//By Igor Skochinsky in 2007
//Proted by Evan Carew in 2009
class KindlePidFinder{
string letters, buffer, pid, chksum;
unsigned int PidLen;
//Setup the class' globals
KindlePidFinder(string serial);
//Perform a checksum on the pid
string checksumPid();
//Calculate the pid from the serial number
string pidFromSerial();
//Perform something like the standard crc32 calculation
uint checksum(string s);

KindlePidFinder::KindlePidFinder(string serial){
buffer = serial;
PidLen = 7;

string KindlePidFinder::checksumPid(){
mycrc_32_type result;
uint crc = checksum(pid);
crc = crc ^ (crc >> 16);
string res(pid);
uchar len = letters.length();
for(int i = 0; i >= 8;
return res;

uint KindlePidFinder::checksum(string s){
mycrc_32_type result;
result.process_bytes(s.c_str(), s.length());
return result.checksum();

string KindlePidFinder::pidFromSerial(){
SerialChars crc_chars(4), kindleNum(PidLen);
uint res = checksum(buffer);
res =~ res;
for (int i = 0; i > 24 & 0xff;
crc_chars[1] = res >> 16 & 0xff;
crc_chars[2] = res >> 8 & 0xff;
crc_chars[3] = res & 0xff;

for (int i = 0; i < PidLen; ++i)
kindleNum[i] ^= crc_chars[i & 3];

for (int i = 0; i > 7) + ((b >> 5 & 3) ^ (b & 0x1f))];
pid += "*";
return pid;

* main(int, char **)
* Basic driver function for scripting the KindlePidFinder class
* Requires: single argument representing the Kindle's
* serial number. This serial number is either
* printed on the back, or can be accessed
* via the 411 keyboard command.
int main(int argc, char **argv){
if (argc != 2){
cout << "Usage: getKindlePid \"YOURSERIALNUMHERE\"" << endl;

string buffer = argv[1];
KindlePidFinder kpf(buffer);
string pid = kpf.pidFromSerial();
pid = kpf.checksumPid();

cout << pid << endl;


Ok, so that didn’t work out so well. Is there any way to attach docs to this post?

Simon Slangen

I recommend using if you want to share code, FileDropper to upload a file.

Donna Davis

I am really confused by all the DRM stuff. I had a Cybook which supported the secure mobi, but it took a hit so I had to send it back.Bookeen refuses to honor the warranty, so I don’t have that device available. Don’t have a PDA or smartphone to use either.

I cannot find a decent dedicated device to purchase to save me. My only hope is mobidedrm as far as I can tell, but from what I read I have to have my device to use it.


Jackie Hayes

When I run the java script it says “no key found. maybe the PID is incorrect.” I have not entered the PID. How is it being generated? Thank you.


I have a Cybook Gen3, which has an easily locatable PID, and I have a macbook. At one point I had a Windows emulator, and I was able to check what it registered my Cybook’s PID as, and it was the same as what the device itself is telling me, so I know that the PID is correct. However, when I try to run any of the three scripts it returns a response “no key found. maybe the PID is incorrect.” I’m not sure what to do, but I would really like to make this work so that I’m able to read the ebooks on my Mac using Stanza or Calibre, which I can’t do because it says the files are locked. I’m assuming ‘locked’ means DRM protected.


I have a Sony 505 and need to know how to find the PID. I’ve been to the about in my reader library and only get info on the program not the reader. It won’t open in mobireader, at least I couldn’t. Can I get help?


“If you’re asked for the store username and password upon adding the book, it hasn’t and won’t be matched with your PID. Instead, you’ll first need to transfer the ebook to another device (e.g. Kindle or Windows Mobile) and use that PID.”

This is exactly my problem! I can strip the DRM ok from books bought from and from Amazon Kindle books. However, when I cannot do it with a Mobipocket book I bought from eBookMall! As you said, it asks me to enter the eBookMall username and password when I first opened it in Mobipocket Reader.

I tried all the versions of None worked. It says “no PIDs found in this file”

I’m using my PID from the desktop version of Mobipocket Reader. I do NOT own a Kindle or have any mobile devices (like smart phones) to put my book on, so I cannot use another device’s PID. I use a PC only.

With my desktop PC’s PID, I have no problems stripping DRM from books I buy from Mobipocket directly.

What should I do?


I just solved my own problem! Although I can now strip DRM off of ebooks bought from Mobipocket and Amazon, I could NOT strip the DRM from a Mobipocket book I bought from eBookMall. (A non-Mobipocket store)

Running all versions of on it did not work. It would keep giving me the error: “no PIDs found in this file.”

But now I know how to do it! Here’s the answer:

“This sounds like you have an unserialised eBook. Some eBook stores let you download a book without any embedded PID. You have to open it in Mobipocket Reader, which will connect to Mobipocket and generate a new version of the eBook with the PID for your copy of Mobipocket Reader embedded in it.

So – open the book on Mobipocket Reader. Now find the new copy that has been created.

Now try with that eBook instead.”

This is exactly what I did. I had been using the original ebook file I downloaded from eBookMall. Wrong.

Going into my ebook directory, I saw that Mobipocket Reader created a NEW VERSION of my ebook file (with a later time stamp) in that directory! This one DID have my PID embedded in it.

Using with this new file worked! I did not have to “transfer the ebook to another device and use its PID,” as you said above.


This forum should be very helpful to everyone here:

Stripping DRM protection from Kindle and Mobipocket books

Grateful Bastard

Just simply Thanks.


I keep getting Python not found message. I had no problems when I tested using the command prompt and even added it manually to the system variable path. Help!


Jay, you added “c:\Python26;” to the PATH variable? And in the DOS command window, when you type Python, it shows a Python command prompt “>>> ” right? If both are true, Python programs should work. Try finding a simple Python program online (like printing “Hello World”), making a .py file with it, and running it.


Ok, finally got it to work, I missed out on the ; which caused the problem. Thank you!


I had never used Python for anything before and had to work through a few things, but finally got this to work using your mobidedrm002script. Anyway, it worked great and I have more access to more books. Thank you for your work and for making it available.


I looked up the the pathway for my ebooks in properties and it says “C:\Users\min\Documents\My eBooks” , so I tried entering “cd /C:\Users\min\Documents\My eBooks”. It tells me “The Filename, Directory Name, or Volume Label Syntax Is Incorrect” when I do that. What am I doing wrong?


It’s very simple, Min. You used the wrong slash. It’s forward slash, NOT backslash. Also, you probably put the wrong file directory. Type:

cd c:/Documents and Settings/min/My Documents/My eBooks


Thanks, that worked.

Now though when i enter “python PID” with the infile, outfile, and pid replaced, it keeps telling me “‘Python’ is not recognized as an internal or external command, operable program or batch file. I also tried “ PID” like one of the comments said to above and it still gives me the same response. I definitely downloaded Python and wxPythong. The versions I used were Python2.6.4 and wxPython2.8 win32unicode.

What should I have done differently?


Min, you forgot to set the PATH variable in your PC. That’s why it does not recognize Python.

1. Download and unzip from above link. Or download full torrent of DRM stripping files for several formats:

2. Install Python

3. Install wxPython

4. To use Python on a Windows PC, edit your “PATH” environment variable:

Right click on “My Computer.” Click “Properties.” Click “Advanced” tab. Click “Environment Variables.” Under “System Variables,” edit the “PATH” by adding the directory where Python is installed on your PC.
For me, I added “c:\Python26;” to the end.

5. Put all your Mobipocket books into the same directory as

6. On your PC, click “Start” button in lower left corner. Click “Run.” Type “cmd” and click “OK” to go to DOS window.

7. Type “cd [full directory of and the ebooks you want to strip]” and hit Enter. Now you’re ready to go!

8. Type “python [your ebook filename] [your ebook filename after stripping DRM] [Your PID number]” and hit Enter.

You’re done!


Thank you so much. I’m sorry I’m so computer illiterate.

I followed all your instructions exactly, but when i do step 8 it gives me “python: can’t open ‘': [Errno 2] No such file or directory.

For step 1, I downloaded from the link above and unzipped it.

What did I do wrong now?


You didn’t follow step 5. Copy into the same directory as your ebooks that you want to strip, which I assume is your “My eBooks” directory. C’mon, it’s common sense! Both the program you run and the ebooks must be in the same directory. This is the last time I’m answering your questions. It’s all on my website.


actually i did do that.


Stripping DRM from Amazon Kindle ebooks:

Use a program called “unswindle.pyw”

Read this for instructions and to get the program. It’s even easier than stripping DRM for Mobipocket books.

1. Put “unswindle.pyw” on your PC.
2. Install free “Kindle for PC” (get it from Amazon’s site), if you don’t already have it.
3. Put your Kindle ebook in the same directory as “unswindle.pyw.”
4. Double-click “unswindle.pyw.” It opens “Kindle for PC.”
5. Within “Kindle for PC,” open the Kindle book whose DRM you want to strip.
6. Close “Kindle for PC.” A window pops up, saying “Select unencrypted file you want to produce.”
7. Type the filename you want for your no-DRM Kindle book. Click OK.

That’s it! Note: this does NOT unencrypt Topaz ebooks, which are a significant fraction of Kindle books. I have still not found a program on the Internet to do it. This forum talks about Topaz ebooks:


I just posted full instructions here.

Stripping DRM protection from Amazon Kindle and Mobipocket ebooks:


I got Python 2.6.4 and wxPython installed and go to the command prompt get in to the script folder but i cant find the file, the only .py files are and
What am i doing wrong?