In merito ad un post letto questa mattina in questo forum, riguardante la necessita' di offuscare del codice, mi sono messo giu' a provare a fare qualcosa di utile e spero funzionante che possa in qualche modo non competere con la suite dedicata della Zend, ma che rende praticamente illeggibile uno o piu' files se aperti con un editor qualunque.

Il succo del discorso e' questo:
codice:
$obfuscator = &new CaothicCode();
try {
        $obfuscator->parse( Array( "a.php", "b.php" ) );
        try {
                $obfuscator->write( Array( "OBFUSCATOR/a.php", "OBFUSCATOR/b.php" ) );
        }
        catch( Exception $e ) {
                echo $e;
        }
}
catch( Exception $e ) {
        echo $e;
}
Creo l'oggetto , gli passo uno o piu' files ( se ci sono requires, funzioni incrociate e/o altro rispetta le dipendenze ) e se tutto va bene mi ritrovo nella cartella OBFUSCATOR i files praticamente illeggibili ma allo stesso modo bene interpretati dal webserver.


DESCRIZIONE TEST EFFETTUATO
un file a.php contenente questo codice:
Codice PHP:
<?php
/**
* This class remove magic quotes from your scripts
* .
* EXAMPLE:
*            $removeMagicQuotes = &new RemoveMagicQuotes();
*            // will remove automatically
* @Compatibility    >= PHP 4.0
* @Author    Andrea Giammarchi
* @Site        [url]http://www.3site.it/[/url]
* @Mail        [email]andrea@3site.it[/email]
* @Date        01/06/2004
* @LastModified        01/06/2004
* @Version        1.0
*/
class RemoveMagicQuotes {
    
/**
    * Public constructor.
    * RemoveMagicQuotes();
    * @Param    no        no params need
    */
    
function RemoveMagicQuotes() {
        if( 
get_magic_quotes_gpc() ) {
            
$this->__removeSlashes$GLOBALS );
        }
    }
    function 
__removeSlashes( &$what ) {
        while( list( 
$key ) = each$what ) ) {
            if( 
is_Array$what[$key] ) ) {
                
$this->__removeSlashes$what[$key] );
            }
            else {
                
$what[$key] = stripslashes$what[$key] );
            }
        }
    }
}
$rmq = &new RemoveMagicQuotes();
// *************************/
require_once( "b.php" ); // dipendenza da file b.php
echo randomString20); // richiamo funzione presente in b.php
?>
... un file b contenente quest'altro codice:
Codice PHP:
<?php
function randomString($tot$tp=0) {
    
// andr3a
    
srand((double)microtime()*1234567);
    
$a = Array();
    for(
$i=0;$i<26;$i++) {
        
$a[$i] = chr($i+97);
    }
    if(
$tp!=0) {
        
array_push($a,"1","2","3","4","5","6","7","8","9","0");
    }
    
$d count($a)-1;
    
$st "";
    for(
$i=0$i<$tot$i++) {
        
$n rand(0,$d);
        
$st .= rand(0,1) == $a[$n] : strtoupper($a[$n]);
    }
    return 
$st;
    
}
?>

il risultato ottenuto nella cartella OBFUSCATOR per i 2 files e' il seguente:
a.php
<?php class _23mai3a{function _23mai3a(){if(get_magic_quotes_gpc()){$this->_26ncqqo($GLOBALS);}}function _26ncqqo(&$_hlo93dr){while(list($_y5is0zc)=each($_ hlo93dr)){if(is_Array($_hlo93dr[$_y5is0zc])){$this->_26ncqqo($_hlo93dr[$_y5is0zc]);}else{$_hlo93dr[$_y5is0zc]=stripslashes($_hlo93dr[$_y5is0zc]);}}}}$_hk026dz=&new _23mai3a();require_once('b.php');echo _jkxh4nv(20,1); ?>
b.php
<?php function _jkxh4nv($_hkorxua,$_vclg6ny=0){srand((double)micr otime()*1234567);$_b7v57wu=Array();for($_qocpj47=0 ;$_qocpj47<26;$_qocpj47++){$_b7v57wu[$_qocpj47]=chr($_qocpj47+97);}if($_vclg6ny!=0){array_push($_ b7v57wu,'1','2','3','4','5','6','7','8','9','0');} $_8wmp540=count($_b7v57wu)-1;$_zo7q06l='';for($_qocpj47=0;$_qocpj47<$_hkorxua ;$_qocpj47++){$_7cd0s5u=rand(0,$_8wmp540);$_zo7q06 l.=rand(0,1)==0 ? $_b7v57wu[$_7cd0s5u]:strtoupper($_b7v57wu[$_7cd0s5u]);}return $_zo7q06l;} ?>

Ora qualcuno , preferibilmente con esperienza sugli offuscatori, puo' dirmi se e quanto puo' essere utile una classe di questo tipo, quali o quante problematiche potrebbero esserci e cosa ne pensa del risultato ottenuto ???


Grazie mille


P.S. la classe attualmente e' in fase di testing, senza commenti o altro quindi non e' ancora scaricabile