eval(gzinflate(base64_decode...
funkcja eval()
jest często wykorzystywana do zabezpieczenia kodu źródłowego porzez jego niemożliwe do
prostego odczytania zakodowanie za pomocą wielokrotnego wywołania
gzdeflate()
i base64_encode().
"Problem" można jednak szybko rozwiązać, zapisują zakodowany fragmet kodu do pliku encoded.php,
a następnie uruchamiając poniższy skrypcik, który wygeneruje plik decoded.php z jawną postacią
kodu.
<?php
$content = file_get_contents("encoded.php");
while (preg_match("/eval\(gzinflate/",$content))
{
$content=preg_replace("/<\?|\?>/", "", $content);
eval(preg_replace("/eval/", "\$content=", $content));
}
file_put_contents("decoded.php", $content);
?>
Kodowanie polega po prostu na procesie odwrotnym. W poniższym przykładzie chcemy np. zakodować fragment kodu generujący napis "Hello world" czyli "echo 'Hello world';". W tym celu na fragmencie kodu php wykonujemy najpierw funkcję gzdeflate(), a następnie base64_encode().
<?php echo 'Hello world'; $plain = "echo 'Hello world';"; $encoded = base64_encode(gzdeflate($plain)); echo $encoded; eval(gzinflate(base64_decode($encoded))); ?>
Przykład praktyczny kodowania
Powiedzmy, że chcemy zakodować taki oto plik decoded.php:
<?php $txt1 = 'Hello'; $txt2 = ' World!'; echo $txt1. $txt2; ?>
Kiedy wykonamy na nim poniższy skrypt:
<?php
$plain = file_get_contents("decoded.php");
$plain = preg_replace("/<\?php|<\?|\?>/", "", $plain);
$content = base64_encode(gzdeflate($plain));
$content = "<?php\n eval(gzinflate(base64_decode('" . $content . "')));\n?>";
file_put_contents("encoded.php", $content);
?>
Otrzymamy plik encoded.php z zakodowaną treścią:
<?php
eval(gzinflate(base64_decode('4+Xi5eJUKakoMVSwVVD3SM3JyVe3hgoZgYQUwvOLclIUwYKpyRn5CmDFemDKCCjIywUA')));
?>
Wykonanie skryptów decoded.php i encoded.php skutkuje dokładnie tym samym - wyświetleniem napisu "Hello Worold!", przy czym z praktycznego punktu widzenia drugi skrypt jest zupełnie nieczytelny. Trzeba jednak pamiętać, że nie jest to tak na prawdę "szyfrowanie", a jedynie przekształcenie kodu w formę, która uniemożliwia bezpośrednie odczytanie kodu przez człowieka.