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






Responder a