Audio/video stream recording forums
|
Attention Visitor: |
You may have to register or log in before you can post:
|
|
![]() ![]() |
|
Thread Tools | Display Modes |
#31
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvMalheureusement, ça met maintenant incorrect padding :/
La clé est la suivante : http://pastebin.com/DM3swDpg Ce qui donne en hexadécimal : E9 35 5E 77 0E 21 4F 03 3F 42 C4 E8 D2 BF 42 41 54 62 85 ED 3F 9E 79 EF et ça n'est pas une string base 64 valide :/ |
#32
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvEt malheureusement c'est reparti pour un tour ...
https://www.zerobin.net/?0e216800c40... BK6dygdLriM= EDIT:Oups pas vu que le probl?me avait déj? été posté dans le thread |
#33
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvVous en tirez des tronches, manifestement vous n’appréciez pas ? sa juste valeur l'humour de Waka, c'est pourtant bien plus divertissant qu'un épisode de Ma*
![]() |
#34
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvC'est surtout le gars de waka**** que ça doit emmerder.
Il doit regénérer une nouvelle version du lecteur flash + tous les m3u8 ? chaque fois. Nous suffit de regarder un bout de code, ça prend 30s. D'ailleurs la nouvelle clef: Code:
Rev3rseEngIneeringIsN0t0LeGalORHowToLooseYourT1meflout Last edited by mirax2 : 05-30-2014 at 12:30 PM. |
#35
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvBonsoir ; pour ma part j'aimerai uniquement convertir la clé 48 caract?res vers la clé de 16 octets d'origine. Je me suis intéressé ? la fonction "decrypt_key" du script python "Sluuurp.exe.py". Pouvez-vous me dire ce que je dois mettre en argument de la fonction (je ne suis pas familier du python) ? Est-ce bien la clé en format 48 caract?res puis la clé de cryptage "Rev3rseEngineeringIsN0tLegal" ? Comment ensuite obtenir un fichier texte avec les 16 octets prenant chacun un caract?re ?
|
#36
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvOn vient justement de poster la nouvelle clé, CereFR.
J'ai un peu de mal ? la retrouver dans le code désassemblé du swf par contre. |
#37
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvAu vu de la nouvelle politique de "multiplication des clés", je propose les modifications suivantes du fichier .py
Code:
# -*- coding: utf8 -*- from Crypto.Cipher import Blowfish from Crypto.Cipher import AES import base64, os, urlparse, urllib2, re, sys, zlib, struct import m3u8, cookielib, optparse, subprocess import xml.etree.ElementTree as ElementTree fn_regexp = re.compile('.*(?:=|/)(.*?).mp4_.*?.m3u8',re.DOTALL) md_regexp = re.compile("var MovieData = {(.*?)};",re.DOTALL) st_regexp = re.compile("var STMode = (.*?);",re.DOTALL) token_regexp = re.compile('"(/video-streaming/.*?)"',re.DOTALL) m3u8_regexp = re.compile("file: '(?P<url>.*?)',",re.DOTALL) provider_regexp = re.compile("provider: '(.*?)',",re.DOTALL) cj = cookielib.CookieJar() ulo = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel=0), urllib2.HTTPSHandler(debuglevel=0), urllib2.HTTPCookieProcessor(cj) ) ulo.addheaders = [ ('User-agent', ('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')) ] def main_is_frozen(): return (hasattr(sys, "frozen") or hasattr(sys, "importers")) if main_is_frozen() : exit = sys.exit def decrypt_key(aeskey): bfkeys = [k.strip() for k in open('bfkeys.txt').readlines()]+[None] for bfkey in bfkeys : try: bf = Blowfish.new(bfkey, Blowfish.MODE_ECB) t = aeskey.decode("hex") t = bf.decrypt(t) t = base64.b64decode(t) if len(t) != 16 : raise except: continue aeskey = t break print "bfkey = %s" % bfkey return aeskey def unzipSWF(d): if d[0] == 'C': d = zlib.decompress(d[8:]) elif d[0] == 'F': d = d[8:] else: raise return d def quick_parse(d): d = re.sub('\s*:\s*','=',d) d = re.sub('\s*,\s*','&',d) d = re.sub("='(.*?)'",'=\g<1>',d) d = re.sub('="(.*?)"','=\g<1>',d) d = re.sub('=false','=False',d) d = re.sub('=true','=True',d) d = re.sub('^\s','',d) d = re.sub('\s\Z','',d) return d def download_m3u8(uri): playlist = ulo.open(uri).read() playlist = m3u8.loads(playlist) if playlist.is_variant: playlist = max(((int(x.stream_info.bandwidth),x) for x in playlist.playlists))[1] if playlist.uri.startswith('http'): uri = playlist.uri else: uri = uri.replace(os.path.basename(uri),playlist.uri) playlist = ulo.open(uri).read() playlist = m3u8.loads(playlist) fn = '%s.ts' % fn_regexp.findall(uri)[0] while os.access(fn, os.F_OK): fn = '_'+fn print uri,'->',fn f = open(fn,'wb') if not playlist.key.uri.startswith('http'): playlist.key.uri = uri.replace(os.path.basename(uri),playlist.key.uri) key = decrypt_key(ulo.open(playlist.key.uri).read()) iv = ("%032x" % int(playlist.key.iv,16)).decode("hex") aes = AES.new(key, AES.MODE_CBC, iv) for x in playlist.segments : if not x.uri.startswith('http'): x.uri = uri.replace(os.path.basename(uri),x.uri) r = ulo.open(x.uri) d = r.read() d = aes.decrypt(d) f.write(d) print 'Done' f.close() subprocess.call(r"ffmpeg.exe -i %s -vcodec copy %s" % (fn,fn+'.mp4'),stdout=sys.stdout,shell=True) def download_video(video_url): page = ulo.open(video_url).read() md = md_regexp.search(page).group(1) st = st_regexp.search(page).group(1) post_data = quick_parse(md+'&STMode='+st) post_data = post_data.replace('SupportAds=0','SupportAds=1') Id = dict(urlparse.parse_qsl(post_data, strict_parsing=True))['Id'] req = urllib2.Request('http://www.wakanim.tv/video/Advertisement?IdItem='+Id) req.add_header('Referer', video_url) r = ulo.open(req) req = urllib2.Request('http://www.wakanim.tv/Library/GetMoviesByAdsNew') req.add_header('Referer', video_url) r = ulo.open(req, post_data) video_url = ('http://www.wakanim.tv'+token_regexp.findall(r.read())[0]).decode('unicode_escape') d = ulo.open(video_url).read() provider_url = provider_regexp.findall(d) provider_url = provider_url[0] if len(provider_url)>0 else None video_url = m3u8_regexp.findall(d)[0] if provider_url : req = urllib2.Request(provider_url) req.add_header('Referer', video_url) r = ulo.open(req) d = unzipSWF(r.read()) print "Provider = %s" % provider_url open(os.path.basename(provider_url),'wb').write(d) download_m3u8(video_url) def GetSeries(): d = ulo.open(r'http://www.wakanim.tv/catalogws/CatalogXml/').read() root = ElementTree.fromstring(d) series = [] for child in root : if child.tag == 'serie' : s = {} s['id'] = child.findall('Id')[0].text.replace(' ','') s['name'] = child.findall('Nom')[0].text.encode('cp850',errors='replace') series.append(s) return series def GetEpisodes(id): d = ulo.open(r'http://www.wakanim.tv/catalogws/SerieXml/%s' % id).read() episodes = [] catalogue = ElementTree.fromstring(d) for episode in catalogue : e = {} e['AvailableFree'] = episode.findall('AvailableFree')[0].text e['NumEp'] = int(episode.findall('NumEp')[0].text) e['Titre'] = episode.findall('Titre')[0].text.encode('cp850',errors='replace') e['UrlEpisodeFree'] = episode.findall('UrlEpisodeFree')[0].text episodes.append(e) return episodes if __name__ == '__main__' : VERSION = 1 usage = sys.executable+" [<SerieID> <EpisodeNum> | <VideoURL> | <m3u8URL>]" description = "Sluuurp (v2)." parser = optparse.OptionParser(description=description,usage=usage,formatter=optparse.IndentedHelpFormatter(max_help_position=1000,width=1000)) parser.add_option("-S", "--slist", action="store_true", help="Montre la liste des series et quitte.", default=False) parser.add_option("-E", "--elist", action="store", help="Montre la liste des episodes d'une serie et quitte.", default=False) (options, args) = parser.parse_args() if not sys.argv[1::] : parser.print_help() exit() if options.slist is True : s = GetSeries() for x in s : print '%s\t:%s' % (x['id'],x['name']) exit() if options.elist is not False : e = GetEpisodes(options.elist) for x in e : print '%s(%s)\t:%s' % (x['NumEp'],x['AvailableFree'],x['Titre']) exit() if len(args) == 1 : if re.search(r'http://www.wakanim.tv/video/.*/',args[0],re.DOTALL) == None : download_m3u8(args[0]) else: download_video(args[0]) elif len(args) == 2 : url = r'http://www.wakanim.tv'+[ x for x in GetEpisodes(args[0]) if x['NumEp'] == int(args[1])][0]['UrlEpisodeFree'] download_video(url) else: print "Saisie invalide" exit() Un fichier bfkeys.txt contenant les 2 clés sus-citées (attention un espace s'est glissé dans la derni?re) devrait permettre de telecharger toutes les videos .m3u8 ? ce jour. La nouvelle fonction decrypt_key devrait ?tre plus comprehensible CereFR ![]() Last edited by Nopt : 05-30-2014 at 12:38 PM. |
#38
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvQuote:
Je l'ai mis entre les balises CODE du coup et c'est bon. |
#39
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvJ'obtiens cette erreur ; fais-je les choses correctement ? (je rappelle que je ne veux que décrypter la clé)
http://www.mediafire.com/view/elz1qx3tt45p8go Si j'enl?ve la ligne qui pose probl?me et qui n'est pas indispensable, le programme renvoie la clé de départ. N'y a-t-il pas un probl?me dans la fonction ? Je précise que j'op?re sous Python 3.3.5. Last edited by CereFR : 05-30-2014 at 08:47 PM. |
#40
|
|||
|
|||
![]() Re: Télécharger les vidéos du site Wakanim.tvLe probl?me vient de la, le script a été fait avec python 2.7.
print doit ?tre utilisé comme une fonction et non plus comme un statement : print() aeskey.decode("hex") n'existe plus il faut utiliser binascii.unhexlify(aeskey) par exemple. |
![]() ![]() |
Tags: download, dump, hls, stream, wakanim |
Thread Tools | |
Display Modes | |
|
|