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 | |
|
|