2010-01-14 13 views
16

Io uso Haxe per generare codice PHP. (Questo significa che scrivi il tuo codice nel linguaggio Haxe e ottieni una serie di file php dopo la compilazione.) Oggi un cliente mi ha detto che ha bisogno di una nuova funzionalità su un vecchio progetto realizzato con Haxe. Mi ha anche detto che ha modificato alcune piccole cose sul codice per i suoi bisogni. Ora prima porto le sue modifiche al mio codice Haxe e poi aggiungo la nuova funzione, perché altrimenti le sue modifiche verranno sovrascritte dalla prossima volta che compilerò il progetto.Minify/Obfuscate PHP Code

Per evitare che ciò accada di nuovo, sto cercando un tipo di programma che minimizzi/offuschi il codice PHP. L'obiettivo è rendere il codice illeggibile/non modificabile possibile.
Lo strumento ideale funzionerebbe sotto Linux e potrebbe elaborare intere cartelle e tutto ciò che contiene i file.

Qualcuno ha qualche suggerimento?

risposta

17

Sono d'accordo con il commento, quello che stai facendo è molto subdolo, ma dopo 10 anni in questo biz posso attestare una cosa: metà del codice che ottieni è così contorto che potrebbe anche essere stato minimizzato, e davvero i nomi di funzioni/var sono così spesso completamente arbitrari, ho modificato min js e non era molto più fastidioso di qualche codice non ancora risolto.

Non sono riuscito a trovare alcun programma/script di questo tipo, molto probabilmente perché questo è un po 'contrario allo spirito di PHP e un po' subdolo, mai meno.

Primo: Php non è sensibile allo spazio bianco, quindi il primo passo è quello di rimuovere tutte le nuove righe e spazi bianchi al di fuori della stringa.

Ciò renderebbe difficile il pasticcio con lo stagnino medio, un programmatore intermedio dovrebbe solo trovare e sostituire tutto; {} con $ 1 \ n o qualcosa del genere.

Il prossimo passo sarebbe ottenere get_defined_functions e salvare quell'array (la chiave 'user' nell'array restituito), per poterlo fare è necessario includere tutti i file.

Se si tratta di codice oo, è necessario anche get_defined_classes. Salva quell'array.

In sostanza, è necessario ottenere le variabili, i metodi e le istanze di classe, sarà necessario istanziare la classe e get_object_vars su di esso, e si può curiosare e vedere che è possibile ottenere un sacco di altre informazioni, come le costanti e classe vars ecc.

Quindi si prendono quegli elenchi, li si passa in rassegna, si crea un nome univoco per ciascuna cosa, quindi si preme preg_replace o si va a str_replace in tutti i file.

Assicurarsi di eseguire questa operazione su una copia di prova e vedere quali errori si ottengono.

Anche se, per essere chiari, c'è un posto speciale nell'inferno riservato a persone che nascondono per oscuramento.

Check out: get_defined_functionsget_declared_classes e basta seguire i collegamenti per vedere cosa si può fare.

+0

Se stai cercando istanze specifiche di codice, questo è semplice str = file_get_contents (nomefile) e str = preg_replace ('/ function $ var /', ...) Prendi spunto. Basta guardare queste funzioni su php.net e avrai tutto ciò di cui hai bisogno. –

+1

Se hai bisogno di aiuto con regex per le sostituzioni, usa gskinner's awesome http://www.gskinner.com/RegExr/ –

+1

Stiamo parlando di codice generato automaticamente, questo sembra già abbastanza offuscato. Non spenderei un secondo per modificare questo codice. Incolpare i creatori di un compilatore c per creare binari offuscati? – TheHippo

4

Usiamo Zend Guard per codificare il nostro codice PHP con alcuni clienti, ma come ha detto pappagalli, è necessario essere sicuri si proprietario il codice. Noi codifichiamo solo in determinate situazioni e solo quando è esplicito che conserviamo la proprietà del codice, altrimenti i pappagalli hanno ragione, il cliente ha il diritto di modificarlo.

+1

questo è un po 'eccessivo, sto cercando qualcosa come spogliare gli spazi bianchi e variabili di rinomina. – TheHippo

+0

