ver - Descompilación de.NET, ¿qué tan fácil es?
sacar codigo fuente de un.exe de visual basic (9)
.NET es muy fácil de descompilar. La ofuscación hará que sea un poco más difícil entender lo que está sucediendo, pero alguien que descompile el código aún puede descubrirlo si es persistente.
Aquí hay algunos consejos para proteger su código .NET que encontré en línea:
http://blogs.msdn.com/ericgu/archive/2004/02/24/79236.aspx
Solo tenga en cuenta que ninguna de las técnicas discutidas es 100% efectiva, solo es una cuestión de cuántos aros hará saltar al cracker.
Estaba buscando el mejor cifrado para una clave de licencia para una aplicación, y alguien dijo que alguien puede descompilar fácilmente la aplicación y luego omitir la prueba de la clave de licencia.
¿Cómo podría alguien hacer eso prácticamente hablando? Entonces tienen mi .dll, tienen que descompilarlo de alguna manera, luego comentan la llamada a la función para verificar la licencia, ¿luego recompilarla? ¡El descompilador tiene que ser realmente bueno para que el código se compile!
Incluso sin Reflector, la gente ha estado haciendo esto por años. Básicamente, mira la aplicación con un depurador (algo así como lo hará WinDBG) y luego averigua cuándo ocurre la verificación de la licencia. Mire el valor de retorno, y luego simplemente parchee la aplicación para saltar directamente a la comprobación de "todo bien".
Yo recomendaría todo lo que la gente ha publicado anteriormente. Solo tiene que darse cuenta de que es un juego del gato y el ratón, y si su retorno de la inversión valdrá la pena. Si tiene usuarios que no están tratando de jugar con el sistema, entonces algo simple puede hacer. Si tiene algo donde el craqueo es desenfrenado, entonces tendrá que mirar diferentes estrategias e ir desde allí.
No tiene que volver a compilar la aplicación para aplicar el parche, ya que existen muchas herramientas de parches binarios. Y no detendrá a sus crackers más decididos si hay suficiente dinero para ganar.
Josh Smith también lanzó recientemente Crack.NET que se puede usar para adjuntar a un proceso .NET en ejecución, y luego abrirlo en Reflector , por lo que incluso si los ensamblajes en el disco están encriptados de alguna manera (para evitar que las personas que usan Reflector lo hagan) , todavía podrán usar las versiones en memoria
La compilación .NET en general es bastante fácil: para hacerte una idea de esto, simplemente toma una copia de .NET Reflector y pruébalo.
En la mayoría de los casos, no será necesario volver a compilar el código para eliminar una simple verificación de licencia: simplemente parchear el MSIL hará el truco.
Protegerse contra este escenario produce rendimientos rápidamente decrecientes: siempre habrá alguien lo suficientemente inteligente como para eludir los controles adicionales que agregue a su código. Por ejemplo, puede agregar una firma digital a su código, y negarse a ejecutar la firma no coincide (lo que indica que el código ha sido manipulado, por ejemplo, para eliminar la verificación de la licencia).
El juego se convierte en eliminar el cheque de firma (además de la verificación de la clave de licencia). Entonces agregas otro cheque, que luego puede pasarse por alto, etcétera, ad infinitum.
Existe toda una industria de herramientas de ocultación de códigos y protección contra copias para ayudarlo a defender su software contra problemas como este. Depende de usted decidir si el esfuerzo adicional de su parte y la molestia que causará a sus clientes legítimos, vale la pena comprar estas soluciones ...
Si esto es algo contra lo que estás buscando defenderte, tal vez quieras leer sobre cómo atacarlo.
La explotación del software por Greg Holland y Gary McGraw es una excelente introducción.
Lo mejor es no ir por la borda en la tecnología de la clave de licencia. Cualquier cosa que haga puede ser pirateada por un usuario determinado y corre el mayor riesgo de agregar problemas que impiden que los usuarios legítimos utilicen su aplicación. Incluso he visto que el código que estaba protegido con Hasp Dongles se raja. Encriptar su clave de licencia y ofuscar su código debería ser suficiente para dificultar los ataques oportunistas, no tiene mucho sentido ir más allá.
Eric Sink escribió un buen artículo sobre este punto, ver la sección "4. No molestar a la gente honesta" de "Principios de transparencia"
"También"
Cualquier tipo de mecanismo de verificación de licencia "estándar" / habitual es un objetivo para la herramienta de eliminación automática. Y en las pocas aplicaciones .NET comerciales que he reflexionado, estas verificaciones "demasiado triviales" parecen comunes.
La mejor apuesta es proteger haciendo que parte del programa dependa del servicio web. Esta no debería ser una interfaz demasiado hablante para evitar ralentizar la ejecución, pero tampoco debería ser muy gruesa, ya que esos fragmentos podrían descargarse y almacenarse localmente en la "versión crackeada" a menos que la aplicación dependa de que cambien con frecuencia.
Si desea evitar la conectividad de red (algunos usos o usuarios pueden encontrar problemática / cuestionable dependiendo de la aplicación a menos que sea algo que describa y proporcione valor), luego divida parte del programa en uno o dos archivos nativos y verifique la licencia todas las partes de la aplicación y menos obviamente en el dll nativo, probablemente serían suficientes para disuadir a la mayoría.
Si el código fuente se compiló normalmente, es muy fácil descompilar los ensamblados .NET.
Podría usar .NET Reflector , desarrollado originalmente por Lutz Roeder, ahora compatible con Redgate Software. Hay una captura de pantalla en la parte inferior de esta respuesta que le da una impresión de lo que hace Reflector.
Puede navegar por sus espacios de nombres y clases y ver el código fuente y los métodos en su idioma .NET favorito. FileDisassembler de Denis Bauer le permitirá (o los hackers malvados en su caso) convertirlo en una solución VS y hacer modificaciones en el programa.
Hay algunas contramedidas como usar un ocultador de código para hacer que tu código sea prácticamente ilegible.
Hay otras preguntas interesantes sobre sobre este tema:
- ¿Debes ofuscar una aplicación comercial de .Net?
- ¿Cómo descompilo un .NET EXE en código fuente C # legible?
- Las mejores herramientas / estrategia de ofuscación de .NET
- ¿Criptografía .NET para claves de licencia?
Captura de pantalla de Reflector:
texto alternativo http://www.red-gate.com/products/reflector/images/screenshot_full_screen.gif