
Este framework permite al usuario descubrir gadgets JOP y puede automatizar la construcción de una cadena JOP completa para evadir DEP. JOP ROCKET es la solución definitiva para la programación orientada a saltos en Windows. JOP ROCKET también encuentra el novedoso dispatcher de dos gadgets, lo que amplía enormemente lo que es posible con JOP.

NOTA: Con la 2.15, introducimos el dispatcher de dos gadgets--esto expande significativamente las posibilidades con los dispatcher gadgets. Se han añadido muchas optimizaciones y nuevas características adicionales con la 2.15 el 26 de mayo de 2021.
Actualización: 29 de noviembre de 2021: He subido las diapositivas de @Hack en Riad y también un white paper sobre JOP sin shellcode. Los videos de demostración sin audio utilizados en la charla se pueden encontrar aquí: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV
Actualización: 1 de diciembre de 2022: He añadido una sección de preguntas y respuestas al final de este GitHub, que incluye enlaces a recursos (charlas y documentos).
Versión actual: 2.15
La herramienta Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool, o JOP ROCKET, es una herramienta diseñada para facilitar el descubrimiento de gadgets JOP en un entorno x86 Windows. Esta herramienta se presentó en DEF CON 27, donde fue el tema de una charla del Dr. Bramwell Brizendine y el Dr. Josh Stroschein. Una actualización importante que estaba en desarrollo fue lanzada en septiembre de 2020, con actualizaciones menores planificadas en el futuro cercano.
Por favor, navegue a https://github.com/Bw3ll/JOP_ROCKET para descargar esta herramienta.
Han ocurrido varias actualizaciones importantes. Se recomienda que cualquier versión anterior a la 2.15 sea actualizada para aprovechar las muchas actualizaciones. Estas incluyen la generación automática de cadenas JOP, el descubrimiento de nuevos tipos de gadgets, nuevos tipos de dispatcher gadgets y los dispatchers de dos gadgets. JOP ROCKET también ha experimentado muchos otros cambios importantes para mejorar y optimizar su rendimiento y velocidad.
JOP ROCKET es un programa en Python que utiliza el motor de desensamblado Capstone, así como otras dependencias. Esta herramienta de explotación de software es un artefacto con todas las funciones diseñado para facilitar la programación orientada a saltos. Está pensada para ejecutarse en Windows.
La información de uso no está disponible en este momento más allá de lo que aparece en el menú de ayuda. Construir exploits JOP no es sencillo y es muy matizado, con algunos paralelismos pero muchas diferencias con ROP. Consulte la charla de DEF CON para ver una breve demostración. https://www.youtube.com/watch?v=PMihX693mPE
Esta herramienta se ha enseñado en Dakota State University en el programa de doctorado, como parte de CSC 848: Advanced Software Exploitation, el curso más exigente del programa. Los estudiantes completaron exploits que incluían la evasión de DEP y ASLR.
Gracias a Austin Babcock por su ayuda con varios problemas relacionados con JOP ROCKET, incluidas sus instrucciones de instalación. Es un maestro de JOP.
Hemos subido un archivo aquí, JOP ROCKET challenge - toy binaries.zip, para permitir a las partes interesadas probar y practicar JOP en algunos binarios de juguete de muestra, usando JOP ROCKET. ¿Puedes evadir Data Execution Prevention (DEP)? Esto es bueno si quieres practicar JOP en un binario que sabes que es vulnerable con seguridad y que tiene los gadgets adecuados. Hay una versión más fácil y una más difícil del mismo binario. Aunque JOP probablemente será más difícil la primera vez, hasta que alguien le tome el truco. Una vez que domines JOP con estos binarios, puedes probarlo en algunos gadgets del mundo real, asumiendo que tengan suficientes gadgets. Si estás usando el paradigma de dispatcher gadget, ten en cuenta que sí necesitas un dispatcher gadget. JOP también es posible mezclado con ROP, usando un gadget JOP para apuntar a un RET, por lo que JMP EDX podría tener EDX apuntando a RET. Esto es más útil si solo necesitas uno o dos gadgets JOP para hacer que ROP funcione. ¡Los binarios en el archivo deberían permitirte usar el paradigma de dispatcher gadget de varias maneras diferentes!
Con el paradigma de dispatcher gadget de JOP, puedes eliminar ROP al 100%, aunque es más fácil comenzar con dos gadgets ROP, para cargar la tabla de despacho y el dispatcher gadget. La cadena JOP preconstruida hará esto automáticamente por ti, asumiendo que estén presentes. A partir de ahí, puede ser JOP puro, utilizando tanto saltos indirectos como llamadas indirectas (JMP EBX, CALL EDX, etc.).
Instala Python 2.7. La forma más fácil de hacerlo será desde el sitio web: https://www.python.org/download/releases/2.7/
Si ya tienes Python 3, igualmente necesitarás tener Python 2.7, ya que la herramienta no funcionará correctamente con Python 3.
Si tienes ambos, necesitarás añadir el comentario especial:
#!python2
en la parte superior de rocket.py. Luego ejecuta con "py rocket.py" en lugar de "python rocket.py". Esto asegurará que el programa se ejecute usando Python 2.7. Alternativamente, puedes simplemente hacer py -2 rocket.py

instala pip si no viene ya incluido con Python.
Tendrás que guardar el script proporcionado y ejecutarlo, según las instrucciones del enlace. Si encuentras un error, prueba a usar el script “alternativo”.
Si pip aún no funciona, intenta añadir "C:\python27\Scripts" (o tu directorio correspondiente) a la variable de sistema Path:

¡Comienza a instalar las dependencias con pip!
Nota: Las instalaciones con pip deberían funcionar usando la terminal de Windows, pero puede que no funcionen en un entorno Cygwin. Si usas Cygwin, es posible que necesites instalar desde el código fuente. Esto puede ser una tarea que requiere más tiempo, y se te remite a la documentación más reciente de los diferentes creadores de las dependencias.
pip install capstone
pip install pefile2
Probablemente ya tengas pefile instalado con Python 2.7, pero esta versión es antigua.
Pefile2 es lo que necesitas.
Puede que necesites pip uninstall pefile para conseguir que el programa use pefile2.
Etc... Se puede encontrar una lista de dependencias al final de este documento. Cada una debe instalarse, si no están ya instaladas.
Probablemente las dos anteriores sean las únicas que necesites instalar tú mismo.
Muchas de las dependencias ya vienen con Python. Para listar los módulos disponibles, abre un símbolo del sistema:

Revisa la lista y comprueba si tienes todas las dependencias. Para las que no tengas, instálalas con pip o mediante código fuente.
Nota: pywin32 se usa para Win32file y Win32api
Debes tener en un mismo directorio los cinco archivos: rocket.py, lists,py, checkIt.py, ui.py y stackpivot.py. Para comenzar a usar la herramienta, ejecuta en la línea de comandos: python rocket.py filename.exe -- siendo filename.exe el programa del que deseas obtener gadgets JOP o cadenas JOP.
Si estás recibiendo errores como "SyntaxError: Missing parentheses in call to 'print'", es probable que se esté ejecutando con Python 3. Intenta hacer la corrección descrita en el Paso 1 para que el programa use Python 2.
Los errores relacionados con “lists” o “ui” probablemente se deben a la ubicación de los archivos lists.py y ui.py. Asegúrate de que estos archivos estén en el mismo directorio que rocket.py.