@ctyshrock: "il client ha il diritto di modificarlo?" Non si tratta di morale, solo di ciò che è permesso. Il cliente ha solo il "diritto" di modificare se la licenza software concordata lo consente. Ci sono licenze software dove è severamente vietato, anche se il codice è fornito in forma sorgente. Se il modello di business consente o vieta la modifica del codice dipende dal modo in cui i proprietari vedono la gestione del prodotto. –

+0

OMG! "il cliente ha il diritto di modificarlo?" @catsby hai davvero torto sul fatto che il cliente NON abbia il diritto di modificarlo, a tutti, in realtà devi imparare la legge sul copyright .. l'autore di tutte le opere mantiene SEMPRE i diritti sul lavoro e non può essere modificato, in Infatti, in diritto, anche se un cliente l'ha acquistato, se non ha firmato un EULA, in teoria è possibile denunciarli come autore anche dopo averlo acquistato. (Dovrebbero andare in tribunale e cercare di convincere la corte a regolare "fair use" qualsiasi cosa esterna che sia ammissibile) non vi è alcuna giustificazione per propagare una menzogna (pericolosa) spesso citata –

4

Sono a conoscenza di Zendguard, Expressionengine lo utilizzava per crittografare il codice di base della versione di prova. Puoi sempre dare un risultato, anche se devi pagare per questo.

Tuttavia, mentre capisco la frustrazione di dover trasferire le sue modifiche, presumo che abbiano acquistato il codice da te? Hanno il diritto di modificarlo. Hai solo il diritto di caricarli extra per portare i loro cambiamenti;) Immagina se smettessi di lavorare per loro, come potrebbero mai assumere qualcun altro per aggiornare il codice?

+0

la potrebbe avermi chiesto, io ho fatto gratuitamente. Oppure avrebbero potuto prendere i file haxe dalla sovversione condivisa ;-) – TheHippo

+0

+1 ma, solo per essere scomodi - sì, hanno acquistato il codice - ma se si consegna solo un codice offuscato, allora è quello che hanno acquistato. A meno che non lo vendiate esplicitamente come piattaforma di sviluppo, non vedo alcun problema. Ma puoi essere sicuro al 100% che se fornisci il codice in chiaro e lo modificano, avrai mal di testa e generalmente non saranno disposti a pagare. – Mawg

+0

Se si consegna un testo in chiaro e una licenza software che dice che non sono autorizzati a giocherellare con esso, non si ha alcun obbligo di risolverlo. In questo caso, la spedizione di codice offuscato aiuta a scoraggiare ciò che dovrebbe essere già spiegato nel contratto di licenza. Se "li vendi" il codice sorgente, allora puoi aspettarti di modificarlo e darlo a terzi senza la tua autorizzazione, per il solito significato di "vendere". –

2

Il nostro PHP Obfuscator fa esattamente il lavoro di eliminazione di commenti, spazi bianchi e identificatori di scrambling.

Funziona su un set completo di file PHP per garantire che i simboli codificati vengano codificati in modo coerente tra questi file, garantendo il corretto funzionamento anche dopo lo scrambling.

MODIFICA 2013: ora crittografa i valori letterali stringa per renderli illeggibili. Funziona sotto Windows e Linux sotto Wine.

0

Ho appena trovato il servizio minify per PHP. Sembra davvero utile. Dicono, che offuscamento sarà disponibile presto. Spero che questo è vero :) http://customhost.com.ua/php-minify/

+0

questo sarebbe l'ideale, ma non spoglia i miei // commenti. Ora sto guardando http://aciddrop.com/php-speedy/ – adudley

+4

3 anni dopo "Prossimamente: variabili offuscanti" –

+0

il collegamento sopra non funziona per me (404) –

24

perché non utilizzare il php buid in funzione php_strip_whitespace()

string php_strip_whitespace (string $filename) 

restituisce il codice sorgente PHP nel nome del file con i commenti PHP e spazi rimossi. Questo può essere utile per determinare la quantità di codice effettivo negli script rispetto alla quantità di commenti. Questo è simile all'utilizzo di php -w dalla riga di comando.

+0

grazie, è stato molto utile. – EmRa228

+1

Ho provato la tua idea https://github.com/basselin/php-minify, ha funzionato alla grande! Grazie –