Esiste un offuscatore di codice per PHP? [chiuso]


212

Qualcuno ha usato un buon offuscatore per PHP? Ne ho provati alcuni ma non funzionano per progetti molto grandi. Non possono gestire variabili incluse in un file e utilizzate in un altro, ad esempio.

O hai altri trucchi per fermare la diffusione del tuo codice?


11
Ne sei sicuro?
Allegro

5
@ StevenA.Lowe: attenzione a prendere in giro PHP. :-)
Marco Demaio,

89
Ancora un'altra domanda di programmazione costruttiva davvero valida in perfetto formato di domande e risposte che viene chiusa come non costruttiva. Peccato per lo straripamento ...
Petr

6
Questo è Stack Overflow. L'unica cosa più prolifica delle domande chiuse che non dovrebbero essere chiuse sono le fiamme degli utenti quando alcuni poveri slob vengono qui e chiedono aiuto.
Mac

2
Se pensi che questo non dovrebbe essere chiuso, allora vota per riaprirlo.
Ira Baxter,

Risposte:


240

Puoi provare PHP protect, che è un offuscatore PHP gratuito per offuscare il tuo codice PHP.
È molto bello, facile da usare e anche gratuito.
EDIT: questo servizio non è più attivo.

Quanto a ciò che altri hanno scritto qui sul non usare l'offuscamento perché può essere rotto, ecc.
Ho solo una cosa per rispondere a loro: non chiudere a chiave la porta di casa perché chiunque può scegliere la tua serratura.
Questo è esattamente il caso, l'offuscamento non ha lo scopo di prevenire il furto del codice al 100%. Deve solo renderlo un'attività che richiede tempo, quindi sarà più economico pagare il programmatore originale. Spero che questo ti aiuti.


105
+1 per aver sottolineato il fatto che l'offuscamento consiste nel renderlo più duro, non impossibile.
Ashkan Kh. Nazary,

3
prendi nota del fatto che crittografare il tuo codice sorgente invece di offuscarlo non rende impossibile nemmeno decifrare, è davvero difficile farlo.
xorinzor,

9
L'ho provato, ma non mi è piaciuto. Cambia solo i nomi delle variabili, non rimuove i commenti.
Pisu,

1
@Schwern, lascia la tua porta aperta, quindi assumi Columbo e un avvocato davvero bravo, per coprirti;)
David Newcomb

2
@ David Newcomb - Chi vuole pagare un avvocato davvero bravo quando puoi semplicemente chiudere a chiave la porta?
Azoundria,

109

Le persone ti offriranno offuscatori, ma nessuna quantità di offuscamento può impedire a qualcuno di ottenere il tuo codice. Nessuna. Se il tuo computer può eseguirlo, o nel caso di film e musica se è in grado di riprodurlo, l'utente può accedervi. Anche la compilazione in codice macchina rende il lavoro un po 'più difficile. Se usi un offuscatore, stai solo prendendo in giro te stesso. Peggio ancora, stai impedendo ai tuoi utenti di correggere bug o apportare modifiche.

Le compagnie musicali e cinematografiche non hanno ancora fatto i conti con questo, spendono ancora milioni per DRM.

In linguaggi interpretati come PHP e Perl è banale. Perl aveva molti offuscatori di codice, quindi ci siamo resi conto che puoi banalmente decompilarli.

perl -MO=Deparse some_program

PHP ha cose come DeZender e Show My Code .

Il mio consiglio? Scrivi una licenza e trova un avvocato. L'unica altra opzione è non dare il codice ed eseguire invece un servizio ospitato.

Vedi anche la voce perlfaq sull'argomento .


220
Sono per lo più d'accordo con te, ma l'OP ha chiesto una raccomandazione sul prodotto, non una lezione sul merito dell'open source.
Eli,

36
Non ha nulla a che fare con Open Source, che consiste nel mescolare il codice, non solo nel vederlo. La realtà è che qualsiasi codice o dato che viene eseguito sulla macchina di un utente è in definitiva trasparente, non importa come lo compili, lo offuschi o lo crittografi, punto e basta. L'OP deve capirlo.
Schwern,

7
@JamShady: l'offuscamento non significa che non puoi correggere bug o apportare modifiche. Se offuschi stupidamente il codice sorgente, butti via l'originale e insisti nel mantenere il risultato offuscato, sì, non sarai in grado di fare nulla. I bravi offuscatori insistono sul fatto che tu mantenga il tuo codice e la mappatura sul risultato oggettivo; puoi eseguire il debug / modificare il codice originale, inviare patch offuscate ai tuoi clienti e persino diagnosticare i suoi problemi utilizzando la mappa per convertire i reclami offuscati in file leggibili. Non ha la mappa, il che lo rende sicuro.
Ira Baxter,

34
Domanda: Come, Risposta: Non dovresti = non utile
cmc

26
@cmc Sono sicuro che molte persone risponderanno direttamente alla domanda, quindi non ci sono perdite nel prendere una virata diversa. La metà del punto di chiedere a un esperto è che sanno quando stai ponendo la domanda sbagliata per risolvere il vero problema. Questa è un'applicazione dei "5 perché". en.wikipedia.org/wiki/5_Whys Il vero problema / domanda è "come posso impedire alle persone di leggere / rubare il mio codice PHP". La risposta è se spedisci il codice che non puoi, ma puoi perdere un sacco di tempo e denaro cercando di ottenere un falso senso di sicurezza. Non è stato più utile di un elenco di offuscatori?
Schwern,

31

Niente sarà perfetto. Se vuoi solo qualcosa per fermare i non programmatori, ecco un piccolo script che ho scritto che puoi usare:

<?php
$infile=$_SERVER['argv'][1];
$outfile=$_SERVER['argv'][2];
if (!$infile || !$outfile) {
    die("Usage: php {$_SERVER['argv'][0]} <input file> <output file>\n");
}
echo "Processing $infile to $outfile\n";
$data="ob_end_clean();?>";
$data.=php_strip_whitespace($infile);
// compress data
$data=gzcompress($data,9);
// encode in base64
$data=base64_encode($data);
// generate output text
$out='<?ob_start();$a=\''.$data.'\';eval(gzuncompress(base64_decode($a)));$v=ob_get_contents();ob_end_clean();?>';
// write output text
file_put_contents($outfile,$out);

19
Eccezionale? Ogni pagina viene fornita con la soluzione completa per ottenere il sorgente: esegui "gzuncompress (base64_decode ($ a))". Sì, questo fermerà i non programmatori. Ma poi il codice sorgente originale fermerà i non programmatori, chi ha bisogno della codifica per questo? L'unica persona che guarderà questo con l'intenzione di decodificare è un programmatore PHP.
Ira Baxter,

2
Il più delle volte i non programmatori provano cercando alcune stringhe nel codice sorgente che vogliono cambiare, sto anche cercando una soluzione tale che impedisca ai non programmatori di cambiare solo il codice sorgente, ad esempio nome dominio, nome database, utenti ecc.
Asad Kamran,

Questa è una risposta molto utile per me. Sono interessato solo a impedire all'utente di aprire facilmente il mio "database.php" nel blocco note e di visualizzare il nome utente e la password del mio database.
TimH - Codidact,

20

Non sono sicuro che tu possa etichettare l'offuscamento di una lingua interpretata come inutile (non riesco ad aggiungere un commento al post di Schwern, quindi ecco una nuova voce).

Penso che sia un po 'miope supporre che tu conosca tutti i possibili scenari in cui qualcuno vorrebbe offuscare il codice e supponi che chiunque sarà effettivamente disposto a fare tutto il necessario per visualizzare quel codice una volta offuscato. Considera il mio scenario attuale:

Lavoro per una società di consulenza che sta sviluppando un sito PHP di grandi dimensioni e abbastanza sofisticato. Il progetto sarà ospitato su un server client che ospita altri siti sviluppati da altre società di consulenza. Tecnicamente qualsiasi codice che scriviamo è di proprietà del cliente, quindi non possiamo concederlo in licenza. Tuttavia, qualsiasi altra società di consulenza (concorrente) con accesso al server può copiare il nostro codice senza prima ottenere l'autorizzazione dal client. Abbiamo quindi un vero motivo di offuscamento: fare lo sforzo necessario affinché un concorrente comprenda il nostro codice più che lo sforzo di creare una copia del nostro lavoro da zero.


16

Vedi il nostro SD Thicket PHP Obfuscator per un offuscatore che funziona perfettamente con set di pagine arbitrariamente grandi. Funziona principalmente rimescolando i nomi degli identificatori. Con applicazioni da modeste a grandi, questo può rendere il codice estremamente difficile da capire, che è l'intero scopo.

Non spreca energia sugli schemi di "eval (decodifica ( codice di programma codificato ))", che fanno molti "offuscatori" di PHP [questi sono "encoder", non "obfuscator"], perché qualsiasi zolla può trovare quella chiamata ed esegue lui stesso la decodifica eval e ottiene il codice decodificato.

