From ba5927a20dedd1846c509f594f4b7083f9e3647a Mon Sep 17 00:00:00 2001 From: Apprentice Alf Date: Sat, 6 Aug 2011 07:12:41 +0100 Subject: [PATCH] tools v4.6 --- .../K4MobiDeDRM_plugin/__init__.py | 2 +- .../K4MobiDeDRM_plugin/k4mobidedrm_orig.py | 2 +- Calibre_Plugins/k4mobidedrm_plugin.zip | Bin 49357 -> 49385 bytes .../k4mobidedrm_plugin/mobidedrm.py | 11 ++-- .../DeDRM.app/Contents/Info.plist | 4 +- .../Contents/Resources/Scripts/main.scpt | Bin 234956 -> 236028 bytes .../Contents/Resources/k4mobidedrm.py | 2 +- .../DeDRM.app/Contents/Resources/mobidedrm.py | 11 ++-- .../DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py | 2 +- .../DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py | 11 ++-- KindleBooks/lib/k4mobidedrm.py | 2 +- KindleBooks/lib/mobidedrm.py | 11 ++-- Mobi_Additional_Tools/lib/mobidedrm.py | 11 ++-- ReadMe_First.txt | 61 ++++++++++++++---- 14 files changed, 86 insertions(+), 44 deletions(-) diff --git a/Calibre_Plugins/K4MobiDeDRM_plugin/__init__.py b/Calibre_Plugins/K4MobiDeDRM_plugin/__init__.py index 213b292..9303ea7 100644 --- a/Calibre_Plugins/K4MobiDeDRM_plugin/__init__.py +++ b/Calibre_Plugins/K4MobiDeDRM_plugin/__init__.py @@ -19,7 +19,7 @@ class K4DeDRM(FileTypePlugin): description = 'Removes DRM from K4PC and Mac, Kindle Mobi and Topaz files. Provided by the work of many including DiapDealer, SomeUpdates, IHeartCabbages, CMBDTC, Skindle, DarkReverser, ApprenticeAlf, etc.' supported_platforms = ['osx', 'windows', 'linux'] # Platforms this plugin will run on author = 'DiapDealer, SomeUpdates' # The author of this plugin - version = (0, 3, 5) # The version number of this plugin + version = (0, 3, 6) # The version number of this plugin file_types = set(['prc','mobi','azw','azw1','tpz']) # The file types that this plugin will be applied to on_import = True # Run this plugin during the import priority = 210 # run this plugin before mobidedrm, k4pcdedrm, k4dedrm diff --git a/Calibre_Plugins/K4MobiDeDRM_plugin/k4mobidedrm_orig.py b/Calibre_Plugins/K4MobiDeDRM_plugin/k4mobidedrm_orig.py index 2eb5376..de877cd 100644 --- a/Calibre_Plugins/K4MobiDeDRM_plugin/k4mobidedrm_orig.py +++ b/Calibre_Plugins/K4MobiDeDRM_plugin/k4mobidedrm_orig.py @@ -17,7 +17,7 @@ from __future__ import with_statement # and many many others -__version__ = '3.5' +__version__ = '3.6' class Unbuffered: def __init__(self, stream): diff --git a/Calibre_Plugins/k4mobidedrm_plugin.zip b/Calibre_Plugins/k4mobidedrm_plugin.zip index 5ca2c278331e1d1fa7650e539ba75b336f5d49c5..faba7b403cf2548428dbc87bc2f6c16a2f517fb3 100644 GIT binary patch delta 9976 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 WP(Q&meHsvSVBbC^*s!jD`~MdjPBaYw delta 9938 zcmZXaRZN~;w5@T96nFOzx8e@Pixzh&?(Xp7?jP>%QmnYUySuxVBE?SkpX}u1oQs(} z$;w)HGjpyn#%TcbWB@dv^bHyY3jzY-69l{7l@I|g?UzP42ncaZ2nZwyA_xNmOFK&! z0|RCUPc>Bp2xt}*QU%t3_Ul||@46p|OO|Aom`Pnl>u6-8 z89cT@T-BK#cr#pR77_Kl--=|v%Me`*U&khyjIvm=8D<6mRP3%kS00ZWNDYrqd2?rm zV}p>G+(o(>tyn>#B_^VKJe6|AnnalTN#F6E#wP`qLJ8DajjZZ|k9;aLlT_D60=F9^ z|8h>RnrPKK>QAldr9`caw9GNSo56V(fwTjEu|ro$`b{Jqt@*=ZhBBx! zN$J)NNH<*o>sYDkO|dv(Az61x#T6DxIA3UFbIwS&3{7ONSF@El*n~UE_3)6-usatf z3vF_-2$2)BtmLb@`mXs|cnHv*K54VoKk(9QwfEmze&T1bfC5^ido^(L(v%Vs z5i;Z%%cLGg;Dh7w*_|vX(*%5I+Dq}#q)I8yN~lx z;8_?Hucn_?U)c++97pZ^QCc3=wCHzW6jv$*kPyDe9IQ5+R)~Wdu%IO5Y1Hy}Z43m; zuRG!ak7j=wdrqMvT~+rj&KAoJ*$m$0rc(b8PX$%#a2NeT?4qc(@Zng@{1?zpm{;m& zu_)Wy8`{lJJOUq<()z&%rV!giVw9i?(I|h(*2goVj2HR3M1*~U#qB7IY#Ch{3Yco`4s{4scMt-mO<5#%8c zICu8-cm*$X*lGB$5{dtfigHenVMP1m^lDi}|LoGq5Yi<4xq(rTg z-2{oH^@$K5lp`o|TEA>F_UkDOv=E6H-js$NZhY#*Y0tJTm5SkQkA`e|QTp?!!|&y< zmEB{AL_>dZN7!ok70nM>{5WkVk2(q?<#ku%d<_Kn#`IjTf{nuMr?-8cJUre0o}JlX z!Y=Ys0k8y?77e2UE*OO6CK}v8dPsR}?S(XyXV=$>$eNHH#Zd|Gg`X0u2ONItO*Jw> zOeAaAx$X>nBzaM~ia~NCCa^YrcL%g-qXMvshE)X4+OQYQM#bdEq|-@>XD97NKaJ54 ztV%NnxiDP>cWZucp9l2|v{YQK94vV&h?)y{?goy%>Ng+?a{dYYG^h@yHOhM^SX{KhkMP8JQr zmmz(TclUw^joXGh92jdQ00x(u;Dr)DSWCU zwVLwH$9Hw<$kpu~m^WG| z{fPel6e<=1{2I}*z7ik!!FT;O<$MpX2E|TC)vu6&?#>dJ$nEkBq|}QW_YsSF0oW^D zZZoB7_@}KMf0{dgDug$88M`xT0sB5nZ5!9CtI^u^V=C*u)%i>3T-IT|USu!g%-4{n z-wvN^#h&B(o`pm1dw=?Y8b9i9pA=sl0jmdFh2Q=J1;JGQ*U3wtkkw(6stOC&BXE;vih0ml7 zZ16$&|3NcZ5Z-?v$m{p%Kj;$e!9o!KHznuWRO&LoVd|9dO8;izzXI2(QvfFR(Ns}f zGSdia9HNO=B#l#ui4wyCDKY^?SuHDJ+xF73Df3ts?#+;AvIh?DJijNSa|E_5qqpdS zH+G!{&ziCs@Fl)fr!bD2#n^I8v(uzB&82K2@=r%kG8s5o7M>vN-$_bORT*cnEJikb zXG!OO(;undvnk==pDbleH3fjv*LZAMCS=VS>&Yf%_FBy!uYNV9&UF}fL&RD1t$S;8 z=h~bZjsQ;Bv@lV3tALr5`NjS!HotJIhqLQM>~>CeXSdHp_)c!t=FwbzM}_8A51%d3 zcpDwP(NR3V)AcKpCi{=%qtJ=+fyjN2;y}bEbvW&cp%$k8NH{sB2Echrt}7S`#&3nm z9N-%AN;ibYfi?G3h9y0u=6`Y7wKbQmU+2w2Sl1lYFdjSY(7>f|H0<@17dXlLvFEej zNZ`3C&A2*Ra|9(zSG`zmw9{hdoKq{_^sww$$w7rR zr0!E!V=E=8pq(d|8--={LC3 zb*73l37|i{MJ!Urnj5Q=wpx`Ijevq zOLM7fR}G=%1$sqi+H{`ERc^%Ilee|96)zQubvGQeqUP==J*5+_M_Z>$I@M)=Sq?g{ zE=YsK+u8}ZFtJm6AjLRxLpnC*T+dC1PfitHHYDA(YaMx5@(J~lpjAZ*GT6!weiIlI zK`9)!($FPo3uYwEd|IhuqC0^Er}O1{30Rv%L}y}j01{YTy}{8g3MU{K`6YtHbRzAD zT9?O+QkABvI`GNU_yO}V7#BR+4FYmsUF}(g(gfC9V|~riN?6rbhVI^YqBau~2Pk6a zg_GkEEU%R&1bgHX2hr3n+aJx(Ca6aUAJTj(brAzbB~QXXy?`1^XKn`uC~+EARFo(p z`8?x+I|K0jszEqURJT#sw(9S;Kn*aDyy(w_%Tpysh|J*L;yuYBoI~T@gebSEk+2;y zCOepxxIL}5L_~2ZOZ1BS0B&dFpOzMwPJ1L3E?z$P!hq+S4W*E@z4axC?kZ2L6vA`r znQw%d2ctAu$Xbb5`Q=O<(u0?LeihPtcO?Pn!Ckf?#Z4c2Y+9wgjXu$jt?fQ$eTjbGLPo~ z&keuP#g5Qbck~8gfIL#wm0&me{Ice$4B=o~co-e_^TD5=YBj~dFV@hytwtwBGlsg8(0J_oFk{DJ&ov5gnCzO} zw*k2jhVBSgh@DvuAsbEjolhs+6<-E%Ern5@C_EZKUOHnR@=6?<~@x?knu=x!sz-n_-dm7wPJK)X9P zT_h};*R`KzjxX5GK{Poi0pEd|&(CEeL)*0q!aip98;wJqz6KJ$s8N2Z&#iju20;({ z&ch@jd^gDGPySq~A5WJbc}OijikLQU@f1LopJA@z)CY*Or@u15Sx5HuHl91Dv5?zk zHzU*{`uIf8IojWFx-`vld4Zfy8V=3jz;&F%-yFlE=@#udaRYB66ak3eDOo0mE7Wr- zg!+!<-zSFhooeE}{Wy%jw2<{C4i7dD`g?64={CHtU9R+;hr@K`MY)kd4$DeTuDnVT zhO0wNamFPi*rb8uYOxV36=hq9YaD8l`PYNbEw7>X)-pV@Pj3AZ#r++6lbl$a<>G3` zfKK9h=Aw|i?ETE@B`Wa8uCB6NJk*Pzqh;lCtik*8C(gKmk3E*ZM}x>yhv)e-dBpa0 z;zulxLrQfHP3Nkog(i_8lqK?^I?OP~u1e+CeWA@(!uF6Xb$OZD)!Zc(wrb$6|8KJa z^ja-UY82`7r=H8CVm2agm2xOE>i%jN(e+2$h+da(x%&5?(=UP2&4rKD#@JE?rvbPq zM?tRr-k))!yFK<--M`>0d`WYNsjNF8JG{|5)9=YKe6!^BUEgqBp^LU0t{0z5r`=Pf z3u6PbIo9Gw3Dp;lRouBfy6|k&`xO-UNy~$_wwz=#koudYK6)d>i$x!mjx)58uFM%7 zNbHEWgN-wmIVFMUqQ|Bmg-UPZSQXcFSbai|Z&rb~JLJ9-Ec3$~^XA}G9r`9}bdfVj z8mnbSJ{SSn<-4ysh^WybIP9tAgme8i8VIW!vp$by@C0$c(1N0o4StBJ zh$zc!@-unqTH_k%KN`Ju=ax}C=7XFCIeiQIkrPdWqqT@};Lz(wRxmCexD756C(nKs zI$7>2B`fU;|IZg69MFXa_AtPK{_}6gNiZ14{tpaX+dlsXL_zrojH7PVLiQxFIPKUF z5W!*)5Xk=o09$)wOA}KQC)@v30JQxk<^SzT;L~VwAphXotY-Ng@2y*nOx9J7qX4~Z zAXOvX_x}E2yKBFPw@&zY7`n0SY(Xn)>qX*pihwY81BhH<@8qG`$~r{-Y7(#no{iwP z7jq2`JXy^t zHz^`T0K*m3O{GsUDK53avS1QGPOo6h)_>xSE!Y3j(odVk++oQ4<`8SW>$Xv|f}R>6 zn{*t-k3SfxbO;g@@XVYtQ{hAhJ0R%p;o-&h-*DkPvL{k}!mNwzOOAe(VoL^}I3|yj zr*}o23VS=wNDr8hgPQ5nq8>>VnFqzZRL~BAal;(OiJeYkhYQHeVPl1=cdbYVniBoJ z2x)~rS{@{;>E^^gW{-CG-J=NNiAf z&UM(MaTNyJXEp~q!B4chV6Q7`$+YhtwbnPl2avcRXZevD9Cmvu7(JHm0M( zluA}v3+CI;a-FD@--$9xa?v%GQ%*GjvRF>iD_9pdSz1+PWAPI5x;0J3jzmn(pdr6D zfpffi>A`tTL>BqJ^xPq&=xDIzrxNt$Cb+Lni5!Rn*~g{qTwg|Em=~aR&_iQ<=QxfS z8~c8E60-Ng^h4F%&9?>;OD5)y&>|Khli|Z6dz@0sy~zoVc!+%S-mlA#q+#v{_+JAR z=yF4Q3-VhT?2Uh?DlL0)KXmS>8x{q7&=^6;U`8njcYC>$tLH?Lk?o+%{ivrr?d6{_ zEQMmE8ti?=YYYg8))^A}r8pAzlf0`A%ep#-gH`1PwuLB74Nfd>gfXcID<9NYLG*%(MysZ2*%ye6r8wezfdL3(6Ef^5 zOpMIPR+#h9qAeNOtYU&MIPMG7pETC7JJw<=c0S_fa`3@COTs**0 z`UDa-DZE1(oZR4#V3$n;>fwk&ZGN&o)z718o%D!6f#KK&sN?YE?*4AM zAb!>hozD_Q=2y_LxsMc}Z6zX0Z{?5XRwkXFOKgiV@L$up?@&6QYir`Kny^uu$NMq?HC{eJ9UUOiF0Va-cVG$ zTdW1YmNL-ILf*9p^yU{B@3CtLZUi0ON1Q~f>hpjpB4US0^ybYIlwBMJTXo;WSq#aq z6Csih?j=^Sxi=5#QNC|+`yP2QvYD|7ZgGKomU!g9$>>nK;2+?6@WmsghO30r+v4Zg zs65E)zN>uw7Pp5AaA*t?)fKq(^#$cHi2-A?Z!oKAu|1gEQB8+`lZHeJZYF0eB%#PX z%=+MazGG253QZC<#9I2xxDC|A*~8@Xd>o!JotUo0SUx;7zNh|FB+>Zp@}^1e^_w#L|(VS!)yVN$f|AVVXHEV(6-R*u{5;Nygentd5FvL6J??Qv4LFRf)zwun3 zh%p;Ogj!45u>X6}N+M@eqlkA$Y1!2PPdY5bCE`{>SFumWwuF))zz@D_BVG94}dFk);>%FIHZ;t27zKya5TtGLOt_XwVSBb&Qmb|kO* zoGTrr1J1Gs;6a@T`F^C2&mg%4W0j}!_+23VseB1zAI2HoDG?y;Eq9}x^qsf}EpmCd zT|lH;oGA~|$w{0GZZ=?H*3Zt-!Pnuu zFW>gZ_72c%T&+3SmCZRYzRr?8#Z)tas|Mq4mr{NKskOa$)F>xeD8D|vlxIcEO6SAi z$7Iyqo1@_8+@~KXxUON}f}$R%38b;ObkL0jcI=d9Ui@sNj8T1PuI z{_Bd3qFOW6`9RZ9yMVJ;1@AD}#mPN8hGRv%<1FJ+@S7Ot`5t&q3hcqoD;&q2dCO)` z22%1ki#?M?njzHM0@V!8eV5e`=?!7CZm&U>i8tzKzra6-%?r^LN`Y%$To)u*6S@*g zB6Yrd@|GENYPq%=>GE)6k5`rpO1j%OEOTyv#L+!kLOS!%S-JYaR{Ed`X%WDC)2tBOk|!Q`ak%M2Hbht{(slw zZ@b?Al-$QZBYDWTS$wQ{tvc($G;>Ae^VN@2;%|*_b_Ok>UiHHYDMA#kDH7Y2I_N#&O@CpQpU7fE} zKU~&ZQI7=lwz&Z@_<U(`!$6hU{wb`S~~1Y4&s{yjXpM3h&{oE=WwCX4~q9pfyZr;d0ei6EkY& zoAB7V$Yh`zw01GY0+)%RG-`vljnN}N}VNdZ7^b|Pr~ zJ&^un|6&a0;){5wbG9;p@eeq+Ew)Tl7VW*0kvt79!!8LQ zLB@7OF&A^%F+Vsgyl~%U>Kq^dg$zp6l5EGXc6*Osz&HFD`)e79OPX%RT2lF~5@|i3 z&Ozq*7oy(*G#uBDC`;jRJ5TvQl)qh4Nzw_dZH8u$$*SLeh%)JGQXD&J34`fX=1zlG&P-1p%j?dxLkr)#0X$0M9_+KI)4A?Z)~+;0U@X^iFb-P+XToDE{| zGcx=<5l|-yt)v=_u%ZH4lhO9Oy#tZx#Z4j6MWo}O=Uo!b3=MRmwsqS>jy;TREVGOx z@Z+o}NKRnwe{q?%&>I3tNR0WAX5V_QhLFglpvMucyRh(K-Z?lqq&Ny33m3_WE!3Sh zs9`vao5ZZPXobHB<{KrWxI3(L*M*qIbcM=hp`281c9S|4)!$_{dS`)hvKv0Wk-u_kr-cFFl_GNbwT)HUhok*r z#2kQSej-ZgU9C7fnS)vN27OlFI{3Bf@%z_q5*oh%S&2Fl8g$->`KgLLKQPU~QBNz_ z7Q5`+p*Or6Go=1vd!LhpeR5=6cl7hq=X!k{KI#*TQ0U)@nHy7!S64A!zQ?>Gb{6X!8k2 zwFEWhwAowj)TF7QAiHZjY!51OTxm&e*y79#X(W=2exq!+T8j;BJr>q5d$og-b*_)Y zaZZnPkXd9|O%Zv7Z`g+L{HxM=YzOUK*~8ydpn6o(Y9kiVZ-{ljCWxJEyCU&e*874= zSbOd7B;q8%)0BtzYwaZfHl3v;cBJ*rxQ$7l!&<%iyNc+o48jSkMuNX(SMy41Rju^& zBLkd%``lyMfdnd1>q;eF)9x6rJxKY8k{S7IBINHO7n+(4m}Cu0tK@5Jw|C2OZ3!@4 z-5AELl`{qSHX7t@Rd-%M*7BxEchUFkD}lbYxeiwzw3m1M39OPaxBj7ZQR?2+Kjeq! z)av1A_rmG`3yu3Tgm>3e0S0f{EMrRRF=4W-;FNFz3Ez@Bx0fP%7|xsah0{sqt>Ot^ zv84c&R5*)URuLH;ITze5=q_l=Js;)T2EPzmR`v|+lpv{32duYMEAMv42)C7Az<20gquFWbF#h zB2R`djZyrJ-6dA@HD&|&DUSgxJKwcY>n^QO zA^?=b%1C@ZRz%BNUwqCfztUfBP@ojEuvsBk;fSEqpQRBY*&(ibt8Q-&OVg}$YB7D% zn)W_To!NfzyH9ngpgy|HV<%O!`6W^Eq0F}dBt;$%`Qq}OnrO!xxa_d^m)mgR+~q5y z4q^TEp`kHHGvDUSKQ7;yt~P%O-DJu4IRa#j^titZse$+M;Mv|8kV(dEYT&?W6;O*%sQKCpcK?}W~G2Hi0iM1yL^c zfoz>qFO{nzLT#l>4<<09~^#oOnT* z@ewnS(`v)?b@iJ%A`jhQc5=pFC7&pkpIwH0b2_fiOT@ko=L!lI-z;C&`;D&G`|U_S z+`0v`TArF8KXZ;ZhdI9r3BEr#xZPg%`o;iyx}-Zog8eOe8-VXm+iINK2q?{H(c%fK z6>dS2x%t=+YXZ>ZRlxicaKu%C;@8S9oynxsx5)OJ*l|}h@{fun8+Xm^rmh#mSvlWo zp?YOo_bpWzd!P+`k5A1PAN<3xf_fVfbGQy+aVSK4HNCaJSDWqNu&}UA{f(Kv4t18z zFg^FYkH*u=A%h+PJoeQPc`x6;Nwo?a6QSnPiy)f3k=Z|&aYs z&=awmu%am38CQFFAU~g}oT>B@u{&uSE|b^XW)|vN;JCvEj|Y*=^)GEiY_uH9)mj$y z9CJ6x-=2%IeFQj!lu%^M*C2(?`JmL2p$^~ zl!-3r9#}4vutHo`(khUkT?HYuF5jP}AY26GQb-BfWBxmmBN zSNK>#LDz2fqQEF{>}hm*;yJ!vNI(jl`umiulwc5-H9AUkdcg`;qH>xci8SFDohe2I z{Wfmb>;Ah2RNz0azK@3HZ%okAUey*FK$n@B7Zk)`8-X?x9v-mp-hJHu&Oetv8la*) z3Il@AcgvR*5MB0_K|)2V2a2}YlWxjWmV}2Ln}RJ`pq83zUCMJ%Pj^YmiFImE6ymFu z-#b;2)jAvmy!E3}TPm(6`@ouATEFy=Pie4ZYY`f-sA{Dr^2D~=P(~(3Kl{8k z<=+T^%J$3T2G5RG9ve(dS6lLXp(m!4H_jdZfwcwX1IXDG6hxmsJy?C`n++p5?z(G# zArYC1O|3agz627f6%*oo)!Rw9n}zZ|VEv=LnL{bCk|m z%*lXALMSjju`13-_l|({wfIUfIUMD!`7$YWGmAhMb*vNSipxeQc*a$B{p`|?TBdpV zXY=9W+L6jZ%!K+F7(TOFlj_vTWI9d#mzXriDkC|`#*?xYzP~1qwacB> z`|O&<5r*R>J5HivY=WdyHDS+?zmWBT_o^Qn_{*wGNmF}w@mb$8!=Lem4u})gqG&4> zo()7aLuXWq*lfQk!pgH`Y=1swf@>Su5;R2TCT!eFhe_GHl9>0RF2Z&f|8b6rx61Qb zBM!YgciwsPU19pNZDUvXcY)4;eFjCL0(5cj2I_DQDfeW#5BU79LaN=Rg5%>EFtfi@ zgL*dVl`7h&|4oO1(>mz?Ck6(t>m~w2!(%l3?%;>~zg%(dE;i`@ z9Pxk0VO=DUI^dEnB}iKEW0x}I5m=_1o%{cnneqPR&mbWFg~=d_0_vk7{vXj976STz nL}##JHz9bkn*_1}e9^56bzBJ+>rsJ32B-AM!&!9v&jbGlXkIMW diff --git a/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py b/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py index 41bb12d..1892020 100644 --- a/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py +++ b/Calibre_Plugins/k4mobidedrm_plugin/mobidedrm.py @@ -49,11 +49,12 @@ # 0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!) # 0.28 - slight additional changes to metadata token generation (None -> '') # 0.29 - It seems that the ideas about when multibyte trailing characters were -# included in the encryption were wrong. They aren't for DOC compressed -# files, but they are for HUFF/CDIC compress files! +# included in the encryption were wrong. They are for DOC compressed +# files, but they are not for HUFF/CDIC compress files! # 0.30 - Modified interface slightly to work better with new calibre plugin style +# 0.31 - The multibyte encrytion info is true for version 7 files too. -__version__ = '0.30' +__version__ = '0.31' import sys @@ -198,8 +199,8 @@ class MobiBook: if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print "Extra Data Flags = %d" % self.extra_data_flags - if (self.mobi_version < 7) and (self.compression != 17480): - # multibyte utf8 data is included in the encryption for mobi_version 6 and below + if (self.compression != 17480): + # multibyte utf8 data is included in the encryption for PalmDoc compression # so clear that byte so that we leave it to be decrypted. self.extra_data_flags &= 0xFFFE diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist index 4783bb8..c457566 100644 --- a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist +++ b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Info.plist @@ -24,7 +24,7 @@ CFBundleExecutable droplet CFBundleGetInfoString - DeDRM 2.8, Written 2010–2011 by Apprentice Alf and others. + DeDRM 2.9, Written 2010–2011 by Apprentice Alf and others. CFBundleIconFile droplet CFBundleInfoDictionaryVersion @@ -34,7 +34,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 2.8 + 2.9 CFBundleSignature dplt LSMinimumSystemVersion diff --git a/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt b/DeDRM_Macintosh_Application/DeDRM.app/Contents/Resources/Scripts/main.scpt index 13962a28485d9e7b0e8d033ce154cef303a565ad..cd55cb75f4b33127136994514d02eb513cf9b85d 100644 GIT binary patch delta 20788 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 '') # 0.29 - It seems that the ideas about when multibyte trailing characters were -# included in the encryption were wrong. They aren't for DOC compressed -# files, but they are for HUFF/CDIC compress files! +# included in the encryption were wrong. They are for DOC compressed +# files, but they are not for HUFF/CDIC compress files! # 0.30 - Modified interface slightly to work better with new calibre plugin style +# 0.31 - The multibyte encrytion info is true for version 7 files too. -__version__ = '0.30' +__version__ = '0.31' import sys @@ -198,8 +199,8 @@ class MobiBook: if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print "Extra Data Flags = %d" % self.extra_data_flags - if (self.mobi_version < 7) and (self.compression != 17480): - # multibyte utf8 data is included in the encryption for mobi_version 6 and below + if (self.compression != 17480): + # multibyte utf8 data is included in the encryption for PalmDoc compression # so clear that byte so that we leave it to be decrypted. self.extra_data_flags &= 0xFFFE diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py index 2eb5376..de877cd 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/k4mobidedrm.py @@ -17,7 +17,7 @@ from __future__ import with_statement # and many many others -__version__ = '3.5' +__version__ = '3.6' class Unbuffered: def __init__(self, stream): diff --git a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py index 41bb12d..1892020 100644 --- a/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py +++ b/DeDRM_Windows_Application/DeDRM_WinApp/DeDRM_lib/lib/mobidedrm.py @@ -49,11 +49,12 @@ # 0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!) # 0.28 - slight additional changes to metadata token generation (None -> '') # 0.29 - It seems that the ideas about when multibyte trailing characters were -# included in the encryption were wrong. They aren't for DOC compressed -# files, but they are for HUFF/CDIC compress files! +# included in the encryption were wrong. They are for DOC compressed +# files, but they are not for HUFF/CDIC compress files! # 0.30 - Modified interface slightly to work better with new calibre plugin style +# 0.31 - The multibyte encrytion info is true for version 7 files too. -__version__ = '0.30' +__version__ = '0.31' import sys @@ -198,8 +199,8 @@ class MobiBook: if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print "Extra Data Flags = %d" % self.extra_data_flags - if (self.mobi_version < 7) and (self.compression != 17480): - # multibyte utf8 data is included in the encryption for mobi_version 6 and below + if (self.compression != 17480): + # multibyte utf8 data is included in the encryption for PalmDoc compression # so clear that byte so that we leave it to be decrypted. self.extra_data_flags &= 0xFFFE diff --git a/KindleBooks/lib/k4mobidedrm.py b/KindleBooks/lib/k4mobidedrm.py index 2eb5376..de877cd 100644 --- a/KindleBooks/lib/k4mobidedrm.py +++ b/KindleBooks/lib/k4mobidedrm.py @@ -17,7 +17,7 @@ from __future__ import with_statement # and many many others -__version__ = '3.5' +__version__ = '3.6' class Unbuffered: def __init__(self, stream): diff --git a/KindleBooks/lib/mobidedrm.py b/KindleBooks/lib/mobidedrm.py index 41bb12d..1892020 100644 --- a/KindleBooks/lib/mobidedrm.py +++ b/KindleBooks/lib/mobidedrm.py @@ -49,11 +49,12 @@ # 0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!) # 0.28 - slight additional changes to metadata token generation (None -> '') # 0.29 - It seems that the ideas about when multibyte trailing characters were -# included in the encryption were wrong. They aren't for DOC compressed -# files, but they are for HUFF/CDIC compress files! +# included in the encryption were wrong. They are for DOC compressed +# files, but they are not for HUFF/CDIC compress files! # 0.30 - Modified interface slightly to work better with new calibre plugin style +# 0.31 - The multibyte encrytion info is true for version 7 files too. -__version__ = '0.30' +__version__ = '0.31' import sys @@ -198,8 +199,8 @@ class MobiBook: if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print "Extra Data Flags = %d" % self.extra_data_flags - if (self.mobi_version < 7) and (self.compression != 17480): - # multibyte utf8 data is included in the encryption for mobi_version 6 and below + if (self.compression != 17480): + # multibyte utf8 data is included in the encryption for PalmDoc compression # so clear that byte so that we leave it to be decrypted. self.extra_data_flags &= 0xFFFE diff --git a/Mobi_Additional_Tools/lib/mobidedrm.py b/Mobi_Additional_Tools/lib/mobidedrm.py index 41bb12d..1892020 100644 --- a/Mobi_Additional_Tools/lib/mobidedrm.py +++ b/Mobi_Additional_Tools/lib/mobidedrm.py @@ -49,11 +49,12 @@ # 0.27 - Correct pid metadata token generation to match that used by skindle (Thank You Bart!) # 0.28 - slight additional changes to metadata token generation (None -> '') # 0.29 - It seems that the ideas about when multibyte trailing characters were -# included in the encryption were wrong. They aren't for DOC compressed -# files, but they are for HUFF/CDIC compress files! +# included in the encryption were wrong. They are for DOC compressed +# files, but they are not for HUFF/CDIC compress files! # 0.30 - Modified interface slightly to work better with new calibre plugin style +# 0.31 - The multibyte encrytion info is true for version 7 files too. -__version__ = '0.30' +__version__ = '0.31' import sys @@ -198,8 +199,8 @@ class MobiBook: if (self.mobi_length >= 0xE4) and (self.mobi_version >= 5): self.extra_data_flags, = struct.unpack('>H', self.sect[0xF2:0xF4]) print "Extra Data Flags = %d" % self.extra_data_flags - if (self.mobi_version < 7) and (self.compression != 17480): - # multibyte utf8 data is included in the encryption for mobi_version 6 and below + if (self.compression != 17480): + # multibyte utf8 data is included in the encryption for PalmDoc compression # so clear that byte so that we leave it to be decrypted. self.extra_data_flags &= 0xFFFE diff --git a/ReadMe_First.txt b/ReadMe_First.txt index 45d738e..145aeba 100644 --- a/ReadMe_First.txt +++ b/ReadMe_First.txt @@ -6,17 +6,17 @@ The set includes tools to remove DRM from eReader PDB books, Barnes and Noble eP This ReadMe_First.txt is meant to give users a quick overview of what is available and how to get started. -Calibre Users (Mac OS X, Linux, Windows) +Calibre Users (Mac OS X, Windows) ------------- If you are a calibre user, the quickest and easiest way to remove DRM from your ebooks is to open the Calibre_Plugins folder and install each of the plugins following the instructions and configuration directions provided in each plugins README file. Once installed and configured, you can simply import a DRM book into Calibre and end up with the DeDRM version in the Calibre database. -These plugins work for Windows, Mac OS X, and Linux +These plugins work for Windows and Mac OS X -Mac OS X Users (Mac OS X 10.5 and 10.6) +Mac OS X Users (Mac OS X 10.5, 10.6, and 10.7) -------------- From the DeDRM_for_Mac_and_Win folder, drag the DeDRM_X.X.app.zip droplet to your Desktop. Double-click on it once to unzip it to create the DeDRM X.X.app droplet. Double-click on the droplet once and it will guide you through collecting the data it needs to remove the DRM. @@ -33,16 +33,12 @@ From the DeDRM_for_Mac_and_Win folder, fully extract the DeDRM_WinApp_vX.X.zip. To use it simply drag ebooks or folders onto the DeDRM_Drop_Target short-cut, and it will process the ebooks. -Linux Users ------------ -Since the state of the Linux Desktop is so jumbled and sad with so many different ways to set it up and different configuration files that depend on your version of Linux, making a DeDRM drag and drop tool for multiple versions of Linux is simply an exercise in futility. That said, you should have no problems running the gui tools (or their command line equivalents) described next. - Not a Calibre or a DeDRM User? ------------------------------ There are a number of python based tools that have graphical user interfaces to make them easy to use. To use any of these tools, you need to have Python 2.5, 2.6, or 2.7 for 32 bits installed on your machine as well as a matching PyCrypto or OpenSSL for some tools. -On Mac OS X (10.5 and 10.6) and Linux (recent versions), your systems already have the proper Python and OpenSSL installed. So nothing need be done, you can already run these tools by double-clicking on the .pyw python scripts. +On Mac OS X (10.5, 10.6 and 10.7), your systems already have the proper Python and OpenSSL installed. So nothing need be done, you can already run these tools by double-clicking on the .pyw python scripts. Users of Mac OS X 10.3 and 10.4, need to download and install the "32-bit Mac Installer disk Image (2.7.X) for OS X 10.3 and later from http://www.python.org/download/releases/2.7.1/ @@ -54,14 +50,11 @@ The scripts are organized by type of ebook you need to remove the DRM from. Cho "Adobe_PDF_Tools" "Barnes_and_Noble_ePub_Tools" "eReader_PDB_Tools" - "KindleBooks_Tools" + "KindleBooks" "Kindle_for_Android_Patch" by simply opening that folder. -In the "KindleBooks_Tools" folder the primary tool is in the "KindleBooks" folder. - -If you are a Windows user, or a Linux platform using Wine, or Mac OS X or have trouble running the KindleBooks tools, there are two other tools provided. These are called "Kindle_4_Mac_Unswindle" and "Kindle_4_PC_Unswindle". Look for a README inside of the relevant folder to get you started. @@ -109,3 +102,47 @@ For PyCrypto: Once Windows users have installed Python 2.X for 32 bits, and the matching OpenSSL OR PyCrypto pieces, they too are ready to run the scripts. + + +Linux Users +----------- + +Unfortuantely, the Calibre Plugins do not really work well on Linux because of issues running Calibre under Wine. Native versions of Calibre can not be used with the K4MobiDeDRM plugin because the plugin will not be able to find the information it needs to remove the DRM. + +Although some of the scripts do work on native Linux, others require the use of a recent version of Wine. + +Here are the instructions for using KindleBooks.pyw on Linux under Wine. + +1. upgrade to very recent versions of Wine; This has been tested with Wine 1.3.18 – 1.3.22. It may work with earlier versions but no promises. + +2. Some versions of winecfg have a bug in setting the volume serial number, so create a .windows-serial file at root of drive_c to set a proper windows volume serial number (8 digit hex value for unsigned integer). +cd ~ +cd .wine +cd drive_c +echo deadbeaf > .windows-serial + +Replace deadbeef with whatever you want but I would stay away from the default setting of ffffffff + +3. Only ***after*** setting the volume serial number properly – download and install under wine K4PC version for Windows. Register it and download from your Archive one of your Kindle ebooks. Versions known to work are K4PC 1.4.1 and earlier. Later version may work but no promises. + +4. Download and install under wine ActiveState Active Python 2.7 for Windows 32bit + +5. Download and unzip tools_v4.5.zip + +6. Then run KindleBook.pyw ***under python running on wine*** using one of the following methods: + +From a Linux shell: + + wine python KindleBooks.pyw + +Or to get a Windows (wine) command prompt + + wine cmd + python KindleBooks.pyw + +Or to get a "Windows" file explorer: + + winefile + + and then double-click on any .pyw files to run them in the wine environment +