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