Te desarrollo esa sección como hicimos con la de Linux, pero enfocada en Windows y siempre desde un enfoque seguro (modo usuario y herramientas soportadas por Microsoft).
Ruta segura en Windows (usuario, depuración y minidumps)
Relacionado: Forense de memoria de sistema completo. Lectura y escritura coordinada entre procesos sin kernel. FOCA. Herramientas. 2025 03 06 diseno y desarrollo de sistema.
El objetivo aquí es comprender cómo inspeccionar y modificar memoria de procesos en Windows usando solo APIs documentadas, depuradores y volcados (dumps) de memoria. Así puedes aprender los mismos conceptos que usaría un programa de ring 0, pero respetando el modelo de seguridad del sistema.
1. Leer y escribir memoria propia
Crea un programa simple en C/C++ que:
-
Declare una variable.
-
Imprima su dirección.
-
Espere entrada para mantenerse vivo.
Ejemplo:
#include <windows.h>
#include <stdio.h>
int main() {
int valor = 42;
printf("PID: %lu\n", GetCurrentProcessId());
printf("Dirección de valor: %p\n", &valor);
getchar(); // Esperar para que puedas adjuntar el depurador
return 0;
}Compílalo en Visual Studio o con cl.exe.
2. Inspeccionar y modificar con WinDbg
-
Abre WinDbg (puedes instalarlo con el Windows SDK).
-
Adjunta al proceso:
File → Attach to a Process → selecciona el PID mostrado. -
Mostrar el contenido de la dirección:
dd DIRECCION L1(
dd= dump DWORDs,L1= longitud 1 DWORD). -
Modificar el valor:
ed DIRECCION NUEVO_VALOR -
Reanuda el proceso (
g).
Esto es el equivalente a leer/escribir memoria desde un depurador en Linux.
3. Usar APIs documentadas para leer/escribir otro proceso
Windows ofrece funciones seguras para esto:
-
OpenProcess: obtiene un handle al proceso con permisos adecuados.
-
ReadProcessMemory: copia memoria del proceso objetivo a tu buffer.
-
WriteProcessMemory: escribe datos en el proceso objetivo.
Ejemplo (simplificado):
HANDLE h = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid);
ReadProcessMemory(h, (LPCVOID)direccion, &buffer, sizeof(buffer), NULL);
WriteProcessMemory(h, (LPVOID)direccion, &nuevoValor, sizeof(nuevoValor), NULL);
CloseHandle(h);Solo funciona si tienes permisos para ese proceso (p. ej., ejecutando como administrador para procesos de sistema).
4. Volcados de memoria (Minidumps)
Puedes capturar el estado completo o parcial de un proceso usando:
-
Task Manager → clic derecho en el proceso → Create dump file.
-
ProcDump (Sysinternals):
procdump -ma PID archivo.dmp -
MiniDumpWriteDump (API): permite crear minidumps programáticamente para análisis posterior.
5. Analizar el dump
Abre el .dmp con:
-
WinDbg:
.examine dps DIRECCION -
Visual Studio: permite examinar variables y memoria como si el proceso estuviera en pausa.
6. Observar llamadas al sistema
Puedes usar Process Monitor (Procmon) de Sysinternals para:
-
Ver lecturas/escrituras de archivos.
-
Mapas de memoria (operaciones
VirtualAlloc,VirtualFree). -
Operaciones de red y registro.
Esto es similar a strace en Linux.
Ventaja del enfoque seguro:
-
No tocas ring 0.
-
Usas herramientas oficiales y soportadas.
-
Entiendes cómo interactúan procesos y memoria en Windows.
-
Puedes practicar inyección de memoria controlada en tus propios procesos para comprender cómo se haría a nivel técnico, pero de forma ética.
Si quieres, puedo ahora añadir un mini-laboratorio Windows paso a paso donde:
-
Compilas dos programas (uno “target” y uno “inspector”).
-
El inspector lee y escribe memoria del target usando
ReadProcessMemoryyWriteProcessMemory. -
Capturas un minidump del target y analizas la variable modificada con WinDbg.
¿Quieres que lo prepare así?