R0 CREW

На тему деобфускации php или о подлости браузеров

На днях разбирал один скрипт . Не то чтобы у меня был в этом много опыта . Его вообще нет . Но пых есть пых . Код декриптуется в eval . Старый рецепт - поменял eval на echo - забрал новый код из браузера .
Новый код был странный .

 for($i = 0, $k = 0; $i = strlen($key)) 
        $k = 0;
	$s[$i] = $s[$i] ^ $key[$k];
  }
  $e = $s;
  for($i=0, $k=0; $i = strlen($key)) 
          $k = 0;
	  $e[$i] = $e[$i] & $key[$k];
  }

Вообще это код распаковщика для новой строки с данными .
Пол дня считал , что автор гуру . Он знает способ заставить цикл for работать без открывающей скобки и третьего условия. Другие пол дня я полагал что скобки есть . Но защита хитро прячет часть кода распаковщика и я не знаю как . Так прошел целый день .
Оригинальный код был таким .

<?php 
 /* bla bha bha 
 */
 for($i = 0, $k = 0; $i < strlen($s); $i++, $k++) {
	if ($k >= strlen($key)) $k = 0;
	$s[$i] = $s[$i] ^ $key[$k];
  }
  $e = $s;
  for($i=0, $k=0; $i<strlen($e); $i++, $k++) {
	if ($k >= strlen($key)) $k = 0;
	  $e[$i] = $e[$i] & $key[$k];
  }
?>

Код <?php не отображается браузером тк считается за тег . Вместе с ним из видимости за компанию ушел кусок из середины цикла . Код из вполне нормального стал тем что выше .
Со строками данных было еще интереснее . Из них удалялись отдельные символы , после чего они переставали расшифровываться даже совершенно рабочим декриптором . Или начинали расшифровываться кусками .
В итоге из-за браузера я потратил почти столько же времени , сколько на создание деобфускатора .
Надеюсь этим постом сэкономлю пару часов какому-нибудь чайнику , который решил распаковать скрипт . Eval нужно выводить в файл , а не в браузер .

А посмотреть в “View => Page Source”? =)))))