"ahora, menos mal que no trabajo en la empresa X que dice Oscar" :-)
Esa Empresa X podemos ser nosotros mismos. Por eso rompo tanto. =)
El consumidor, quizás no sea un desarrollador, sino alguien que quiere eso
funcionando.
No conocía Mono.Cecil, lo voy a espiar despues.
Saludos
El día 30 de abril de 2008 15:34, Leonardo Micheloni <
[EMAIL PROTECTED]> escribió:
> Jugando con el SoftICE me encontré con que muchas veces la mejor
> protección contra la descompilación es programar de una majera muy
> complicada la parte que uno no quiere que otro vea. De todos modos como dice
> Angel se puede levantar el código y modificarlo on the fly (tal vez con
> Mono.Cecil) y grabarlo de nuevo, ahora, menos mal que no trabajo en la
> empresa X que dice Oscar :-)
> Saludos
> 2008/4/30 Leonardo Micheloni <[EMAIL PROTECTED]>:
>
> > Ah sí, ya veo, pero es lo mismo que se hace con el SofIce, ves el código
> > descompilado bien crudo, o sea la ofuscación no es tal sino es un poco de
> > pérdida de información nomás por lo que me decís. No veo que sea de mucha
> > utilidad, pensé que era algo más sofisticado. Yo he descompilado programas
> > hechos en assembler (para microcontroladores) a C y es entendible, o sea, es
> > entendible si lo que buscás es saltar una protección, no copiarte una lógica
> > compleja, bueno no sé, por lo que entiendo (y corregime si me equivoco) no
> > es muy distinto a cuando a uno le toca modificar la aplicación que hizo otra
> > persona y no dejo ni un comentario y escribió el código de un
> > modo....ofuscado digamos :-) ...habría que ver qué es lo que queda al
> > descompilar el código de Oscar...
> > Bytes!
> > 2008/4/30 Diego Jancic <[EMAIL PROTECTED]>:
> >
> > > Hola Leo, Es justamente de lo que estoy hablando... el tema es que el
> > > IL no es
> > > el mismo... estas perdiendo todos los nombres de las cosas...
> > > Vos lo podrias descompilar a C# o a lo que quieras, pero verias algo
> > > asi (por inventar algo):
> > > public class a
> > > {
> > > private int a(string a, int b)
> > > {
> > > return b + b.d.e(b,a);
> > > }
> > > }
> > > Obviamente eso esta bien.. pero nadie sabe lo que hace porque no se
> > > entiende...
> > > El IL es el mismo a nivel logico (usar una variable llamada a o
> > > llamada Id no va a cambiar la logica), pero es diferente para un
> > > humano que quiere entenderlo...
> > > Es por eso que es muy facil descompilarlo, pero muy dificil (o
> > > imposible) hacerlo entendible...
> > > saludos!
> > > 2008/4/30 Leonardo Micheloni <[EMAIL PROTECTED]>:
> > > > 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::.ctor(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
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > 2008/4/30 Oscar Onorato <[EMAIL PROTECTED]>: > > >
> > > > > >
> > > > > > Claro, es eso justamente. > > >
> > > > > > Por eso no termino de entender cómo hace el NetFx para
> > > reinterpretarlo.
> > > > Por eso en el email inicial preguntaba sobre uno o unos buenos
> > > textos sobre
> > > > la arquitectura interna del NetFramework. Para conocer qué pasa
> > > internamente
> > > > en este tipo de casos.
> > > > > >
> > > > > > Gracias Luis
> > > > > >
> > > > > >
> > > > > > El día 30 de abril de 2008 12:37, Luis Farzati <
> > > [EMAIL PROTECTED]> > escribió:
> > > > > >
> > > > > > >
> > > > > > > Acá tenés una página interesante:
> > > > > > >
> > > > > > >
> > > >
> > > http://www.lesser-software.com/en/content/products/LSW%20DotNet-Tools/LSW_DotNet_IL-Obfuscator.htm
> > > > > > >
> > > > > > > "Decompilation of Assemblies to human readable source-code is
> > > possible
> > > > because of the containment of meta data in the Assemblies and
> > > because of the
> > > > higher level of the compiled "MSIL" code.
> > > > > > > The LSW IL-Obfuscator ( LSW-ILOBF ) is a tool to make the
> > > > Decompilation "useless" because it destroys the Metadata information
> > > by
> > > > replacing meaningful Names by meaningless ones."Esto último es lo
> > > que te
> > > > está pasando a vos?
> > > > > > >
> > > > > > > Un saludo,
> > > > > > >
> > > > > > > Luis
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > 2008/4/30 Luis Farzati <[EMAIL PROTECTED]>:
> > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > Hola Oscar,
> > > > > > > >
> > > > > > > > Me parece que hay una confusión, el IL no se puede
> > > obfuscar... O sea
> > > > no hay un IL obfuscado y un IL no obfuscado, ya que es lo que
> > > ejecuta el
> > > > runtime del framework. Sería como querer obfuscar el binario de un
> > > EXE, no
> > > > funcionaría.
> > > > > > > >
> > > > > > > > Cuando decompilás, te encontrás con código que pareciera
> > > haber
> > > > estado obfuscado por la simple razón de que el descompilador no
> > > tiene idea
> > > > de la vida :P excepto saber la lógica del programa. No te va a poner
> > > los
> > > > nombres de variables (ya que esa info no se guarda en IL) y va a
> > > generar
> > > > nombres aleatorios o secuenciales (a, b, c, a1, b1) y cualquier otro
> > > > syntactic sugar que puedas usar en C# / VB.NET <http://vb.net/>tampoco
> > > > lo vas a ver en el
> > > > código fuente generado por un descompilador.
> > > > > > > >
> > > > > > > > Un saludo!
> > > > > > > >
> > > > > > > > Luis
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > 2008/4/30 Diego Jancic <[EMAIL PROTECTED]>:
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Hola Oscar,
> > > > > > > > > No se cuales son tus objetivos, pero me parece que bien no
> > > se
> > > > puede hacer...
> > > > > > > > > Es decir, si tenes un metodo que se llama ObtenerPorId y
> > > cuando lo
> > > > obfuscas se llama "a", obviamente estas perdiendo informacion y no
> > > lo podes
> > > > desobfuscar...
> > > > > > > > > Ahora, podrias inventar un nuevo nombre en base al
> > > contenido...
> > > > pero no lo veo muy exacto..
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > 2008/4/30 Oscar Onorato <[EMAIL PROTECTED]>:
> > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > Gracias Diego,
> > > > > > > > > >
> > > > > > > > > > Gracias por la herramienta, había perdido el Link. La
> > > había
> > > > usado en la versión .NET 1.1
> > > > > > > > > >
> > > > > > > > > > Aunque en realidad quiero hacer una App para que
> > > "desofusque".
> > > > Es decir, si estoy viendo una DLL decompilada -el IL- y está
> > > ofuscada,
> > > > quiero cargar esa parte ofuscada en una App propia para que traduzca
> > > esa
> > > > parte a un IL no ofuscado.
> > > > > > > > > >
> > > > > > > > > > Por eso antes necesito entender el IL como si fuese C#.
> > > Aunque
> > > > sé que me va a costar un poco más.
> > > > > > > > > >
> > > > > > > > > > Salutti
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > El día 30 de abril de 2008 11:38, Diego Jancic
> > > > <[EMAIL PROTECTED]> escribió:
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Si tu idea es solamente ver el codigo obfuscado, podes
> > > usar
> > > > reflector y verlo en C# o cualquier otro lenguaje sin ser un dios...
> > > > > > > > > > > La obfuscacion basicamente lo que hace es renombra las
> > > cosas
> > > > para hacerlo mas complicado y en algunos casos puede cambiar forma
> > > de hacer
> > > > algo manteniendo la misma logica...
> > > > > > > > > > > Si no lo tenes podes bajartelo de aca:
> > > > http://www.aisto.com/roeder/dotnet/
> > > > > > > > > > >
> > > > > > > > > > > O sino el viejo ildasm, pero es solo para IL
> > > > > > > > > > >
> > > > > > > > > > > Saludos,
> > > > > > > > > > > Diego
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > 2008/4/30 Oscar Onorato <[EMAIL PROTECTED]>:
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > Cumpas,
> > > > > > > > > > > >
> > > > > > > > > > > > Necesito conocer el framework a fondo para
> > > interpretar el
> > > > IL.
> > > > > > > > > > > >
> > > > > > > > > > > > El motivo se que quiero saber cómo lo interpreto
> > > cuando
> > > > decompilo y me encuentro con código ofuscado.
> > > > > > > > > > > > Quizás este pifiado en el razonamiento, pero ese
> > > mismo
> > > > código ofuscado está siendo interpretado ¿del mismo modo que el no
> > > ofuscado?
> > > > > > > > > > > > Por eso necesito conocer a fondo el Core y la
> > > arquitectura
> > > > de NetFx, en el mejor de los casos desde la versión 2.0 en adelante.
> > > > > > > > > > > >
> > > > > > > > > > > > ¿Me podrían recomendar algun/os buenos textos?
> > > > > > > > > > > >
> > > > > > > > > > > > Saludos
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > > > -- > Leonardo Micheloni.
> > > >
> > > > http://leomicheloni.blogspot.com/
> > >
> > --
> > Leonardo Micheloni.
> > http://leomicheloni.blogspot.com/
> >
> --
> Leonardo Micheloni.
> http://leomicheloni.blogspot.com/
>