2010-12-13 18 views
6

Qual è la procedura migliore per proteggere le DLL dei progetti su cui si sta lavorando? Alcune DLL che sono interessato allo sviluppo avranno funzionalità DAL (data access layer) e BLL (business logic layer). Potrebbero esserci diverse app che possono eventualmente colpire queste DLL per eseguire funzioni specifiche di business.Come proteggere le DLL .NET

Qual è il modo migliore per proteggere queste DLL in modo che possano essere utilizzate solo dalle applicazioni del creatore?

Sia per il blocco che per l'uso non autorizzato delle DLL e per la sicurezza contro l'eventuale decompilazione sono entrambi desiderabili.

+2

Vuol dire proteggerli dalla decompilazione o semplicemente proteggerli dall'uso? – NotMe

+0

Per ora sono alla ricerca di utilizzo, ma davvero alla ricerca di entrambi. Aggiornato di conseguenza la domanda. – Matt

risposta

4

Un'opzione potrebbe essere quella di contrassegnare tutte le classi esposte nella DLL come "interne" anziché "pubbliche", quindi utilizzare l'attributo "InternalsVisibleTo" nella DLL per denominare esplicitamente le DLL (ed eventualmente gli ex) che sono autorizzati a utilizzare i tuoi tipi interni Ciò potrebbe richiedere che tutti i partecipanti siano chiamati con il nome forte, ma è comunque una buona cosa da fare.

In definitiva, non esiste un modo assoluto per impedire a un determinato hacker di accedere al codice quando il codice è in esecuzione sul computer dell'hacker. Tutto il codice che può essere eseguito dalla macchina può essere smontato e riassemblato in qualcos'altro con strumenti ed esperienze sufficientemente avanzati.

Il modo migliore per avvicinarsi alla sicurezza del codice è porre la domanda "Quanto è difficile fare in modo che qualcuno usi questo codice senza licenza o autorizzazione e quanto tempo/denaro siamo disposti a spendere per raggiungere tale ?" Se non fai niente, è molto facile per qualcuno usare le tue DLL in qualche altro progetto. Se fai alcune semplici cose, puoi rendere scomodo per qualcuno usare le tue DLL altrove. Se investi mesi di sforzi, potresti essere in grado di rendere molto difficile per qualcuno abusare del tuo codice, ma non puoi mai renderlo impossibile.

Una tecnica che è il più vicino assolutamente sicuro che posso immaginare è: non eseguire il codice sul computer del cliente (o degli hacker). Esegui invece un servizio web e mantieni il tuo codice sul server dove un hacker non può licenziare casualmente un debugger sul tuo processo o smontare il tuo codice. La sicurezza del codice viene quindi definita dalla sicurezza fisica nella posizione del server e dalla sicurezza di accesso alla rete alle porte del server. Questi vettori di attacco sono molti ordini di grandezza più difficili da aggirare di qualsiasi cosa tu possa fare per eseguire codice sulla macchina dell'hacker.

Per alcune società di software, spostare una parte delle loro applicazioni dal client al cloud non significa ottenere una scalabilità migliore o aggiornamenti più semplici o costi inferiori, si tratta di sicurezza del codice e prevenzione della pirateria.

+0

Non proprio. .NET consente di fare riferimento anche agli assembly di file exe, quindi fa poca o nessuna differenza. –

+0

Con uno strumento come Riflettore da Red Gate. Anche in un eseguibile quasi tutto sembra essere decompilato con relativa facilità. Quindi includere questo in un exe fornisce molto aiuto in realtà? – Matt

+0

Ritraggo il suggerimento "tira il codice nella DLL", secondo il punto di Brian. Il resto è tutto: non ci sono serraggi assoluti, quindi devi decidere quanto sei disposto a investire per rendere l'hacking più scomodo. – dthorpe

1

Stabilire l'autenticazione utilizzando il meccanismo Chiave aperta. Le funzioni nella DLL funzioneranno solo se fornisci una chiave valida e il token.

+0

Puoi chiarire o fornire collegamenti ad alcuni tipi di esempi? – Matt

1

Se qualcuno ha accesso alla macchina con tutti quegli assembly, è necessario preoccuparsi più di qualcuno che li riutilizzi, potrebbero semplicemente accedere direttamente al database anziché utilizzare l'assembly.

Se si tratta di un'applicazione desktop o qualcosa del genere e si accede direttamente al database, è necessario ripensare la propria applicazione, accedere ai dati tramite servizi Web o altro anziché accedere direttamente al database.

+0

Lo scenario esiste in un ambiente replicato. Le macchine possono o non possono avere connettività internet in un dato momento, rendendo i servizi web non un'opzione. – Matt

+0

Sooooo ... Non vedo quale sia il tuo punto di vista. Parlare direttamente con il database è brutto e non hai ancora motivo di parlarne direttamente. – Phill

+0

Ok ho un DAL e BLL entrambi in progetti separati e poi compilato in DLL. Queste librerie controllano le nostre operazioni logiche e DB. L'app principale è un'app WPF che contiene solo il livello di presentazione. Esistono altre applicazioni secondarie che colpiscono anche alcune delle stesse operazioni DAL e BLL. Questo è fatto semplicemente per evitare la duplicazione del codice dalle diverse app necessarie. L'intero scopo del DAL è di parlare al DB. – Matt

1

La protezione della proprietà intellettuale non è realmente possibile se la spedisci nel formato DLL di .NET a un client. È possibile ospitare la logica dell'applicazione nel cloud, sebbene ciò potrebbe non essere adatto allo scenario.

Anche i "migliori" offuscatori non sono infallibili.Probabilmente potresti rimandare un hacker occasionale, ma come dice dthorpe, se qualcuno vuole veramente decompilare i tuoi assemblaggi, lo faranno.