elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)  (Leído 6,996 veces)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« en: 21 Julio 2013, 21:14 pm »

Hola!!

Veréis, tengo un proyecto en C#, que tiene algo así:
Código:
byte[] info = getSomeInfo();

Lo que me gustaría saber es si puedo obtener lo que tiene "info" sin modificar el proyecto (es decir, sin ningún tipo de log, sino obtener directamente de la RAM)

Saludos!
« Última modificación: 21 Julio 2013, 21:26 pm por Shout » En línea

I'll bring you death and pestilence, I'll bring you down on my own
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #1 en: 22 Julio 2013, 05:13 am »

Efectivamente, las variables tanto globales, locales, etc. todas se encuentran en memoria (solo que en distintos lugares, sección .DATA, pila, etc.), saludos.
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #2 en: 22 Julio 2013, 18:32 pm »

Sí, ya sé que se puede, lo que quiero es saber cómo  :laugh:
En línea

I'll bring you death and pestilence, I'll bring you down on my own
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #3 en: 23 Julio 2013, 04:23 am »

Visualizando la memoria con un debugger, por ejemplo si sabes que hay un string que dice "Registrado", basta con buscarlo en toda la memoria virtual del ejecutable, ya localizándolo, le puedes poner un breakpoint, de esta forma podrás detectar en que momento se toma la variable (MessageBoxA por ejemplo o alguna función encargada de mostrar tal mensaje), saludos.

PD: OllyDbg = ALT + M (muestra memoria) y luego ALT + B (Search in memory).
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #4 en: 23 Julio 2013, 10:24 am »

El problema es que lo que contiene esa variable es un .exe (un C# compilado) y no tengo ni la más mínima idea de qué buscar  :silbar:
En línea

I'll bring you death and pestilence, I'll bring you down on my own
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #5 en: 23 Julio 2013, 16:59 pm »

¿la variable contiene un .exe? yo diría más bien que quieres decir que el ejecutable es un .exe y este contiene variables.

Y sé a que te refieres con que esté compilado, eso es lo que se hace en ingeniería inversa, sin el source y solo el ejecutable, intentar descubrir el funcionamiento interno.


http://foro.elhacker.net/ingenieria_inversa/faq_iquesteres_nuevo-t345798.0.html
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #6 en: 23 Julio 2013, 17:57 pm »

No.
Quiero decir que es un .exe que tiene un .dll dentro de sí mismo (embedded) y lo saca, el código fuente es así:
Código
  1. byte[] executableSource = doSomethingToGetExecutableSource();
Lo que hace es convertirlo a PE e inyectarlo a un proceso.
Por eso, quiero saber qué tiene ese DLL antes de ser convertido a PE (PortableExecutable)
En línea

I'll bring you death and pestilence, I'll bring you down on my own
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #7 en: 23 Julio 2013, 21:05 pm »

No logro entender tu explicación, desconozco de C# pero la instrucción:

Código
  1. byte[] executableSource = doSomethingToGetExecutableSource();

En todos los lenguajes de programación que conozco retornaría un valor tras llamar a una función, esta variable es tipo byte, lo más lógico es que solo se retorne un código de notificación (sin errores o con errores), esto es utilizado para verificar si la función se logró ejecutar sin problemas:

FuncionA(){
 if(a!=b){
  return ERROR1  // constante ERROR1 que simboliza a un simple número.
 }else{
  ...
  ...
  return SUCCESS // constante SUCCESS que simboliza a un simple número.
}

y si es como tu dices, entonces tomas el source y borras todo pero todo y solo dejas la función:

Código
  1. doSomethingToGetExecutableSource();

Compilas, luego con un debugger, analizas las instrucciones de la función.

Las anotas en un notepad o lo que sea de tu agrado.

Vuelves a compilar pero con todo el source, ya con eso buscas la secuencia de instrucciones (estarías buscando en donde se encuentra la función en ejecutable).

ya localizada la función debes poner un BP en el inicio de ella para saber en que lugar es llamada, obteniendo ese lugar, lo más probable es que logres localizar el puntero a executableSource, en donde debería tener el source del . EXE que se convierte en no se qué o no se qué.
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #8 en: 23 Julio 2013, 21:10 pm »

Sabiendo que tienes el source por qué no generas un error luego de llamar a la función?

Código
  1. ...
  2. ..
  3. ..
  4. .
  5. byte[] executableSource = doSomethingToGetExecutableSource();
  6. byte[] test = 0/0;
  7. ....
  8. ..
  9. .

Esto generaría un error de división por cero, de esta forma con el debugger puedes manejar la excepción, anterior a la instrucción en donde se generó el error, está la secuencia en donde se tendrá el puntero de executableSource.

Alternativa 2:
Usar MASM dentro de C# y usar la instrucción INT 3 (este generará un error).

Alternativa 3: Leer el source, si sabes de C# no debería por que indagar con debugger y sobre todo si se tiene el source.
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector)
« Respuesta #9 en: 23 Julio 2013, 21:24 pm »

No logro entender tu explicación, desconozco de C# pero la instrucción:

Código
  1. byte[] executableSource = doSomethingToGetExecutableSource();

En todos los lenguajes de programación que conozco retornaría un valor tras llamar a una función, esta variable es tipo byte, lo más lógico es que solo se retorne un código de notificación (sin errores o con errores), esto es utilizado para verificar si la función se logró ejecutar sin problemas:

FuncionA(){
 if(a!=b){
  return ERROR1  // constante ERROR1 que simboliza a un simple número.
 }else{
  ...
  ...
  return SUCCESS // constante SUCCESS que simboliza a un simple número.
}

y si es como tu dices, entonces tomas el source y borras todo pero todo y solo dejas la función:

Código
  1. doSomethingToGetExecutableSource();

Compilas, luego con un debugger, analizas las instrucciones de la función.

Las anotas en un notepad o lo que sea de tu agrado.

Vuelves a compilar pero con todo el source, ya con eso buscas la secuencia de instrucciones (estarías buscando en donde se encuentra la función en ejecutable).

ya localizada la función debes poner un BP en el inicio de ella para saber en que lugar es llamada, obteniendo ese lugar, lo más probable es que logres localizar el puntero a executableSource, en donde debería tener el source del . EXE que se convierte en no se qué o no se qué.
Lo que pasa es que no tengo el source completo y no puedo compilarlo.
La parte que "descifra" la DLL no la tengo y al sacarla con Reflector veo que está ofuscada con Crypto Obfuscator (una versión nueva que ningún deobfuscator de momento soporta)

Es decir: no puedo compilar (si pudiese, directamente hacía un File.WriteAllBytes(execurableSource) y así de fácil lo lograría).

Por eso, estoy intentando leer lo que tiene desde la RAM.
Descarto tu siguiente respuesta ya que se trata sobre compilar el código fuente y es una opción que he descartado.
En línea

I'll bring you death and pestilence, I'll bring you down on my own
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines