Domanda

Stavo pensando di offuscare un'applicazione .Net commerciale.Ma vale davvero la pena scegliere, acquistare e utilizzare uno strumento del genere?I binari offuscati sono davvero al sicuro dal reverse engineering?

È stato utile?

Soluzione

Potrebbe non essere necessario acquistare uno strumento: Visual Studio.NET viene fornito con una versione community di Dotfuscator.Altri strumenti di offuscamento gratuiti sono elencati qui, e potrebbero soddisfare le tue esigenze.

È possibile che i binari offuscati non siano al sicuro dal reverse engineering, proprio come è possibile che il lucchetto della tua bici possa essere fragile/scassillabile.Tuttavia, spesso accade che un piccolo inconveniente sia sufficiente per scoraggiare eventuali ladri di codici o biciclette.

Inoltre, se mai arriva il momento di far valere i tuoi diritti su un pezzo di codice in tribunale, essere visto fare uno sforzo per proteggerlo (offuscandolo) può darti punti extra.:-)

Devi però considerare gli aspetti negativi: può essere più difficile usare la riflessione con codice offuscato e se stai usando qualcosa come log4net per generare parti di righe di log in base al nome della classe coinvolta, questi messaggi possono diventare molto più difficile da interpretare.

Altri suggerimenti

Ricorda che l'offuscamento è solo una barriera per l'esaminatore casuale del tuo codice.Se qualcuno è seriamente intenzionato a capire cosa hai scritto, avrai molte difficoltà a fermarlo.

Se hai segreti nel tuo codice (come le password), stai sbagliando.

Se temi che qualcuno possa produrre il tuo software con le tue idee, avrai più fortuna sul mercato fornendo le nuove versioni desiderate dai tuoi clienti, con supporto tecnico e diventando loro partner.I buoni affari vincono.

Nella nostra azienda abbiamo valutato diverse tecnologie di offuscamento, ma tutte presentavano problemi.Il problema più grande era che ci basiamo molto sulla riflessione, ad es.per creare dinamicamente griglie basate sui nomi delle proprietà.

Quindi tutti gli offuscatori rinominano le cose, puoi disabilitarlo ovviamente, ma poi perdi gran parte del vantaggio dell'offuscamento.

Inoltre, nel nostro codice abbiamo molti test NUnit che si basano sul fatto che molti più metodi e proprietà siano pubblici, questo ha impedito ad alcuni offuscatori di riuscire a offuscare quelle classi.

Alla fine abbiamo optato per un prodotto chiamato Reattore .NET

Funziona molto bene e non abbiamo nessuno dei problemi associati agli altri prodotti.

"A differenza degli offuscatori, .NET Reactor blocca completamente qualsiasi decompilazione mescolando qualsiasi assembly .NET puro (scritto in C#, VB.NET, Delphi.NET, J#, MSIL...) con codice macchina nativo.Nel dettaglio, .NET Reactor costruisce un muro nativo tra potenziali hacker e il tuo codice .NET.Il risultato è un file standard basato su Windows, non compatibile con MSIL.Il codice .NET originale rimane intatto, ben protetto dal codice nativo e invisibile ad occhi indiscreti.Il codice .NET originale non viene mai copiato sul disco rigido.Non esiste uno strumento in grado di decompilare gli assembly protetti da .NET Reactor."

Il fatto che tu possa effettivamente decodificarlo non rende inutile l'offuscamento.Alza il livello in modo significativo.

Un assembly .NET non offuscato ti mostrerà tutta la fonte, evidenziata e tutto semplicemente scaricando il file Riflettore .NET.Aggiungi l'offuscamento a ciò e ridurrai in modo molto significativo la quantità di persone che saranno in grado di modificare il codice.

Dipende da da cosa ti stai proteggendo.Se lo spedirai senza ostacoli, potresti anche rendere l'applicazione open source e trarre vantaggio dal marketing.Distribuirlo offuscato consentirà solo alle persone di generare con relativa facilità file binari modificati tramite patch invece di poter rubare il codice e creare un concorrente diretto.Ottenere la fonte effettiva dal codice offuscato è molto difficile, a seconda dell'offuscatore, ovviamente.

Penso che dipenda dal tipo di prodotto.Se è destinato all'utilizzo da parte degli sviluppatori, l'offuscamento danneggerà i tuoi clienti.Utilizziamo i prodotti ArcGIS al lavoro e tutte le DLL sono offuscate.Ciò rende il nostro lavoro molto più difficile, dal momento che non possiamo usare Reflector per decifrare comportamenti strani.E stiamo acquistando clienti che hanno pagato migliaia di dollari per il prodotto.

Quindi, per favore, non offuscare a meno che non sia davvero necessario.

Cose che dovresti tenere in considerazione:

  • L'offuscamento non protegge il codice o la logica. Rende solo più difficile la lettura e la comprensione.
  • L'offuscamento nessuno ferma il reverse engineering. Rallenta solo il processo.
  • La tua proprietà intellettuale è protetta dalla legge nella maggior parte dei paesi. Quindi, se un concorrente utilizza il tuo codice o un'implementazione specifica, puoi denunciarlo.

L'unico problema che l'offuscamento può risolvere è che qualcuno crei una copia 1:1 (o quasi 1:1) della tua specifica implementazione.

Anche in un mondo ideale il reverse engineering di un'applicazione offuscata è poco attraente dal punto di vista economico.

