Bezig met actie... Xenophobia is een script (obfuscator) om PHP code te vertroebelen waardoor deze minder makkelijk misbruikt kan worden. Het is afgeleid van een oude versie van POBS maar maakt gebruik van de 'token_get_all' functie in plaats van reguliere expressies (preg_match_all).
Onderstaande functie is bedoeld om een lijst te genereren maar je kunt op dezelfde wijze ook direct je script opschonen. Wanneer je zoekt naar de tokens 'T_DOC_COMMENT' en 'T_COMMENT' kunt je zonder reguliere expressies alle commentaren uit je script verwijderen.
001
<?PHP
002
function Get_Functions($data){
003
global $CONFIG, $arrSkipFunctions;
004
005
$strResult = '';
006
007
//..[Exceptions]
008
$arrExcludeCharacters = array('__');
009
010
$arrTokens = token_get_all($data);
011
for($i = 0; $i < count($arrTokens); $i++){
012
$arrToken = $arrTokens[$i];
013
if(is_array($arrToken) && $arrToken[0] == T_FUNCTION){
014
$arrToken = $arrTokens[$i+2];
015
$functionName = $arrToken[1];
016
017
str_ireplace($arrExcludeCharacters, '', $functionName, $total);
018
if($total == 0
019
&& !in_array($functionName, $arrSkipFunctions)
020
&& strlen($functionName) > $CONFIG['MIN_FUNCTION_LENGHT']){
021
022
$strResult .= '$' . "arrFuncList['" . $functionName . "'] = 'x" .
023
substr(md5($functionName), 0, $CONFIG['MD5_LENGHT']) . "';\n";
024
}
025
}
026
}
027
return $strResult;
028
//--
029
}
030
?>
Xenophobia is een vier-traps raket die na elke pagina verversing (F5) een andere functie uitvoert. Eerst wordt de directory structuur van de bronbestanden vastgelegd. Vervolgens wordt een lijst samengesteld van alle functies en variabelen. Als laatste worden de bronbestanden gekopieerd, vertroebelt en weggeschreven naar de opgegeven directory.
Deze methoden heeft een aantal voordelen. Zo hoeven de afzonderlijke stappen niet continue opnieuw uitgevoerd te worden en is 'bug smashen' een stuk makkelijker omdat je een duidelijk overzicht hebt van de functies en variabelen die zijn hernoemd.
Dat hangt af van wat je er van verwacht. Een gemotiveerde boef kan gewoon je script misbruiken. Ook kun je jezelf flink in de vingers snijden wat debuggen en support betreft. Aan de andere kant kun je met een goed vertroebelde code mensen wel afschrikken maar of dit het waard is...
001
<?PHP
002
$xc1838b55['DIR_APPL'] = $x532e526d->xfb8e5bfe->Get('DIR_APPL');
003
$xc1838b55['URL_APPL'] = $x532e526d->xfb8e5bfe->Get('URL_APPL');
004
$xc1838b55['DIR_CACHE'] = $x532e526d->xfb8e5bfe->Get('CACHE_DIR');
005
$hf = $x532e526d->x3cd1ff41('rcache');
006
$hf->xa6e4d9d6('language_' . $userLanguage, 'core');
007
$hf->xf1e83905(604800);
008
$x8cc334c3 = $hf->xfadaf773();
009
if($x8cc334c3){$LANG_CORE = $hf->xd8c70d14();
010
}
011
else{$x8da74697[] = array('dir' => 'lang/', 'file' => 'dictionary.php');
012
}
013
for($i = 0; $i < 255; $i++){
014
$x = ($x + $xd28d4466[$i] + $key[$i]) % 256;
015
$x73abc6dd = $xd28d4466[$i];
016
$xd28d4466[$i] = $xd28d4466[$x];
017
$xd28d4466[$x] = $x73abc6dd;
018
}
019
?>