Autor Tema: Decompilar C# y ofuscar tu código para evitar ingeniería inversa.  (Leído 6101 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Kimeraweb

  • AdminSite
  • *
  • Mensajes: 2540
  • de
  • Agradecimientos: 844
  • Kimeraweb
    • http://l2devsadmins.net
  • Cronica: : Alfa
  • Revision: Alfa
  • S.O: Windows 10
  • Serverpack : Desarrollo interno
Para evitar desarrollar aplicaciones en Java para evitarle problemas al ejecutar la aplicación al usuario, uso C#, que es bastante similar a Java.

Luego, pensé en que al igual que Java, el script de C# se compila a bytecode y puede ser decompilado:
Decompilador .Net



Pero igualmente que en PHP, java o javascript, existen ofuscadores, y con C# tenemos suerte. Han creado un logaritmo que hace el código ejecutable para la máquina, pero inteligible después de hacer la ingeniera inversa para extraer su fuente.

Código original:
Código: [Seleccionar]
private void CalcPayroll(SpecialList employeeGroup) {
   while (employeeGroup.HasMore()) {
        employee = employeeGroup.GetNext(true);
        employee.UpdateSalary();
        DistributeCheck(employee);
    }
}

Código obtenido después de haber aplicado ingeniería inversa, es decir, el código desofuscado obtenido por el hacker:
Código: [Seleccionar]
private void a(a b) {
    while (b.a()) {
        a = b.a(true);
        a.a();
        a(a);
    }
}

Fuente MSDN

Úsalo gratis registrándote en su web
« Última Modificación: Diciembre 17, 2015, 06:01:04 pm por Kimeraweb »
"Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

Desconectado Jackass

  • Moderator
  • *
  • Mensajes: 49
  • Agradecimientos: 25
  • Developer.-
  • Cronica: : C4 a H5
  • Revision: -
  • S.O: Windows Server 2008
  • Serverpack : aCis;L2Off
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #1 on: Enero 08, 2016, 12:21:54 pm »
Kimera, aunque ofusques es muy probable que puedan hacerle ingenieria inversa. Además suele traer mas dolores de cabeza que recompensas!

Saludos.
Si necesitas un developer, contacta a mi skype.

Desconectado Kimeraweb

  • AdminSite
  • *
  • Mensajes: 2540
  • de
  • Agradecimientos: 844
  • Kimeraweb
    • http://l2devsadmins.net
  • Cronica: : Alfa
  • Revision: Alfa
  • S.O: Windows 10
  • Serverpack : Desarrollo interno
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #2 on: Enero 08, 2016, 07:55:12 pm »
No, no es posible la ingeniera inversa. Es irreversible. No es la ofuscación de PHP. Los autores aseguran que su algoritmo es irreversible.

Cita
How does Dotfuscator obfuscate assemblies?
Dotfuscator uses all of the traditional obfuscation techniques. It renames all possible method and field names. It is highly configurable so you can choose a given method (e.g. all publics) to be renamed or not. It is not limited to private methods.

Dotfuscator also includes our patented Overload Induction renaming system. There is simply no better renaming algorithm for code protection and size reduction! No obfuscator can prevent decompilation in all cases; however, Dotfuscator makes the decompiled output extremely difficult to read. It makes decompilers work more like disassemblers!

Cita
El algoritmo patentado de Overload Induction determina todos los posibles conflictos de cambio de nombre y sólo induce la sobrecarga de los métodos cuando es seguro hacerlo. El procedimiento probablemente es irreversible. En otras palabras, es imposible, incluso si se ejecuta Overload Induction de nuevo, reconstruir las relaciones de los nombres originales de los métodos.

© 2002-2007 PreEmptive Solutions. Reservados todos los derechos.
« Última Modificación: Enero 08, 2016, 09:02:02 pm por Kimeraweb »
"Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

