
Una biblioteca que permite la inspección y manipulación de la memoria y el código de un proceso en ejecución en un sistema Linux.
raminspect es un crate que permite la inspección y manipulación de la memoria y el código de un proceso en ejecución en un sistema Linux. Proporciona funciones para encontrar y reemplazar términos de búsqueda en la memoria de un proceso, funciones para asignar nueva memoria perteneciente al proceso, y una interfaz que permite la inyección de shellcode arbitrario ejecutándose en el contexto del proceso. Todo esto requiere privilegios de root, por razones obvias.
demo
Deberías poder ejecutar el ejemplo firefox_search si tienes Firefox instalado. Para ello, comienza abriendo una instancia de Firefox y escribiendo "Old search text" en la barra de búsqueda. Si todo va bien, cuando ejecutes el ejemplo como root usando el comando sudo cargo run --example firefox_search --release, debería reemplazarse por "New search text", aunque probablemente tendrás que hacer clic de nuevo en la barra de búsqueda para que se renderice el nuevo texto.
La funcionalidad de buscar y reemplazar está disponible con o sin el módulo del kernel, pero si quieres inyectar shellcode o asignar nuevos búferes primero debes compilar y cargar el módulo del kernel requerido. Puedes hacerlo instalando el paquete de cabeceras del kernel de tu distribución, realizando un git clone y luego ejecutando los siguientes comandos en la subcarpeta kern_module del repositorio (si la compilación falla por algún motivo, por favor abre un issue):
make all
sudo insmod raminspect.ko
Ten en cuenta también que la parte de inyección de shellcode está actualmente diseñada para funcionar en cualquier arquitectura (aunque el propio shellcode debe ser específico de la plataforma), pero la parte de asignación arbitraria de memoria está actualmente limitada a x86-64. Los PRs para añadir soporte de asignación arbitraria en más arquitecturas de CPU son bienvenidos.
Este proyecto aún no se encuentra en un estado estable; espera cambios que rompan la compatibilidad y errores. Si encuentras un error en el crate o si alguno de los ejemplos no funciona en tu máquina, por favor crea un issue en el repositorio para que pueda corregirse con prontitud.