Autor
|
Tema: ¿Leer variable desde RAM? (C# - con source obtenido desde Reflector) (Leído 6,978 veces)
|
Shout
Desconectado
Mensajes: 191
Acid
|
Hola!! Veréis, tengo un proyecto en C#, que tiene algo así: 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:.
|
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
Mensajes: 191
Acid
|
Sí, ya sé que se puede, lo que quiero es saber cómo
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
.:UND3R:.
|
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
Mensajes: 191
Acid
|
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
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
.:UND3R:.
|
¿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
Mensajes: 191
Acid
|
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í: 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:.
|
No logro entender tu explicación, desconozco de C# pero la instrucción: 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: 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:.
|
Sabiendo que tienes el source por qué no generas un error luego de llamar a la función? ... .. .. . byte[] executableSource = doSomethingToGetExecutableSource(); byte[] test = 0/0; .... .. .
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
Mensajes: 191
Acid
|
No logro entender tu explicación, desconozco de C# pero la instrucción: 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: 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ejecutar exe desde variable (Imposible xD?)
Programación Visual Basic
|
Lambda
|
6
|
2,733
|
24 Marzo 2007, 14:00 pm
por Lambda
|
|
|
Cargar un Form desde una Variable..
Programación Visual Basic
|
ssccaann43 ©
|
2
|
3,824
|
17 Marzo 2010, 18:37 pm
por ssccaann43 ©
|
|
|
leer XML desde una URL - F1
Programación Visual Basic
|
Maurice_Lupin
|
0
|
1,574
|
14 Marzo 2013, 03:34 am
por Maurice_Lupin
|
|
|
[Ayuda-C] Leer entero desde stdin
Programación C/C++
|
Miky Gonzalez
|
2
|
2,942
|
29 Septiembre 2013, 02:50 am
por rir3760
|
|
|
C# - Leer paquetes que son enviados desde un cliente a un servidor desde otro cl
.NET (C#, VB.NET, ASP)
|
TickTack
|
1
|
2,613
|
26 Agosto 2017, 15:09 pm
por Rekt
|
|