Desconectado Kimeraweb

  • AdminSite
  • *
  • Mensajes: 2540
  • de
  • Agradecimientos: 844
  • Kimeraweb
    • http://l2devsadmins.net
  • Cronica: : Alfa
  • Revision: Alfa
  • S.O: Windows 10
  • Serverpack : Desarrollo interno
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #3 on: Enero 19, 2016, 03:05:29 pm »
Quería compartir mi experiencia con ustedes trabajando con Dotofuscator y haciéndole la ingeniera inversa para obtener el código fuente.

En general esperaba más.

Aunque cumple su cometido, tal como anuncian, no encripta/codifica/oculta los valores de las variables. Esto en mi caso sería un problema porque en el programa pretendía introducir datos sensibles, como user/password a una base de datos, direccion IP, etc... aunque me queda el intento de encriptar un fichero externo al programa y usar la encriptación RSA, que es reversible mediante brute force (por eso tenemos emulador de L2...), para que el contenido sea ilegible (al menos para la gran mayoría).

Para mas información sobre encriptación, visiten esta página.

En mi ejercicio, la variable codigo representa mi dato sensible a ocultar. Despues de compilarlo y ofuscarlo, usé el decompilador Jetbrains de C# para obtener el código fuente:


Las variables y los metodos aparecen renombrados, por lo que "leer" el código fuente sería bastante difícil. Pero si sabes lo que vas a buscar, por ejemplo una IP, conoces el patrón xxx.xxx.xxx.xxx y normalmente, el resto de los valores aparecerán cerca, por lo que es cuestión de tiempo que hackeen.

En definitiva, no usen lenguajes compilados si manejan información que lamentarían que otros obtuvieran.
"Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

Desconectado Fissban

  • AdminSite
  • *
  • Mensajes: 5787
  • ar
  • Agradecimientos: 1726
    • Mis Proyectos
  • Cronica: : Scions of Destiny
  • Revision: Last
  • S.O: Windows 10
  • Serverpack : L2jAdmins
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #4 on: Enero 19, 2016, 04:25:35 pm »
Soy un ignorante en el tema....pero se q existe themida para proteger los programas echos en c++ ... no se puede usar en c#?

Desconectado Matabarras

  • Grado B
  • *
  • Mensajes: 319
  • es
  • Agradecimientos: 50
  • Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que
  • Cronica: : Interlude
  • Revision: Last
  • S.O: otro
  • Serverpack : Acis
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #5 on: Enero 19, 2016, 08:15:51 pm »
Soy un ignorante en el tema....pero se q existe themida para proteger los programas echos en c++ ... no se puede usar en c#?
Themida jaja, contame otra.. xD
Themida lo usabamos por 2006 más que nada para "encriptar" servidores de rats.(remote administration tools) Y bueno una cosa es que no puedas descompilar el codigo que puede ser, desconozco ya que no soy un buen cracker, pero aun así se puede quebrar, ollydbg es mágico, y respecto otra vez esta themida , también upx y demás pero eso se desenpacketa en nada.

Mi talento esta limitado por mi pereza.

Desconectado Kimeraweb

  • AdminSite
  • *
  • Mensajes: 2540
  • de
  • Agradecimientos: 844
  • Kimeraweb
    • http://l2devsadmins.net
  • Cronica: : Alfa
  • Revision: Alfa
  • S.O: Windows 10
  • Serverpack : Desarrollo interno
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #6 on: Enero 19, 2016, 09:03:45 pm »
No...  :-X Dotofuscator es lo mejor que existe ahora mismo. Además de aligerar el peso del programa final, renombra las clases, los objetos y las variables, y no es reversible. Además la versión pro dispone de un código suplementario que examina cambios en el código y contabiliza las copias hechas del programa, con lo que puedes hacer un seguimiento y suspender esa aplicación de ese usuario para que deje de funcionar.

Themida se usa cuando tienes la aplicación compilada en código máquina en lugar de en bytecode. Al programar en código máquina, obligas al hacker a usar un desensamblador y él obtiene pseudo-código ensamblado en lugar del código fuente. Por lo tanto sólo obtiene instrucciones de puntero de memoria, y no se leen variables, y los valores que obtiene son los del puntero en código hexadecimal.

