def _decodeData(self, baseData): data = baseData fullDecData = '' decData = '' for idx in range(3): if 'eval(' not in data: break tmpTab = self.cm.ph.getAllItemsBeetwenMarkers( data, "eval(", '</script>') for tmpData in tmpTab: tmp = tmpData.split('eval(') if len(tmp): del tmp[0] for tmpItem in tmp: tmpDec = '' for decFun in [VIDEOMEGA_decryptPlayerParams]: tmpDec = unpackJSPlayerParams('eval(' + tmpItem, decFun, 0) if '' != tmpDec: break decData += tmpDec fullDecData += decData data = decData subTab = re.compile('''(['"]\s*\+[^\+]+?\+\s*['"])''').findall( fullDecData) for item in subTab: var = self.cm.ph.getSearchGroups(item, '''\+([^\+]+?)\+''')[0].strip() val = self.cm.ph.getSearchGroups( fullDecData, '''var\s*%s\s*=\s*['"]([^'^"]+?)['"]''' % var)[0] fullDecData = fullDecData.replace(item, val) fullData = baseData + fullDecData fullData = fullData.replace('\\"', '"').replace('\\/', '/') return fullData
def extractLink(self,videoUrl): url_out='None' if 'gdriveplayer' in videoUrl: _data3 = re.findall('link=(.*?)&',videoUrl, re.S) if _data3: url_out = _data3[0] elif 'juicy.php?url=' in videoUrl: _data3 = re.findall('url=(.*)',videoUrl, re.S) if _data3: url_out = _data3[0] else: sts, data = self.getPage(videoUrl) if sts: _data2 = re.findall('<iframe.*?src="(.*?)"',data, re.S) if _data2: url_out = _data2[0] else: _data4 = re.findall('javascript">eval(.*?)</script>',data, re.S) if _data4: script_eval='eval'+_data4[0].strip() printDBG(script_eval) datau = unpackJSPlayerParams(script_eval, SAWLIVETV_decryptPlayerParams, 0) printDBG(datau) _data5 = re.findall('<iframe.*?src="(.*?)"',datau.replace('\\',''), re.S) if _data5: url_out = _data5[0] else: _data2 = re.findall('<meta.*?url=(.*?)"',data, re.S) if _data2: url_out = _data2[0] else: _data4 = re.findall('"file".*?"(.*?)"',data, re.S) if _data4: url_out = _data4[0] return url_out
def _evalJscode(self, data): try: data = byteify(json.loads(data)) code = data[0]['jscode'] tmpData = '' for decFun in [ VIDEOWEED_decryptPlayerParams, VIDEOWEED_decryptPlayerParams2, SAWLIVETV_decryptPlayerParams ]: tmpData = unpackJSPlayerParams(code, decFun, 0) if '' != tmpData: printDBG(tmpData) return tmpData m1 = '(function (){' code = code[len(m1):] globalTabCode, pyCode, args = self.getPyCode(code) pyCode = 'def retA():\n\t' + globalTabCode.replace( '\n', '\n\t') + '\n\t' + pyCode.replace('\n', '\n\t') + ( '\n\treturn justRet%s\n' % args) + 'param = retA()' printDBG(pyCode) data = self.unpackJS(pyCode, 'param') printDBG(data) except Exception: printExc() return data
def get_links(self,cItem): urlTab = [] #urlTab.append({'name':'ttttttt', 'url':'hkhhk', 'need_resolve':0}) URL=cItem['url'] sts, data = self.getPage(URL) if sts: #d1 = re.findall('''["']sources['"]\s*:\s*\[(.*?)\]''', data) d1 = re.findall('''["']sources['"]\s*:\s*\[(.*?)\]''', data, re.S) if d1: if 'eval' in d1[0]: d3 = re.findall('eval\((.*)', data, re.S) if d3: #tab_dec=[SAWLIVETV_decryptPlayerParams,VIDEOWEED_decryptPlayerParams, VIDEOWEED_decryptPlayerParams2,TEAMCASTPL_decryptPlayerParams,VIDUPME_decryptPlayerParams,KINGFILESNET_decryptPlayerParams] data = unpackJSPlayerParams('eval('+d3[0]+')', SAWLIVETV_decryptPlayerParams, 0) printDBG(data) urlTab.append({'name':'Direct Link', 'url':data.replace('"','').replace("'",''), 'need_resolve':0,'type':'local'}) else: d1 = re.findall('''['"]*file['"]*\s*:\s*([^\(]+)''', d1[0])[0] d2 = re.findall('function\s+%s[^{]+{\s*([^}]+)' % d1, data)[0] data_list = re.findall('return.*?"(.*?)"', d2, re.S) if data_list: URL1=data_list[0] urlTab.append({'name':'Direct Link', 'url':URL1, 'need_resolve':0,'type':'local'}) data_list = re.findall('<iframe src="(.*?)"', data, re.S) if data_list: URL1=data_list[0] urlTab.append({'name':gethostname(URL1), 'url':URL1, 'need_resolve':1}) return urlTab
def extractLink(self, videoUrl, refer): url_out = 'None' printDBG('a1') if 'juicy.php?url=' in videoUrl: printDBG('a3') _data3 = re.findall('url=(.*)', videoUrl, re.S) if _data3: url_out = _data3[0] else: printDBG('a4') Params = dict(self.defaultParams) Params['header']['Referer'] = refer sts, data = self.getPage(videoUrl, Params) if sts: printDBG('a5') _data2 = re.findall('<iframe.*?src="(.*?)"', data, re.S) if _data2: url_out = _data2[0] else: printDBG('a6') _data4 = re.findall('javascript">eval(.*?)</script>', data, re.S) if _data4: script_eval = 'eval' + _data4[0].strip() printDBG(script_eval) datau = unpackJSPlayerParams( script_eval, SAWLIVETV_decryptPlayerParams, 0) printDBG(datau) _data5 = re.findall('<iframe.*?src="(.*?)"', datau.replace('\\', ''), re.S) if _data5: url_out = _data5[0] else: _data5 = re.findall('sources:(\[.*?])', datau.replace('\\', ''), re.S) if _data5: url_out = _data5[0] else: printDBG('a7=' + data) _data4 = re.findall('"file".*?"(.*?)"', data, re.S) if _data4: printDBG('a9') url_out = _data4[0] else: _data2 = re.findall('<meta.*?url=(.*?)"', data, re.S) if _data2: url_out = _data2[0] return url_out
def getVideos(self, videoUrl): urlTab = [] str_ = 'getsource.php?key=' try: data = urllib.unquote(videoUrl) data = json_loads(data.strip()) ciphertext = base64.b64decode(data['ct']) iv = unhexlify(data['iv']) salt = unhexlify(data['s']) b = "Fex-XFa_x3MjW4w" decrypted = cryptoJS_AES_decrypt(ciphertext, b, salt) cUrl = decrypted.replace('\\', '').replace('"', '') sts, data = self.getPage(cUrl, dict(self.defaultParams)) if sts: cUrl = data.meta['url'] if 'beeload.php' in cUrl: sts, data = self.getPage(cUrl, dict(self.defaultParams)) if sts: lst_dat2 = re.findall('eval(.*?)</script>', data, re.S) if lst_dat2: packed = 'eval' + lst_dat2[0].strip() printDBG('ppppppp#' + packed + '#') try: data = unpackJSPlayerParams( packed, VIDUPME_decryptPlayerParams, 1) printDBG(data) except: printDBG('erreur') lst_dat2 = re.findall("='(.*?)'", data, re.S) if lst_dat2: urlTab.append((lst_dat2[0], '0')) elif 'wp-embed.php?url=' in cUrl: #cUrl = cUrl.replace('wp-embed.php?url=','getsource.php?key=') cUrl = cUrl.replace('wp-embed.php?url=', str_) sts, data = self.getPage(cUrl, dict(self.defaultParams)) if sts: lst_dat2 = re.findall( 'file".*?"(.*?)".*?label".*?"(.*?)"', data, re.S) for (url, label) in lst_dat2: urlTab.append((label + '|' + url, '4')) else: urlTab.append((cUrl, '1')) except: urlTab = [] return urlTab
def get_links(self,cItem): urlTab = [] URL=cItem['url'] sts, data = self.getPage(URL,self.defaultParams) if sts: Tab_els = re.findall('src="(https://www.youtube.*?)"', data, re.S) if Tab_els: urlTab.append({'name':'TRAILER', 'url':Tab_els[0], 'need_resolve':1}) Tab_els = re.findall('play-box-iframe.*?data-src="(.*?)".*?></iframe>', data, re.S) for url in Tab_els: try: if '//moviflex.net' in url: sts, data = self.getPage(url,self.defaultParams) url_els = re.findall('<source src="(.*?)"', data, re.S) if url_els: urlTab.append({'name':'Moviflex', 'url':url_els[0], 'need_resolve':0,'type':'local'}) elif 'moviflex.ml' in url: post_data = {'r':'','d':'moviflex.ml'} url=url.replace('/v/','/api/source/') sts, data = self.getPage(url,self.defaultParams, post_data) data = json_loads(data) elmdata = data['data'] for elm0 in elmdata: urlTab.append({'name':'|'+elm0['label']+'| Moviflex' , 'url':elm0['file'], 'need_resolve':0,'type':'local'}) elif '.moviflex.pw' in url: paramsUrl = dict(self.defaultParams1) paramsUrl['header']['Referer'] = URL sts, data = self.getPage(url,paramsUrl) url_els = re.findall('JuicyCodes.Run\((.*?)\)', data, re.S) if url_els: b64data=url_els[0] b64data=b64data.replace('"+"','') .replace('"','') script_data=base64.b64decode(b64data) script_ = unpackJSPlayerParams(script_data, SAWLIVETV_decryptPlayerParams, 0) url_els = re.findall('file":"(.*?)".*?label":"(.*?)"', script_, re.S) for (url_,titre_) in url_els: urlTab.append({'name':'|'+titre_+'| Moviflex' , 'url':strwithmeta(url_, {'Referer':url}), 'need_resolve':0,'type':'local'}) else: if len(url)>4: url11 = url.split('https://') url='https://' + url11[-1] urlTab.append({'name':gethostname(url), 'url':url, 'need_resolve':1}) except: a='' return urlTab
def getAesPassword(self, cItem, forceRefresh=False): if Sport365LiveApi.CACHE_AES_PASSWORD != '' and not forceRefresh: return Sport365LiveApi.CACHE_AES_PASSWORD sts, data = self.getPage( self.getFullUrl('en/home/' + cItem['event_id']), self.http_params) if not sts: return [] aes = '' data = re.compile( '''src=['"](http[^"^']*?/js/[0-9a-fA-F]{32}\.js[^'^"]*?)["']''' ).findall(data)[::-1] num = 0 deObfuscatedData = '' aes_password = [] for commonUrl in data: num += 1 printDBG("common url n. %s : %s " % (str(num), commonUrl)) sts, tmpData = self.getPage(commonUrl, self.http_params) if not sts: continue aes = '' try: while ('eval' in tmpData) and (not aes): tmp = tmpData.split('eval(') if len(tmp): del tmp[0] tmpData = '' for item in tmp: for decFun in [ VIDEOWEED_decryptPlayerParams, VIDEOWEED_decryptPlayerParams2, SAWLIVETV_decryptPlayerParams ]: if not (item.startswith('function(w,i,s,e){for') and decFun == VIDEOWEED_decryptPlayerParams): tmpData = unpackJSPlayerParams( 'eval(' + item, decFun, 0) if '' != tmpData: printDBG( '**********************************') printDBG(tmpData) printDBG( '**********************************') break aes = self.cm.ph.getSearchGroups( tmpData, 'aes_key="([^"]+?)"')[0] if '' == aes: aes = self.cm.ph.getSearchGroups( tmpData, 'aes\(\)\{return "([^"]+?)"')[0] if aes == '': funname = self.cm.ph.getSearchGroups( tmpData, 'CryptoJS\.AES\.decrypt\([^\,]+?\,([^\,]+?)\,' )[0].strip() if funname != '': printDBG("ZZZZZZZZZZZZZ") printDBG("FUN NAME: [%s]" % funname) printDBG("ZZZZZZZZZZZZZ") tmp = self.cm.ph.getDataBeetwenMarkers( tmpData, 'function %s' % funname, '}')[1] try: aes = self.cm.ph.getSearchGroups( tmp, '"([^"]+?)"')[0].encode('utf-8') except Exception: printExc() aes = aes.encode('utf-8') except Exception: printExc() aes = '' if aes: printDBG("Added password %s" % aes) aes_password.append(aes) if aes_password: Sport365LiveApi.CACHE_AES_PASSWORD = aes_password return aes_password
def _decodeData(self, baseData): data = baseData fullDecData = '' decData = '' for idx in range(3): if 'eval(' not in data: break tmpTab = self.cm.ph.getAllItemsBeetwenMarkers( data, "eval(", '</script>') for tmpData in tmpTab: tmp = tmpData.split('eval(') if len(tmp): del tmp[0] for tmpItem in tmp: tmpDec = '' for decFun in [ VIDEOMEGA_decryptPlayerParams, SAWLIVETV_decryptPlayerParams ]: tmpDec = unpackJSPlayerParams('eval(' + tmpItem, decFun, 0) if '' != tmpDec: break decData += tmpDec fullDecData += decData data = decData # ++++++++++++++++++++ codeData = 'def go123():\n' tmp = self.cm.ph.getSearchGroups( baseData, '''document\[([^\]]+?)\[[0-9]\]\]\(([^)]+?)\)''', 2) mainVar = tmp[0] mainVal = self.cm.ph.getSearchGroups( baseData, '''var\s+?%s\s*=\s*(\[[^\]]+?\])''' % mainVar)[0] mainVal = mainVal.replace('"', '\\"').replace('[\\', '[').replace( '\\"]', '"]').replace(',\\"', ',"').replace('\\",', '",') subTab = re.compile('''\+([^\+]+?)\+''').findall(tmp[1]) for item in subTab: var = item.strip() val = self.cm.ph.getSearchGroups( fullDecData, '''var\s*%s\s*=\s*(['"][^'^"]+?['"])''' % var)[0] codeData += '\t%s = %s\n' % (var, val) codeData += '\t%s = %s\n' % (mainVar, mainVal) codeData += '\treturn ' + tmp[1] codeData += '\nkoteczek = go123()' codeData = self._unpackJS(codeData, 'koteczek') # ++++++++++++++++++++ if codeData != '': return codeData subTab = re.compile('''(['"]\s*\+[^\+]+?\+\s*['"])''').findall( fullDecData) for item in subTab: var = self.cm.ph.getSearchGroups(item, '''\+([^\+]+?)\+''')[0].strip() val = self.cm.ph.getSearchGroups( fullDecData, '''var\s*%s\s*=\s*['"]([^'^"]+?)['"]''' % var)[0] fullDecData = fullDecData.replace(item, val) fullData = baseData + fullDecData fullData = fullData.replace('\\"', '"').replace('\\/', '/') return fullData
def getVideoLinks(self, videoUrl): printDBG("SKStream.getVideoLinks [%s]" % videoUrl) urlTab = [] # mark requested link as used one if len(self.cacheLinks.keys()): for key in self.cacheLinks: for idx in range(len(self.cacheLinks[key])): if videoUrl in self.cacheLinks[key][idx]['url']: if not self.cacheLinks[key][idx]['name'].startswith('*'): self.cacheLinks[key][idx]['name'] = '*' + self.cacheLinks[key][idx]['name'] break linksTab = videoUrl.split('|><|') for url in linksTab: printDBG("> url[%s]" % url) if not self.cm.isValidUrl(url): continue if 1 != self.up.checkHostSupport(url): params = dict(self.defaultParams) try: maxAttempt = 3 attempt = 0 params['header'] = dict(params['header']) params['header']['Referer'] = videoUrl.meta['Referer'] params['return_data'] = False post_data = None while attempt < maxAttempt: attempt += 1 sts, response = self.getPage(url, params, post_data) url = response.geturl() if 'dl-protect.co' in self.up.getDomain(url): data = response.read(1024*1024*1024) response.close() # get JS player script code from confirmation page sts, tmpData = CParsingHelper.getDataBeetwenMarkers(data, ">eval(", '</script>', False) if sts: data += unpackJSPlayerParams(tmpData, VIDEOMEGA_decryptPlayerParams, 0, r2=True) #YOUWATCH_decryptPlayerParams == VIDUPME_decryptPlayerParams printDBG(data) url = self.getFullUrl(self.cm.ph.getSearchGroups(data, '''<iframe[^>]+?src=['"]([^"^']+?)['"]''', 1, True)[0]) if url == '': url = self.getFullUrl(self.cm.ph.getSearchGroups(data, '''iframe.src\s*=\s*['"]([^"^']+?)['"]''', 1, True)[0]) if not self.cm.isValidUrl(url): data = self.cm.ph.getDataBeetwenMarkers(data, 'sources:', '],', False)[1] + ']' data = byteify(json.loads(data)) for item in data: if "mp4" == item['type']: urlTab.append({'name':str(item.get('label', 'default')), 'url':item['file']}) break else: if 1 != self.up.checkHostSupport(url): data = response.read(1024*1024*1024) response.close() scriptUrl = self.cm.ph.getSearchGroups(data, '''<script[^>]+?src=['"]([^"^']*?QapTcha.jquery[^"^']*?\.js)['"]''', 1, True)[0] if scriptUrl != '' and not self.cm.isValidUrl(scriptUrl): scriptUrl = self.getFullUrl('/dl/' + scriptUrl) if not self.cm.isValidUrl(scriptUrl): printDBG(">> scriptUrl not valid") break sts, data = self.getPage(scriptUrl) if not sts: break formUrl = self.cm.ph.getSearchGroups(data, '''['"]([^"^']*?QapTcha.jquery[^"^']*?\.php)['"]''', 1, True)[0] if formUrl != '' and not self.cm.isValidUrl(formUrl): formUrl = self.getFullUrl('/dl/' + formUrl) if not self.cm.isValidUrl(formUrl): printDBG(">> formUrl not valid") break qaptchaKey = self._generatePass(37) post_data2 = {'action':'qaptcha', 'qaptcha_key':qaptchaKey} params2 = dict(self.defaultParams) params2['header'] = dict(self.AJAX_HEADER) params2['header']['Referer'] = url sts, data = self.getPage(formUrl, params2, post_data2) if not sts: break printDBG(">>>>>>\n%s\n<<<<<<" % data) post_data2 = {'submit':'Valider', qaptchaKey:''} sts, data = self.getPage(url, params2, post_data2) if not sts: break printDBG(">>>>>>\n%s\n<<<<<<" % data) url = self.cm.ph.getSearchGroups(data, '''['"](https?://[^"^"]*?dl\-protect\.co[^'^"]+?)['"]''', 1, True)[0] if self.cm.isValidUrl(url): continue break else: response.close() break except Exception: printExc() continue if len(urlTab): break urlTab = self.up.getVideoLinkExt(url) if len(urlTab): break return urlTab
def getAesPassword(self, cItem, forceRefresh=False): if Sport365LiveApi.CACHE_AES_PASSWORD != '' and not forceRefresh: return Sport365LiveApi.CACHE_AES_PASSWORD sts, data = self.cm.getPage( self.getFullUrl('en/home/' + cItem['event_id']), self.http_params) if not sts: return [] aes = '' data = re.compile( '''src=['"](http[^"^']*?/js/[0-9a-fA-F]{32}\.js[^'^"]*?)["']''' ).findall(data) deObfuscatedData = '' for commonUrl in data: sts, tmpData = self.cm.getPage(commonUrl, self.http_params) if not sts: return [] aes = '' try: while 'eval' in tmpData: tmp = tmpData.split('eval(') if len(tmp): del tmp[0] tmpData = '' for item in tmp: for decFun in [ VIDEOWEED_decryptPlayerParams, VIDEOWEED_decryptPlayerParams2, SAWLIVETV_decryptPlayerParams ]: tmpData = unpackJSPlayerParams( 'eval(' + item, decFun, 0) if '' != tmpData: break deObfuscatedData += tmpData aes = self.cm.ph.getSearchGroups( tmpData, 'aes_key="([^"]+?)"')[0] if '' == aes: aes = self.cm.ph.getSearchGroups( tmpData, 'aes\(\)\{return "([^"]+?)"')[0] if aes != '': break aes = aes.encode('utf-8') except Exception: printExc() aes = '' if aes != '': break if aes == '': funname = self.cm.ph.getSearchGroups( deObfuscatedData, 'CryptoJS\.AES\.decrypt\([^\,]+?\,([^\,]+?)\,')[0].strip() printDBG("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ") printDBG("FUN NAME: [%s]" % funname) printDBG("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ") tmp = self.cm.ph.getDataBeetwenMarkers(deObfuscatedData, 'function %s' % funname, '}')[1] try: aes = self.cm.ph.getSearchGroups( tmp, '"([^"]+?)"')[0].encode('utf-8') except Exception: printExc() #aes = self.cm.ph.getSearchGroups(deObfuscatedData, '%s\s*\{\s*return\s*"([^"]+?)"' % funname)[0] if aes != '': Sport365LiveApi.CACHE_AES_PASSWORD = aes return aes