Página 1 de 2

Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 16:10
por Hernan_Ar_c
Hola, estoy tratando de armar un canal nuevo pero tengo un problema con el jsunpack.py obviamente es la primera vez que intento utilizarlo, pero no me funciona segun tengo entendido se utiliza de la siguiente forma:

unpack=Jsunpack.unpack(packed)

obtengo el packed de la pagina pero a la hora de hacer el unpack me da este error:

Código: Seleccionar todo

######## ERROR #########
11:55:06.241 T:140120288130816  NOTICE:     [pelisalacarta.platformcode.launcher.run] pelisalacarta.platformcode.launcher Traceback (most recent call last):
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/platformcode/launcher.py", line 279, in run
                                                itemlist = getattr(channel, item.action)(item)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/channels/doomtv.py", line 74, in get_url
                                                dec_vidurl = jsunpack.unpack(enc_vidurl)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 43, in unpack
                                                source = re.sub(r'\b\w+\b', lookup, payload)
                                              File "/usr/lib64/python2.7/re.py", line 155, in sub
                                                return _compile(pattern, flags).sub(repl, string, count)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 42, in lookup
                                                return symtab[unbase(word)] or word
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 97, in __call__
                                                return self.unbase(string)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 102, in _dictunbaser
                                                ret += (self.base ** index) * self.dictionary[cipher]
                                            KeyError: '2'
Alguno de los avanzados me puede explicar donde esta mi error?.

P:D:
Ademas revise el packed que obtengo en la pagina http://dean.edwards.name/unpacker/ y me da perfactamente el codigo "desempacado"

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 18:16
por SeiTaN
Sólo lo he usado una vez pero me funciona, tienes que pasarle a la función el contenido del javascript donde se usa el packed.

Código: Seleccionar todo

from lib import jsunpack
match = scrapertools.find_single_match(data, '<script type="text/javascript">(.*?)</script>')
data = jsunpack.unpack(match)
data = data.replace("\\'", "'") <-- este puede que no te haga falta

media_urls = scrapertools.find_multiple_matches(data, "{file:'(.+?)',label:'(.+?)'")

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 18:36
por Hernan_Ar_c
Gracias SeiTaN, pero me sigue dando error...

Código: Seleccionar todo

######## ERROR #########
14:34:33.681 T:139938213390080  NOTICE:     [pelisalacarta.platformcode.launcher.run] pelisalacarta.platformcode.launcher Traceback (most recent call last):
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/platformcode/launcher.py", line 279, in run
                                                itemlist = getattr(channel, item.action)(item)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/channels/doomtv.py", line 76, in get_url
                                                data = jsunpack.unpack(match)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 43, in unpack
                                                source = re.sub(r'\b\w+\b', lookup, payload)
                                              File "/usr/lib64/python2.7/re.py", line 155, in sub
                                                return _compile(pattern, flags).sub(repl, string, count)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 42, in lookup
                                                return symtab[unbase(word)] or word
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 97, in __call__
                                                return self.unbase(string)
                                              File "/home/hernan/.kodi/addons/plugin.video.pelisalacarta/core/jsunpack.py", line 102, in _dictunbaser
                                                ret += (self.base ** index) * self.dictionary[cipher]
                                            KeyError: '8'
jsunpack.py esta en la carpeta core, asi que comente el import, pero igualmente no me funciona.

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 18:39
por SeiTaN
Sin más datos no puedo reproducir tu error.

P.D: jsunpack en la próxima versión estará dentro de lib, lo digo para que lo tengas en cuenta con lo que hay dentro de la rama develop.

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 19:59
por Hernan_Ar_c
SeiTaN este seria un ejemplo de los datos empaquetados que obtengo para utilizar el unpack

Código: Seleccionar todo

eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+c+'\\b','g'),k[c])}}return p}('38 40=21(\'1\');21(\'1\').56({44:{43:\'45\',46:{42:{47:3,39:\'//1.8/36/35\',34:\'37\'}}},41:"24:10",48:66,20:[],19:{18:22(){$(\'#1\').23(27)}},26:{17:\'28\',14:\'#11\',9:0},12:\'29\',16:\'2://4.6/\',13:\'5%\',15:\'5%\',20:[],19:{18:22(){$(\'#1\').23(27)}},26:{17:\'28\',14:\'#11\',9:0},12:\'29\',16:\'2://4.6/\',13:\'5%\',15:\'5%\',60:\'2://4.6/\',25:\'7://1.8//33/31/32.30\',25:\'7://1.8//33/31/32.30\',57:{54:\'7://51-52.53.58/59/64.65\',63:62,50:\'2://4.6/\',61:\'49-55\'},});',1,67,'|allplayer|http||doomtv|100|net|https|tk|backgroundOpacity||FFFFFF|abouttext|height|backgroundColor|width|aboutlink|edgeStyle|onError|events|sources|jwplayer|function|html||skin|captions|googleplayer|uniform|DoomTV|xml|skins|RedFlat|asset|type|52228|playerxml|nonlinear|var|tag|playerInstance|aspectratio|overlay|client|advertising|vast|schedule|offset|primary|top|link|assets|jpcust|jwpsrv|file|left|setup|logo|com|watermarks|image|position|true|hide|ddEhKRLa|png|primaryCookie'.split('|')))
si lo pego tal cual esta en la pagina que mecione en el primer mensaje me lo desempaqueta perfectamente sin errores, supuestamente el codigo py esta basado/o es el mismo de esa pagina.

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 20:04
por SeiTaN
A mi me funciona pasandole todo el contenido de script
<script type="text/javascript">
jwplayer.key = 'kJJQbHwm99r3c3xUshxW9wy3auhnOd9yesIDqA==';
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1f(\'1e\').1d({1c:[{K:\'J://I.G.H/L?d=M&3=1&e=Q&k=1g&j=n/p&P=O&7=N&2=F&f=R.D&4=v&h=1h&5=t&m=0&6=1&x=1k.1j&b=1&i=s&c=w-E&g=o-S-C-B-z&A=f,e,d,g,l,m,h,k,j,i,c,8,a,b,4,6,3,2,5,9,7&a=u&9=11&8=T&Y=U&l=V:W:X::\',10:\'1i\',y:\'n/p\'},{K:\'J://I.G.H/L?d=M&3=1&e=Q&k=17&j=n/p&P=O&7=N&2=F&r=1&f=R.D&4=v&h=18&q=12&5=t&m=0&6=1&x=14.13&b=1&i=s&c=w-E&g=o-S-C-B-z&A=q,f,e,d,r,g,l,m,h,k,j,i,c,8,a,b,4,6,3,2,5,9,7&a=u&9=11&8=T&Y=U&l=V:W:X::\',10:\'1b\',y:\'n/p\',1l:Z},{K:\'J://I.G.H/L?d=M&3=1&e=Q&k=17&j=n/p&P=O&7=N&2=F&r=1&f=R.D&4=v&h=18&q=12&5=t&m=0&6=1&x=14.13&b=1&i=s&c=w-E&g=o-S-C-B-z&A=q,f,e,d,r,g,l,m,h,k,j,i,c,8,a,b,4,6,3,2,5,9,7&a=u&9=11&8=T&Y=U&l=V:W:X::\',10:\'1a\',y:\'n/p\'}],1u:1m,1x:{1y:Z,1A:\'1z\',1w:\'1p\',1o:0},1n:\'1q\',1r:Z,19:$(15).19(),16:$(15).16(),1s:{1v:\'1t\'}})',62,99,'|yes|source|requiressl|pl|upn|ratebypass|expire|ms|usequic|mv|pcm2|mn|gcr|ei|dur|id|itag|mm|mime|lmt|ip|ipbits|video||mp4|clen|gir|31|jXwNMrx0IaU||43|sn|signature|type|HJM86r|sparams|vyeeV4Z3C|Hi0Fiba|007|25ge7nls|youtube|googlevideo|com|redirector|https|file|videoplayback|fr|1486761492|1486739848|mt|s9mdWNGjNMyZWOWXnogK|2510|ADmhZMhAbleLnUrPsaJ|au|yt6|2001|bc8|273b|key|true|label|no|141648297|7C4D69014049ED920C4B704A27A6654BF3978029|95F35972152ABBA4EC6B9B900134121D22069863|window|height|1486666079696645||width|360p|480p|sources|setup|embed|jwplayer|1486666459476292|22|720p|6D3BD9AFFDC4C82C35300A4C1BF73938E930D431|06BC234646DD2C3BC1FF00EFC4F46900A710404C|default|subs|primary|backgroundOpacity|raised|html5|allowfullscreen|skin|glow|tracks|name|edgeStyle|captions|back|20|fontSize'.split('|'),0,{}))
$(document).ready(function(){
$(window).resize(function(){
jwplayer().resize($(window).width(),$(window).height())
})
})

</script>

Re: Pregunta sobre jsunpack

Publicado: 10 Feb 2017, 20:34
por Hernan_Ar_c
Tome todo como me recomendaste pero sigue el mismo error...

Re: Pregunta sobre jsunpack

Publicado: 11 Feb 2017, 10:19
por robalo
@Hernan_Ar_c puedes hacer una cosa para este tipo de packed si te da error con la llibrería que se usa normalmente.

Probar con un miniscript que interpreta el código JS del packed y si falla usar el de siempre o viceversa.

La interpretación del miniscript podría ser algo así

Código: Seleccionar todo

    p,c,k = re.search("}\('(.*)', *\d+, *(\d+), *'(.*)'\.", packed, re.DOTALL).groups()
    for c in reversed(range(int(c))):
        if k.split('|')[c]: p = re.sub(r'(\b%s\b)' % c, k.split('|')[c], p)
'packed' es lo que queremos desofuscar.
El texto desofuscado se quedará almacenado en la variable 'p' al acabar el bucle.

Código: Seleccionar todo

    import xbmc
    packed = """eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+c+'\\b','g'),k[c])}}return p}('38 40=21(\'1\');21(\'1\').56({44:{43:\'45\',46:{42:{47:3,39:\'//1.8/36/35\',34:\'37\'}}},41:"24:10",48:66,20:[],19:{18:22(){$(\'#1\').23(27)}},26:{17:\'28\',14:\'#11\',9:0},12:\'29\',16:\'2://4.6/\',13:\'5%\',15:\'5%\',20:[],19:{18:22(){$(\'#1\').23(27)}},26:{17:\'28\',14:\'#11\',9:0},12:\'29\',16:\'2://4.6/\',13:\'5%\',15:\'5%\',60:\'2://4.6/\',25:\'7://1.8//33/31/32.30\',25:\'7://1.8//33/31/32.30\',57:{54:\'7://51-52.53.58/59/64.65\',63:62,50:\'2://4.6/\',61:\'49-55\'},});',1,67,'|allplayer|http||doomtv|100|net|https|tk|backgroundOpacity||FFFFFF|abouttext|height|backgroundColor|width|aboutlink|edgeStyle|onError|events|sources|jwplayer|function|html||skin|captions|googleplayer|uniform|DoomTV|xml|skins|RedFlat|asset|type|52228|playerxml|nonlinear|var|tag|playerInstance|aspectratio|overlay|client|advertising|vast|schedule|offset|primary|top|link|assets|jpcust|jwpsrv|file|left|setup|logo|com|watermarks|image|position|true|hide|ddEhKRLa|png|primaryCookie'.split('|')))"""

    p,c,k = re.search("}\('(.*)', *\d+, *(\d+), *'(.*)'\.", packed, re.DOTALL).groups()
    for c in reversed(range(int(c))):
        if k.split('|')[c]: p = re.sub(r'(\b%s\b)' % c, k.split('|')[c], p)

    xbmc.log( "XXX unpacked: %s" % p )
EDITO: Se pasó el 'if'

Re: Pregunta sobre jsunpack

Publicado: 11 Feb 2017, 10:26
por robalo
Se me olvidó colocar la respuesta, la pego aquí

Código: Seleccionar todo

XXX unpacked: var playerInstance=jwplayer('allplayer');jwplayer('allplayer').setup({advertising:{client:'vast',schedule:{overlay:{offset:3,tag:'//allplayer.tk/playerxml/52228',type:'nonlinear'}}},aspectratio:"24:10",primary:primaryCookie,sources:[],events:{onError:function(){$('#allplayer').html(googleplayer)}},captions:{edgeStyle:'uniform',backgroundColor:'#FFFFFF',backgroundOpacity:0},abouttext:'DoomTV',aboutlink:'http://doomtv.net/',height:'100%',width:'100%',sources:[],events:{onError:function(){$('#allplayer').html(googleplayer)}},captions:{edgeStyle:'uniform',backgroundColor:'#FFFFFF',backgroundOpacity:0},abouttext:'DoomTV',aboutlink:'http://doomtv.net/',height:'100%',width:'100%',image:'http://doomtv.net/',skin:'https://allplayer.tk//asset/skins/RedFlat.xml',skin:'https://allplayer.tk//asset/skins/RedFlat.xml',logo:{file:'https://assets-jpcust.jwpsrv.com/watermarks/ddEhKRLa.png',hide:true,link:'http://doomtv.net/',position:'top-left'},});
Este resultado te vale para algo???

Re: Pregunta sobre jsunpack

Publicado: 11 Feb 2017, 11:34
por robalo
Sólo como nota informativa para saber el motivo del error.

Los packed normalmente suelen ser fieles con los argumentos 'a,c' en la librería 'radix,count'. En el packed posteado no lo es, 'a' o 'radix' es '1' por lo que lo estaría limitando a un string '01'. Si modificamos el 'a=1' a 'a=10' nos funcionaría.

Básicamente, lo que hace que falle es la interpretación que hace la librería de la función 'e' que se suele incluir en los packed (cada uno de su padre y de madre) al encotrar valores fuera del índice del string 'ALPHABET''.