Página 1 de 1

Ayuda con la protección de Cinetube

Publicado: 24 Sep 2011, 19:02
por jesus
Bueno, el problema de que desde ayer no funcione Cinetube es que ha empezado a usar criptografía para proteger sus enlaces, como hacen otros canales como Divxonline y Series Yonkis anteriormente.

Durante estos días no creo que pueda dedicarle tiempo, tengo que publicar versiones para todas las plataformas y dormir un poco :) así que copio aquí hasta donde he llegado a ver si algún maestro puede resolver el problema y volvemos a tener Cinetube.

La función que descifra es ct_url_decode, y está en http://www.cinetube.es/js/general.js?08092011

La generación del cuerpo de la función está protegida mediante un simple eval:

Código: Seleccionar todo

eval((function(x){var d="";var p=0;while(p<x.length){if(x.charAt(p)!="`")d+=x.charAt(p++);else{var l=x.charCodeAt(p+3)-28;if(l>4)d+=d.substr(d.length-x.charCodeAt(p+1)*96-x.charCodeAt(p+2)+3104-l,l);else d+="`";p+=4}}return d})("function ct_url_decode(dsfgdsC){var ` '\"F=\"\",` %\"U=\"\";` 0&N` 0#P` 8#V` )#W` )#T` )#O` )#Q` )#L` )#B=0` ##G=` \"$J`!$&E=[];if(!`!L%return`!7#C;}for(count=` ,#.length;` 0!>=0` #\"--){`!z#+` A%substring` \\\",` D\"1);}` ;#` C#U`\"F'X=4-` |*%4` 4'M=\"\";for`#?#R` [#X;` )#>0` \"$`!H&M+=\"=\";}if` O#M` s#==4` ;%=\"\"`!G,C+` 5#`!&'D=65` {#D<=9`!&$D++` b$F+=S`\"P!.fromCharC`%,&D)`#L\"` e$97` c&122` /[48` d&5` q%` BG` *943)+` #17` \"261)`!<#C+=\"\";do`!@#W`#Y#F.indexO`$/$C.charAt` (#B++)` Z$T`$,#` (GO` TNQ` TNL` L#W<<18|`!f#<<12` %#O<<6` $#Q` L#N` L#L>>16&25`&($P` .&8` ,'V` /$` /!`';%O==6`'5%E[`*=#++]`$h7N);}else ` ]%Q` 2P`,+$` g#` 'S`,i$);}}whil` 9$B<`*Q*`#b$J`\"a#E.join(\"\"` /&this.` '\"Y` _#J);`,])J;}`.f%` <*I`.](E=[]`-_7H` +%K` +%S=`*]$I`'b!`!x0I`\"$$`#%#H`\"%#I`&4!Code`&3&)`$z&H<128`#oKH`\"o$B++`$~,H>191&&` u$22`%2%K`!67+`)%`!\"=`! $&31)`'o&K&63`!L&=2`%j)` tBS` *82`!.N15)`)`!` *#`!]!`!g&S`!c*3;}}`& )`&X'}"))
Que se traduce en este código directo:

Código: Seleccionar todo

var d="";
var p=0;
var x="function ct_url_decode(dsfgdsC){var ` '\"F=\"\",` %\"U=\"\";` 0&N` 0#P` 8#V` )#W` )#T` )#O` )#Q` )#L` )#B=0` ##G=` \"$J`!$&E=[];if(!`!L%return`!7#C;}for(count=` ,#.length;` 0!>=0` #\"--){`!z#+` A%substring` \\\",` D\"1);}` ;#` C#U`\"F'X=4-` |*%4` 4'M=\"\";for`#?#R` [#X;` )#>0` \"$`!H&M+=\"=\";}if` O#M` s#==4` ;%=\"\"`!G,C+` 5#`!&'D=65` {#D<=9`!&$D++` b$F+=S`\"P!.fromCharC`%,&D)`#L\"` e$97` c&122` /[48` d&5` q%` BG` *943)+` #17` \"261)`!<#C+=\"\";do`!@#W`#Y#F.indexO`$/$C.charAt` (#B++)` Z$T`$,#` (GO` TNQ` TNL` L#W<<18|`!f#<<12` %#O<<6` $#Q` L#N` L#L>>16&25`&($P` .&8` ,'V` /$` /!`';%O==6`'5%E[`*=#++]`$h7N);}else ` ]%Q` 2P`,+$` g#` 'S`,i$);}}whil` 9$B<`*Q*`#b$J`\"a#E.join(\"\"` /&this.` '\"Y` _#J);`,])J;}`.f%` <*I`.](E=[]`-_7H` +%K` +%S=`*]$I`'b!`!x0I`\"$$`#%#H`\"%#I`&4!Code`&3&)`$z&H<128`#oKH`\"o$B++`$~,H>191&&` u$22`%2%K`!67+`)%`!\"=`! $&31)`'o&K&63`!L&=2`%j)` tBS` *82`!.N15)`)`!` *#`!]!`!g&S`!c*3;}}`& )`&X'}";
while(p<x.length){
	if(x.charAt(p)!="`")d+=x.charAt(p++);
	else{var l=x.charCodeAt(p+3)-28;if(l>4)d+=d.substr(d.length-x.charCodeAt(p+1)*96-x.charCodeAt(p+2)+3104-l,l);else d+="`";p+=4}
}
document.write(d)
Al ejecutar esto en un intérprete Javascript devuelve el cuerpo de la función ct_url_decode que a su vez está ofuscado "manualmente":

Código: Seleccionar todo

function ct_url_decode(dsfgdsC){var dsfgdsF="",dsfgdsU="";var dsfgdsN,dsfgdsP,dsfgdsV,dsfgdsW,dsfgdsT,dsfgdsO,dsfgdsQ,dsfgdsL,dsfgdsB=0,dsfgdsG=0,dsfgdsJ="",dsfgdsE=[];if(!dsfgdsC){return dsfgdsC;}for(count=dsfgdsC.length;count>=0;count--){dsfgdsU+=dsfgdsC.substring(count,count-1);}dsfgdsC=dsfgdsU;var dsfgdsX=4-dsfgdsC.length%4;var dsfgdsM="";for(dsfgdsR=dsfgdsX;dsfgdsR>0;dsfgdsR--){dsfgdsM+="=";}if(dsfgdsM.length==4){dsfgdsM="";}dsfgdsC=dsfgdsC+dsfgdsM;for(dsfgdsD=65;dsfgdsD<=90;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}for(dsfgdsD=97;dsfgdsD<=122;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}for(dsfgdsD=48;dsfgdsD<=57;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}dsfgdsF+=String.fromCharCode(43)+String.fromCharCode(47)+String.fromCharCode(61);dsfgdsC+="";do{dsfgdsW=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));dsfgdsT=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));dsfgdsO=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));dsfgdsQ=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));dsfgdsL=dsfgdsW<<18|dsfgdsT<<12|dsfgdsO<<6|dsfgdsQ;dsfgdsN=dsfgdsL>>16&255;dsfgdsP=dsfgdsL>>8&255;dsfgdsV=dsfgdsL&255;if(dsfgdsO==64){dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN);}else if(dsfgdsQ==64){dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN,dsfgdsP);}else{dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN,dsfgdsP,dsfgdsV);}}while(dsfgdsB191&&dsfgdsH<224){dsfgdsK=dsfgdsI.charCodeAt(dsfgdsB+1);dsfgdsE[dsfgdsG++]=String.fromCharCode((dsfgdsH&31)<<6|dsfgdsK&63);dsfgdsB+=2;}else{dsfgdsK=dsfgdsI.charCodeAt(dsfgdsB+1);dsfgdsS=dsfgdsI.charCodeAt(dsfgdsB+2);dsfgdsE[dsfgdsG++]=String.fromCharCode((dsfgdsH&15)<<12|(dsfgdsK&63)<<6|dsfgdsS&63);dsfgdsB+=3;}}return dsfgdsE.join("");}
Lo que necesitamos es traducir esto a una función Python.

Agradecería mucho la ayuda en este punto, si algún maestro del Javascript y del Python puede ayudar :)

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 11:18
por calimocho
jesus escribió:Al ejecutar esto en un intérprete Javascript devuelve el cuerpo de la función ct_url_decode que a su vez está ofuscado "manualmente":
El código devuelto por el intérprete Javascript es incorrecto.

Yo no te voy a poder ayudar a portar la función a Python, pero voy a aportar mi granito de arena adjuntando el código que he obtenido al descifrar ct_url_decode (he añadido saltos de línea y tabuladores para que esté algo más claro):

Código: Seleccionar todo

function ct_url_decode(dsfgdsC)
{
	var dsfgdsF="",dsfgdsU="";
	var dsfgdsN,dsfgdsP,dsfgdsV,dsfgdsW,dsfgdsT,dsfgdsO,dsfgdsQ,dsfgdsL,dsfgdsB=0,dsfgdsG=0,dsfgdsJ="",dsfgdsE=[];

	if(!dsfgdsC){return dsfgdsC;}

	for(count=dsfgdsC.length;count>=0;count--){dsfgdsU+=dsfgdsC.substring(count,count-1);}
	dsfgdsC=dsfgdsU;

	var dsfgdsX=4-dsfgdsC.length%4;
	var dsfgdsM="";

	for(dsfgdsR=dsfgdsX;dsfgdsR>0;dsfgdsR--){dsfgdsM+="=";}

	if(dsfgdsM.length==4){dsfgdsM="";}

	dsfgdsC=dsfgdsC+dsfgdsM;

	for(dsfgdsD=65;dsfgdsD<=90;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}
	for(dsfgdsD=97;dsfgdsD<=122;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}
	for(dsfgdsD=48;dsfgdsD<=57;dsfgdsD++){dsfgdsF+=String.fromCharCode(dsfgdsD);}

	dsfgdsF+=String.fromCharCode(43)+String.fromCharCode(47)+String.fromCharCode(61);
	dsfgdsC+="";

	do
	{
		dsfgdsW=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));
		dsfgdsT=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));
		dsfgdsO=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));
		dsfgdsQ=dsfgdsF.indexOf(dsfgdsC.charAt(dsfgdsB++));
		dsfgdsL=dsfgdsW<<18|dsfgdsT<<12|dsfgdsO<<6|dsfgdsQ;
		dsfgdsN=dsfgdsL>>16&255;
		dsfgdsP=dsfgdsL>>8&255;
		dsfgdsV=dsfgdsL&255;

		if(dsfgdsO==64){dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN);}
		else if(dsfgdsQ==64){dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN,dsfgdsP);}
		else{dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsN,dsfgdsP,dsfgdsV);}
	}while(dsfgdsB<dsfgdsC.length);

	dsfgdsJ=dsfgdsE.join("");
	dsfgdsJ=this.dsfgdsY(dsfgdsJ);
	return dsfgdsJ;
}

function dsfgdsY(dsfgdsI)
{
	var dsfgdsE=[],dsfgdsB=0,dsfgdsG=0,dsfgdsH=0,dsfgdsK=0,dsfgdsS=0;
	dsfgdsI+="";

	while(dsfgdsB<dsfgdsI.length)
	{
		dsfgdsH=dsfgdsI.charCodeAt(dsfgdsB);

		if(dsfgdsH<128)
		{
			dsfgdsE[dsfgdsG++]=String.fromCharCode(dsfgdsH);
			dsfgdsB++;
		}
		else if(dsfgdsH>191&&dsfgdsH<224)
		{
			dsfgdsK=dsfgdsI.charCodeAt(dsfgdsB+1);
			dsfgdsE[dsfgdsG++]=String.fromCharCode((dsfgdsH&31)<<6|dsfgdsK&63);
			dsfgdsB+=2;
		}
		else
		{
			dsfgdsK=dsfgdsI.charCodeAt(dsfgdsB+1);
			dsfgdsS=dsfgdsI.charCodeAt(dsfgdsB+2);
			dsfgdsE[dsfgdsG++]=String.fromCharCode((dsfgdsH&15)<<12|(dsfgdsK&63)<<6|dsfgdsS&63);
			dsfgdsB+=3;
		}
	}
	return dsfgdsE.join("");
}

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 13:58
por calimocho
Después de examinar la función con más calma, parece ser que la cadena cifrada es una cadena codificada en base64 a la que se le han quitado los caracteres = del final y se ha invertido (el primer caracter pasa a ser el último, el segundo será el penúltimo y así sucesivamente).

Saludos.

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 16:17
por bandavi
Hola Jesus,
Lamento haber estado desaparecido ultimamente pero ya estamos de vuelta para seguir divertiendonos :)
Aqui te dejo la funcion pasada a python para que la utilices con el canal cinetube, en mis pruebas funciona bien, yo mismo lo hubiese subido al svn pero ahora mismo necesito ponerme al dia con los cambios que haz introducido en la nueva version.

Un saludo.

Código: Seleccionar todo

def cturldecode(C):
    F = ""
    U = ""
    B = 0
    G = 0
    J = ""
    E=[]
    if not(C):
        return C
    i = len(C)-1
    for countt in range(0,len(C)-1):
        j = i - countt
        U = U + C[j]
    C = U
    X = 4 - len(C) % 4
    M = ""
    for R in range(0,X):
        M = M + "="
    if len(M) == 4:
        M = ""
    C = C + M
    for D in range(65,91):
        F = F + chr(D)
    for D in range(97,123):
        F = F + chr(D)
    for D in range(48,58):
        F = F + chr(D)
    F = F + chr(43)+chr(47)+chr(61)
    C = C + ""
    while True:
        W  = F.find(C[B])
        B += 1
        T  = F.find(C[B])
        B += 1
        O  = F.find(C[B])
        B += 1
        Q  = F.find(C[B])
        B += 1
        L  = W<<18|T<<12|O<<6|Q
        N  = L>>16&255
        P  = L>>8&255
        V  = L&255
        if (O==64):
            E.append(chr(N))
        elif (Q==64):
            E.append(chr(N) + chr(P))
        else:
            E.append(chr(N) + chr(P) + chr(V))
        if (B>= len(C)):break
    J = "".join(E)
    J = Y(J)
    return J

def Y(I):
    
    E = []
    B = 0
    G = 0
    H = 0
    K = 0
    S = 0
    I = I + ""

    while (B<len(I)):
        
        H = ord(I[B])
        if (H<128):
            
            E.append(chr(H))
            G += 1
            B += 1
        elif (H>191) and (H<224):
            
            K  = ord(I[B+1])
            E.append(chr((H&31)<<6|K&63))
            G += 1
            B += 2
        else:
            
            K  = ord(I[B+1])
            S  = ord(I[B+2])
            E.append(unichr((H&15)<<12|(K&63)<<6|S&63))
            G += 1
            B += 3

    return "".join(E)

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 17:56
por blablableble
Otra version:

Código: Seleccionar todo

def ct_url_decode(dsfgdsC):
	print "hola"
	dsfgdsF="";
	dsfgdsU="";
	dsfgdsN=0;
	dsfgdsP=0;
	dsfgdsV=0;
	dsfgdsW=0;
	dsfgdsT=0;
	dsfgdsO=0;
	dsfgdsQ=0;
	dsfgdsL=0;
	dsfgdsB=0;
	dsfgdsG=0;
	dsfgdsJ="";
	dsfgdsE=[];
	toReturn="";
	dsfgdsC= dsfgdsC[::-1]
	print dsfgdsC
	print len(dsfgdsC);
	dsfgdsX=4-len(dsfgdsC)%4;
	print dsfgdsX;
	if dsfgdsX > 0:
		for z in range(dsfgdsX):
			dsfgdsC=dsfgdsC+"="	
	print dsfgdsC;
	dsfgdsF="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	print len(dsfgdsF);
	while dsfgdsB<len(dsfgdsC):
		dsfgdsW=dsfgdsF.find(dsfgdsC[dsfgdsB]);	
		dsfgdsB=dsfgdsB+1;
		dsfgdsT=dsfgdsF.find(dsfgdsC[dsfgdsB]);
		dsfgdsB=dsfgdsB+1;
		dsfgdsO=dsfgdsF.find(dsfgdsC[dsfgdsB]);
		dsfgdsB=dsfgdsB+1;
		dsfgdsQ=dsfgdsF.find(dsfgdsC[dsfgdsB]);
		dsfgdsB=dsfgdsB+1;
		dsfgdsL=dsfgdsW<<18|dsfgdsT<<12|dsfgdsO<<6|dsfgdsQ;
		dsfgdsN=dsfgdsL>>16&255;
		dsfgdsP=dsfgdsL>>8&255;
		dsfgdsV=dsfgdsL&255;
		if dsfgdsO==64:
			print chr(dsfgdsN)
			toReturn=toReturn+chr(dsfgdsN)
		elif dsfgdsQ==64:
			print chr(dsfgdsN) + chr(dsfgdsP)
			toReturn=toReturn+chr(dsfgdsN) + chr(dsfgdsP)
		else:
			print chr(dsfgdsN) + chr(dsfgdsP) + chr(dsfgdsV)
			toReturn=toReturn+chr(dsfgdsN) + chr(dsfgdsP) + chr(dsfgdsV)
	return toReturn

	

cadena=ct_url_decode("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");

print cadena
#dsfgdsX
Se pueden quitar variables definidas arriba, que es una conversion 1:1 cambiando algunas cosillas por otras más cortas.
La función recibe una cadena, le da la vuelta, añade = hasta que la cantidad de caracteres sea multiplo de 4 y luego crea un numero de 24 bits, donde cada 6 bits es el índice que usa para extraer el carácter del array que ha generado antes ( que yo he hardcodeado, el de A-Za-z0-9+/= ).


Saludos.

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 18:28
por calimocho
Copiando de unos y de otros y a riesgo de equivocarme, aquí va mi versión

Código: Seleccionar todo

import base64

def ct_url_decode(C):
	if not(C):
		return C
	C = C[::-1]
	X = 4-len(C)%4;
	if X in range(1,4):
		for z in range(X):
			C = C+"="
	return base64.decodestring(C)
No se hace uso de la función Y, que, entiendo, convierte los caracteres unicode de 2 y 3 bytes a iso-8859-1.

EDITO: Cambio "if X > 0" por "if X in range(1,4)". Si la longitud de C fuera múltiplo de 4 X valdría 4 (mayor que 0) pero no se deberían añadir 4 =.

Saludos.

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 18:39
por jesus
Joder, estoy impresionado :)

Esta noche lo integro en el canal a ver si funciona. Gracias a todos.

Bienvenido de vuelta, @bandavi.

Re: Ayuda con la protección de Cinetube

Publicado: 26 Sep 2011, 22:26
por jesus
El último código de calimocho ha funcionado perfectamente, así que lo he incluido en el canal y he subido los cambios para que todo el mundo lo tenga actualizado.

Gracias de nuevo ;)

Re: Ayuda con la protección de Cinetube

Publicado: 25 Oct 2011, 04:51
por leifsk8er
Impresionado con lo pequeña que ha quedado la función de calimocho, sabéis cual seria la traduccion a php de la funcion??

Código: Seleccionar todo

import base64

def ct_url_decode(C):
   if not(C):
      return C
   C = C[::-1]
   X = 4-len(C)%4;
   if X in range(1,4):
      for z in range(X):
         C = C+"="
   return base64.decodestring(C)

PHP

Código: Seleccionar todo

function  ct_url_decode($c){
   if(!$c){
   echo $c; // ¿Tiene sentido este if?
   }

  //C = C[::-1] ¿Como se traduce esto a php, que quiere decir?
 
   $x = 4 - strlen($c) % 4;
   
   if($x >= 1 && $x <= 4){
      // Ya no se seguir... :S
   }
Alguna idea?

Re: Ayuda con la protección de Cinetube

Publicado: 25 Oct 2011, 05:04
por leifsk8er
He encontrado este otro hilo donde calimocho lo explica :D
http://www.elotrolado.net/hilo_hilo-ofi ... it=ribalda