Módulo de Manipulación de Memoria
Este módulo permite leer y escribir en la memoria de procesos externos mediante llamadas a la API de Windows (kernel32.dll), útil para desarrollos que requieren interacción con aplicaciones de terceros (ej: herramientas de debugging, bots, o modificaciones controladas).
Funcionalidad Principal
Lectura/Escritura de memoria: Opera con datos primitivos (Byte, Integer, Long, Float, Double) en direcciones específicas.
Resolución de punteros: Navega a través de direcciones de memoria con offsets para acceder a datos en estructuras complejas.
Acceso a procesos: Utiliza permisos de nivel sistema (PROCESS_ALL_ACCESS) para interactuar con otros programas.
Componentes Clave
1. Interoperabilidad con la API de Windows
<DllImport("kernel32.dll")>
Private Function OpenProcess(...) As IntPtr
OpenProcess: Obtiene un identificador (handle) para acceder a un proceso.
ReadProcessMemory/WriteProcessMemory: Funciones base para manipular memoria.
2. Obtención del Handle del Proceso
Private Function GetHandle(procName As String) As IntPtr
Busca procesos por nombre y abre un handle con permisos completos.
Nota: Si el proceso no existe, retorna IntPtr.Zero.
3. Resolución de Direcciones con Offsets
Private Function ResolvePointer(...) As IntPtr
Mecanismo:
Lee una dirección base desde la memoria.
Aplica offsets secuencialmente (ej: [0x10, 0x20, 0x30]).
Ajusta para arquitecturas de 32 o 64 bits (IntPtr.Size).
Uso típico: Acceder a datos en estructuras anidadas (ej: player→health→current_value).
4. Métodos Públicos para Tipos de Datos
Cada tipo de dato tiene funciones dedicadas para lectura/escritura:
' === Ejemplo para Integer ===
Public Function ReadInteger(...) As Integer
Public Sub WriteInteger(...)
Conversión: Usa BitConverter para transformar bytes al tipo de dato requerido.
Parámetro offsets: Permite trabajar con direcciones relativas (opcional).
Flujo de Trabajo
Obtener handle del proceso → GetHandle("notepad").
Calcular dirección final → ResolvePointer(...).
Leer o escribir datos → ReadProcessMemory/WriteProcessMemory.
Consideraciones Técnicas
Seguridad: Requiere ejecución con privilegios elevados (administrador).
Arquitectura: Compatible con procesos de 32 y 64 bits (gracias a IntPtr.Size).
Rendimiento: Las operaciones directas de memoria son rápidas pero riesgosas (pueden causar crashes si se usan incorrectamente).
Caso de Uso Ejemplo
' Leer la vida de un personaje en un juego (proceso "Game.exe")
Dim health As Integer = ReadInteger("Game", &H01A3B4C8, &h10, &h20)
' Escribir un nuevo valor
WriteInteger("Game", &H01A3B4C8, 100, &h10, &h20)
Ética y Legalidad
Aplicaciones válidas: Debugging de software propio, automatización de tareas.
Precaución: Modificar memoria de aplicaciones de terceros puede violar términos de servicio o leyes de propiedad intelectual. Usar solo con autorización.