Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import urllib
- import urllib.request
- import urllib.parse
- import os
- import random
- import json
- import io
- import re as regex
- import hashlib
- import math
- import re
- import http.cookiejar
- import ssl
- from Crypto.PublicKey import RSA
- import base64
- from Crypto.Cipher import AES
- from Crypto.Cipher import PKCS1_OAEP
- import ast
- #decryptor = PKCS1_OAEP.new(key)
- #decrypted = decryptor.decrypt(ast.literal_eval(str(encrypted)))
- def decrypt(key,iv,data):
- #def decrypt(key, ct):
- cipher = AES.new(key, AES.MODE_CBC, iv )
- #cipher = PKCS1_OAEP.new(key)
- return cipher.decrypt(data)
- def strip_padding(data):
- return data[:-(data[-1])]
- try:
- rsakey = RSA.generate(512)
- pem = rsakey.publickey().exportKey('PEM')
- opener = urllib.request.build_opener()
- arg = sys.argv[1]
- code = arg.split('/')[-1]
- url = 'https://vw.mangaz.com/virgo/view/'+code
- jar = http.cookiejar.CookieJar()
- opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
- handler = opener.open(url)
- html = handler.read()
- handler.close()
- for cookie in jar:
- if(cookie.name == 'virgo!__ticket'):
- ticket = cookie.value
- print(ticket)
- url = "https://vw.mangaz.com/virgo/app.js"
- handler = opener.open(url)
- html = handler.read()
- handler.close()
- sear = re.search(b'__serial = ".*";',html)
- serial = (sear.group().replace(b'__serial = "',b'').replace(b'";',b'')).decode('ascii')
- print(serial)
- opener.addheaders = [('X-Requested-With', 'XMLHttpRequest'),('Accept-Language', 'en-US,en;q=0.5'),('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0')]
- url = "https://vw.mangaz.com/virgo/docx/"+code+".json"
- postdata = b'__serial='+serial.encode('ascii')+b'&__ticket='+ticket.encode('ascii')+b'&pub='+ urllib.parse.quote(pem).encode('ascii')
- handler = opener.open(url,postdata)
- html = handler.read()
- handler.close()
- jsondata = json.loads(html.decode('utf-8'))
- binPrivKey = rsakey.exportKey('DER')
- privKeyObj = RSA.importKey(binPrivKey)
- aeskeydec = privKeyObj.decrypt((base64.b64decode(jsondata['ek'])))
- iv = base64.b64decode(jsondata['bi'])
- data = strip_padding(decrypt(aeskeydec[-16:],iv,base64.b64decode(jsondata['data'])))
- jsondata = json.loads(data.decode('utf-8'))
- urlbase = jsondata["Location"]["base"] + jsondata["Location"]["enc"]
- key = base64.b64decode(jsondata["Enc"]["key"])
- iv = base64.b64decode(jsondata["Enc"]["iv"])
- title = jsondata["Book"]["title"] + " " + jsondata["Book"]["volume"]
- author = jsondata["Book"]["Authors"]
- author2 = ''
- for test in jsondata["Book"]["Authors"]:
- author2 = author2+ " " + test
- author2 = author2.lstrip().rstrip()
- decoded = "["+author2+"] "+title
- decoded = decoded.lstrip().rstrip()
- try:
- if not os.path.exists(decoded):
- os.makedirs(decoded)
- except:
- print("Japanese-named output folder can't be created for some reason. Output files are going to be saved in "+code)
- decoded = code
- if not os.path.exists(decoded):
- os.makedirs(decoded)
- for image in jsondata["Images"]:
- print(image['file'])
- if os.path.exists(decoded+"\\"+image['file'].replace('.xb','.jpeg')):
- print("File \\"+image['file'].replace('.xb','.jpeg') + " already exists, skipping")
- continue
- url = urlbase + image['file'] + "?vw=virgo"
- handler = opener.open(url)
- html = handler.read()
- handler.close()
- data = decrypt(key,iv,html)
- f = open(decoded+"\\"+image['file'].replace('.xb','.jpeg'), 'wb')
- f.write(base64.b64decode(data))
- f.close()
- except Exception as e:
- log = open("log.txt","a+")
- log.write("Error processing: " + sys.argv[1]+" - "+str(e)+"\n")
- log.close()
- exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement