Serie de bytes no utilizados en la memoria de un proceso
Una cueva de código es una serie de bytes no utilizados en la memoria de un proceso . La cueva de código dentro de la memoria de un proceso suele ser una referencia a una sección que tiene capacidad para inyectar instrucciones personalizadas.
Usos comunes
El concepto de cueva de código es empleado a menudo por piratas informáticos e ingenieros inversos para ejecutar código arbitrario en un programa compilado. Puede ser un método útil para realizar modificaciones en un programa compilado, por ejemplo, para incluir cuadros de diálogo adicionales, modificaciones de variables o incluso la eliminación de comprobaciones de validación de claves de software. A menudo, mediante una instrucción de llamada que se encuentra comúnmente en muchas arquitecturas de CPU , el código salta a la nueva subrutina y coloca la siguiente dirección en la pila. Después de la ejecución de la subrutina, se puede utilizar una instrucción de retorno para sacar la ubicación anterior de la pila y colocarla en el contador del programa. Esto permite que el programa existente salte al código recién agregado sin realizar cambios significativos en el flujo del programa en sí.
Ventajas
- Fácil y rápido: esto significa que el proceso de modificación es rápido y sencillo. Al modificar el código existente con herramientas como Ollydbg , las funciones agregadas se pueden ensamblar y probar sin dependencias externas.
- No es necesario disponer de código fuente: el uso de cuevas de código puede resultar extremadamente eficaz incluso si no se proporciona código fuente al programador. Esto permite que el programador realice ajustes, como añadir o eliminar funciones en el código, sin tener que reescribir todo el programa ni vincular ninguna dependencia externa a un proyecto existente.
Desventajas
- Es fácil romper el programa: en muchos casos, se modifica el archivo ejecutable. Esto significa que es posible que no haya una cueva de código existente en el script existente para cualquier inyección de código debido a la falta de recursos proporcionados en el script. Cualquier reemplazo del script existente puede provocar una falla o bloqueo del programa.
- Falta de versatilidad: inyectar código en un script existente significa que el espacio limitado disponible solo permite modificaciones simples de instrucciones y el lenguaje utilizado es solo ensamblaje. Esto se puede mitigar mediante el uso de inyectores de bibliotecas compartidas ( inyección de DLL [Windows] o LD_PRELOAD [Linux]) de modo que la biblioteca inyectada contenga código ya compilado y las instrucciones existentes en el binario de destino simplemente se modifiquen para usarlo.
Herramientas
- pycave: herramienta sencilla para encontrar cuevas de código en archivos ejecutables portátiles (PE). [1]
- Ollydbg : un depurador para el análisis de código. Rastrea las llamadas y ejecuciones de scripts, y muestra las iteraciones en las bibliotecas y los binarios. Con este depurador, se puede inyectar o eliminar código en el archivo EXE directamente.
- PE: Explorer: permite al usuario abrir y editar archivos ejecutables denominados archivos PE (archivos ejecutables portátiles). Esto incluye archivos .EXE, .DLL y otros tipos de archivos menos comunes.
- Cheat Engine : una herramienta potente que lee y escribe en la memoria del proceso. Esto significa que se pueden cambiar y editar todos los valores de datos del lado del cliente. También puede mostrar los cambios en los valores.
- TSearch: una herramienta potente que lee y escribe en la memoria del proceso. Al igual que Cheat Engine, puede cambiar los datos de valores del lado del cliente. [2] [3] [4] [5]
Referencias
- ^ "Pycave". GitHub . 27 de octubre de 2021.
- ^ Guía para principiantes sobre Codecaves - CodeProject
- ^ Modificación de archivos binarios: agregar un cuadro de diálogo de bienvenida Archivado el 7 de abril de 2014 en Wayback Machine
- ^ Hackeo de juegos: uso de cuevas de código Archivado el 7 de abril de 2014 en Wayback Machine
- ^ Teorías y métodos de las cuevas de códigos
Enlaces externos
- Explicación de la cueva de códigos en alemán