Módulo de Manipulación Avanzada de Memoria en C#



Módulo de Manipulación Avanzada de Memoria 

Este módulo está diseñado para permitir la lectura y escritura directa en la memoria de procesos externos en sistemas Windows, utilizando llamadas a la API nativa (kernel32.dll). Es una herramienta poderosa para aplicaciones que requieren interactuar con otros procesos, como depuradores, herramientas de análisis, automatización avanzada o modificaciones en tiempo real de programas.


Descripción General

El módulo proporciona funciones para:

Abrir un proceso por su nombre y obtener un handle con permisos completos (PROCESS_ALL_ACCESS).


Resolver direcciones de memoria dinámicas mediante punteros base y una serie de offsets, soportando arquitecturas de 32 y 64 bits.


Leer y escribir datos en memoria en distintos formatos: byte, int, long, float, double y cadenas de texto (string).


Manejar cadenas con codificación ASCII o UTF-8, con opción a tamaño fijo para escritura.


Realizar todas las operaciones de forma segura, verificando que el proceso y las direcciones sean válidas antes de leer o escribir.


Componentes Clave

1. Interoperabilidad con la API de Windows

OpenProcess: Obtiene un handle para el proceso especificado con acceso total.


ReadProcessMemory y WriteProcessMemory: Permiten leer y escribir bytes en la memoria del proceso abierto.


Estas funciones están importadas con [DllImport("kernel32.dll")] para usarse desde C#.


2. Obtención del Handle del Proceso

GetHandle(string processName): Busca procesos activos por nombre y abre un handle con permisos completos. Retorna IntPtr.Zero si no encuentra el proceso.


3. Resolución de Punteros Dinámicos

ResolvePointer(IntPtr hProc, long baseAddr, int[] offsets):

Esta función permite navegar a través de una cadena de punteros para llegar a la dirección final donde se encuentra el dato. Es fundamental para acceder a estructuras de memoria complejas que usan referencias anidadas.


Soporta tanto sistemas de 32 bits como de 64 bits, adaptando la lectura de punteros según el tamaño de IntPtr.


4. Lectura y Escritura de Datos

Para cada tipo de dato soportado (byte, int, long, float, double), existen métodos públicos que:


Obtienen el handle del proceso.


Resuelven la dirección final con offsets.


Realizan la lectura o escritura usando los métodos de la API.


5. Manejo de Cadenas

ReadString y WriteString permiten leer y escribir texto en memoria, con soporte para codificación ASCII o UTF-8.


La escritura puede ajustarse a un tamaño fijo, rellenando o truncando el buffer según sea necesario.


6. Función Interna de Escritura

Write: Función privada que centraliza la lógica para escribir cualquier tipo de dato en memoria, evitando duplicación de código.


Ejemplo de Uso

csharp

// Leer un entero desde un proceso llamado "GameApp"

int score = SimpleMemory.ReadInteger("GameApp", 0x00ABCDEF, 0x10, 0x20);


// Escribir un nuevo valor float en la memoria del proceso

SimpleMemory.WriteFloat("GameApp", 0x00ABCDEF, 99.5f, 0x10, 0x20);


// Leer una cadena UTF-8 de 50 caracteres

string playerName = SimpleMemory.ReadString("GameApp", 0x00ABCDEF, 50, true, 0x10);

Consideraciones Importantes

Privilegios: Para acceder a la memoria de otros procesos, el programa debe ejecutarse con permisos administrativos.


Seguridad: Manipular memoria de procesos externos puede causar inestabilidad o fallos si no se usa con cuidado.


Compatibilidad: El módulo detecta automáticamente si el sistema es de 32 o 64 bits y ajusta la lectura de punteros.


Uso Ético: Se recomienda utilizar este tipo de técnicas solo en aplicaciones propias o con autorización expresa para evitar violaciones legales o de términos de servicio.


Archivo

Descargar

------------------------