Página 1 de 2
Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 00:01
por Cmos
Resulta que llevo unos días planteando un canal para la web descargasmix la cual creo que está muy bien surtida en contenido. Mi problema viene con que, una vez entras en una película o serie en concreto, los enlaces, ya sea de descarga u online (en los torrents no ocurre, son directos), vienen encapsulados dentro de un código javascript con una llamada a Jquery, por ejemplo:
Código: Seleccionar todo
onclick=jQuery('#mirror2_ul>p>a').each(function(){this.onclick()});show_mirror('mirror2_ul')
He mirado y remirado para ver si la pagina utiliza alguna API o entrar por AJAX, pero no he encontrado nada. El script que utiliza más o menos lo he localizado, pero con mi nivel de javascript la mitad ni lo entiendo xD No sé si habrá alguna manera de solucionarlo, porque creo que sería un canal interesante, y aunque se podría publicar únicamente para utilizarlo por torrent, hay contenido que solo está en descarga u online, además de que no estaría del todo aprovechado...
Algún crack en javascript en la sala?

Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 08:07
por SeiTaN
Sin ser un master en javascript, ¿puedes poner la pagina y el codigo al que haces referencia? A ver si te puedo echar un cable.
Saludos.
Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 12:10
por Cmos
SeiTaN escribió:Sin ser un master en javascript, ¿puedes poner la pagina y el codigo al que haces referencia? A ver si te puedo echar un cable.
Saludos.
La página es descargasmix.net. Y este el código del script (en la página viene ofuscado):
Código: Seleccionar todo
var _0x1e03 = ["", "length", "charCodeAt", "substr", "hostname", "location", "descargasmix", "www.descargasmix", "fromCharCode"];
function dm(h) {
var copies = _0x1e03[0];
i = 0;
for (;i < h[_0x1e03[1]];i++) {
copies = copies + String[_0x1e03[8]](h[_0x1e03[2]](i) ^ 123 * ~~(window[_0x1e03[5]][_0x1e03[4]][_0x1e03[3]](0, 12) == _0x1e03[6] || window[_0x1e03[5]][_0x1e03[4]][_0x1e03[3]](0, 16) == _0x1e03[7]));
}
return copies;
}
var _0x1808 = ["ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", "", "replace", "charAt", "indexOf", "_keyStr", "fromCharCode", "length", "charCodeAt"];
var c = {
_keyStr : _0x1808[0],
a : function(m) {
var a = _0x1808[1];
var r20;
var restoreScript;
var bits;
var enc1;
var enc2;
var _0x5fffx9;
var o3;
var cursor = 0;
m = m[_0x1808[2]](/[^A-Za-z0-9\+\/\=]/g, _0x1808[1]);
for (;cursor < m[_0x1808[7]];) {
enc1 = c[_0x1808[5]][_0x1808[4]](m[_0x1808[3]](cursor++));
enc2 = c[_0x1808[5]][_0x1808[4]](m[_0x1808[3]](cursor++));
_0x5fffx9 = c[_0x1808[5]][_0x1808[4]](m[_0x1808[3]](cursor++));
o3 = c[_0x1808[5]][_0x1808[4]](m[_0x1808[3]](cursor++));
r20 = enc1 << 2 | enc2 >> 4;
restoreScript = (enc2 & 15) << 4 | _0x5fffx9 >> 2;
bits = (_0x5fffx9 & 3) << 6 | o3;
a = a + String[_0x1808[6]](r20);
if (_0x5fffx9 != 64) {
a = a + String[_0x1808[6]](restoreScript);
}
if (o3 != 64) {
a = a + String[_0x1808[6]](bits);
}
}
a = c._d(a);
return a;
},
_d : function(data) {
var utftext = _0x1808[1];
var i = 0;
var c = c1 = c2 = 0;
for (;i < data[_0x1808[7]];) {
c = data[_0x1808[8]](i);
if (c < 128) {
utftext += String[_0x1808[6]](c);
i++;
} else {
if (c > 191 && c < 224) {
c2 = data[_0x1808[8]](i + 1);
utftext += String[_0x1808[6]]((c & 31) << 6 | c2 & 63);
i += 2;
} else {
c2 = data[_0x1808[8]](i + 1);
c3 = data[_0x1808[8]](i + 2);
utftext += String[_0x1808[6]]((c & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
i += 3;
}
}
}
return utftext;
}
};
Aquí un ejemplo de llamada al script para sacar el enlace:
Código: Seleccionar todo
dm(c.a('Ew8PCwhBVFQOCB4JCBgXFA4fVRgUFlRKCBQLSwseDx8ZAhY='));
Gracias por tomarte la molestia SeiTaN

Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 12:52
por SeiTaN
Me has dado coba, no dijiste nada del ofuscado jajaja, es más el tiempo de "traducirlo" que otra cosa, luego te lo miro con más calma xD
Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 14:46
por Cmos
SeiTaN escribió:Me has dado coba, no dijiste nada del ofuscado jajaja, es más el tiempo de "traducirlo" que otra cosa, luego te lo miro con más calma xD

Se me pasó mencionarlo xD. Sin problemas, échale un ojo cuando puedas, no hay prisa por supuesto, y si es mucho lío pues nada. En todo caso, muchas gracias de nuevo

Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 20:26
por SeiTaN
https://gist.github.com/SeiTaN80/faefb72d028d23d9502c
Ya está todo, tan solo un error puñetero, "numeraco" se sale del limite para int y no se puede hacer el char(int)
Código: Seleccionar todo
def dm(h):
copies = ""
i = 0
while i < len(h):
numeraco = ord(h[i]) ** 123 * ~~ True
print (numeraco)
copies += chr(numeraco)
i += 1
return copies
Un saludo.
Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 23:56
por Cmos
Pero qué puto crack
Yo vi tu mensaje hace unas horas y me lié con la conversión a python a ver si la sacaba, llegué hasta aquí justo cuando he visto tu solución:
Código: Seleccionar todo
def dm(h):
h = a (h)
copies = ""
i = 0
while (i < len(h)):
str = ord(h[i]) ^ 123 * math.floor(True)
copies = copies + unichr(int(str))
i += 1
return copies
def a(m):
keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
a = ""
cursor = 0
m = re.sub(r"/[^A-Za-z0-9+/=]", "", m)
while cursor < len(m):
cursor += 1
enc1 = keyStr.index(m[cursor])
enc2 = keyStr.find(m[cursor])
cadena = keyStr.find(m[cursor])
o3 = keyStr.find(m[cursor])
r20 = enc1 << 2 | enc2 >> 4
restoreScript = (enc2 & 15) << 4 | cadena >> 2
bits = (cadena & 3) << 6 | o3
a = a + unichr(r20)
if (cadena != 64):
a = a + unichr(restoreScript)
if (o3 != 64):
a = a + unichr(bits)
a = d(a)
return a
def d(data):
utftext = ""
i = 0
c = c1 = c2 = 0
while i < len(data):
c = data[i]
if (ord(c) < 128):
utftext += unichr(ord(c))
i += 1
else:
if (ord(c) > 191) & (ord(c) < 224):
c2 = data[i + 1]
utftext += unichr((ord(c) & 31) << 6 | ord(c2) & 63)
i += 2
else:
c2 = data[i + 1]
c3 = data[i + 2]
utftext += unichr((ord(c) & 15) << 12 | (ord(c2) & 63) << 6 | (ord(c3) & 63))
i += 3
return utftext
Comparando con el tuyo, veo que mi fallo estaba en los incrementadores de la variable cursor, que se me fue la olla y solo puse uno

Y por lo que veo unichr hace lo mismo a simple vista que chr, no? Y también que no es necesario el math.floor que hago con el númeraco, creía que python no admitía la doble negación
Pues eso, que ha quedado la mar de chulo xD Muchísimas gracias por todo el curro, sin ti desde luego hubiera sido imposible sacarlo. Ahora estos días me pondré para perfilar y terminar el canal y ponerte una estatua

Re: Ayuda en canal con código javascript
Publicado: 14 Ene 2016, 23:58
por SeiTaN
subnormal que es uno, no está mal es que he quitado lo que no tenía que quitar.
^ es un Bitwise Operator, no la potencia
Ya está subido bien

Re: Ayuda en canal con código javascript
Publicado: 15 Ene 2016, 11:32
por robalo
Buenos días, són las 11 menos cuarto y aún no soy persona, estoy con el primer café
En primer lugar buen trabajo, es un buen ejercicio el que habéis hecho del cual aprendemos todos. Pero...
Sólo se necesita saber lo que se cuece en la función dm() (str-ecode64 ^ 123) con lo que esl scrape se hace más fácil. Depués solo hay que usar el módulo base64 de python.
Ejemplo con lo hecho hasta ahora:
Código: Seleccionar todo
def dm(h):
import base64
h = base64.decodestring(h)
copies = ""
i = 0
while i < len(h):
copies += chr(ord(h[i]) ^ 123 * ~~ True)
i += 1
return copies
Con sólo eso sería suficiente
Re: Ayuda en canal con código javascript
Publicado: 15 Ene 2016, 12:10
por SeiTaN
robalo
Código: Seleccionar todo
def dm(h):
import base64
h = base64.decodestring(h)
copies = ""
i = 0
while i < len(h):
copies += chr(ord(h[i]) ^ 123 * ~~ True)
i += 1
return copies
SeiTaN
Código: Seleccionar todo
def dm(h):
copies = ""
i = 0
while i < len(h):
copies += chr(ord(h[i]) ^ 123 * ~~ True)
i += 1
return copies
No haría falta, con lo último que puse en el gist ya funciona, ¿o te refieres a algo con las 3 funciones?
Saludos.