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.
Vuol dire proteggerli dalla decompilazione o semplicemente proteggerli dall'uso? – NotMe
Per ora sono alla ricerca di utilizzo, ma davvero alla ricerca di entrambi. Aggiornato di conseguenza la domanda. – Matt