2011-10-06 15 views
10

Ho un file binario che voglio offuscare e distribuire agli utenti. Supponiamo che io usi una versione non modificata del mio binario per serializzare i dati usando il formattatore binario .NET. Potremmo quindi desiralizzare i dati con il binario offuscato?Serializzazione e offuscamento in .NET

Voglio distribuire binari offuscati insieme a dati serializzati. Se la risposta alla domanda è sì, potrei condividere i dati serializzati tra gli utenti. Altrimenti Dovrei fornire dati serializzati individuali a ciascun utente.

+0

Vedere http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/ –

+0

non ho downvote. –

risposta

3

Non letto la domanda. Quando il binario viene offuscato, devi stare attento quando i nomi delle classi/gli spazi dei nomi cambiano, ecc. Questo non si interromperà solo tra i binari nascosti/non-offuscati, ma anche tra le diverse versioni in generale.

Questo prodotto apparentemente esclude le classi contrassegnate come: http://www.ssware.com/cryptoobfuscator/obfuscator-net.htm (Questa non è una raccomandazione, non l'ho mai utilizzata, sarà necessario verificarla e verificare se ne vale la pena).

A parte questo è possibile scrivere un serializzatore personalizzato in base alla quantità di dati che si sta serializzando.


[Risposta originale]

Perché sei offuscando i dati? Posso solo immaginare che sia per impedire a qualcuno di modificarlo o impedire a qualcuno di leggere il contenuto.

Se si vuole impedire a qualcuno di modificarlo, allora posso suggerire di includere un hash dei dati, e quindi non preoccuparsi di offuscarlo.

Se è per impedire a qualcuno di leggerlo, quindi suggerisco di crittografare i dati, invece, dopo che è stato serializzato.

Ci sono molti esempi di entrambi, ma se vuoi un esempio fammi sapere.

+0

non si tratta di dati offuscati, ma di un binario offuscato. Puoi serializzare i dati con esso e deserializzare con una versione non offuscata dello stesso programma? – tanascius

2

Hai provato a utilizzare EazFuscator? Consente alcuni schemi di ridenominazione personalizzati per consentire di conservare i nomi esatti in determinati casi, ad esempio i metodi esterni. Non è aggiornato con le versioni più recenti di .NET 4.0+ o WCF.

È anche possibile utilizzare .NET Reactor, un altro servizio di offuscamento che va ben oltre le capacità di EazFuscator e Dotfuscator, ma ha un costo.

.NET Reactor consente inoltre la crittografia del codice, anziché l'offuscamento, che come precedentemente suggerito risolverà il problema.

10

Sembra esserci una confusione tra il binario offuscato e i dati serializzati.Se serializzi la tua classe utilizzando i serializzatori predefiniti, il nome della classe e i valori della proprietà/campo vengono usati come stringhe in quei dati serializzati, quindi se offuschi il tuo binario, i dati serializzati usando quel binario avranno i nomi offuscati e i tuoi binario offuscato non sarà in grado di leggere i dati serializzati creati dal vostro binario offuscato se si effettua una delle seguenti operazioni:

  1. Usa classe rinominare sul tuo classe serializzato
  2. Usa Stati rinominare sul tuo classe serializzato

Ecco alcune opzioni per ovviare al problema:

  1. Non l'ho usato per un po '(quindi vorrete verificare che funzioni nella vostra situazione) ma se usate il formattatore binario, allora potete controllare come i dati sono archiviati in serie file fornendo costruttori che gestiscono SerializationInfo e StreamingContext. Se cerchi google per un campione dovresti trovarne uno (qui ce n'è uno: Serialize Objects to File). Non è possibile trovare molti nuovi articoli là fuori usando questo metodo poiché la maggior parte delle persone non lo trova molto interessante, tuttavia è davvero il modo più semplice per specificare come la classe si salva e si ripopola usando il formattatore binario.

    Nella funzione di costruzione da implementare, si utilizzano stringhe per coppie chiave/valore per essere serializzate: in tale offuscamento tali stringhe verranno probabilmente crittografate (che è OK) e l'istruzione di impostazione delle proprietà verrà rinominata e rimane sincronizzata con i nomi delle classi/membri offuscati, quindi dovrebbe funzionare sia per gli assembly offuscati che non offuscati.

  2. Un'altra opzione per escludere la classe che si sta serializzando dall'offuscamento e basta crittografare il file di dati.

+0

La tecnologia attuale utilizzata qui è chiamata Surrogates di serializzazione. Potrebbe voler aggiungere che da qualche parte qualcuno fa una ricerca sui surrogati della serializzazione. –