Обфускация - это процесс затруднения понимания кода, при этом сохраняя его работоспособность. Иногда необходим для некотоых участков кода. Решил написать простенький абфускатор который будет изменять имена переменных, посмотрим насколько это затруднит понимание программы;)
Если порыться в официальной документации по PHP и посмотреть ограничения на имена переменных, мы видим следующее:
имя переменной в PHP может состоять из любых символов, код ASCII которых старше 127, это значит что переменная может состоять и из русских букв, и даже из некоторых непечатных символов.
Написал класс который заменяет имена переменных на новые, генерированные из определенных символов.
Для примера скормим скрипту такой код:
function fxor($string, $key) { $slen=strlen($string); $klen=strlen($key); for($i=0, $j=0; $i < $slen; $i++, $j++) { if($j == $klen) $j=0; $string[$i] = $string[$i] ^ $key[$j]; } return $string; }
На выходи получаем:
function fxor($ , $ ) { $ =strlen($ ); $ =strlen($ ); for($ =0, $ =0; $ <$ ; $ ++, $ ++) { if($ == $ ) $ =0; $ [$ ] = $ [$ ] ^ $ [$ ]; } return $ ; }
Такой вот забавный код) Имена переменных заменены на переменные состоящие из непечатного символа xA0
Восприятие кода немного затруднилось. Еще можно убрать все символы n и r получим:
function fxor($ , $ ) { $ =strlen($ ); $ =strlen($ ); for($ =0, $ =0; $ <$ ; $ ++, $ ++) { if($ == $ ) $ =0; $ [$ ] = $ [$ ] ^ $ [$ ]; } return $ ; }
Выглядить симпатично))
Онлайн версию скрипта можно потестить тут: http://blog.taran.su/development/obfuscator/
Скачать исходники ТУТ
Октябрь 1st, 2009 at 21:02