Utilizza un parser preciso del linguaggio per elaborare il PHP; ti dirà se il tuo programma non è sintatticamente valido. Ancora più importante, conosce esattamente l'intera lingua; non andrà perso o confuso e non romperà il tuo codice (a parte ciò che succede se offuschi "in modo errato", ad esempio, non riesci a identificare correttamente l'API pubblica del codice).

Sì, offusca gli identificatori in modo identico tra le pagine; se non lo facesse, il risultato non funzionerebbe.


1
Flagger: potresti avere la cortesia di dire perché hai segnalato questo. Risponde direttamente alla domanda del PO, compreso il suo problema specifico.
Ira Baxter,

Da quello che posso dire questo è un EXE che funziona solo con Windows? Almeno l'eval è un file .exe ...
Craig Jacobs,

Il file eval è un programma di installazione basato su .exe. La verità complicata è che il prodotto installato di solito viene eseguito da uno script .cmd perché sotto c'è un linguaggio di programmazione parallelo, ma non lo vedrai mai. È stato progettato principalmente come prodotto Windows; tuttavia, se lo installi su Linux con Wine, verrà eseguito con script .sh che vengono installati con esso come se fosse uno strumento Linux nativo. Se si utilizza la parte della GUI (facoltativa, la maggior parte delle persone desidera eseguirla come script in un processo di generazione della produzione), utilizza Java nativo su Windows e Java nativo su Linux.
Ira Baxter,

È vero che Thicket richiede addon allo spazio di hosting? Se sì, come viene installato su un hosting condiviso?
Stephen Adelakun,

@StephenAdelakun: Thicket non richiede modifiche al server. Scaricalo e controlla la documentazione.
Ira Baxter,

14

Il migliore che ho visto è Zend Guard .


2
SD PHP Obfuscator è altrettanto buono e costa circa 1/5.
Ira Baxter,

1
@SalmanPK E il motivo dovrebbe essere ovvio?
Il Pellmeister

@SalmanPK Richiede un componente aggiuntivo per lo spazio di web hosting. Probabilmente anche Zend Guard lo fa. Non sono sicuro di quale sia il più mainstream. Comunque, il problema è che riduce il tuo potenziale pubblico.
James P.

1
PHP Obfuscator di SD converte tutto in minuscolo. Sarà un problema se stai usando un framework.
Amil Waduwawara,

1
@JamesPoulson: Non è chiaro se la tua osservazione è rivolta all'offuscatore SD PHP. Per essere chiari, non richiede alcun addon allo spazio di web hosting.
Ira Baxter,

10

Prova questo: http://www.pipsomania.com/best_php_obfuscator.do

Di recente l'ho scritto in Java per offuscare i miei progetti PHP, perché non ho trovato alcun buono e compatibile pronto scritto in rete, ho deciso di metterlo online come saas, quindi tutti lo usano gratuitamente. Non cambia i nomi delle variabili tra diversi script per la massima compatibilità, ma li sta offuscando molto bene, con logica casuale, anche ogni istruzione. Stringhe ... tutto. Credo che sia molto meglio di questo buggy codeeclipse, che è comunque scritto in PHP e molto lento :)


Sembra buono ... ma è sicuro? Voglio dire, altri possono decifrarlo facilmente?
Shasi Kanth,

Posso assicurarvi che in questo momento NESSUNO può de-offuscare il codice offuscato da questo offuscatore.
PatlaDJ,

3
[citazione necessaria] - la crittografia homebrew è sicurezza attraverso l'oscurità, che non è affatto sicurezza.
Chris Baker,

8
"Posso assicurarti che in questo momento NESSUNO può de-offuscare il codice" Anche PHP? Se PHP può farlo, anche qualcun altro. Guardando come codice di esempio sul tuo sito, da qualche parte avrai una dichiarazione di valutazione che scarica il codice, lo trasforma in un'eco e il tuo codice verrà visualizzato.

3
ATTENZIONE: questo metodo può essere banalmente decodificato in base ai nomi delle variabili originali, vedere: lombokcyber.com/en/detools/decode-pipsomania
Zane Hooper

3

Thicket ™ Obfuscator per PHP

Lo strumento PHP Obfuscator codifica il codice sorgente PHP per renderlo molto difficile da capire o decodificare (esempio). Ciò fornisce una protezione significativa per la proprietà intellettuale del codice sorgente che deve essere ospitata su un sito Web o spedita a un cliente. È un membro della famiglia di Obfuscator del codice sorgente.


TrueBug.com non è raggiungibile. So che sto postando commenti dopo più di 3 anni, ma puoi aiutarmi con il nuovo url di trueBug, se presente?
Stephen Adelakun,

@StephenAdelakun Hai bisogno solo di TrueBug? Utilizzare questo: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman,

Siamo spiacenti, il collegamento non funziona. Oppure mi sfugge qualcosa?
Stephen Adelakun,

@StephenAdelakun Ho appena controllato ora, funziona.
Praveen Kumar Purushothaman,

1
@StephenAdelakun Perché solo quello? :(Questo è comunque un software morto. Ce ne sono di migliori e fantastici adesso, giusto?
Praveen Kumar Purushothaman,

2

L'uso di SourceGuardian è buono in quanto viene fornito con una GUI interessante e facile da usare.

Ma attenzione:

Presta attenzione alle sue condizioni di licenza piuttosto divertenti.

  • È consentito eseguire solo 1 per macchina, pertanto questo è accettabile
  • Se vuoi eseguire l'interfaccia della riga di comando su un'altra macchina, dì il tuo server web, AVRETE BISOGNO DI UN'ALTRA LICENZA (Sì, è divertente e posso sentire anche voi ridere).

2
Mi sembra normale! 2 macchine = 2 licenze! Di solito ciò che la gente fa è codificare tutto su un computer, quindi caricarlo su un altro (s).
David Newcomb,

@davidnewcomb non sembra capire il punto. Di solito crittografate il codice sulla vostra macchina di sviluppo prima di spedirlo. Nel caso in cui sia necessario farlo online, l'interfaccia della riga di comando richiede anche una licenza aggiuntiva, che ovviamente non è corretta. Si tende a mettere l'interfaccia della riga di comando sul server Web e non sulla propria casella locale.
Herr

2
TL; DR buona protezione, termini di licenza stupidi.
Herr

1
Dovrebbe essere 1 licenza per utente, non per macchina.
beppe9000,

@ beppe9000 Totalmente d'accordo!
Herr

-16

L'offuscamento sta solo aggiungendo un altro livello di potenziali bug e vulnerabilità della sicurezza al tuo programma. Per favore, non farlo.

Il tipo di persone che scrivono software di offuscamento di solito sembra comunque molto abbozzato e non qualificato.

Se il tuo codice è "fantastico", i cracker faranno di tutto per diffonderlo, indipendentemente dal fatto che sia offuscato o meno. Se nessuno conosce / si preoccupa per il tuo codice, probabilmente non lo faranno.


7
Nonskilled? Sulla base di quali prove? Li scrivo. Controlla la mia biografia prima di iniziare a fare generalizzazioni generali. semanticdesigns.com/Company/People/idbaxter
Ira Baxter,

5
@Ira: la mia affermazione è ancora valida. La maggior parte del codice offuscato può essere infranta in pochi minuti. Intendevo specificamente, la maggior parte delle persone che lo fanno non sono qualificate, non tutte . La prima cosa che mi è venuta in mente è stata Ioncube, e sicuramente abbastanza, aveva pubblicato una vulnerabilità: osvdb.org/show/osvdb/41708 . Poi di nuovo potresti probabilmente incolpare in parte ciò sugli oscuri requisiti di sicurezza di PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

3
L'offuscamento, se fatto con uno strumento affidabile, non cambia nulla sull'affidabilità di un programma. La compilazione binaria è una sorta di estrema offuscamento, eppure immagino che tu sia sicuro che il motore PHP di Zend sia affidabile. (L'offuscamento o la compilazione eseguiti con strumenti non validi non devono essere conteggiati).
Ira Baxter,

1
chiunque abbia un mezzo cervello sa che php sta lottando (leggi "inesistente") nel mercato del software aziendale reale perché non è offuscato su e asp.net lo è. Sono così stufo degli evangelisti dalla mentalità debole che dicono qualcos'altro. (e sì, ecco cos'è l'ignoranza intenzionale) L'open source è stato fuori troppo a lungo ed è stato provato e trovato desiderando troppo spesso che ci sia qualche conclusione diversa da questa: hobby? Open Source. Lavoro? Encrypt. Solo gli sciocchi / gli idioti / le persone che vivono in una bolla / hanno un ricco pater potranno mai e poi mai e poi mai pensare diversamente.
Coniuga il

2
Questo commento è quasi incomprensibile per me, ma sembra implicare che non abbia senso vendere software o software open source basati su software open source. Nel caso in cui non l'avessi notato, Java è "enterprise", open source e altrettanto efficace di quella cosa .NET. la mia azienda guadagna milioni di dollari e non abbiamo mai dovuto usare l'offuscamento. Chiediti questo: a che serve vendere software se non riesci a supportarlo / migliorarlo (ad esempio: hai appena decifrato il software di qualcun altro e rivenduto)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.