2013-01-02 12 views
5

Due domande di offuscamento correlati:F # MSIL offuscamento

1) C'è qualche strumento che può smontare F # torna alla sua forma sorgente, o qualcosa di simile ad esso, dalla forma bersaglio MSIL? Questo non è un tentativo di sicurezza attraverso l'oscurità, ma voglio proteggere qualche codice sorgente dal "furto".

2) Ho guardato brevemente qualche output del compilatore F # e in generale sembra piuttosto incomprensibile rispetto a quello che si ottiene se si disassembla il codice compilato C#, presumibilmente perché C# è più vicino alla rappresentazione intermedia MSIL. L'unico codice in parte deformato che ho visto dal compilatore C# è iteratori (e presumibilmente asincrona di C# 5.0).

Finora la mia impressione è che il codice compilato F # sia ragionevolmente "offuscato" ma è vero? (Mi rendo conto che questa è una domanda un po 'soggettiva.)

+4

Quanto sono bravi i tuoi avversari? Qualsiasi analista di malware competente può invertire il codice da un dump della memoria, non importa se IL. Da chi stai "proteggendo" la tua fonte? –

+0

Potenziale concorrente. Lo trovo improbabile ma meglio al sicuro che dispiaciuto. Semplicemente non voglio che il codice sia facilmente de-offuscabile con gli strumenti giusti. Dovrebbe essere abbastanza difficile che sia più facile scrivere il codice da solo. Non penso che gli analisti di malware siano nell'intervallo di destinazione. Più simile a qualcuno con una comprensione di livello intermedio di F #. :-) –

+2

Non direi che è offuscato. È appena tradotto Tutto lo zuccheraggio F # è annullato. Inoltre, se decompilalo, è abbastanza ovvio che provenga da F #, e qualsiasi persona con esperienza F #/C# semi-esperta può ri-sintetizzare il F # dalla versione decompilata. Ci sono schemi che si verificano e tutto quello che devi fare è creare alcuni scenari di test per vedere cosa fa il decompilatore e puoi vedere come sono state risolte le cose. – devshorts

risposta

8
  1. Non ho mai sentito nulla di simile; tuttavia, penso che sia molto probabile che uno strumento simile apparirà nel prossimo futuro.
  2. Gli assembly prodotti dal compilatore F # (ad esempio, MSIL e metadati correlati) non vengono offuscati in alcun modo. Tuttavia, parte del codice che produce è molto diverso dal codice prodotto dai compilatori C# o VB.NET, quindi non sarà facile da decodificare (semplicemente perché gli strumenti per farlo non sono disponibili). Ovviamente, come ha affermato @Craig Stuntz, questo non offre una protezione sufficiente contro un aggressore esperto e motivato.

Se sei veramente paranoico, potresti considerare di utilizzare uno strumento di offuscamento sui tuoi assembly compilati prima di spedirli. Sto usando {SmartAssembly} con F # dalla fine del 2010, quindi so che si lavora con F #; se vai con un altro strumento, assicurati di testarlo su alcuni complessi F # ragionevolmente complicati prima di acquistarlo - al momento che stavo cercando un obfuscator, molti di loro non funzionavano correttamente (o del tutto) con gli assembly F #.

ho scritto alcune note un po 'indietro su offuscando F # assemblee, se volete saperne di più: Any experience using .NET obfuscators on F# assemblies?

1

F # è parte del linguaggio .NET quindi può essere decompilato. Puoi dare un'occhiata a RedGate's Reflector se vuoi spendere soldi o dnSpy di 0xd4d (e sì, è lo stesso sviluppatore del deobfuscator De4Dot). Il codice decompilato è davvero vicino al codice codificato, la logica è sempre la stessa ed è possibile copiare/incollare il codice sorgente.

Se si desidera proteggere un'applicazione F # è possibile considerare l'utilizzo di un obfuscator, & attualmente sono quasi tutti gestiti dal De4Dot quindi è difficile scegliere con saggezza, anche se .NETGuard è veramente forte, in grado di gestire le applicazioni F #, può produrre un output nativo & ha una forte protezione costante e De4Dot non può gestirlo.