On Tue, Apr 08, 2008 at 11:29:01PM +0200, gollum1 wrote: > Non funziona con entrambi i pezzi di codice, non mi ? molto chiaro il codice > che hai fatto... vediamo se sono riuscito a capirlo... Uhmm da me funziona, e tra le altre cose si evince dai nomi delle funzioni presenti che si tratta di un footer.php si un wordpress :) Detto questo: > praticamente togli le parentesi per il codice php <? ?> e poi il sostituisci > eval con print_r > > non riesco a capire perch? ora togli ancora le parentesi del codice php... non > ci sono pi?, visto che quello che rimane? il codice criptato... Perche' in pratica quell'offuscazione altro non e' che: prendo un codice, lo trasformo gzippo, lo trasformo in base64, ne faccio un rot13, prendo cio' ch e' uscito e ripeto tutta l'operazione da capo... e cosi' via per 42 volte. Quindi io non faccio altro che fare un ciclo con l'operazione inversa, trasformo l'eval in print_r() pulendo eventuali <? ?> che romperebbero poi, faccio un ob_start per far si che eval() della mia stringa trasformata con la print_r possa essere catturata in una stringa, controllo se pulendo ulteriormente <? e simili inizia con eval, se si ripeto l'operazione e cosi' via fino a quando non e' piu iniziante con eval. A quel punto so di avere il codice "vero" e lo printo. > ob_start() quindi se non ho capito male fai eseguire quello che ? rimasto del > codice, lo catturi in un buffer e lo riassegni a $file, quindi ripulisci il > buffer, quindi fai ripetere il ciclo fino a che trova un eval... quando > finisce un eval quello che rimane dovrebbe essere il codice in chiaro... > > evidentemente si ferma all'ultimo ciclo, perch? in uscita ho ancora il codice > offuscato... Be l'ho scritto grezzamente in due secondi, ovviamente si puo' far di meglio, comunque se semplicemente pigli anche a mano, cambi eval con print_r e redirigi su un file, avrai ancora codice offuscato, ripeti il cambio di eval con print_r e salvi su un terzo file.. e cosi' via per 42 volte, alla fine avrai il codice in chiaro. > rimango dell'idea che comunque sia un sistema abbastanza stupido di offuscare > del codice, tanto si riesce a decriptarlo comunque, ma in compenso, i server > web che devono ad ogni richiesta di una pagina fare tutto questo lavoro, non > si troveranno un po' sovracarichi? (naturalmente per un sito che abbia un > gran volume di collegamenti) Assolutamente corretto. Offuscare il codice in quel modo e' semi-inutile, serve solo a fermare persone che di php davvero non conoscono NULLA (ok, non sono poche), ma chi ha un minimo di esperienza o comunque basi di programmazione anche scarse e' in grado di ricavarne tranquillamente il sorgente, al costo di far fare la bellezza di 42 eval e trasformazioni varie che ovviamente appesantiscono molto il tutto. Insomma, e' inutile e dannoso. Esistono poi altri metodi migliori, molti proprietari e anche qualcuno open source come l'estensione bcompiler che sta in pear, che fondamentalmente si basano sul byte-compilare il codice php con un'operazione one-way only. In quel modo risalire al codice sorgente *preciso* e' impossibile, anche queste operazioni sono comunque reversabili lavorando in maniera piu' "interna" a php, ma almeno garantiscono un livello di sicurezza piu' elevato ( per quanto lo si possa elevare non e' comunque assoluto ) ad un costo computazionale decisamente inferiore. comunque: dedalo:/home/nextime/MAIL/allegati> cat a.php #!/usr/bin/php5 <? $fd = fopen("footer.php", "r"); $file = fread($fd, filesize("footer.php")); fclose($fd); $done=FALSE; $ciclo=1; while(!$done) { $fclean = str_replace("?><?", "", $file); $fclean = str_replace("<?", "", $fclean); $fclean = str_replace(" ","", $fclean); if(substr($fclean, 0, 4) == 'eval') { $fclean=str_replace("eval(", "print_r(", $file); $fclean = str_replace("?><?", "", $fclean); $fclean = str_replace("<?", "", $fclean); $fclean = str_replace("?>", "", $fclean); ob_start(); eval($fclean); $file = ob_get_contents(); ob_end_clean(); } else { print_r($file); $done=TRUE; } $ciclo++; } ?> dedalo:/home/nextime/MAIL/allegati> ./a.php ?> <!-- Sidebar --> <div class="sidebar sidebar-right"> <h3>Categories</h3> <ul> <?php wp_list_categories('title_li='); ?> </ul> <h3>Blogroll</h3> <ul> <?php wp_list_bookmarks('categorize=0&title_li='); ?> </ul> <?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(2) ) : ?> <?php endif; ?> </div> <!-- Sidebar --> <div class="clear"></div> </div></div></div> <!-- /Main --> <!-- Footer --> <div id="footer"> <!-- Copyright --> <div id="copyright"> Designed By: <a href="http://www.imrealestateagent.com">Real Estate Agents</a><br /><a href="http://www.sinksusa.com">Undermount Stainless Steel Kitchen Sinks</a> : <a href="http://www.amlaspain.com/p-charleston-real-estate.html">Mount Pleasant SC Real estate</a> : <a href="http://www.propertyflippinginfo.com">House Flipping</a> </div> <!-- /Copyright --> </div> <!-- Footer --> </div> <!-- /Page --> <?php wp_footer(); ?> </body> </html><? dedalo:/home/nextime/MAIL/allegati> -- Franco (nextime) Lanza Busto Arsizio - Italy SIP://casa@casa.nexlab.it NO TCPA: http://www.no1984.org you can download my public key at: http://danex.nexlab.it/nextime.asc || Key Servers Key ID = D6132D50 Key fingerprint = 66ED 5211 9D59 DA53 1DF7 4189 DFED F580 D613 2D50 ----------------------------------- echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D212153574F444E49572045535520454D20454B414D204F54204847554F4E452059415020544F4E4E4143205345544147204C4C4942snlbxq | dc -----------------------------------
Attachment:
signature.asc
Description: PGP signature