2010-05-24 3 views
8

Attualmente sviluppo un'applicazione C# .Net in cui sto usando un controllo personalizzato che ho sviluppato qualche tempo fa. Ho bisogno che la DLL venga spedita all'interno della nuova applicazione, ma comprensibilmente non voglio che il file dll venga usato per le app straniere.Come impedire a una DLL di essere caricata in altre app

Ecco perché ho bisogno della dll personalizzata per essere in qualche modo compilata all'interno della nuova applicazione. Attualmente la dll viene copiata nella directory dell'applicazione.

Qualche idea? Dovrebbe essere banale imho.

Grazie & saluti, Daniel

+0

Se si inserisce il codice sul computer di qualcun altro, è possibile eseguirlo. Qualunque cosa tu faccia per evitare che sia al massimo un speedbump. –

risposta

3

sguardo nel IL Merge. Questa utility consente di combinare più assembly .NET in un unico assembly.

cito:

ILMerge è un'utilità che può essere utilizzato per unire più assembly NET in un unico assieme. ILMerge accetta una serie di assembly di input e li unisce in un unico assieme di destinazione. Il primo assembly nell'elenco degli assembly di input è l'assembly principale. Quando l'assembly principale è un eseguibile, l'assembly di destinazione viene creato come un eseguibile con lo stesso punto di ingresso dell'assembly primario. Inoltre, se l'assembly principale ha un nome sicuro e viene fornito un file .snk, l'assembly di destinazione viene riscritto con la chiave specificata in modo che abbia anche un nome sicuro.

Tuttavia, è necessario prendere in considerazione l'assemblaggio creato. Considera l'offuscamento e le licenze per tenere a bada l'easy-going, ma ricorda che se qualcuno vuole il tuo codice abbastanza male lo otterrà.

Alcune cose lo rendono molto più difficile, come avere un servizio Web, ma anche in questo caso non è una prova completa.

1

Se è possibile modificare la DLL con il controllo proprietario, è possibile ...

  1. Mark tutto nel DLL di controllo interno.
  2. Compilare l'assembly in modo che la DLL chiamante abbia accesso ai membri interni della DLL di controllo.
  3. Firma la DLL chiamante.

Vedere questo MSDN page per i dettagli su come eseguire questa operazione.

0

C'è un numero di diversi hack che puoi fare per rendere questo più difficile da usare per la gente. Tutti possono essere aggirati, ma tale è la vita.

Potete guardare questa risposta qui per non consentire un assemblaggio sconosciuta fare riferimento vostra assemblea: Secure C# Assemblies from unauthorized Callers

Si dovrebbe offuscare il montaggio se siete veramente nervoso. Questo renderà più difficile da decompilare.Qualcosa come Babel funziona alla grande: http://babelobfuscator.blogspot.com/

È inoltre possibile utilizzare ILMerge per memorizzare l'assieme in un altro assieme. Tuttavia, questo assembly verrà estratto ed esposto in fase di esecuzione. Puoi fare qualcosa in questo modo per estrarre una risorsa binaria da un assembly e creare un assembly temporaneo che viene utilizzato in fase di runtime. Se qualcuno è davvero motivato, può trovare anche l'assemblea provvisoria ...

La vera domanda è quanto lontano vuoi andare !? Ad un certo punto non ne varrebbe la pena. È lì che ti fermi.

+0

Hum, non voglio andare molto lontano - tutto quello che voglio è che la dll non sia visibile nella directory dell'app a prima vista o in qualche modo la protegga dall'inclusione facilmente. Lo so: tutto ciò che viene creato dagli esseri umani può essere violato o distrutto dagli umani. Se Microsoft, Apple e altre grandi aziende non sono in grado di ottenere una protezione reale contro l'hacking del loro software, come posso pensare di essere in grado di ... ;-) – dhh