2008-08-15 15 views
24

Estoy seguro de que muchos lectores de SO han utilizado el reflector .NET de Lutz Roeder para descompilar su código .NET. Me sorprendió la precisión con la que nuestro código fuente podría reconstruirse a partir de nuestros ensamblajes compilados.¿Debería preocuparme por ofuscar mi código .NET?

Me interesaría saber cuántos de ustedes usan ofuscación y para qué tipo de productos?

Estoy seguro de que este es un problema mucho más importante para, por ejemplo, una aplicación .NET que usted ofrece para descargar a través de Internet en lugar de algo diseñado para un cliente en particular.

Respuesta

19

yo no me preocuparía demasiado. Prefiero centrarme en publicar un producto excelente, obtener una buena base de usuarios y tratar a sus clientes de forma adecuada que preocuparme por el porcentaje mínimo de usuarios que se preocupan por robar su código o consultar la fuente.

+0

Excepto si el software contiene datos confidenciales que ** deben ** estar protegidos (como CLAVES PRIVADAS y CONTRASEÑAS) – marcolopes

+2

@marcolopes: las claves privadas nunca se deben entregar con la aplicación ... probablemente se refería a claves públicas ... y al las contraseñas deben ser hash, no texto claro de todos modos ... –

+1

¿Qué otra solución tiene que almacenar CLAVES PRIVADAS? Acceso al servidor? Y si no hay conexión a Internet? – marcolopes

3

fácil para mí - si necesita proteger la propiedad intelectual - obscurezca - si no lo hace.

Fácil de hacer con las herramientas adecuadas.

2

creo que hasta cierto punto todos debemos preocuparnos acerca de nuestro IP :)

Buena pregunta, sin embargo como su algo que estoy interesado en saber más acerca de (hago actualmente no obfuscate).

Habiendo tenido algunas conversaciones con mi jefe en el trabajo, dijo que no ofuscar, pero lo hace en NGEN instalar, aparentemente que debería ser suficiente para detener el reflector a trabajar en sus asambleas, pero no tengo ni idea de si esto es cierto y en qué medida, así que por favor no lo tome como un evangelio :)

Buena pregunta :) 1

+4

NGen no afectará al reflector de ninguna manera. El uso de la herramienta NGen no elimina los ensamblajes originales del sistema. –

7

Actualmente ofuscamos toda nuestra producción, a pesar de que somos un equipo pequeño que vende software especializado a un pequeño número de clientes.

Tomamos esta decisión por una simple razón: descubrimos que un ex empleado disgustado se acercaba activamente a los clientes que solicitaban binarios; había cierta preocupación de que intentara realizar ingeniería inversa de funciones más nuevas para ofrecer una funcionalidad competitiva.

Por supuesto, todavía puede hacer esto si usa el software, pero no hay ninguna razón para hacerlo fácil.

5

No hay nuevos ofuscación, pero un montón de trucos compilador desde 1,1

Por ejemplo cada vez que utilice un tipo anónimo se obtiene IL que compila posterior con un nombre bastante oscura. Cada vez que utilizas el rendimiento obtienes una clase completamente nueva que implementa tanto IEnumerable como IEnumerator (optimización inteligente, código ilegible). Cada vez que utilizas un delegado anónimo obtienes un nuevo método con un nombre que no es válido en todos los lenguajes .Net que conozco, pero eso está bien en el IL.

4

@ Rob Cooper

Después de haber tenido algunas conversaciones con mi manager en el trabajo, él dijo que no lo hace obfuscate, pero hace NGEN de instalar, aparentemente que debería ser suficiente para funcionamiento de la parada del reflector en sus asambleas, pero no tengo ni idea de si esto es cierto y en qué medida, así que por favor no lo tome como un evangelio :)

Haced esto no ofrece ningún tipo de protección contra el desmontaje. Primero, me imagino que es bastante posible extraer archivos sin formato de cualquier paquete de instalación, como un MSI o un archivo CAB.

Pero lo más importante es que Ngen se ejecuta en la máquina del cliente una vez que se ha instalado el ensamblaje. Ngen simplemente obliga al ensamblado a compilar ahora en lugar de usar el JIT. El ensamblaje original permanece y no se modifica y debe permanecer porque es posible que Ngen no pueda compilar todo el conjunto.

Ngen es por rendimiento, no por seguridad, y no hace nada para evitar el desmontaje o hacerlo aún más difícil.

+0

"Me imagino que es bastante posible extraer archivos sin formato de cualquier paquete de instalación como un MSI o un archivo CAB". - Sí: http://superuser.com/questions/307678/how-to-extract-files-from-msi-package –

10

Recuerde, la ofuscación no es el cifrado. En mi humilde opinión, si alguien percibe valor en la ingeniería inversa de su código, lo harán. Eso es cierto para código administrado o código nativo, ofuscado o no. Claro, la ofuscación disuade al observador casual, pero ¿su negocio realmente está amenazado por esas personas? Cada método de ofuscación de .NET que he visto dificulta tu vida de desarrollador.

Existen servicios que ofrecen cifrado verdadero, como SLPS de Microsoft. Ver http://www.microsoft.com/slps/default.aspx

+1

es un buen punto para hacer el desarrollo más difícil. –

+0

Fantástico comentario: "la ofuscación disuade al observador casual, pero ¿su negocio está realmente amenazado por esa gente?" –

0

La obstrucción es limitada en su eficacia, puede mantener alejado al hombre casual. La obstrucción más efectiva es hacer que solo la cantidad más pequeña de código esté disponible para el usuario. Si puede, haga que su aplicación funcione en gran medida en un servidor gordo.

+0

... que puede ser un problema si hablamos de las aplicaciones de WinForms. – JRoppert

2

No utilizamos la ofuscación para aplicaciones "no públicas", pero la utilizamos para aplicaciones disponibles al público. La aplicación ofuscada contiene un código altamente sofisticado que nos tomó una cantidad exorbitante de tiempo para escribir y esa es la razón por la que me permite pensar que la ofuscación es imprescindible, al menos en ese caso.

0

De acuerdo, la mayoría de las personas que saben cómo codificar aunque sea un poco no necesitan robar su código.

Cuestiones relacionadas