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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?  (Leído 5,268 veces)
AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« en: 8 Junio 2011, 18:37 pm »

quiero leer la memoria de algunos procesos activos uso OpenProcess y ReadProcessMemory para abrir el PID y leer, pero hay algunos que SI abren pero  al leer devuelven puros bytes nulos, y 1 o 2 q no devuelven nada, estaba leyendo un documento eso es porque estan protegidas la memoria de esos procesos con VirtualProtec y que esa api solo se usa desde el proceso que la llama , ¿que funcion api podria usar para que mi .exe cambie la proteccion de otro proceso y poder leer? ejem: notepad.exe
weno asi lo entendi el documento , sino please corrijanme.

-algo mas, ¿que otra api podria usar para calcular la memoria que esta ocupando un proceso?,por ahora uso el ReadProcessMemory para sumar todos los bytes leidos, pero hay algunos procesos que son muy pesados y los del sistema que no se pueden abrir ni leer y no se como calcularlos.
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #1 en: 9 Junio 2011, 13:17 pm »

Para cambiar los permisos de la memoria de otro proceso puedes usar VirtualProtectEx:
Código:
http://msdn.microsoft.com/en-us/library/aa366899(v=vs.85).aspx

Y para saber cuanto ocupa la imagen en memoria de un proceso, puedes leer la cabecera PE del archivo mapeada en memoria, el campo que te interesa es el SizeOfImage.

Saludos
En línea


“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche
AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #2 en: 10 Junio 2011, 00:26 am »

hola, agregue esa api a mi codigo:

Código
  1. 'Form1.frm
  2. Option Explicit
  3. Private Sub Command1_Click()
  4.    Dim PID As Long, Buffer(1 To 5000) As Byte, BytesLeidos As Long
  5.    Dim hProcess As Long, Address As Long, Res As Long, ViejaProte As Long
  6.    PID = Val(txtPID.Text)
  7.    hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID)
  8.    If hProcess = 0 Then
  9.        MsgBox "No se pudo abrir el proceso", vbCritical, ""
  10.        Exit Sub
  11.    End If
  12.    Address = 10
  13.    Res = VirtualProtectEx(hProcess, ByVal Address, 100, PAGE_READWRITE, ViejaProte)
  14.  
  15.    Call ReadProcessMemory(hProcess, Address, Buffer(1), 5000, BytesLeidos)
  16.    Call CloseHandle(hProcess)
  17.    Me.Caption = BytesLeidos
  18.    MsgBox "Resultado: " & Res
  19.    MsgBox "Vieja proteccion: " & ViejaProte
  20. End Sub
  21.  
  22.  

Código
  1. 'module1.bas
  2.  
  3. Option Explicit
  4. Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  5. Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  6. Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  7.  
  8. Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
  9.  
  10. Public Const PROCESS_ALL_ACCESS = &H1F0FFF
  11. Public Const PAGE_READWRITE As Long = &H4
  12.  
  13.  
  14.  

lo probe con el PID del notepad.exe bajo win xp y win7 pero en ambos casos no lee nada, osea en BytesLeidos me devuelve 0, y la funcion VirtualProtectEx tambien me devuelve 0, hay un programa el: "cheat engine" que abre un proceso y puedes buscar bytes, string etc. mas o menos algo asi es lo que quiero hacer, nu se como lo hace pero este prog. si logra leer la memoria y obtener los datos buscados. y tambien vi un post de "Zealot" de un codigo hecho en VB6.0 lo que hacia era abrir con OpenProcess el taskmgr ,leer  con ReadProcessMemoryy buscar el nombre de un proceso y usaba WriteProcessMemory para sobreescribir ese nombre, de esta manera ocultaba un proceso, ese codigo es el que uso de referencia. ¿por que sera que puede abrir el PID y no puede leer la memoria?¿que podria ser?

el post de zealot que vi:
http://foro.elhacker.net/analisis_y_diseno_de_malware/ocultar_proceso_en_taskmgr_sin_hooks_parte2-t99549.0.html
salu2
En línea

Karman


Desconectado Desconectado

Mensajes: 673



Ver Perfil WWW
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #3 en: 18 Junio 2011, 06:01 am »

fíjate la API VirtualQuery, te devuelve los tamaños de las secciones de código y los flags de protección de los mismos...

S2
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 563


Ver Perfil
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #4 en: 19 Junio 2011, 17:50 pm »

sí lo que quieres hacer es que lea en memoria buscando un patron de bytes, primero necesitas un address que lo usaras como inicio al scanner (bytesignature), y un address final, así como tiene el CE, luego necesitaras manejar las excepciones, usando como puntero la estructura SEH, puedes lograr eso, tambien si deseas saber el tamaño de una sección de código, puedes usar la API VirtualQuery (como dice karman) + la estructura MBI (Memory Basic Information (creo que así es XD) )

EDITO:

el CE tiene posteado su source en su página oficial, siempre puedes hechar un vistaso aunque creo que ellos usan VEH xD.

Nox.
« Última modificación: 20 Junio 2011, 21:36 pm por Иōҳ » En línea

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


Desconectado Desconectado

Mensajes: 454


Coder | Reverser | Gamer


Ver Perfil WWW
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #5 en: 20 Junio 2011, 16:51 pm »

lo probe con el PID del notepad.exe bajo win xp y win7 pero en ambos casos no lee nada, osea en BytesLeidos me devuelve 0, y la funcion VirtualProtectEx tambien me devuelve 0...

Creo que deberias incluir un GetLastError() luego de llamar a VirtualProtectEx y ReadProcessMemory para ver en que estan fallando estas dos API's, una vez sepas cual es el error ya puedes saber por donde arreglarlo.
Saludos
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Иōҳ


Desconectado Desconectado

Mensajes: 563


Ver Perfil
Re: ¿como leer memoria protegida de un proceso y saber cuanto ocupa?
« Respuesta #6 en: 20 Junio 2011, 18:33 pm »

sí lo que quieres hacer es que lea en memoria buscando un patron de bytes, primero necesitas un address que lo usaras como inicio al scanner (bytesignature), y un address final, así como tiene el CE, luego necesitaras manejar las excepciones, usando como puntero la estructura SEH, puedes lograr eso, tambien si deseas saber el tamaño de una sección de código, puedes usar la API VirtualQuery (como dice karman) + la estructura MBI (Memory Basic Information (creo que así es XD) )

EDITO:

el CE tiene posteado su source en su página oficial, siempre puedes hechar un vistaso aunque creo que ellos usan VEH xD.

Nox.
En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda a leer en memoria proceso oculto en C++
Programación C/C++
Pinkof 7 4,973 Último mensaje 9 Agosto 2010, 18:57 pm
por Pinkof
Leer Memoria de un Proceso
.NET (C#, VB.NET, ASP)
nemesysrgs 6 5,458 Último mensaje 30 Noviembre 2010, 05:49 am
por nemesysrgs
leer memoria de otro proceso
Java
TCL_ZIP 1 3,030 Último mensaje 20 Enero 2011, 19:34 pm
por kasiko
¿Cómo saber cuánto ocupa una página web?
Dudas Generales
stalger 3 5,731 Último mensaje 21 Febrero 2011, 23:44 pm
por el-brujo
¿Cuánto espacio ocupa una variable de Ruby en memoria?
Programación General
Diesan Romero 0 836 Último mensaje 15 Marzo 2018, 05:04 am
por Diesan Romero
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines