Usted puede crear su propio mapa privado para obtener nuevos nombres de los antiguos. Mapper debe escribir la tabla de una especie de disco/db con el siguiente estructura: Módulo (ejecutable), Índice, OriginalType, ObfuscatedType
Crear aplicación de consola "Mapper" que opera en dos modos basado en un argumento: La aplicación recibirán como argumento de ruta ejecutable
- Asamblea carga
- getTypes de loadedAssembly
- PreObfuscation elimina todas las entradas y escribe de nuevo los índices y valores OriginalType. Actualizaciones de PostObfuscation ObfuscatedType por índice. Los eventos posteriores a la construcción deben ser las siguientes:
- Mapper.exe "target.exe" "Pre"
- [Ofuscación]
- Mapper.exe "target.exe" "Post"
Ahora necesita una función para obtenerObfuscatedName de OriginalName y listo.
Tenga en cuenta que esta solución no funcionará con la poda como el número de tipos va a cambiar y los índices ya no coincidirán entre
OriginalAssembly.GetTypes()
y
ObfuscatedAssembly.GetTypes()
miembros Normalmente públicas no están ofuscadas (o al menos hay una opción para no ofuscar a los miembros públicos) – xanatos
@asbjornu - ¿Hay algún método para reflexionar y evitar el uso del nombre de los miembros? – amirhosseinab
Una solución (o no) sería crear una clase estática, que tenga un diccionario System.Type y luego, cuando necesite usar la reflexión, obtenga el tipo de este diccionario. Así que no importa qué nombre el método/clase se convirtió después del obsfucador, usted todavía tiene una referencia para eso. Por supuesto, si tiene tipos incontables en su ensamble, terminará con un gigante, sin ninguna clase estática de patrón de diseño, que podría causar problemas de rendimiento en su aplicación y también excepciones no controladas. –