import
requests
import
base64
import
string
import
zipfile
import
time
import
json
import
io
from
Crypto.
Hash
import
MD5
from
Crypto.Cipher
import
AES
def
getsign(param_dict):
sign_key
=
'd3dGiJ**********'
before_sign
=
'';
for
key
in
sorted
(param_dict):
before_sign
+
=
f
'{key}={str(param_dict[key])}'
before_sign
+
=
sign_key
sign
=
MD5.new(before_sign.encode(
'utf8'
)).hexdigest()
return
sign
def
decrypt_chapter(s):
aes_key
=
b
'242ccb**********'
iv_enc_data
=
base64.b64decode(s)
aes_iv
=
iv_enc_data[
0
:
16
]
enc_data
=
iv_enc_data[
16
:]
unpad
=
lambda
s: s[:
-
ord
(s[
len
(s)
-
1
:])]
aes
=
AES.new(aes_key,AES.MODE_CBC,aes_iv)
return
unpad(aes.decrypt(enc_data))
def
qm_get(url,params,headers
=
None
):
if
not
headers:
headers
=
{
'app-version'
:
'50810'
,
'platform'
:
'android'
,
'reg'
:
'0'
,
'AUTHORIZATION'
:'',
'application-id'
:
'com.****.reader'
,
'net-env'
:
'1'
,
'channel'
:
'unknown'
,
'qm-params'
:'',
}
headers.update({
"sign"
: getsign(headers)})
params.update({
"sign"
: getsign(params)})
res
=
requests.get(url,params
=
params,headers
=
headers,verify
=
False
)
return
str
(res.text)
def
get_book_download_url(bookid):
download_url
=
'https://api-bc.****.com/api/v1/book/download'
params
=
{
'source'
:
'1'
,
'type'
:
'1'
,
'id'
:bookid,
}
book_dl_info
=
json.loads(qm_get(download_url,params))
return
book_dl_info[
'data'
][
'link'
]
def
get_chapter_list(bookid):
chapter_url
=
'https://api-ks.****.com/api/v1/chapter/chapter-list'
params
=
{
'is_all_update'
:
'0'
,
'id'
:bookid,
}
chapter_list
=
json.loads(qm_get(chapter_url,params))
return
chapter_list[
'data'
][
'chapter_lists'
]
def
get_book_data(link):
res
=
requests.get(link,verify
=
False
)
return
res.content
if
__name__
=
=
"__main__"
:
logo
=
print
(logo)
book_id
=
198241
with
open
(
str
(book_id)
+
'.txt'
,
'wb+'
) as fd:
download_link
=
get_book_download_url(book_id)
chapter_list
=
get_chapter_list(book_id)
chapter_list.sort(key
=
lambda
x:x[
'chapter_sort'
])
book_data
=
get_book_data(download_link)
book_file
=
io.BytesIO(book_data)
with zipfile.ZipFile(book_file) as zip_ref:
for
chapter_info
in
chapter_list:
chapter_id
=
chapter_info[
'id'
]
with zip_ref.
open
(chapter_id
+
'.txt'
,
"r"
) as fo:
data
=
fo.read()
chapter_data
=
decrypt_chapter(data)
print
(chapter_data)
fd.write(chapter_info[
'title'
].encode(
'utf8'
)
+
b
'\r\n'
+
chapter_data)
print
(
'------------------------------------------------------------------------------------------------'
)
print
(
'[+]解密完成!!!!!'
)