Newsgroup: it.comp.www.php
Titolo: [ encoder php ] non ho capito una cosa

Ciao a tutti,
Ho spulciato google, i suoi risultati e il news prima di postare qui.
Sto cercando informazioni sull'operazione di "mascheramento" del codice.
Leggendo penso di aver capito che si sono due strade:
- mascherare parzialemente il codice (offuscandolo)
- compilandolo (vedi zend)
nel secondo caso non ci sarebbero problemi se il php sul server dove deve
giare il codice ha l'ottimizzatore di zend che svolge la decodifica.
ma nel primo? spesso riportano soluzioni che comportano l'inserimento di un
decoder apposta.
Quel che vorrei sapere io è:
esiste un encoder che non abbia la cifrona di zend e che non richieda roba
aggiuntiva sul server?
se proprio alla frutta... se non c'è altro... 
come fareste voi il mascheramento del codice in modo "artigianale", in modo
da non poter esser letto dal primo programmatore php della domenica che
capita? non importa se non è super protetto, mi basterebbe una forma un pò
complessa e che non mostri subito la chiave per decodificare i dati.
grazie
-- 
 ~ 
acer...@codeweb.it
 ~ 
http://www.codeweb.it

 roba aggiuntiva sul server?
Non sara' mai un encoder sicuro.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
se mi fidassi cosi' poco dei miei collaboratori, valuterei per lasciare il
mio ambiente di lavoro..
se devi vendere i tuoi script al limite proteggi il tuo codice con una
licenza, ispireresti molta piu' fiducia non compilandolo e o non
mascherandone il codice..
perche' hai questa necessita'?
-- 
www.iuz-lab.info

 come fareste voi il mascheramento del codice in modo "artigianale" [...]
Qualche tempo fa mi sono posto lo stesso problema, piu' per sfizio che
per altro, e ho provato tre strade:
1. Programmi gia' fatti, escludendo i prodotti Zend. Nessuno che
funzionasse decentemente. Per lo piu' non girano o neppure riesco ad
installarli. Saro' imbranato io, ma forse le prossime due strade sono piu'
praticabili. Vediamo:
2. Banale offuscatore dei nomi di variabile e funzione. Se ti accontenti
di una cosa artigianale, eccola qua. Ho fatto uno scriptino Bash che
a colpi di grep e di sed fa esattamente quello che volevo. Ecco uno
spezzone di programma offuscato in questo modo:
function f_7() { global $v_3, $v_7; $v_1 = f_3(); if( $v_1->v_12 > 0 ){
$v_5 = fopen($v_3[$v_1->v_12][0], "r"); $v_1->v_c = fread($v_5, 100000);
fclose($v_5); } f_2($v_1); Piede(); } function f_1() { $v_1 = f_3();
$v_1->v_12 = 0; $v_1->v_c = ""; f_2($v_1); Piede(); } function f_8($v_8)
{ $v_1 = f_3(); switch( $v_8 ){ case 'n': $v_1->v_11 -= 5; break; case
's': $v_1->v_11 += 5; break; case 'w': $v_1->v_a -= 10; break; case
'e': $v_1->v_a += 10; break; } $v_1->v_a = min(max($v_1->v_a, 20),
150); $v_1->v_11 = min(max($v_1->v_11, 5), 100); f_2($v_1); Piede(); }
function f_5() { $v_1 = f_3(); f_2($v_1); f_4($v_1); Piede(); }
Nomi di variabile, funzione e campi di oggetti sono offuscati. Alcune
funzioni sono di sistema (come fopen) e non sono state offuscate per
ovvie ragioni. Altre funzioni (come Piede) sono in moduli importati,
e quindi non sono state offuscate; per offuscare anche queste dovrei
applicarci l'offuscatore.
I limiti di questa soluzione sono evidenti: un programmatore copione
abbastanza determinato farebbe presto a risistemare il codice in una
forma comprensibile. Ma ne varrebbe la pena? Inoltre tenere conto che
esistono disassemblatori di codice JVM (Java) e IL (.Net) che producono
in modo automatico un sorgente quasi uguale a quello originario, per
cui la strada dell'offuscatore, magari rivisto e perfezionato, non e'
cosi' lontana dalle pratiche correnti.
C'e' poi un fatto interessante di cui tenere conto: i programmi cosi'
triturati sono piu' compatti e leggermente piu' veloci. Ma e' un casino
debuggarli... Il debugging va fatto sulla versione "in chiaro".
Lo scriptino si trova in 
www.icosaedro.it/php/obfuscator-bash.html
3. Dallo studio della sintassi del PHP mi e' nata la voglia di fare un
parser serio del linguaggio, e non un banale analizzatore di stringhe. La
prima applicazione di questo parser e' stata un validatore di codice
(phplint) ma conto nel prossimo futuro di ricavarne anche un offuscatore
piu' rifinito.
4. Futuristiche soluzioni basate su di un interprete PVM (PHP Virtual
Machine), un interprete in PHP di codice virtuale PHP che non richiede
alcuna installazione o configurazione lato server.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it