Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [PHP5] Classe per offuscare il codice

    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
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    ao' ...



    Traduzione: up
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Può essere utilissima, visto che a quanto pare oltre ad offuscare rende molto più leggeri gli script (in termini di kbytes, s'intende). Sto proprio cercando qualcosa del genere, ma attualmente trovo solo generatori di bytecode che comunque hanno bisogno di modifiche al server.

    Se qualcuno deve consegnare dei sorgenti e non vuole che siano leggibili/modificabili, nel comunissimo caso in cui non si abbia accesso al server, questa è secondo me la soluzione migliore...

  4. #4
    non ho capito come funziona

    qualcuno gentilmente me lo spiega in parole semplici?

    Grazie
    Ciao Paolo

    :master:

  5. #5
    scaricati il mio CMS e lanciala su

    se funziona ... vorrà dire che è OK

    ---

    c'è un problema serio, ne avevamo parlato tempo fa con gianko della cosa ... purtroppo cambiare i nomi a tutte le variabili, funzioni, classi ... non è cosi semplice ... pensa ai file inclusi dinamicamente :\

    è un dilemma

    per poter fare tutto senza far scoppiare nulla ... si dovrebbe eseguire il lavoro in queste fasi:
    - elenco i file da offuscare
    - catalogo variabili, funzioni e classi usate
    - genero i nuovi dati per ognuna di queste e le sostituisco
    - scrivo i nuovi file offuscati

    questo per evitare che hai una funzione del tipo xdebug_ciccio, presente all'interno dell'estensione xdebug, che diventa qualche cosa che non c'ha nulla a che fare

    non so se mi sono spiegato

    PS: non so se lo fai, ma non andarci d'espressione regolari ... con php5 dovresti poter usare i token interni direttamente, in questo modo cataloghi tutto subito, altrimenti ti devi fare un interprete della sintassi

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #6
    PS: non so se lo fai, ma non andarci d'espressione regolari ... con php5 dovresti poter usare i token interni direttamente, in questo modo cataloghi tutto subito, altrimenti ti devi fare un interprete della sintassi
    premesso che so solo le basi del php,

    ma non ho capito come faccio ad ottenere lo stesso effetto senza utilizzare espressioni regolari e sosituzioni ....
    Ciao Paolo

    :master:

  7. #7
    Utente di HTML.it L'avatar di JHammer
    Registrato dal
    Sep 2004
    Messaggi
    754
    L'idea è simpatica e francamente potrebbe essere davvero utile...i consigli di Daniele azzeccati...visto che il php ha molte funzioni di analisi dei nomi esistenti si potrebbe pensare a soluzioni che non necessariamente analizzino la struttura del linguaggio stesso(cosa poco banale...beh almeno per me)

    L'unica cosa a cui prestare attenzione è evitare che un nome collida con un altro...cosa evitabile usando opportune tabelle di hash o una sorta di project workspace (nome altisonante per indicare una lista di file da processare insieme )
    Eventualmente si potrebbero usare direttamente le indicazioni di include del codice?

    Costruendo una tabella di hash sarebbe dunque possibile generare nomi di variabili i più brevi possibile sia per risparmiare un pò di spazio sia per rendere ancora più intricata l'analisi...

  8. #8
    utilizzando il sistema che ho proposto si evitano non solo nomi ripetuti, ma si evita anche la possibilità di avere strutture che includono dinamicamente file di avere problemi

    un bel file XML che costruisce la definizione del progetto ... risparmierebbe non poco lavoro

    e da li, usando il tokenizer di php5, o un parser proprio, si ricostruisce ciò che si deve cambiare tramite apposite liste

    inoltre, avere un proprio parser, che fa l'analisi della sintassi, vuol dire avere la minima base per costruire un encoder di bytecode ... infatti nessuno vieta che invece di scrivere il testo normale si costruisca una versione codificata del file php ... utilizzando una struttura fissa simile ad un database ... solo che in php i tempi di esecuzione sarebberò abbastanza alti ... e non converrebbe però sarebeb figo comunque ... perché probabilmente lavorandoci su si può integrare un interprete JIT, che tramite una cache, può ottimizzare, nn di poco, le operazioni da eseguire

    ---

    @Dottor D:
    non ci sono cose già pronte per fare questo tipo di cose ... a parte quello di antrea, perché ci sono seri problemi tecnici ... ma a parte questo puoi usare un encoder, come ad esempio eaccelerator, che è gratuito, ma hai bisogno di eccelerator installato sul server
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    c'è SourceGuardian che fa qualcosa del genere, anzi, a dire il vero genera roba molto più incomprensibile, tipo
    EFPfpjQyPIm9zmbAv5
    hNSipwHCbFdPAstZH3
    2wFHeyhi675NgxmUYz
    4TG1u-5AJyEi

    credo faccia un encode64 o qualcosa del genere, non ho sbirciato meglio, comunque
    - non è gratis
    - non so se e di quanto appesantisca l'esecuzione, ma secondo me proprio bene non gli fa.

  10. #10
    Ah, naturalmente per SourceGuardian esiste il tool di "reverse engineering"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.