Advertisement
Conquistadork

mangaz

Sep 27th, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.66 KB | None | 0 0
  1. import sys
  2. import urllib
  3. import urllib.request
  4. import urllib.parse
  5. import os
  6. import random
  7. import json
  8. import io
  9. import re as regex
  10. import hashlib
  11. import math
  12. import re
  13. import http.cookiejar
  14. import ssl
  15. from Crypto.PublicKey import RSA
  16. import base64
  17. from Crypto.Cipher import AES
  18. from Crypto.Cipher import PKCS1_OAEP
  19. import ast
  20.  
  21.  
  22. #decryptor = PKCS1_OAEP.new(key)
  23. #decrypted = decryptor.decrypt(ast.literal_eval(str(encrypted)))
  24.  
  25. def decrypt(key,iv,data):
  26. #def decrypt(key, ct):
  27.     cipher = AES.new(key, AES.MODE_CBC, iv )
  28.     #cipher = PKCS1_OAEP.new(key)
  29.     return cipher.decrypt(data)
  30.  
  31. def strip_padding(data):
  32.     return data[:-(data[-1])]
  33.  
  34. try:
  35.     rsakey = RSA.generate(512)
  36.     pem = rsakey.publickey().exportKey('PEM')
  37.  
  38.     opener = urllib.request.build_opener()
  39.  
  40.     arg = sys.argv[1]
  41.  
  42.     code = arg.split('/')[-1]
  43.  
  44.     url = 'https://vw.mangaz.com/virgo/view/'+code
  45.  
  46.     jar = http.cookiejar.CookieJar()
  47.  
  48.     opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
  49.     handler = opener.open(url)
  50.     html = handler.read()
  51.     handler.close()
  52.  
  53.  
  54.  
  55.     for cookie in jar:
  56.         if(cookie.name == 'virgo!__ticket'):
  57.             ticket = cookie.value
  58.     print(ticket)
  59.  
  60.  
  61.  
  62.     url = "https://vw.mangaz.com/virgo/app.js"
  63.  
  64.  
  65.     handler = opener.open(url)
  66.     html = handler.read()
  67.     handler.close()
  68.  
  69.  
  70.  
  71.     sear = re.search(b'__serial = ".*";',html)
  72.  
  73.     serial = (sear.group().replace(b'__serial = "',b'').replace(b'";',b'')).decode('ascii')
  74.     print(serial)
  75.  
  76.  
  77.     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')]
  78.  
  79.  
  80.     url = "https://vw.mangaz.com/virgo/docx/"+code+".json"
  81.     postdata = b'__serial='+serial.encode('ascii')+b'&__ticket='+ticket.encode('ascii')+b'&pub='+ urllib.parse.quote(pem).encode('ascii')
  82.  
  83.     handler = opener.open(url,postdata)
  84.     html = handler.read()
  85.     handler.close()
  86.  
  87.  
  88.     jsondata = json.loads(html.decode('utf-8'))
  89.  
  90.     binPrivKey = rsakey.exportKey('DER')
  91.     privKeyObj = RSA.importKey(binPrivKey)
  92.  
  93.  
  94.     aeskeydec = privKeyObj.decrypt((base64.b64decode(jsondata['ek'])))
  95.     iv = base64.b64decode(jsondata['bi'])
  96.  
  97.  
  98.     data = strip_padding(decrypt(aeskeydec[-16:],iv,base64.b64decode(jsondata['data'])))
  99.     jsondata = json.loads(data.decode('utf-8'))
  100.  
  101.  
  102.     urlbase = jsondata["Location"]["base"] + jsondata["Location"]["enc"]
  103.  
  104.     key = base64.b64decode(jsondata["Enc"]["key"])
  105.     iv = base64.b64decode(jsondata["Enc"]["iv"])
  106.  
  107.     title = jsondata["Book"]["title"] + " " + jsondata["Book"]["volume"]
  108.     author = jsondata["Book"]["Authors"]
  109.  
  110.     author2 = ''
  111.  
  112.     for test in jsondata["Book"]["Authors"]:
  113.         author2 = author2+ " " + test
  114.  
  115.     author2 = author2.lstrip().rstrip()
  116.     decoded = "["+author2+"] "+title   
  117.     decoded = decoded.lstrip().rstrip()
  118.     try:
  119.         if not os.path.exists(decoded):
  120.             os.makedirs(decoded)
  121.     except:
  122.         print("Japanese-named output folder can't be created for some reason. Output files are going to be saved in "+code)
  123.         decoded = code
  124.         if not os.path.exists(decoded):
  125.             os.makedirs(decoded)
  126.  
  127.     for image in jsondata["Images"]:
  128.         print(image['file'])
  129.         if os.path.exists(decoded+"\\"+image['file'].replace('.xb','.jpeg')):
  130.             print("File \\"+image['file'].replace('.xb','.jpeg') + " already exists, skipping")
  131.             continue
  132.         url =  urlbase + image['file'] + "?vw=virgo"
  133.         handler = opener.open(url)
  134.         html = handler.read()
  135.         handler.close()
  136.         data = decrypt(key,iv,html)
  137.         f = open(decoded+"\\"+image['file'].replace('.xb','.jpeg'), 'wb')
  138.         f.write(base64.b64decode(data))
  139.         f.close()
  140. except Exception as e:
  141.     log = open("log.txt","a+")
  142.     log.write("Error processing: " + sys.argv[1]+" - "+str(e)+"\n")
  143.     log.close()
  144.     exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement