Foros del Web » Programando para Internet » PHP »

PHP OO Clases e ingeniería inversa

Estas en el tema de Clases e ingeniería inversa en el foro de PHP en Foros del Web. Hola comunidad, en estos momentos ando estudiando PHP Orientada a Objetos, y para ello me pusieron un reto calcular un token valido a partir de ...
  #1 (permalink)  
Antiguo 25/09/2010, 23:08
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 1
Pregunta Clases e ingeniería inversa

Hola comunidad, en estos momentos ando estudiando PHP Orientada a Objetos, y para ello me pusieron un reto calcular un token valido a partir de una clase dada, he estado leyendo sobre las clases, como se usan y demas, y logro generar un token, el problema es que SIEMPRE me da el mismo 100-100-100-100-100 y a la hora de enviar la respuesta me la dan por mala :P

Me han dado una pista y es hacerle ingeniera inversa al código(????), bueno el código es este:

Código PHP:
Ver original
  1. <?php
  2. class Crypt0reto
  3.     {
  4.     private $prefix_token = 'ddlr-';
  5.     private $valid_algorithm = '56-101-52-51-56';
  6.     private function TokenCalculate($string)
  7.         {
  8.         $md5_1 = md5($string[0]);
  9.         $md5_2 = md5($string[1]);
  10.         $md5_3 = md5($string[2]);
  11.         $md5_4 = md5($string[3]);
  12.         $md5_5 = md5($string[4]);
  13.         $token = ord($md5_1).'-'.ord($md5_2).'-'.ord($md5_3).'-'.ord($md5_4).'-'.ord($md5_5);
  14.         return $token;
  15.         }
  16.     private function DebugToken($token)
  17.         {
  18.         $string_explode_array = explode($this->prefix_token, $token);
  19.         $string = $string_explode_array[1];
  20.         return $string;
  21.         }
  22.     public function CheckToken($token)
  23.         {
  24.         $test_token = $this->TokenCalculate($this->DebugToken($token));
  25.         if($test_token == $this->valid_algorithm)
  26.             {
  27.             return true;
  28.             }
  29.         else
  30.             {
  31.             return false;
  32.             }
  33.         }
  34.     }
  35. ?>

Le hice modificaciones para ver generar uno, me quedo así:

Código PHP:
Ver original
  1. <?php
  2. class Crypt0reto
  3.     {
  4.     private $prefix_token = 'ddlr-';
  5.     private $valid_algorithm = '56-101-52-51-56';
  6.     private function TokenCalculate($string)
  7.         {
  8.         $md5_1 = md5($string[0]);
  9.         echo "MD5 1 hecho: ".$md5_1."<br>";
  10.         $md5_2 = md5($string[1]);
  11.         echo "MD5 2 hecho: ".$md5_2."<br>";
  12.         $md5_3 = md5($string[2]);
  13.         echo "MD5 3 hecho: ".$md5_3."<br>";
  14.         $md5_4 = md5($string[3]);
  15.         echo "MD5 4 hecho: ".$md5_4."<br>";
  16.         $md5_5 = md5($string[4]);
  17.         echo "MD5 5 hecho: ".$md5_5."<br>";
  18.         $token = ord($md5_1).'-'.ord($md5_2).'-'.ord($md5_3).'-'.ord($md5_4).'-'.ord($md5_5);
  19.         echo "Token hecho: ".$token."<br>";
  20.         return $token;
  21.         echo $token;
  22.         }
  23.     private function DebugToken($token)
  24.         {
  25.         $string_explode_array = explode($this->prefix_token, $token);
  26.         echo "String explode hecho: ".$string_explode_array."<br>";
  27.         print_r($string_explode_array); echo "<br>";
  28.         $string = $string_explode_array[1];
  29.         echo "String calculado: ".$string."<br>";
  30.         print_r($string); echo "<br>";
  31.         return $string;
  32.         echo $string;
  33.         }
  34.     public function CheckToken($token)
  35.         {
  36.         $test_token = $this->TokenCalculate($this->DebugToken($token));
  37.         if($test_token == $this->valid_algorithm)
  38.             {
  39.             return true;
  40.             }
  41.         else
  42.             {
  43.             return false;
  44.             }
  45.         }
  46.     }
  47.  
  48. $prueba = new Crypt0reto();    
  49. $prueba->CheckToken('one2one');
  50.  
  51.  
  52. ?>

Alguien me podría hechar la mano para generar el famoso token valido ?

Última edición por BaByRoDrI; 25/09/2010 a las 23:19
  #2 (permalink)  
Antiguo 29/09/2010, 13:53
 
Fecha de Ingreso: septiembre-2010
Mensajes: 24
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Clases e ingeniería inversa

Hoal Baby, te voy a poner lo que yo entiendo del codigo por ahi te sirve de algo....

private $prefix_token = 'ddlr-'; Estas letras son el prefijo del token, es decir que siempre va a estar en un token valido.

private $valid_algorithm = '56-101-52-51-56'; Esto es lo que te tiene que dar como resultado obviamente en codigo ASCII.


esta es la parte mas importante:

$md5_1 = md5($string[0]);
$md5_2 = md5($string[1]);
$md5_3 = md5($string[2]);
$md5_4 = md5($string[3]);
$md5_5 = md5($string[4]);
$token = ord($md5_1).'-'.ord($md5_2).'-'.ord($md5_3).'-'.ord($md5_4).'-'.ord($md5_5);

Al string que recibe la funcion TokenCalculate le aplica a la primera letra la funcion MD5

y esta parte del codigo lo que hace es sacar el prefix_token y dejar el token en si.

$string_explode_array = explode($this->prefix_token, $token); $string = $string_explode_array[1];



un ejemplo si el tocken fuera a partir del string ddlr-grand

primero hace esto:

$string_explode_array = explode($this->prefix_token, $token);
$string = $string_explode_array[1];

en string queda 'grand'

y luego hace esto:

$md5_1 = md5(g);
$md5_2 = md5(r);
$md5_3 = md5(a);
$md5_4 = md5(n);
$md5_5 = md5(d);
$token = ord($md5_1).'-'.ord($md5_2).'-'.ord($md5_3).'-'.ord($md5_4).'-'.ord($md5_5);

y lo que queda en token es lo que compara es decir que tendrian que ser las letras de este codigo ascii '56-101-52-51-56' que serian los caracteres 8-e-4-3-8
tienes que encontrar un md5 que aplicado a algo te de esos ascii, eso es lo que entendi...
Saludos
  #3 (permalink)  
Antiguo 19/10/2010, 10:31
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 1
Respuesta: Clases e ingeniería inversa

Muchas gracias @NicolasSui eres el primero que me explica de mejor manera y super entendible :) Enserio muchisimas gracias

Etiquetas: clases
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:46.