Para hackear un programa ensamblado, se ejecuta y se congela su ejecución para leer el bloque de memoria donde se está ejecutando. Obtienes código ensamblador (un pseudo código fuente de lo que sería el código ensamblador de la aplicación). Según en el momento que congele la aplicación, los punteros cambian de valor.



En la imagen de ejemplo, a la derecha, se ve lo que obtiene el hacker. Pseudo código ensamblador. No obtiene el nombre de las variables, aunque el trabajo a este nivel es distinto. Lo que se hace es anular funciones para que no se ejecuten, sustituyendo los saltos a bloques por retornos.

Es necesario que trabaje en memoria porque en la aplicación ensamblada no se obtienen cadenas de texto, sólo código máquina (números hexadecimales).



En este ejemplo, se está siguiendo el flujo de una ejecución:


Yo hackeaba en el 68000 y aprendí ensamblador con el Z80. Muchos (por no decir ninguno) no conocerán este procesador  :D... lo usaba el Amstrad, Commodore 64, y Spectrum. Además otros como el Dragon (aún mas antiguos). Mis pinitos no pasaban de eliminar el tiempo de prueba de las aplicaciones, o de eliminar el registro para poder usar el programa. Mis programas en Basic en el Z80 usaban las instrucciones poke y call. Bueno, se sale del tiesto, pero es increible que aún recuerde direcciones de memoria como la &bb18 para leer las pulsaciones de las teclas... bueno que lo dejo aqui  :D

P.D.: Mi último hack fué habilitar el modo Dios en el Empire of Earth jugando en multijugador.  :alabar: aunque para ello sólo usé un editor de memoria, muy simple  ;D
« Última Modificación: Enero 19, 2016, 09:11:34 pm por Kimeraweb »
"Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

Desconectado Matabarras

  • Grado B
  • *
  • Mensajes: 319
  • es
  • Agradecimientos: 50
  • Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que
  • Cronica: : Interlude
  • Revision: Last
  • S.O: otro
  • Serverpack : Acis
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #7 on: Enero 19, 2016, 10:56:33 pm »
Conozco el ollydbg perfectamente, tengo tutoriales de metodos como el Rit para el malware en foros como indetectables dedicados a la seguridad informática igual que esas imagenes que me acabas de postear como la del stub.exe que es de un crypter y resumidamente solo se dirige a un offset nose pa que la explicación pero bueno  :delf2_2:  sigo pensando que no es lo mejor xD me jugaria el brazo a que gente como Oldwarrior romperia esto en dias, y si conozco un ofuscador muy bueno, pero tambien muy caro no recuerdo el nombre pero le hablare a antiguos amigos que compraron para sus apps y te dire saludos
Mi talento esta limitado por mi pereza.

Desconectado Matabarras

  • Grado B
  • *
  • Mensajes: 319
  • es
  • Agradecimientos: 50
  • Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que hace 1 lo copiaran cien eso no significa que este bien.Lo que
  • Cronica: : Interlude
  • Revision: Last
  • S.O: otro
  • Serverpack : Acis
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #8 on: Enero 19, 2016, 11:05:35 pm »
Aparte no te olvides que uno ofusca el codigo para que no vean el codigo de fuente en texto plano, pero eso no evita que cracken tu programa, solo hara mas dificil obtener su codigo de fuente, pero tu sigues pudiendo mover cosas y dar saltos aunque el codigo este ofuscado  :ok:
Mi talento esta limitado por mi pereza.

Desconectado Kimeraweb

  • AdminSite
  • *
  • Mensajes: 2540
  • de
  • Agradecimientos: 844
  • Kimeraweb
    • http://l2devsadmins.net
  • Cronica: : Alfa
  • Revision: Alfa
  • S.O: Windows 10
  • Serverpack : Desarrollo interno
Re:Decompilar C# y ofuscar tu código para evitar ingeniería inversa.
« Respuesta #9 on: Enero 20, 2016, 10:11:03 am »
Pues esta empresa lo vende como el mejor algoritmo que existe. No se puede decir eso abiertamente sin que te caiga una demanda jejeje Pero igualmente me interesa mucho. Seguramente se puedan combinar  :)
"Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)