Hola gente!
Meto cuchara . Lo que Diego puso en su ejemplo, es que el ofuscador LE CAMBIA LOS NOMBRES a todos los métodos y variables a las QUE PUEDA cambiar sin cambiar la semántica del codigo. Lo hace de tal manera que la semántica de la ejecución no cambia. Si, digamos, antes teníamos MiIngresoAnual *= 2; IndiceDeInflacion /= 2; Lo cambia a A *= 2; B /= 2; Sigue haciendo lo mismo, pero se pierden los nombres. Cualquier decompilador decompilara: A *= 2; B /= 2; Si un decompilador decompilara luego de la ofuscación de arriba, a: MiIngresoAnual *= 2; IndiceDeInflacion /= 2; Buen decompilador será!!! ;-) Supongo que debe haber por ahí un utilitario que nos permita alterar los nombres A y B, para que sean mas entendibles, y regrabar el assembly. Sino, siempre queda el ILDASM, volcarlo a texto, armarse de paciencia, y cambiar esos nombres .. ;-) Nos leemos! Angel Java Lopez http://www.ajlopez.com/ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Leonardo Micheloni Sent: Wednesday, April 30, 2008 2:57 PM To: [email protected] Subject: [SPAM] [puntonet] Libro sobre arquitectura del NetFramework Diego, lo que creo que dice Oscar es que estamos de acuerdo con el el IL es el mismo y que el CLI lo interpreta, ahora, si esto es así, por qué no lo puedo descompilar de un modo legible? 2008/4/30 Diego Jancic <[EMAIL PROTECTED]>: Oscar, Te pego aca un IL sin obfuscar: IL_0011: brtrue.s IL_001e IL_0013: ldstr ".\\Private$\\AccuMessages" IL_0018: newobj instance void [ProcessingServer.Common]ProcessingServer.Common.QueueNotExistsException::.c tor(string) IL_001d: throw IL_001e: ldc.i4.1 IL_001f: stsfld bool ProcessingServer.Client.Helper::isValidQueue IL_0024: ldstr ".\\Private$\\AccuMessages" Y despues el mismo IL, obfuscado a mano: IL_0011: brtrue.s IL_001e IL_0013: ldstr ".\\Private$\\AccuMessages" IL_0018: newobj instance void [a]a.b.c::.ctor(string) IL_001d: throw IL_001e: ldc.i4.1 IL_001f: stsfld bool a.b.d::x IL_0024: ldstr ".\\Private$\\AccuMessages" No obfusque el string porque es mas complicado, pero: podes decirme que hace el primer y el segundo bloque de IL ?? El primero es facil... sabes que tenes un servidor que hace procesamiento (ProcessingServer), que esta validando el nombre de una Queue y que tira una excepcion... del segundo no podes saber nada, pero para el CLR es exactamente lo mismo, por eso anda... Espero que se entienda.. Saludos
