Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 29th, 2012  |  syntax: PHP  |  size: 1.72 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. <?php
  2.  
  3.         function readCipher($fp)
  4.         {
  5.                 $ciphlen = unpack('V', fread($fp, 4));
  6.                 $ciphlen = $ciphlen[1];
  7.                 //echo "len = $ciphlen".PHP_EOL;
  8.  
  9.                 $ciph = fread($fp, $ciphlen);
  10.  
  11.                 $blocks = str_split($ciph, 16);
  12.  
  13.                 /*foreach ($blocks as $block)
  14.                         echo 'B '.(bin2hex($block)).PHP_EOL;
  15.                 echo "--------\n";*/
  16.  
  17.                 return $blocks;
  18.         }
  19.  
  20.         $host = 'localhost:4433';
  21.         //$host = '23.21.15.166:4433';
  22.         $solution = '';
  23.  
  24.         $fp = stream_socket_client("tcp://$host", $errno, $errstr, 30);
  25.         if (!$fp) {
  26.                 echo "$errstr ($errno)\n";
  27.                 exit;
  28.         }
  29.  
  30.         $iv = fread($fp, 16);
  31.         echo 'IV = '.(bin2hex($iv)).PHP_EOL;
  32.  
  33.         $padlen = 4;
  34.  
  35.         for ($n = 0; $n < 2; $n++)
  36.         {
  37.                 for ($j = 1; $j < 16; $j++)
  38.                 {
  39.                         $found = false;
  40.  
  41.                         fwrite($fp, pack('V', $padlen));
  42.                         $padstr = str_repeat('0', $padlen);
  43.                         fwrite($fp, $padstr);
  44.                         $blocks = readCipher($fp);
  45.  
  46.                         for ($i = 0x5F; $i < 0x7F; $i++)
  47.                         {
  48.                                 $iv2 = $blocks[count($blocks)-1];
  49.                                 //echo 'IV2 = '.(bin2hex($iv)).PHP_EOL;
  50.  
  51.                                 $c = chr($i);
  52.                                 $bl = $c.$solution;
  53.                                 //echo "Trying $c\n";
  54.                                 if (strlen($bl) < 16)
  55.                                         $p = $bl.str_repeat(chr(16-$j), 16-$j);
  56.                                 else
  57.                                         $p = $bl;
  58.  
  59.                                 fwrite($fp, pack('V', 16));
  60.                                 fwrite($fp, $iv2^$p^$blocks[count($blocks)-2-$n]);
  61.  
  62.                                 $lastBlocks = $blocks;
  63.                                 $blocks = readCipher($fp);
  64.  
  65.                                 if (in_array($blocks[0],$lastBlocks))
  66.                                 {
  67.                                         $solution = chr($i).$solution;
  68.                                         echo "Sol: $solution\n";
  69.                                         $found = true;
  70.                                         $padlen++;
  71.                                         break;
  72.                                 } else {
  73.                                         fwrite($fp, pack('V', $padlen));
  74.                                         $padstr = str_repeat('0', $padlen);
  75.                                         fwrite($fp, $padstr);
  76.                                         $blocks = readCipher($fp);
  77.                                 }
  78.                         }
  79.                         if (!$found)
  80.                         {
  81.                                 echo "Sol: $solution\n";
  82.                                 echo "end\n";
  83.                                 break;
  84.                         }
  85.                 }
  86.         }
  87.         fclose($fp);