¿La ofuscación solo tiene que ver con el engrosamiento de los nombres de las variables/miembros no públicos? Si es así, ¿no sería posible escribir una aplicación que al menos podría cambiar estos nombres más leíbles como "variable1", etc., y luego extraer todo el código que todavía se puede compilar?Cómo invertir la ofuscación en .NET?
Respuesta
No, se trata de mucho más, especialmente con los ofuscadores más sofisticados. Pueden producir IL que no se puede expresarse en la mayoría de los idiomas, y donde el flujo lógico está horriblemente enredado para confundir a las mejores herramientas. Con montones de tiempo puedes hacerlo (probablemente muchos a mano), y ciertamente hay una carrera de armamentos entre los ofuscadores y los desofuscadores, pero subestimas enormemente la tecnología aquí.
Además, tenga en cuenta que muchos ofuscadores miran una aplicación completa (no solo un ensamblaje), por lo que también pueden cambiar la API pública.
Esto suena genial, ¿tienes un enlace para esto? Suena completamente rad! – stefan
@stefan echa un vistazo a http://brajeshmahor.blogspot.com/2010/11/code-security-net-obfuscation.html – BrokenGlass
@BrokenGlass que no hace nada de lo que escribió Marc Gravell. Y yo no supongo que puedas obtener un código 1: 1, sino una pieza de código compilable y fácil de analizar. – stefan
Ofuscación se trata de cambiar nombres significativos como accountBalance
a los sin sentido como a1
. La aplicación obviamente seguirá funcionando, pero será más difícil de entender los algoritmos que contiene.
Esa es una (estúpida) forma de ofuscación yup. Imagina que estás drogado con LSD y aún así haces que las cosas funcionen. Eso es una buena ofuscación. – stefan
LOL, gran comentario. –
Depende de la tecnología de ofuscación utilizada. El nombre de variable obstructivo es solo una parte del problema. Muchas herramientas de ofuscación realizan algún tipo de ofuscación de flujo de programa al mismo tiempo, lo que complicará aún más la comprensión del código. Al final, el IL ofuscado no se podrá expresar fácilmente (si es que lo hace) en la mayoría de los lenguajes de programación.
Renombrar las variables y los campos tampoco te ayudará mucho, ya que tener muchas variables1, variables2 ... no te ayudará a entender lo que lees.
Ese es ciertamente el start de un ofuscador. Aunque algunos ofuscadores también encriptarán cadenas y otros trucos para que sea muy difícil aplicar ingeniería inversa al conjunto.
Por supuesto, ya que el tiempo de ejecución necesario para ejecutar el montaje después de todo esto, es posible que un hacker decidido a técnicas de ingeniería inversa :)
Hay 'Deobfuscator' herramientas para deshacer varias técnicas de ofuscación como Descifrar cadenas, Eliminar métodos proxy, Devirtualizar código virtualizado, Eliminar código anti-depuración, Eliminar clases basura, Restaurar los tipos de parámetros y campos del método y más ...
Una herramienta muy poderosa es de4dot.
Pero hay more.
- 1. Serialización y ofuscación en .NET
- 2. ofuscación de .NET exe/dll
- 3. Componente .NET para la ofuscación de JavaScript?
- 4. Método más rápido para invertir en cadena en C# .net
- 5. Cómo invertir tuplas en Python?
- 6. Cómo invertir System.loadLibrary en Java
- 7. Ofuscación de múltiples ensamblados .NET relacionados con obfuscator de babel
- 8. ¿La ofuscación afecta el rendimiento?
- 9. (¿Por qué) debo usar ofuscación?
- 10. ¿Cómo usar ofuscación para ClickOnce?
- 11. Cómo invertir String.fromCharCode?
- 12. Cómo invertir la salida de sed?
- 13. ¿Cómo funciona la ofuscación de cadenas en ofuscadores?
- 14. Invertir enumerable en Ruby
- 15. Cómo invertir en bits AND (&) en C?
- 16. ofuscación y GPL
- 17. Ofuscación de imágenes
- 18. Método de ofuscación con la cláusula throws
- 19. Cómo invertir una std :: string?
- 20. Cómo invertir una expresión grep
- 21. webapp2 - ¿Cómo invertir URL en plantillas?
- 22. Contiene(), cómo invertir utilizando lambda
- 23. Cómo invertir los datos en NSMutableArray?
- 24. Invertir número en C#
- 25. Invertir diccionarios en Python
- 26. Cómo invertir una lista en Java?
- 27. Cómo invertir palabras en una cadena?
- 28. Ofuscación de Flex/Air
- 29. Ofuscación Asamblea y Reflexión
- 30. ¿Cómo puedo invertir la caja de una cadena en Java?
Por supuesto que es posible. Por lo general, se llama ingeniería inversa/desensamblar/descompilar, etc. (si está buscando una herramienta). – stefan
Para ver un ejemplo de una herramienta de este tipo, consulte http://de4dot.com/ – gregmac