Come posso crittografare o rimuovere la leggibilità del codice sorgente prima di pubblicarlo?

1

Sto lavorando a un progetto collaborativo, per il quale devo inviare il codice sorgente, che sarà usato / incorporato nel repository principale per la ri-compilazione. C'è un modo, posso crittografare il codice sorgente o applicare qualche altra tecnica in modo da poter rimuovere completamente la leggibilità del mio codice, ma comunque compila bene dopo aver applicato la decrittografia o l'anti-pattern.

Nature of my Project è un'applicazione distribuita a livello aziendale, con diversi client scritti per cloud, desktop, web, mobile ecc.

Quindi, esiste una tecnica / modello di design per scopi generali o un concetto, applicando il quale posso pubblicare la mia fonte e comunque non esponerla.

    
posta Qasim 18.12.2014 - 13:16
fonte

1 risposta

10

Questo è chiamato offuscamento.

Ciò che fa è che esegue una serie di operazioni che non influiscono sull'esecuzione del codice sorgente, ma rendono più difficile la lettura di un essere umano.

Ad esempio, qui ci sono alcune tecniche di offuscamento comunemente usate:

  • Rimuovi spazi bianchi.

  • Rimuovi commenti.

  • Sostituisci i nomi significativi di variabili e membri con nomi come a , b , c .

Con solo queste tre tecniche di base, questo codice:

public string GenerateFileName()
{
    var basePath = this.FindBasePath();
    do
    {
        var counter = this.CounterExists ? this.GetCounter() : 0;
        var name = this.GenerateName(counter);

        // If the file limit was exceeded, it indicates that something went wrong.
        // Possible causes include two services running side by side on the same machine
        // or two machines running the service using a share. Remember that the service
        // should be bound to a directory which is not used by any other application.
        if (counter > MaximumAllowedFiles)
        {
            throw new StorageThresholdException();
        }
    }
    while (File.Exists(Path.Combine(basePath, name)));
}

diventa:

public string c(){var a=this.h();do{var b=this.k?this.b():0;var c=this.d(b);if(b>i){throw
new af();}}while(File.Exists(Path.Combine(a,c)));}

Le tecniche di offuscamento utilizzate meno frequentemente includono ma non sono limitate a:

  • Crittografia delle stringhe,

  • Inlining (vale a dire spostando il corpo di un metodo nel metodo che stava chiamando il primo),

  • Offuscamento del flusso di controllo ,

  • Codifica del codice sorgente (l'efficacia di questa tecnica è molto contestata, poiché se la macchina che esegue l'applicazione può decifrare il codice sorgente per eseguirlo, anche l'utente di questa macchina può farlo).

Ovviamente, non dovresti fare da solo l'offuscamento, ma piuttosto cercare uno strumento che lo faccia per la lingua che preferisci.

Si noti che alcuni strumenti non hanno l'offuscamento come obiettivo principale, ma possono ancora essere utilizzati per questo. Google Closure Compiler, ad esempio, ha lo scopo di (1) eseguire il controllo statico del codice e (2) ridurre la dimensione dei file JavaScript, ma ha un effetto collaterale di rendere il codice sorgente del tutto illeggibile.

    
risposta data 18.12.2014 - 13:30
fonte

Leggi altre domande sui tag