Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import urllib2
- from cookielib import CookieJar
- from Crypto.Cipher import AES
- import argparse
- cj = CookieJar()
- agentACM = 'AppleCoreMedia/1.0.0.11D201 (iPhone; U; CPU OS 7_1_2 like Mac OS X; en_us)'
- openerACM = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
- openerACM.addheaders = [('User-agent', agentACM)]
- def getUrl(url):
- response = openerACM.open(url)
- return response.read()
- def downloadM3U8(outFile,srcUrl=None,srcFile=None,baseUrl=None,key=None):
- if srcUrl:
- m3u8_data = getUrl(srcUrl)
- m3u8name = srcUrl.split('?')[0].split('/')[-1]
- parameters = srcUrl.split('?')[1]
- baseUrl = srcUrl.split('?')[0][:-1*len(m3u8name)]
- if srcFile:
- m3u8_data = open(srcFile, 'rb').read()
- decrypter = None
- fileObj = open(outFile, 'wb')
- for line in m3u8_data.split('\n'):
- if line.startswith('#EXT-X-KEY'):
- if 'METHOD=AES-128' in line:
- if 'URI=' in line:
- if key:
- keyValue = key
- else:
- keyUrl = line.split('URI="')[1].split('"')[0]
- keyValue = getUrl(keyUrl)
- if 'IV=' in line:
- iv = line.split('IV=0x')[1].decode('hex')
- else:
- iv = '00000000000000000000000000000000'.decode('hex')
- print 'KEY : %s' % keyValue.encode('hex')
- print 'IV : %s' % iv.encode('hex')
- decrypter = AES.new(keyValue, AES.MODE_CBC, iv)
- if not line.startswith('#'):
- print line.split('?')[0].split('/')[-1]
- if baseUrl:
- if not (line.startswith('http://') or line.startswith('https://')):
- line = baseUrl+line
- data = getUrl(line)
- if decrypter:
- data = decrypter.decrypt(data)
- fileObj.write(data)
- fileObj.close()
- if __name__=="__main__":
- parser = argparse.ArgumentParser(description='Download-Decrypt M3U8')
- parser.add_argument('-i', dest='input', help='Input M3U8 Url or File', metavar='URL-FILE', required=True)
- parser.add_argument('-o', dest='outFile', help='Output TS File', metavar='FILE', required=True)
- parser.add_argument('-baseurl', dest='baseUrl', help='Base Url for input m3u8', metavar='URL')
- parser.add_argument('-key', dest='keyFile', help='Key File', metavar='FILE')
- parser.add_argument('-keyhex', dest='keyHex', help='Key in Hex', metavar='KEXHEX')
- args = parser.parse_args()
- if args.keyFile: key = open(args.keyFile, "rb").read()
- elif args.keyHex: key = args.keyHex.decode('hex')
- else: key = None
- if args.input.startswith('http://') or args.input.startswith('https://'):
- downloadM3U8(args.outFile,srcUrl=args.input,baseUrl=args.baseUrl,key=key)
- else:
- downloadM3U8(args.outFile,srcFile=args.input,baseUrl=args.baseUrl,key=key)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement