Quali sono i vantaggi di offuscare il codice di rilascio?


12

L'esempio specifico che ho in mente riguarda il gioco alfa Minecraft, ma questa è una domanda generale che penso meriti qualche conversazione.

Minecraft è scritto in Java e le tracce dello stack di solito sembrano così (esempio reale):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Ovviamente questi non sono i nomi dei pacchetti e dei metodi reali che lo sviluppatore usa quando scrive. Dal momento che si trova in una fase alfa, sembra che lo sviluppatore dovrebbe essere in grado di dare un senso alle sue tracce dello stack, soprattutto se qualcuno è in grado di fornirne una per un bug report. Allo stato attuale, è per lo più insignificante.

Quale vantaggio si potrebbe sperare di ottenere offuscando il suo codice in questo modo che supera gli svantaggi di una più difficile identificazione dei bug?


1
In poche parole, l'offuscamento cambia l'economia del reverse engineering del tuo codice, niente di più.
Mark Booth,

Risposte:


22

Anche noi offuschiamo il nostro codice Java ....

Il vantaggio è che rende più difficile il reverse engineering (se sei preoccupato che qualcuno rubi la tua base di codice e la usi come base per creare un prodotto simile simile, ad esempio, ecc.).

Puoi recuperare la traccia dello stack originale: ci sono strumenti di offuscamento là fuori che creano file di riferimento speciali che puoi usare per eseguire le tracce dello stack offuscato, ed esce con la traccia dello stack di origine originale. Questi sono generati dal processo di offuscamento stesso, quindi non è possibile recuperare la traccia dello stack originale se non si hanno le mani sul file di riferimento utilizzato per offuscare il codice in primo luogo.

Questo non ha davvero svantaggi. :)


3
Interessante, non ho mai saputo che sono venuti con "stack trace un-offuscamento" (non avendo mai usato un offuscatore) ... che idea chiara :-)
Dean Harding

1
L'unico inconveniente che ho mai incontrato è di tanto in tanto un offuscatore (uno .NET in questo caso) lo ha offuscato al punto che il jitter non è nemmeno riuscito a leggerlo (istruzioni illegali). Fallimento massiccio.
vcsjones,

@vcsjones: Quindi non è davvero offuscamento ...
Configuratore

3
  • proteggere la tua proprietà intellettuale

La maggior parte degli offuscatori ottimizza anche il codice , rimuove i metadati inutili o il codice non utilizzato, la compressione, l'eliminazione del codice morto o l'eliminazione dei duplicati.


Se uno deve usare un offuscatore per tali ottimizzazioni, il compilatore in uso deve essere un software davvero pigro.
galleria

@phresnel: Sì, l'obfuscator può fare un ottimo lavoro

@phresnel: incompleto, probabilmente, ma scadente ...

Hai ragione. Lasciami ripubblicare.
galleria

1
Non è che non ti credo; Lo voglio! Ma tutte queste ottimizzazioni sono di solito esercitate anche dai compilatori moderni. Almeno so che gcc li ha tutti. Quindi la mia opinione è: se un offuscatore ti dà davvero un significativo aumento di velocità, allora il compilatore [fornitore] non ha provato abbastanza o non ha ricevuto flag di ottimizzazione adeguati.
galleria
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.