Ma torniamo alla realtà:

  • Non esiste nessuno strumento su questo pianeta che impedisca a qualcuno di copiare le interfacce utente, i comportamenti o i risultati forniti o prodotti da qualsiasi applicazione. L'offuscamento è in queste situazioni inutile al 100%.
  • Il miglior offuscatore sul mercato non può impedire di utilizzare qualche tipo di disassemblatore o editor esadecimale e per alcuni smanettoni è una buona idea guardare nel cuore di un'applicazione.È semplicemente più difficile che su un codice non offuscato.

Quindi la realtà è che puoi rendere più difficile e dispendioso in termini di tempo l'esame della tua applicazione, ma non otterrai alcuna protezione affidabile.Indipendentemente se utilizzi un prodotto gratuito o commerciale.

Tecnologie avanzate come l'offuscamento del flusso di controllo o la virtualizzazione del codice possono aiutare a rendere la comprensione della logica a volte davvero difficile, ma possono anche causare molti problemi divertenti e difficili da eseguire il debug o risolvere.Quindi a volte sono più come un problema aggiuntivo che come una soluzione.

Dal mio punto di vista l’offuscamento non vale i soldi che alcune aziende addebitano per i loro prodotti. Se vuoi infastidire gli sviluppatori occasionali, gli offuscatori open source sono abbastanza buoni.Se vuoi rendere il più difficile possibile guardare nel cuore delle tue applicazioni, devi utilizzare contenitori crittografici con ambienti di esecuzione virtuali e filesystem virtuali che però forniscono anche vettori di attacco e possono anche essere fonte di un sacco pieno di problemi .

La tua proprietà intellettuale e i tuoi prodotti sono protetti dalla legge nella maggior parte dei paesi. Quindi, se c'è un concorrente che analizza e copia il tuo codice, puoi denunciarlo.Se un cattivo, un hacker o un cracker prende la tua applicazione, vieni preso in giro, ma un offuscatore non fa la differenza.

Quindi dovresti prima pensare ai tuoi obiettivi, al tuo mercato e a cosa vuoi ottenere con un offuscatore. Come puoi leggere qui (e in altri posti) l'offuscamento non risolve realmente il problema del reverse engineering.Rende solo tutto più difficile e richiede più tempo. Ma se questo è ciò che desideri, potresti dare un'occhiata agli offuscatori open source come ad es.sharpObfuscator o obfuscar che può essere abbastanza buono da infastidire i programmatori occasionali (un elenco può essere trovato qui: Elenco degli offuscatori .NET su Wikipedia).

Se è possibile nel tuo scenario, potresti essere interessato anche ai concetti SaaS. Ciò significa che fornisci l'accesso al tuo software ma non al software stesso.Pertanto il cliente normalmente non ha accesso ai tuoi assembly. Ma a seconda del livello di servizio, della sicurezza e della base utenti, può essere costoso, complesso e difficile realizzare un servizio SaaS affidabile, sicuro e performante.

No, è stato dimostrato che l'offuscamento non impedisce a qualcuno di riuscire a decifrare il codice compilato.Ciò rende più difficile farlo ma non impossibile.

Mi trovo molto a mio agio nel leggere il codice assembly x86, che dire delle persone che lavorano con l'assembly da più di 20 anni?

Troverai sempre qualcuno a cui basta un minuto per vedere cosa sta facendo il tuo codice C# o C...

Solo una nota per chiunque altro legga questo articolo anni dopo: ho appena dato un'occhiata alla licenza Dotfuscator Community Edition (fornita con VS2008) poche ore fa e credo che non sia possibile utilizzare questa versione per distribuire un prodotto commerciale o per offuscare il codice da un progetto che coinvolge sviluppatori diversi da te.Quindi per gli sviluppatori di app commerciali si tratta in realtà solo di una versione di prova.

...taglia...Questi messaggi possono diventare molto più difficili da interpretare

Sì, ma l'edizione community gratuita fornita con Visual Studio dispone di una funzionalità di mappa.Con ciò puoi rintracciare i nomi dei metodi offuscati sui nomi originali.

Ho avuto successo inserendo l'output da un offuscatore gratuito in un offuscatore diverso.In Dotfuscator CE sono inclusi solo alcuni trucchi di offuscamento, quindi l'utilizzo di un secondo offuscatore con trucchi diversi lo rende più offuscato.

È abbastanza semplice eseguire il reverse engineering di un'app .net utilizzando riflettore .net - poiché l'app genererà codice VB, VC e C# direttamente da MSIL ed è possibile estrarre tutti i tipi di gemme utili.

Gli offuscatori di codice nascondono il codice abbastanza bene dalla maggior parte degli hack di reverse engineering e sarebbe una buona idea utilizzarli su codice proprietario e competitivo che aggiunge valore alla tua app.

C'è un buon articolo sull'offuscamento e funziona qui

Questo post e la questione circostante hanno qualche discussione che potrebbe essere utile.Non è una questione sì o no.

Sì, dovresti assolutamente.Non per proteggerlo da una persona determinata, ma per ottenere qualche profitto e avere clienti.A proposito, se arrivi a un punto in cui qualcuno tenta di crackare il tuo software, significa che vendi un software popolare.

Il problema è quale strumento scegliere per il lavoro.Dai un'occhiata alla mia esperienza con gli offuscatori commerciali: https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

Sì, lo sappiamo.Usiamo l'offuscatore BitHelmet.È nuovo, ma funziona davvero bene.

Ma vale davvero la pena scegliere, acquistare e utilizzare uno strumento del genere?

Ho trovato Eazfuscator economico (gratuito) e facile da usare:ci è voluto circa un giorno.Ho già effettuato test automatizzati approfonditi (buona copertura), quindi suppongo di poter trovare eventuali bug introdotti dall'offuscamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top