Gracias vi hace muchos meses este tutorial. Hoy vuelvo a retomar para sacar una linea que me faltaba de tu video. Te amo, mi juego cambio para bien obfuscando el codigo, los que hacen cheat no predicen tanto
Compa... MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCHASSSSSSSSSSSSSSSSSSSSSSSS GRACIAS.... sufrí un robo en el cual perdí mis fuentes.... y recupere los fuentes desde las instalaciones realizadas en Cliente.... me salvaste 2 años de proyecto...!!!
Ojo, me robaron 2 Laptops hace 2 dias, perdi toda los fuentes de mis aps de escritorio y por ende las conexiones con las bases de datos tambien, pero buscando los ejecutables respaldados me di cuenta que en forma de "analogía" "Siempre anduve con los pantalones abajo".... muy buena tecnica, por tanto apliquenlo si es que colocan las conex en duro o ese tipo de malas practicas, asegurense de recompilar y cambiar constantemente las credenciales de bases de datos
Muchas gracias por la información, podrías por favor hacer un video donde se ponga una contraseña para poder instalar, y otro de caducidad del programa cada mes o de corte del servicio cada mes, asi como funcionan los planes de celular. Feliz día.
Hola una vez ofuscado el dll lo quiero agregar a mi proyecto y obtengo errores..? No encuentra la DDL de referencia por mas que la añado al proyecto. o como seria la mejor manera de poder agregar estas dll ofuscadas
Está explicado en el vídeo. Si sigues detalladamente las instrucciones te tiene que funcionar. Hay que fijarse en los detalles, como las comillas y cosas así. Suerte!
Estimado una consulta tengo archivos .js en wwwroot con el método explicado en el video como puedo configurar el obfuscar los archivos .js, porque he tratado de cambiar las rutas pero no me sale error pero tampoco crea los archivos ofuscados... o como hago para ofuscar archivos de JS del wwwroot, muchas gracias
La ofuscación de archivos JavaScript se realiza de otra manera que nada tiene que ver con esta. Necesitas usar herramientas específicas, básicamente un gestor de tareas Front-End como Gulp o npm (que también es gestor de dependencias) y una utilidad como uglify-js. Me anoto hacer un vídeo de esto en algún momento... Saludos.
Hola, gracias por la información, estoy tratando de ofuscar, estoy en VS2019, tengo una solución con varios proyectos, el principal es un servicio web .asmx, en todos los proyectos me muestra la opción de post-compile excepto en el proyecto principal de la solución que es el servicio web, Sabes como le puedo hacer en este caso? Gracias de antemano. Saludos!
Hola. Nunca he implementado un sistema de licencias con .NET, pero he escuchado que el de .NET Reactor (www.eziriz.com/dotnet_reactor.htm) va bastante bien. Es un ofuscador que además incluye el sistema de licenciamiento. También tienen el sistema de licenciamiento por separado, sin ofuscar, IntelliLock (www.eziriz.com/). Es de pago. Espero que te sirva.
@@jmalarcon gracias por la respuesta, lo que quiero decir es que hago mi app de escritorio pero necesito crear un validador de licencia para poder evitar la distribución ilegal, yo trabajo con sistemas ERP en mi país y se le agregan funcionalidades por medio de dll
@@karinalejandrolugogutierre5395 Pues lo que te digo: tienes que, o bien crear (mala idea normalmente) o bien utilizar algún sistema de licenciamiento que te permita asignar licencias. No creo que te legara con algo que vaya únicamente en tu programa. Seguramente necesitarías algo en un servidor para hacer las validaciones, con una conexión segura para evitar que lo suplanten. El sistema Intellilock que te comento te proporciona eso. Pero seguro que hay más por ahí, aunque lo desconozco. Saludos.
hola que tal quiero utilizar el ofuscador en una de mis aplicaciones pero me sale este error que podrá ser? Severity Code Description Project File Line Suppression State Error exited with code 9009.
Hola. Tiene pinta de ser una ruta mal escrita en la configuración del ofuscador o una carpeta a la que no tienes permisos de acceso. Mira a ver si es algo de esto, sino, no sé qué decirte, la verdad. Confírmanos por aquí... Saludos.
Hola a todos, tuve que reinstalar todo en mi máquina y ahora que quiero utilizar el obfuscar me lanza el mismo error 9009. ¿Han podido descubrir en qué consiste? Saludos a todos y gracias por la ayuda.
@@juegosretro1042 Haber empezado por ahí Si no me das datos concretos más allá de "No me funciona" malamente te podré ayudar 😉 Eso es un error muy particular. Normalmente es debido a una ruta mal puesta. Fíjate en el Output porque te dirá exactamente cuál es y qué está pasando. Si tienes todas las rutas bien, entonces es la ruta de tu propio proyecto o la de Visual Studio, que tiene espacios en blanco y seguramente por eso no funciona. En el evento post-build mete a obfuscar entre comillas dobles, así: "$(Obfuscar)" y seguramente te funcionará. Dinos aquí si es así.
Hola Celestino: el cómo usarlo en .NET Core y .NET lo tienes explicado en el propio vídeo, a partir del minuto 12:24 (mira los capítulos). Lo que digo al principio es que existe una versión en forma de Global Tool. Una Global Tool es una extensión para la herramienta de línea de comandos dotnet de .NET Core/.NET que permite agregar herramientas a ésta. Si la quieres usar desde la línea de comandos, entonces la necesitas. Pero si lo que quieres es usarla de la misma manera que explico en el vídeo, o sea desde Visual Studio, te lo explico en esa parte que te señalo. Saludos.
Excelente video!!, muchas gracias por compartir. Una pregunta ¿Cuál es la forma correcta de manejar por ejemplo claves que se tengan escritas en el código?
Hola Jorge. En el código jamás deberías tener escrito nada que pueda considerarse secreto o "sensible" en modo alguno y, como comento en el vídeo, la ofuscación no es encriptación, por lo que aunque ofusques las cadenas siempre hay manera de acceder a ellas. .NET Core tiene una característica específica para almacenar secretos (puedes ver esto en nuestro blog: www.campusmvp.es/recursos/post/como-guardar-secretos-en-nuestras-aplicaciones-de-net-core-sin-peligro-de-enviarlos-a-github-por-error.aspx) per está pensada más para no revelar secretos por error en un repositorio. Luego en producción dependerá del tipo de aplicación cómo los hagas llegar hasta la misma. Por ejemplo, en aplicaciones Web si las albergas en una Azure Web App puedes establecerlos desde la UI de Azure. Si es otro tipo de app puedes usar variables de entorno y otros métodos. Pero, en resumen: con o sin ofuscación nunca deberías almacenar nada secreto en tu código. Saludos.
Pues revisa bien todos los detalles, porque funciona bien con cualquier versión de .net. es más, si no recuerdo mal, es video esta hecho con .net 5. Saludos.
Hola muchas gracias por la excelente explicación. Una consulta. En el video al final dices que más importante que el código son 'las decisiones que se toman al hacer ese código' que eso habría que proteger, quizás la respuesta es muy obvia pero ¿a qué te refieres?. Gracias.
Hola Roberto. Pues me refiero a miles de pequeñas decisiones que se toman en la aplicación durante el desarrollo que afectan a cosas como el tipo de funcionalidad concreto que se crea (y no otro diferente), la manera de hacer una determinada cosa entre las miles que puede haber, código "feo" pero más fácil de entender aunque sea menos óptimo que otro... Esas cosas. Dentro de un producto no trivial existen cientos o miles de estas decisiones que se suelen tomar, a veces tras largas discusiones con otras personas, y que, de hecho, conviene documentar bien directamente en el código bien de manera más formal. Por ejemplo, nosotros, en nuestra plataforma de e-Learning que es la que usa campusMVP, llevamos más de 15 años de desarrollo, con centenares de características y muchísimas decisiones tomadas que de vez en cuando vuelven a surgir. Las tenemos documentadas en la mayor parte de los casos, bien en comentarios si son simples o bien en documentación interna si eran más complejas, para saber por qué algo se hizo de una determinada manera y no de otra, porque al cabo de los meses y los años no lo sabes ya. Sin ese conocimiento, el código tan solo de la aplicación no nos valdría de mucho y a uno que nos lo copiara tampoco, porque ante ciertos problemas no sabría como actuar o por qué se han hecho las cosas de manera determinada y que puede parecer absurda en un momento dado. No sé si así me explico mejor, pero es untema interesante. Quizá deberíamos hacer un debate con algunos expertos algún día. Saludos!
Gracias . Lo implemente pero tengo un problema. Dentro de mi app hay un formulario que lee una base de datos que ademas se encripto. Bueno el formulario abre pero no puede leer la base de datos. Sin ofuscar todo funciona bien. Tal vez me puedas ayudar a solucionarlo
Lo siento. Ni idea: tendría que conocer bien la aplicación y cómo está hecho eso. Mira bien la documentación de Obfuscar para ver cómo trata las cadenas y cómo puedes omitir ciertas cosas de la ofuscación. De todos modos si tienes una clave para acceder a la base de datos metida en el código mejor no lo hagas. por mucho que la ofusques se puede averiguar y jamás deberías meter nada sensible como esto en el código de la aplicación. Saludos y suerte!
Ya consigo que funcione, pero mi programa usa archivos json y no llega a serializar bien, no hace nada si obfusco, ¿Alguna Sugerencia? Solo obfusco el ejetuble
Hola. La ofuscación de código suele causar problemas con la serialización, ya que muchas de las clases que tienes no son públicas y al ofuscarlas se ofuscan también sus nombres de propiedades o incluso de la propia clase. Lo que tienes es que revisar qué clases serializas, y si no son públicas marcarlas para que no se ofusquen, configurando Obfuscar para excluir ciertas clases o propiedades concretas del proceso de ofuscación (consulta la documentación). Otra estrategia, seguramente mejor, es meter esas clases en su propio ensamblado (una DLL propia) que no se incluya en el proceso de ofuscación. Saludos.
if $(ConfigurationName)==Release $(Obfuscar) ..\..\obfuscar.xml me aparece el error 9009, ¿Sabrias por qué ocurre?. No se como agregar la referencia al proyecto y aparece como ya instalada
Es un error de ruta. Seguramente la ruta donde tienes Obfuscar contiene espacios. Pon la variable entre comillas dobles "$(Obfuscar)" ..\..\obfuscar.xml y seguramente te funcionará. Ya me lo dirás... Saludos
Existen algunos decompiladores especiales para tratar de echar atrás las ofuscaciones como De4dot (github.com/de4dot/de4dot). De hecho hay uno específico para Obfuscar llamado Deobfuscar (github.com/XenocodeRCE/DEObfuscar). En mi experiencia no funcionan muy allá...
Hola José Manuel, excelente video. Mi pregunta es, ¿por qué sólo me aparece una excepción no controlada en la aplicación obfuscada y no la de la carpeta debug o release? No he podido encontrar la fuente del error. Saludos y gracias por tu tiempo.
Hola Carlos. Pues ni idea, la verdad. Con solo esos datos complicado saberlo. Puede ser por cualquier cosa. ¿Al menos sabes qué mensaje da la excepción no controlada?
Hola José Manuel, ya encontré donde ocurre el error pero no sé cómo corregirlo: dgv1.DataSource = null; dgv1.Rows.Clear(); dgv1.Columns.Clear(); List detalleCatalogo = new List(); var source = new BindingSource(); detalleCatalogo =SelecCatalogo(LaConsulta); source.DataSource = detalleCatalogo; txtTexto1.Text = "CargaTabla editando grid Datasource: " + source.Count.ToString(); dgv1.AutoGenerateColumns = true; dgv1.DataSource = source; Cuando ejecuto la aplicación en la carpeta release se pueden ver los datos el el datagridview, pero la versión obfuscada, no me carga la lista en el datagridview. En el txtText1 valido la cantidad de filas que tiene la lista. Espero te dé una pista, gracias por responder.
Quizá el ofuscador esté renombrado una clase que utiliza el binding (si es privada seguro) y luego hay algo que no coincide al usarla. Si isa reflexión para generar las columnas seguro que viene de ahí. Marca la clase de datos para que la excluya el ofuscador del proceso de ofuscación.
Hola. En la documentación lo tienes explicado. Tienes un enlace en el artículo que acompaña al vídeo. En concreto puedes usar el ajuste SkipNamespace, explicado aquí, con ejemplos: docs.obfuscar.com/getting-started/configuration.html#id6 Saludos.
Es válido para cualquier tipo de ensamblado compilado con .NET, así que sirve par cualquier tipo de aplicación .NET: escritorio, consola, web, móvil...
Yo tengo una duda sobre este tema, y es que yo hago uso muy intensivo de reflexión, instanciando clases a partir de un string que contiene su full-qualified name, y llamando métodos de la misma forma, a partir de un string con el nombre del método. Teniendo en cuenta que al ofuscar cambia los nombre de los tipos y los métodos, ¿rompería una aplicación que utilice reflexión?
Si utilizas nombres fijos, entonces sí: rompería. De todos modos Obfuscar ofrece parámetros para controlar qué quieres que cambie y qué no. Puedes evitar que cambie los nombre de propiedades o métodos, e incluso usar expresiones regulares para decidir cuáles debe afectar y cuáles no. Puedes ver estos detalles de hilar fino en su documentación: docs.obfuscar.com/getting-started/configuration.html#settings Saludos.
oye que excelente explicación. Quisiera preguntarte el por que el cód fuente descarga del canal, no funciona. Severity Code Description Project File Line Suppression State Error The command "if Release == Release C:\Users\Developer\Downloads\campusMVP-TestObfuscarNetClasico\TestObfuscarNetClasico\packages\Obfuscar.2.2.29\build\..\tools\Obfuscar.Console.exe ..\..\obfuscar.xml" exited with code 9009. TestObfuscarNetClasico. Segui los pasos del video en otro proyecto y continua el error. Pasa igual que el debug. Sera la versión? no encuentro algo de solución.
Solo puede ofuscar ensamblados .NET. Si tienes alguno que no sea .Net (por ejemplo uno nativo que se llama con pInvoke , no podrá ofuscarlo y te dará ese error.
Buenas, al intentar Obfuscar un dll me sale codigo de error 1, pero si no obfusco el .dll y solo obfusco el .exe sale el .exe obfucado. A alguine más le pasa?
¿Seguro que la DLL que estás intentando ofuscar es una DLL de .NET?. Si es una DLL nativa o de otro tipo, Obfuscar no podrá procesarla correctamente...
Asegúrate de que tienes permisos de escritura en la ruta que estás indicando y, claro está, de que es una ruta correcta y que existe. No deberías tener problema, debe de ser un detalle tonto....
La próxima vez que me critiquen que mi código no se entiende y que no es legible ni mantenible responderé que estoy realizando una pre-ofuscación para prevenir todos estos problemas de decompilación.
Claro que funciona. Pruébalo bien. O mejor: bájate el ejemplo para .NET Core/.NET desde el post que acompaña al vídeo y verás que te funciona perfectamente si lo cambias a .NET 6.
¿Qué significa "mejor"? Es un término muy relativo. Seguro que eres buenísimo, sin duda, pero ojito, que estas herramientas son bastante potentes y tienen muchos años de trabajo detrás para todo tipo de casuísticas poco comunes. De todos modos estaría genial ver el tuyo ¿lo has publicado en GitHub? Saludos!
@@campusmvp Te puedes imaginar que si me he currado un ofuscador no soy mucho de compartir código en GitHub. Supongo que soy demasiado viejo para la moda del software libre.
Si no es para .NET, no claro. si es para .NET ¿por qué no te ha servido? ¿Te da un error? ¿No te ha funcionado? ¿o simplemente no se ajustaba a lo que estabas buscando? Un poquito de detalle vendría bien para poder aportar. Saludos.
me marca este error Gravedad Código Descripción Proyecto Categoría de proyecto Ruta de acceso Archivo Línea Columna Categoría Origen Estado suprimido Herramienta Error El comando "if Release == Release C:\Users\MANUEL\source epos\SistemComunicacional\packages\Obfuscar.2.2.38\build\..\tools\Obfuscar.Console.exe Obfuscar.xml" salió con el código 1. SistemComunicacional 4 Compilación pero yo lo tengo en .NET FRAMEWORK
Hola. Si buscas en el repositorio puedes ver que ese error con código 1 lo produce cuando una de las opciones es incorrecta (github.com/obfuscar/obfuscar/blob/master/Console/Program.cs ) Algo has puesto mal en la configurtación que hace que falle. El qué, no tengo forma de saberlo. Fíjate bien en las rutas sobre todo, pero en todas las opciones porque a veces un detalle pequeño hace que todo falle. Si das con lo que es coméntalo aquí que le puede servir a más gente. Saludos y suerte.
Gracias vi hace muchos meses este tutorial. Hoy vuelvo a retomar para sacar una linea que me faltaba de tu video. Te amo, mi juego cambio para bien obfuscando el codigo, los que hacen cheat no predicen tanto
Compa... MUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCHASSSSSSSSSSSSSSSSSSSSSSSS GRACIAS.... sufrí un robo en el cual perdí mis fuentes.... y recupere los fuentes desde las instalaciones realizadas en Cliente.... me salvaste 2 años de proyecto...!!!
Como siempre en tus vídeos aprendiento y disfrutando. Muchas gracias.
Lo acabo de implementar y quedó de lujo. Revisando la documentación pude agregar los archivos ofuscados al instalador ClickOnce . Muchas gracias.
Hola. Me ha gustado mucho el video. Práctico, didáctico y muy claro. Enhorabuena !!!
Que explicación tan bien dada. 👏👏👏
Excelente material, muchas gracias !!!
genial video, excelente explicacion, directa, amena y 100% util, felicidades
Que buen video. Gracias.
Ojo, me robaron 2 Laptops hace 2 dias, perdi toda los fuentes de mis aps de escritorio y por ende las conexiones con las bases de datos tambien, pero buscando los ejecutables respaldados me di cuenta que en forma de "analogía" "Siempre anduve con los pantalones abajo".... muy buena tecnica, por tanto apliquenlo si es que colocan las conex en duro o ese tipo de malas practicas, asegurense de recompilar y cambiar constantemente las credenciales de bases de datos
Muchas gracias por la información, podrías por favor hacer un video donde se ponga una contraseña para poder instalar, y otro de caducidad del programa cada mes o de corte del servicio cada mes, asi como funcionan los planes de celular. Feliz día.
Hola una vez ofuscado el dll lo quiero agregar a mi proyecto y obtengo errores..? No encuentra la DDL de referencia por mas que la añado al proyecto. o como seria la mejor manera de poder agregar estas dll ofuscadas
Está explicado en el vídeo. Si sigues detalladamente las instrucciones te tiene que funcionar. Hay que fijarse en los detalles, como las comillas y cosas así. Suerte!
Estimado una consulta tengo archivos .js en wwwroot con el método explicado en el video como puedo configurar el obfuscar los archivos .js, porque he tratado de cambiar las rutas pero no me sale error pero tampoco crea los archivos ofuscados... o como hago para ofuscar archivos de JS del wwwroot, muchas gracias
La ofuscación de archivos JavaScript se realiza de otra manera que nada tiene que ver con esta. Necesitas usar herramientas específicas, básicamente un gestor de tareas Front-End como Gulp o npm (que también es gestor de dependencias) y una utilidad como uglify-js. Me anoto hacer un vídeo de esto en algún momento... Saludos.
Hola, gracias por la información, estoy tratando de ofuscar, estoy en VS2019, tengo una solución con varios proyectos, el principal es un servicio web .asmx, en todos los proyectos me muestra la opción de post-compile excepto en el proyecto principal de la solución que es el servicio web, Sabes como le puedo hacer en este caso? Gracias de antemano. Saludos!
Muchas gracias por la información, que recomiendas para guardar licencias del programa que hago?
Hola. Nunca he implementado un sistema de licencias con .NET, pero he escuchado que el de .NET Reactor (www.eziriz.com/dotnet_reactor.htm) va bastante bien. Es un ofuscador que además incluye el sistema de licenciamiento. También tienen el sistema de licenciamiento por separado, sin ofuscar, IntelliLock (www.eziriz.com/). Es de pago. Espero que te sirva.
@karin Si lo pruebas coméntanos tus impresiones aquí. Gracias.
@@jmalarcon gracias por la respuesta, lo que quiero decir es que hago mi app de escritorio pero necesito crear un validador de licencia para poder evitar la distribución ilegal, yo trabajo con sistemas ERP en mi país y se le agregan funcionalidades por medio de dll
@@karinalejandrolugogutierre5395 Pues lo que te digo: tienes que, o bien crear (mala idea normalmente) o bien utilizar algún sistema de licenciamiento que te permita asignar licencias. No creo que te legara con algo que vaya únicamente en tu programa. Seguramente necesitarías algo en un servidor para hacer las validaciones, con una conexión segura para evitar que lo suplanten. El sistema Intellilock que te comento te proporciona eso. Pero seguro que hay más por ahí, aunque lo desconozco. Saludos.
Cómo añades los references de un proyecto .exe ?
hola que tal quiero utilizar el ofuscador en una de mis aplicaciones pero me sale este error que podrá ser? Severity Code Description Project File Line Suppression State
Error exited with code 9009.
Hola. Tiene pinta de ser una ruta mal escrita en la configuración del ofuscador o una carpeta a la que no tienes permisos de acceso. Mira a ver si es algo de esto, sino, no sé qué decirte, la verdad. Confírmanos por aquí... Saludos.
Hola a todos, tuve que reinstalar todo en mi máquina y ahora que quiero utilizar el obfuscar me lanza el mismo error 9009. ¿Han podido descubrir en qué consiste? Saludos a todos y gracias por la ayuda.
@@carloscuenta4766 Hola, la carpeta que contiene tu proyecto no debe tener espacios en el nombre...
Tremendo tiempo buscando el problema, es correcto, no pueden haber espacios en blanco los nombres de las carpetas. Gracias Maximiliano por la ayuda.
Hola muy buenas, como puedo encriptar en visual studio 2019? en chsarp
Exactamente igual.
@@campusmvp en el minuto 8:39 hago todo y cuando voy a recompilar me tira un error: salió con el código 9009
@@juegosretro1042 Haber empezado por ahí Si no me das datos concretos más allá de "No me funciona" malamente te podré ayudar 😉 Eso es un error muy particular. Normalmente es debido a una ruta mal puesta. Fíjate en el Output porque te dirá exactamente cuál es y qué está pasando. Si tienes todas las rutas bien, entonces es la ruta de tu propio proyecto o la de Visual Studio, que tiene espacios en blanco y seguramente por eso no funciona. En el evento post-build mete a obfuscar entre comillas dobles, así: "$(Obfuscar)" y seguramente te funcionará. Dinos aquí si es así.
@@campusmvp Muchas gracias, si era eso le faltaban las dos comillas
Hola José una pregunta cómo sería para Net core, dices que sería el pakage global, sabes cómo se invocaria te agradezco gracias bye
Hola Celestino: el cómo usarlo en .NET Core y .NET lo tienes explicado en el propio vídeo, a partir del minuto 12:24 (mira los capítulos). Lo que digo al principio es que existe una versión en forma de Global Tool. Una Global Tool es una extensión para la herramienta de línea de comandos dotnet de .NET Core/.NET que permite agregar herramientas a ésta. Si la quieres usar desde la línea de comandos, entonces la necesitas. Pero si lo que quieres es usarla de la misma manera que explico en el vídeo, o sea desde Visual Studio, te lo explico en esa parte que te señalo. Saludos.
Excelente video!!, muchas gracias por compartir. Una pregunta ¿Cuál es la forma correcta de manejar por ejemplo claves que se tengan escritas en el código?
Hola Jorge. En el código jamás deberías tener escrito nada que pueda considerarse secreto o "sensible" en modo alguno y, como comento en el vídeo, la ofuscación no es encriptación, por lo que aunque ofusques las cadenas siempre hay manera de acceder a ellas. .NET Core tiene una característica específica para almacenar secretos (puedes ver esto en nuestro blog: www.campusmvp.es/recursos/post/como-guardar-secretos-en-nuestras-aplicaciones-de-net-core-sin-peligro-de-enviarlos-a-github-por-error.aspx) per está pensada más para no revelar secretos por error en un repositorio. Luego en producción dependerá del tipo de aplicación cómo los hagas llegar hasta la misma. Por ejemplo, en aplicaciones Web si las albergas en una Azure Web App puedes establecerlos desde la UI de Azure. Si es otro tipo de app puedes usar variables de entorno y otros métodos. Pero, en resumen: con o sin ofuscación nunca deberías almacenar nada secreto en tu código. Saludos.
buenas , esto ofusca tambien archivos js(javascript)?
Solamente .NET. para JavaScript usa Uglify.js...
No pude ofuscar el codigo para .net core 5
Pues revisa bien todos los detalles, porque funciona bien con cualquier versión de .net. es más, si no recuerdo mal, es video esta hecho con .net 5. Saludos.
Hola muchas gracias por la excelente explicación. Una consulta. En el video al final dices que más importante que el código son 'las decisiones que se toman al hacer ese código' que eso habría que proteger, quizás la respuesta es muy obvia pero ¿a qué te refieres?. Gracias.
Hola Roberto. Pues me refiero a miles de pequeñas decisiones que se toman en la aplicación durante el desarrollo que afectan a cosas como el tipo de funcionalidad concreto que se crea (y no otro diferente), la manera de hacer una determinada cosa entre las miles que puede haber, código "feo" pero más fácil de entender aunque sea menos óptimo que otro... Esas cosas. Dentro de un producto no trivial existen cientos o miles de estas decisiones que se suelen tomar, a veces tras largas discusiones con otras personas, y que, de hecho, conviene documentar bien directamente en el código bien de manera más formal. Por ejemplo, nosotros, en nuestra plataforma de e-Learning que es la que usa campusMVP, llevamos más de 15 años de desarrollo, con centenares de características y muchísimas decisiones tomadas que de vez en cuando vuelven a surgir. Las tenemos documentadas en la mayor parte de los casos, bien en comentarios si son simples o bien en documentación interna si eran más complejas, para saber por qué algo se hizo de una determinada manera y no de otra, porque al cabo de los meses y los años no lo sabes ya. Sin ese conocimiento, el código tan solo de la aplicación no nos valdría de mucho y a uno que nos lo copiara tampoco, porque ante ciertos problemas no sabría como actuar o por qué se han hecho las cosas de manera determinada y que puede parecer absurda en un momento dado. No sé si así me explico mejor, pero es untema interesante. Quizá deberíamos hacer un debate con algunos expertos algún día. Saludos!
Hola José Manuel, muchas gracias. La verdad me ayudas con lo que respondes. No lo había pensado antes, gracias. Saludos.
Hola,cómo haría para crear un instalador a partir del código ofuscado de un proyecto hecho vb.net?
Hola me gustaría saber también, lo lograste hacer?
Gracias . Lo implemente pero tengo un problema. Dentro de mi app hay un formulario que lee una base de datos que ademas se encripto. Bueno el formulario abre pero no puede leer la base de datos. Sin ofuscar todo funciona bien. Tal vez me puedas ayudar a solucionarlo
Lo siento. Ni idea: tendría que conocer bien la aplicación y cómo está hecho eso. Mira bien la documentación de Obfuscar para ver cómo trata las cadenas y cómo puedes omitir ciertas cosas de la ofuscación. De todos modos si tienes una clave para acceder a la base de datos metida en el código mejor no lo hagas. por mucho que la ofusques se puede averiguar y jamás deberías meter nada sensible como esto en el código de la aplicación. Saludos y suerte!
Ya consigo que funcione, pero mi programa usa archivos json y no llega a serializar bien, no hace nada si obfusco, ¿Alguna Sugerencia?
Solo obfusco el ejetuble
Hola. La ofuscación de código suele causar problemas con la serialización, ya que muchas de las clases que tienes no son públicas y al ofuscarlas se ofuscan también sus nombres de propiedades o incluso de la propia clase. Lo que tienes es que revisar qué clases serializas, y si no son públicas marcarlas para que no se ofusquen, configurando Obfuscar para excluir ciertas clases o propiedades concretas del proceso de ofuscación (consulta la documentación). Otra estrategia, seguramente mejor, es meter esas clases en su propio ensamblado (una DLL propia) que no se incluya en el proceso de ofuscación. Saludos.
No se si alguien sabe como ofuscar una base de datos access, excel o incluso .mdf? alguna idea? gracias saludos
if $(ConfigurationName)==Release $(Obfuscar) ..\..\obfuscar.xml me aparece el error 9009, ¿Sabrias por qué ocurre?. No se como agregar la referencia al proyecto y aparece como ya instalada
Es un error de ruta. Seguramente la ruta donde tienes Obfuscar contiene espacios. Pon la variable entre comillas dobles "$(Obfuscar)" ..\..\obfuscar.xml y seguramente te funcionará. Ya me lo dirás... Saludos
Al estar ofuscado el código.. con cual programa podía recuperar el código fuente
Existen algunos decompiladores especiales para tratar de echar atrás las ofuscaciones como De4dot (github.com/de4dot/de4dot). De hecho hay uno específico para Obfuscar llamado Deobfuscar (github.com/XenocodeRCE/DEObfuscar). En mi experiencia no funcionan muy allá...
Hola José Manuel, excelente video. Mi pregunta es, ¿por qué sólo me aparece una excepción no controlada en la aplicación obfuscada y no la de la carpeta debug o release? No he podido encontrar la fuente del error. Saludos y gracias por tu tiempo.
Hola Carlos. Pues ni idea, la verdad. Con solo esos datos complicado saberlo. Puede ser por cualquier cosa. ¿Al menos sabes qué mensaje da la excepción no controlada?
Hola José Manuel, ya encontré donde ocurre el error pero no sé cómo corregirlo:
dgv1.DataSource = null;
dgv1.Rows.Clear();
dgv1.Columns.Clear();
List detalleCatalogo = new List();
var source = new BindingSource();
detalleCatalogo =SelecCatalogo(LaConsulta);
source.DataSource = detalleCatalogo;
txtTexto1.Text = "CargaTabla editando grid Datasource: " + source.Count.ToString();
dgv1.AutoGenerateColumns = true;
dgv1.DataSource = source;
Cuando ejecuto la aplicación en la carpeta release se pueden ver los datos el el datagridview, pero la versión obfuscada, no me carga la lista en el datagridview. En el txtText1 valido la cantidad de filas que tiene la lista.
Espero te dé una pista, gracias por responder.
Quizá el ofuscador esté renombrado una clase que utiliza el binding (si es privada seguro) y luego hay algo que no coincide al usarla. Si isa reflexión para generar las columnas seguro que viene de ahí. Marca la clase de datos para que la excluya el ofuscador del proceso de ofuscación.
Es primera vez usando Obfuscador, ¿podrías dame un ejemplo de cómo hacer esa exclusión? Muy agradecido.
Hola. En la documentación lo tienes explicado. Tienes un enlace en el artículo que acompaña al vídeo. En concreto puedes usar el ajuste SkipNamespace, explicado aquí, con ejemplos: docs.obfuscar.com/getting-started/configuration.html#id6
Saludos.
Funciona para WPF ?
Claro, pero te sacará la versión de código de la yo, no el XAML.
Esto funcionaria , para una aplicación Xamarin Forms IOS?
Funciona en cualquier aplicación.net en principio...
@@campusmvp vale, muchas gracias
Excelente.. gracias! una pregunta: "¿Es valido solo para aplicaciones de Escritorio o también para Web o Móvil? ".. Saludos desde Perú!
Es válido para cualquier tipo de ensamblado compilado con .NET, así que sirve par cualquier tipo de aplicación .NET: escritorio, consola, web, móvil...
@@campusmvp Gracias!
Yo tengo una duda sobre este tema, y es que yo hago uso muy intensivo de reflexión, instanciando clases a partir de un string que contiene su full-qualified name, y llamando métodos de la misma forma, a partir de un string con el nombre del método.
Teniendo en cuenta que al ofuscar cambia los nombre de los tipos y los métodos, ¿rompería una aplicación que utilice reflexión?
Si utilizas nombres fijos, entonces sí: rompería. De todos modos Obfuscar ofrece parámetros para controlar qué quieres que cambie y qué no. Puedes evitar que cambie los nombre de propiedades o métodos, e incluso usar expresiones regulares para decidir cuáles debe afectar y cuáles no. Puedes ver estos detalles de hilar fino en su documentación: docs.obfuscar.com/getting-started/configuration.html#settings
Saludos.
oye que excelente explicación. Quisiera preguntarte el por que el cód fuente descarga del canal, no funciona.
Severity Code Description Project File Line Suppression State
Error The command "if Release == Release C:\Users\Developer\Downloads\campusMVP-TestObfuscarNetClasico\TestObfuscarNetClasico\packages\Obfuscar.2.2.29\build\..\tools\Obfuscar.Console.exe ..\..\obfuscar.xml" exited with code 9009. TestObfuscarNetClasico.
Segui los pasos del video en otro proyecto y continua el error. Pasa igual que el debug. Sera la versión? no encuentro algo de solución.
Para los que tengan problema, lo solucione asi: "$(Obfuscar)" ..\..\XMLFile1.xml
Incluyan las cominas en el build Events.
@@cerberustecnologia Tengo el mismo problema y no se soluciona con las comillas.
a mi me daun error que no me deja ofuscar How to troubleshoot BadImageFormatException?, me da error
Solo puede ofuscar ensamblados .NET. Si tienes alguno que no sea .Net (por ejemplo uno nativo que se llama con pInvoke , no podrá ofuscarlo y te dará ese error.
Buenas, al intentar Obfuscar un dll me sale codigo de error 1, pero si no obfusco el .dll y solo obfusco el .exe sale el .exe obfucado. A alguine más le pasa?
¿Seguro que la DLL que estás intentando ofuscar es una DLL de .NET?. Si es una DLL nativa o de otro tipo, Obfuscar no podrá procesarla correctamente...
@@campusmvp Si, también verifique que tengan la misma version de .NET
no me esta copiando el .exe al directorio ofuscado, estoy intentando seguir la ruta de mi pc y aun nada.
Asegúrate de que tienes permisos de escritura en la ruta que estás indicando y, claro está, de que es una ruta correcta y que existe. No deberías tener problema, debe de ser un detalle tonto....
La próxima vez que me critiquen que mi código no se entiende y que no es legible ni mantenible responderé que estoy realizando una pre-ofuscación para prevenir todos estos problemas de decompilación.
Para Net 6 no funciona este ejemplo
Claro que funciona. Pruébalo bien. O mejor: bájate el ejemplo para .NET Core/.NET desde el post que acompaña al vídeo y verás que te funciona perfectamente si lo cambias a .NET 6.
joder, funciona mejor mi obfuscador, y lo he hecho en 15 días en core. jajajajaja. al final voy a pensar que soy bueno
¿Qué significa "mejor"? Es un término muy relativo. Seguro que eres buenísimo, sin duda, pero ojito, que estas herramientas son bastante potentes y tienen muchos años de trabajo detrás para todo tipo de casuísticas poco comunes. De todos modos estaría genial ver el tuyo ¿lo has publicado en GitHub? Saludos!
@@campusmvp como te puedes imaginar, no soy yo mucho de publicar en github
@@campusmvp Te puedes imaginar que si me he currado un ofuscador no soy mucho de compartir código en GitHub. Supongo que soy demasiado viejo para la moda del software libre.
Segun el video, logre ofuscar el .dll, ahora como lo ejecuto ?... digo por que si no se puede gg
No sé qué tipo de programa estás ofuscando, pero el .exe es solo un lanzador nativo. Tú código va en la DLL.
La verdad que la ofuscacion solo ayuda en tiempo, quizas unos dias...
Este video ya no es válido para aplicaciones Net 6 en adelante
Por suposto que sí. Míralo bien 😉
No me ha servido
Si no es para .NET, no claro. si es para .NET ¿por qué no te ha servido? ¿Te da un error? ¿No te ha funcionado? ¿o simplemente no se ajustaba a lo que estabas buscando? Un poquito de detalle vendría bien para poder aportar. Saludos.
me marca este error Gravedad Código Descripción Proyecto Categoría de proyecto Ruta de acceso Archivo Línea Columna Categoría Origen Estado suprimido Herramienta
Error El comando "if Release == Release C:\Users\MANUEL\source
epos\SistemComunicacional\packages\Obfuscar.2.2.38\build\..\tools\Obfuscar.Console.exe Obfuscar.xml" salió con el código 1. SistemComunicacional 4 Compilación
pero yo lo tengo en .NET FRAMEWORK
Hola. Si buscas en el repositorio puedes ver que ese error con código 1 lo produce cuando una de las opciones es incorrecta (github.com/obfuscar/obfuscar/blob/master/Console/Program.cs ) Algo has puesto mal en la configurtación que hace que falle. El qué, no tengo forma de saberlo. Fíjate bien en las rutas sobre todo, pero en todas las opciones porque a veces un detalle pequeño hace que todo falle. Si das con lo que es coméntalo aquí que le puede servir a más gente. Saludos y suerte.
con esta cadena es como a mi me fusiono
if $(ConfigurationName) == Release "$(Obfuscar)" ..\..\obfuscar.xml