supongo que resolvió el problema ahora, pero quería compartir otra (una en mi opinión mucho más viable) opción. Cuando esté interesado en evaluar solo una función --known-- javascript, puede ser más fácil implementar esta función en Python en lugar de utilizar una herramienta enorme que está diseñada para analizar y ejecutar todos los javascript imaginables en el mundo.
Así que sugeriría escribir una versión python de la función javascript unpacker y la mayoría está resuelta. De hecho, hice eso y aquí hay un ejemplo. La función int2base
es la implementación de Alex Martelli, que se puede encontrar en here.
def unpack(p, a, c, k, e=None, d=None):
''' unpack
Unpacker for the popular Javascript compression algorithm.
@param p template code
@param a radix for variables in p
@param c number of variables in p
@param k list of c variable substitutions
@param e not used
@param d not used
@return p decompressed string
'''
# Paul Koppen, 2011
for i in xrange(c-1,-1,-1):
if k[i]:
p = re.sub('\\b'+int2base(i,a)+'\\b', k[i], p)
return p
Finalmente, debe hacer un pequeño análisis para extraer los cuatro argumentos de función. Solo por el simple hecho de una ilustración, uso eval
aquí para dejar que Python haga eso por mí.
s = '''eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--)d[c]=k[c]||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;}('5 11=17;5 12=["/3/2/1/0/13.4","/3/2/1/0/15.4","/3/2/1/0/14.4","/3/2/1/0/7.4","/3/2/1/0/6.4","/3/2/1/0/8.4","/3/2/1/0/10.4","/3/2/1/0/9.4","/3/2/1/0/23.4","/3/2/1/0/22.4","/3/2/1/0/24.4","/3/2/1/0/26.4","/3/2/1/0/25.4","/3/2/1/0/18.4","/3/2/1/0/16.4","/3/2/1/0/19.4","/3/2/1/0/21.4"];5 20=0;',10,27,'40769|54|Images|Files|png|var|imanhua_005_140430179|imanhua_004_140430179|imanhua_006_140430226|imanhua_008_140430242|imanhua_007_140430226|len|pic|imanhua_001_140429664|imanhua_003_140430117|imanhua_002_140430070|imanhua_015_140430414||imanhua_014_140430382|imanhua_016_140430414|sid|imanhua_017_140430429|imanhua_010_140430289|imanhua_009_140430242|imanhua_011_140430367|imanhua_013_140430382|imanhua_012_140430367'.split('|'),0,{}))'''
js = eval('unpack' + s[s.find('}(')+1:-1])
Resultado:
'var len=17;var pic=["/Files/Images/54/40769/imanhua_001_140429664.png","/Files/Images/54/40769/imanhua_002_140430070.png","/Files/Images/54/40769/imanhua_003_140430117.png","/Files/Images/54/40769/imanhua_004_140430179.png","/Files/Images/54/40769/imanhua_005_140430179.png","/Files/Images/54/40769/imanhua_006_140430226.png","/Files/Images/54/40769/imanhua_007_140430226.png","/Files/Images/54/40769/imanhua_008_140430242.png","/Files/Images/54/40769/imanhua_009_140430242.png","/Files/Images/54/40769/imanhua_010_140430289.png","/Files/Images/54/40769/imanhua_011_140430367.png","/Files/Images/54/40769/imanhua_012_140430367.png","/Files/Images/54/40769/imanhua_013_140430382.png","/Files/Images/54/40769/imanhua_014_140430382.png","/Files/Images/54/40769/imanhua_015_140430414.png","/Files/Images/54/40769/imanhua_016_140430414.png","/Files/Images/54/40769/imanhua_017_140430429.png"];var sid=40769;'
Nota adicional: fue traído a mi atención que si la raíz> 36 luego de Alex int2base
descansos de función. La solución es modificar mediante la adición de caracteres en mayúsculas así: digs = string.digits + string.lowercase + string.uppercase
Este proyecto parece estar muerto desde hace mucho tiempo, y no funcionará en el leopardo de las nieves – overboming
Uso la versión de ruby en Linux, y también está algo muerta. Pero funciona. El mayor problema en ruby no son los enlaces en sí, sino obtener la spidermonkey correcta (no funcionó con 1.9, por ejemplo). – duncan
parece que hay una continuación en https://github.com/davisp/python-spidermonkey pero tampoco se ha actualizado en dos años en este momento. –