Ajax Activity Indicator Bezig met actie...   


Ookami CMBS
Hamadryad Framework
QuickCardX
Site Dynamics CMS
Xenophobia
[6]
Only a mountain has lived long enough to listen objectively to the howl of a wolf {Aldo Leopold}

Xenophobia

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 ?>

Hoe het werkt:

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.

Heeft obfuscaten zin?

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 ?>