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 randomString( 20, 1 ); // 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) == 0 ? $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