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
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Duda) Pregunta readprocessmemory array
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Duda) Pregunta readprocessmemory array  (Leído 4,818 veces)
Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
(Duda) Pregunta readprocessmemory array
« en: 12 Abril 2011, 19:26 pm »

Hola que tall, queria hacer una pregunta... Yo programo en vb6, pero la verdad queria pasar parte de las funciones de mi programa a c++ e interactuar con una dll... Ya logre crear una funcion de readprocessmemory y usarla desde vb:

Código:
void ReadLong(DWORD lpAddress, void* buf, long len) 
{
   DWORD oldprot, dummy = 0;
   HWND hwnd = FindWindow(NULL, "VENTANA");

   if (hwnd)
   {
      DWORD proc_id;
      GetWindowThreadProcessId(hwnd, &proc_id);
      HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);

      ReadProcessMemory(hProcess, (void *) lpAddress, buf, len, 0);
     CloseHandle(hProcess);
    
   }
   else
   {
      // Error
   }
}


El problema es que esta funcion, me devuelve un valor de 4 bytes, y estoy tratando de leer un texto, "70 00 72 00 75 00 65 00 62 00 61" ("prueba" sin los nops), y en 4bytes seria "7471216", la cuestion es que no se como hacer que la funcion me devuelva el array "70 00 72 00 75 00 65 00 62 00 61", para luego convertirlo a texto :(...

Alguien me puede dar una mano? Gracias!!!


« Última modificación: 13 Abril 2011, 00:18 am por Cromatico » En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Pregunta readprocessmemory array
« Respuesta #1 en: 12 Abril 2011, 20:34 pm »

el parámetro len de ReadProcessMemory(hProcess, (void *) lpAddress, buf, len, 0); le dice cuanto puede leer de maximo.


En línea

Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Pregunta readprocessmemory array
« Respuesta #2 en: 12 Abril 2011, 21:22 pm »

Hola Arcangel_0x7C5, gracias por contestarme... Bueno aver yo la llamo asi mira:
Código:
DWORD dwHP; 
ReadLong(Address,&dwHP,"4");

Pero si en vez de 4 pongo mas, me tira error :(

Esto me devuelve la funcion: "7471216"
Que no se que tiene que ver con: "70 00 72 00 75 00 65 00 62 00 61"

:S Gracias!
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: Pregunta readprocessmemory array
« Respuesta #3 en: 12 Abril 2011, 22:02 pm »

Hola Arcangel_0x7C5, gracias por contestarme... Bueno aver yo la llamo asi mira:
Código:
DWORD dwHP; 
ReadLong(Address,&dwHP,"4");

Pero si en vez de 4 pongo mas, me tira error :(

Esto me devuelve la funcion: "7471216"
Que no se que tiene que ver con: "70 00 72 00 75 00 65 00 62 00 61"

:S Gracias!
porque un DWORD solo permite almacenar 4 bytes. De todas maneras, el 4 entre comillas es una cadena de caracteres y no un numero entero. por lo que me extraña que no te de error

yo haria esto:
Código
  1. BYTE Array[20];
  2. ReadLong(Address,&Array,20);
  3.  
y con DWORD asi:
Código
  1. DWORD Array[20];
  2. ReadLong(Address,&Array,sizeof(DWORD)*20);
  3.  
« Última modificación: 12 Abril 2011, 22:05 pm por Arcangel_0x7C5 » En línea

Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: Pregunta readprocessmemory array
« Respuesta #4 en: 12 Abril 2011, 22:21 pm »

Si disculpame es que lo escribi desde aca, y tengo muy adoptado el vb me olvide de las comillas...
Ahora pruebo y te comento, muchas gracias!


EDIT:
Mejor imposible, muchisimas gracias Arcangel_0x7C5!!!


SOLUCIONADO!
« Última modificación: 12 Abril 2011, 22:28 pm por Cromatico » En línea

Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: (Duda) Pregunta readprocessmemory array
« Respuesta #5 en: 13 Abril 2011, 00:22 am »

Hola disculpen que postee de nuevo, tengo una duda!!

yo llamo asi a la funcion:

Código:
long ReadLongVb (long Address)
{
BYTE Array[30];
ReadLong(Address,&Array,30);
return (Array[0]);
}

Esa es la funcion a la que llamo desde vb, seguramente se podra hacer directamente a la funcion ReadLong, pero bueno es la forma mas facil que encontre y funciona bien :P.

Entonces en vb recibo el array 0, pero la pregunta es, como hago para que me retorne todo el array completo?
E intentado muchas cosas pero no logre hacer que me retorne todo el array: 30...

Gracias!
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 563


Ver Perfil
Re: (Duda) Pregunta readprocessmemory array
« Respuesta #6 en: 13 Abril 2011, 02:24 am »

as que retorne un puntero al array y luego solo accedes a sus items....

Salu2!
En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: (Duda) Pregunta readprocessmemory array
« Respuesta #7 en: 13 Abril 2011, 02:38 am »

Mmm no entiendo lo que me intentas decir... yo llamo desde vb a la funcion ReadLongVb, la cual llama a ReadLong y le da el array...
Pero ReadLongVb me retorna solo 1 valor del array, en este caso el array[0]
No hay alguna forma de que me envie todos?
Código:
return (array[0] && array[1]);
...............

Gracias!
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: (Duda) Pregunta readprocessmemory array
« Respuesta #8 en: 15 Abril 2011, 18:49 pm »

Hola disculpen que postee de nuevo, tengo una duda!!

yo llamo asi a la funcion:

Código:
long ReadLongVb (long Address)
{
BYTE Array[30];
ReadLong(Address,&Array,30);
return (Array[0]);
}

Esa es la funcion a la que llamo desde vb, seguramente se podra hacer directamente a la funcion ReadLong, pero bueno es la forma mas facil que encontre y funciona bien :P.

Entonces en vb recibo el array 0, pero la pregunta es, como hago para que me retorne todo el array completo?
E intentado muchas cosas pero no logre hacer que me retorne todo el array: 30...

Gracias!
para eso necesitas usar punteros, el problema es que VB no te deja manejar punteros directamente. tambien necesitarias usar memoria dinamica, porque las variables locales son sobrescritas al salir de la funcion que las creo, por lo que si la funcion debuelve un puntero a una variable local en esta no estara el contenido que uno espera.

EDIT:
mirate esta pagina: http://www.psicofxp.com/forums/programacion.313/292049-punteros-en-vb.html
« Última modificación: 15 Abril 2011, 18:55 pm por Arcangel_0x7C5 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con array
Java
anman 4 3,205 Último mensaje 2 Abril 2008, 22:29 pm
por Lu15_CL4
duda de array
Programación C/C++
mapers 1 2,436 Último mensaje 6 Septiembre 2010, 15:48 pm
por darkraider
Pregunta readprocessmemory
Programación Visual Basic
Cromatico 4 3,683 Último mensaje 5 Enero 2011, 21:34 pm
por Cromatico
Duda con array
Java
~ Yoya ~ 0 1,614 Último mensaje 13 Marzo 2011, 21:18 pm
por ~ Yoya ~
[Pregunta]: Un array en la base de datos.
Desarrollo Web
Leguim 2 2,025 Último mensaje 18 Enero 2019, 01:18 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines