2010-03-16 16 views

risposta

1

No. L'offuscamento sostituisce semplicemente il codice con nome sensato con quello cancellabile. In alcuni casi (ad esempio quando si utilizza ProGuard, il nostro codice può anche essere "ottimizzato", rimuovendo tutti i blocchi di codice inutili (come if(false) e sosia di dichiarazioni).

EDIT (a chiarire le idee Magesh)

Quando si utilizza un obfuscator (e NON offuscando a mano, che non è una buona idea), caricherà le classi e incorpora alcuni metodi, o blocchi di codice (come il precedente se) per semplificare il codice per i blocchi grandi ottenuti di codice. Di conseguenza, ci sono meno chiamate al metodo, che richiedono un minore utilizzo dello stack e quindi il fissaggio dell'applicazione.

L'altra cosa è un di solito lo fa per rinominare tutte le variabili da mySmartVariable a a$a$a, rendendo impossibile decompilare (poiché un decompilatore java considera $ come il simbolo utilizzato per identificare le classi interne e anonime, e non le variabili).

+0

ma aggiungere metodi vuoti potrebbe rallentarlo? –

+1

@Magesh Rimuove, non aggiunge blocchi di codice inutili. –

+1

@James, non sempre, vedere la mia risposta. Alcuni software aggiungono flussi di controllo privi di significato, quindi il codice è molto più difficile da leggere, ad es. flusso di offuscamento. Ciò ha un impatto sulle prestazioni, anche se piccolo. – Razzie

6

Sicuramente sì: tranne nel caso più semplice in cui vengono codificati solo i nomi degli identificatori, è solo questione di prestazioni. Maggiori dettagli, ad esempio here, informazioni generali sulle tecniche di offuscamento sono disponibili nell'articolo Obfuscated code di Wikipedia.

0

Se si aggiunge codice ridondante che non viene mai attraversato, no. Se si aggiunge la logica che deve essere attraversata nell'esecuzione normale del codice, allora si influirà sulle prestazioni. Quanto dipende da quale struttura illogica tu abbia tentato di aggiungere per confondere sarebbero pirati del software.

0

A volte sì. In Java ME (la "versione per telefoni cellulari" di Java), l'offuscamento funziona sul codice byte compilato e (tra le altre cose) sostituisce i nomi con quelli brevi generati automaticamente. Questo rende il codice byte più breve, il che rende almeno più veloce il download dell'applicazione sulla rete.

6

In generale, l'offuscamento mediante la ridenominazione di variabili, metodi e nomi di classe a nomi più privi di significato non influisce sulle prestazioni. Alcuni fornitori di software di offuscamento affermano addirittura che, oltre all'offuscamento, c'è anche un aumento delle prestazioni fino al 30%. Sebbene non abbia mai provato queste affermazioni, non le ho mai viste provate, e quindi le trovo difficili da credere.

Tuttavia, tenere presente che alcuni software consentono anche l'offuscamento del flusso: aggiungendo loop di controllo privi di significato alle istruzioni in modo che il codice sia più difficile da seguire. Il ha un effetto negativo sulle prestazioni, anche se piccolo.

+0

Punto interessante (davvero, nessuna battuta qui), Razzie. Mi chiedo quale sia l'interesse dal momento che, una volta coinvolta l'offuscamento, consideri il tuo codice in mani ostili che può utilizzare strumenti di analisi del codice per rimuovere metodi vuoti e metodi 1-chiamati inline ... – Riduidel

+4

I buoni offuscatori possono produrre codice totalmente illeggibile, usando goto e altri rifiuti, con conseguente codice molto difficile da decompilare (bene). Questo viene fornito con una penalità di prestazioni però. Dai un'occhiata a http://www.excelsior-usa.com/articles/java-obfuscators.html#performance, letture interessanti. – Razzie

Problemi correlati