
Oculta artefactos de memoria usando ROP y puntos de interrupción de hardware.
Esta herramienta es una PoC simple de cómo ocultar artefactos de memoria usando una cadena ROP en combinación con breakpoints de hardware. La cadena ROP cambiará las protecciones de la página de memoria del módulo principal a N/A mientras duerme (es decir, cuando se llama a la función Sleep). Para obtener información más detallada sobre esta técnica de evasión de escaneo de memoria, consulta el proyecto original Gargoyle. Solo x64.
La idea es configurar un breakpoint de hardware en kernel32!Sleep y un nuevo filtro de nivel superior para manejar la excepción. Cuando se llama a Sleep, se activa la función de filtro de excepción establecida previamente, lo que nos permite llamar a la cadena ROP sin necesidad de usar hooks de funciones clásicos. De esta manera, evitamos dejar regiones de memoria privadas extrañas e inusuales en el proceso relacionadas con dlls conocidas.
La cadena ROP simplemente llama a VirtualProtect() para establecer la página de memoria actual en N/A, luego llama a SleepEx y finalmente restaura la protección de memoria RX.
La visión general del proceso es la siguiente:
Este proceso se repite indefinidamente.
Como se puede ver en la imagen, la protección de memoria del módulo principal se cambia a N/A mientras duerme, lo que evita escaneos de memoria que buscan páginas con permiso de ejecución.

Dado que estamos usando el plugin LITCRYPT para ofuscar literales de cadena, es necesario configurar la variable de entorno LITCRYPT_ENCRYPT_KEY antes de compilar el código:
C:\Users\User\Desktop\RustChain> set LITCRYPT_ENCRYPT_KEY="yoursupersecretkey"
Después de eso, simplemente compila el código y ejecuta la herramienta:
C:\Users\User\Desktop\RustChain> cargo build
C:\Users\User\Desktop\RustChain\target\debug> rustchain.exe
Esta herramienta es solo una PoC y se deberían implementar algunas características adicionales para que sea completamente funcional. El propósito principal del proyecto era aprender cómo implementar una cadena ROP e integrarla dentro de Rust. Debido a eso, esta herramienta solo funcionará si la usas tal cual, y se esperan fallos si intentas usarla de otras maneras (por ejemplo, compilándola a una dll e intentando cargarla y ejecutarla de forma reflectiva).