obfuscated - obfuscation libro
¿Cómo usar ConfuserEx? (3)
Me gustaría probar este programa, pero no pude averiguar cómo usarlo.
He buscado en el sitio del autor https://github.com/yck1509/ConfuserEx pero el ejemplo en este sitio no es lo suficientemente claro para alguien nuevo en la programación como yo.
Así que publico mi pregunta aquí con la esperanza de que alguien me muestre cómo usarla en un lenguaje sencillo y junto con algunos ejemplos. Sería tan grande y muy apreciado.
Esta respuesta cubre los casos en los que tiene una solución con (A) varios proyectos que pueden hacer referencia entre sí, y (B) está buscando automatizar la ofuscación en un proyecto de instalación de Visual Studio.
1) Agregue en cada uno de sus proyectos un archivo de texto Confuser.crproj, directamente en la carpeta del proyecto. En esta carpeta debería ver dentro de las carpetas "bin", "ob", "resources", etc. No es necesario adjuntar estos archivos a su solución en Visual Studio. El archivo de texto debería verse así:
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="obj/Release" outputDir="../Release" xmlns="http://confuser.codeplex.com">
<rule preset="none" pattern="true">
<protection id="anti debug" />
<protection id="anti dump" />
<protection id="anti ildasm" />
<protection id="anti tamper" />
<protection id="constants" />
<protection id="ctrl flow" />
<protection id="invalid metadata" />
<protection id="ref proxy" />
<protection id="resources" />
</rule>
<module path="MyLibrary.dll" />
<probePath>../../bin/Release</probePath>
</project>
Reemplace MyLibrary.dll para la salida de su proyecto. (Y reemplace .dll por .exe si es un ejecutable).
ConfuserEX elige diferentes puntos de inicio para rutas relativas, por eso las rutas se ven extrañas en el archivo.
El elemento clave de este paso es ofuscar la salida "obj" de cada uno de sus proyectos. Esto es para ayudar a su proyecto de instalación de Windows a recoger las versiones ofuscadas.
2) En el evento posterior a la compilación de cada uno de sus proyectos, agregue un evento posterior a la compilación como el siguiente:
if "$(ConfigurationName)" == "Release" $(SolutionDir)../ConfuserEX/Confuser.CLI.exe $(ProjectDir)Confuser.crproj
La primera condición es ofuscar solo cuando se construye en Liberación. Aquí deberá ajustar las rutas para que coincidan con la ruta de su Confuser.CLI.exe. Tengo mi carpeta ConfuserEX junto con la carpeta raíz de la solución.
3) En su proyecto de instalación, el problema que debemos abordar es asegurarnos de que el empaque recoja sus versiones ofuscadas. La configuración tiene una lógica poco clara para decidir desde qué carpeta se recoge cada ensamblaje. Lo forzaremos a recoger los correctos. Para esto, tienes que:
(3a) agregue todos sus proyectos como "Resultados del proyecto", esto asegura que los archivos confusos en sus carpetas "obj" lleguen al paquete.
(3b) verifique la sección "dependencias detectadas" de su proyecto de instalación. Cuando vea una dependencia generada por uno de sus proyectos, vaya a sus Propiedades y márquela como Excluir = Verdadero. Esto asegura que sus versiones confusas en el paquete no sean reemplazadas por versiones no ofuscadas debido al proceso de inferencia.
Obtenga la última versión de los binarios desde aquí: https://github.com/yck1509/ConfuserEx/releases
Para usar en la línea de comandos (Confuser.CLI.exe):
Confuser.CLI.exe myProjectFile.crproj
Ejemplo de archivo de proyecto:
<?xml version="1.0" encoding="utf-8"?>
<project baseDir="c:/" outputDir="c:/Confused" xmlns="http://confuser.codeplex.com">
<rule preset="none" pattern="true">
<protection id="anti debug" />
<protection id="anti dump" />
<protection id="anti ildasm" />
<protection id="anti tamper" />
<protection id="constants" />
<protection id="ctrl flow" />
<protection id="invalid metadata" />
<protection id="ref proxy" />
<protection id="rename" />
<protection id="resources" />
</rule>
<module path="ICSharpCode.AvalonEdit.dll" />
<module path="ICSharpCode.Decompiler.dll" />
<module path="ICSharpCode.NRefactory.dll" />
<module path="ICSharpCode.NRefactory.CSharp.dll" />
<module path="ICSharpCode.NRefactory.VB.dll" />
<module path="ICSharpCode.TreeView.dll" />
<module path="ILSpy.BamlDecompiler.Plugin.dll" />
<module path="ILSpy.exe" />
<module path="ILSpy.SharpDevelop.LGPL.dll" />
<module path="Mono.Cecil.dll" />
<module path="Mono.Cecil.Pdb.dll" />
</project>
Formato de archivo de configuración: https://github.com/yck1509/ConfuserEx/blob/master/docs/ProjectFormat.md
Para usar con la GUI (ConfuserEx.exe):
- En la pestaña Proyecto
- Elija un directorio base
- Haga clic en el botón + para agregar DLL (módulos)
- En la pestaña Configuración
- Haga clic en <Configuración global>
- Haga clic en el botón +. Se añade una nueva regla. Cuando el patrón coincide, la regla se ejecuta, por lo que "Verdadero" significa que la regla siempre se ejecutará.
- Haga clic en el botón Editar.
- Elija el preset "Máximo" y luego cierre
- En la pestaña Proteger
- Haga clic en Proteger!
Para cualquier otra persona que tenga problemas: lo descargué y al maestro le falta el dnlib. Puede descargar por separado la copia de dnlib en la carpeta de dnlib y luego compilar.
Eso debería funcionar para la mayoría, sin embargo, para mí en contra de mi exe, dio un error de "formato de dos incorrecto" en cualquier exe. Pensé que tal vez ya había actualizado a vs2015 y 4.5.3 (.net 5 o 6 o como quieran llamarlo ahora). Pensé que tal vez eso era todo. pero no fue así (la compilación más alta fue 4.5).
Buscando en Google, asumí que no podía actualizar los archivos, así que pasó 1 hora + convirtiendo las tuplas de su clase en .net 4 tuplas. y actualizando todos los proyectos a 4.5.
Si pueden, deben verificar su bifurcación de github y hacer clic en descargar, luego compilar ... debería compilar desde el sitio y no. Estoy seguro de que este es un gran producto. Solo un poco rudo ya que no está hecho para ser usado por Juniors. Tal vez usted podría simplemente tener un enlace a un EXE? Eso puede ayudar para que las personas no estén lidiando con los problemas de compilación.
Por cierto cosas realmente buenas, parece que esto hace muchas cosas, incluso las pagadas no solo tienen una curva de aprendizaje.
Otra nota parece que tienes un RuntimeEnvironment.GetSystemVersion()[1] == 4
allí debería ser (con algo de análisis) RuntimeEnvironment.GetSystemVersion()[1] > 3.9
para que obtengas 4 y 4.5
**actualizar. Actualizado a 4.5 y arrastrar y soltar dejó de funcionar, sigue funcionando como se describe anteriormente. Iba con 4.5.3 pero no estás usando ninguna de las nuevas funciones.
Con lo que terminé, lo editaré más tarde para indicar si está funcionando. https://onedrive.live.com/redir?resid=88D92E4D40C0593C%21105
Yendo con lo de arriba.