Binary Ninja es una plataforma de ingeniería inversa desarrollada por Vector 35 Inc. [1] Puede desmontar un binario y mostrar el desmontaje en vistas lineales o gráficas. Realiza un análisis en profundidad automatizado del código, generando información que ayuda a analizar un binario. Eleva las instrucciones a lenguajes intermedios y, finalmente, genera el código descompilado.
Autor (es) original (es) | Jordan Wiens, Rusty Wagner y Peter LaFosse |
---|---|
Desarrollador (es) | Vector 35 Inc [1] |
Versión inicial | 31 de julio de 2016 [2] |
Lanzamiento estable | 2.4.2846 / 3 de junio de 2021 [2] |
Escrito en | C ++ , C , Python |
Sistema operativo | Microsoft Windows , Mac OS X y Linux |
Disponible en | inglés |
Tipo | Ingeniería inversa , desensamblador , descompilador |
Licencia | Propiedad |
Sitio web | https://binary.ninja/ |
Binary Ninja admite varias arquitecturas de CPU y formatos ejecutables binarios. Funciona en Windows, macOS y Linux. También tiene una versión en la nube de uso gratuito. [3]
Historia
Binary Ninja fue originalmente una herramienta interna [4] para un equipo CTF . Más tarde, los desarrolladores decidieron formar Vector 35 Inc y desarrollar Binary Ninja en un producto comercial. El desarrollo comenzó en 2015 y la primera versión pública se lanzó en julio de 2016.
El producto comercial no comparte código [4] con la herramienta interna. El último es ahora de código abierto [5] bajo GPLv2 .
Funciones y uso
Interfaz de usuario
La interfaz de usuario de Binary Ninja está construida sobre Qt (software) . Su interfaz de usuario principal comprende una lista de símbolos, una ventana de referencias cruzadas, una vista lineal / gráfica del desmontaje, un minigráfico y un mapa de características. También puede mostrar un editor hexadecimal, una lista de cadenas y una vista de clasificación.
Binary Ninja genera amplias anotaciones en la interfaz de usuario para ayudar al análisis binario.
Binary Ninja también admite temas definidos por el usuario. [6]
API y complementos
Binary Ninja ofrece una API [7] que se puede acceder a través de Python o C . La API es de código abierto [8] bajo licencia MIT . Puede interactuar con la mayoría de las funciones de Binary Ninja, por ejemplo, interfaz de usuario, análisis, IL (ver más abajo), etc. Se puede usar para agregar soporte para nueva arquitectura o automatizar tareas.
Los complementos [9] se pueden crear a través de la API para mejorar Binary Ninja. Vector35 mantiene una colección de complementos oficiales, [10] mientras que la comunidad ha creado numerosos complementos comunitarios. [11]
Algunos complementos notables son el depurador, [12] el kit de firma, [13] etc.
Idiomas intermedios de Ninja binario (BNIL)
Binary Ninja ofrece tres lenguajes intermedios (IL).
- El IL low-lowel (LLIL) [14] es un levantamiento detallado de las instrucciones subyacentes de varias arquitecturas a una representación unificada.
- El IL de nivel medio (MLIL) [15] crea variables con tipos y elimina la noción de pila.
- El IL de alto nivel (HLIL, también llamado descompilador) ofrece una representación del código similar al código fuente de C.
Análisis de núcleos
Binary Ninja realiza automáticamente varios análisis en el binario. Algunos ejemplos son:
- detección de función
- referencias cruzadas para código y datos
- inferencia de tipo
- propagación constante
- análisis de conjunto de valores
- resolución de la tabla de salto
Parcheo y edición binaria, compilador de shellcode (SCC)
Binary Ninja ofrece una forma conveniente de editar y parchear un binario. Puede ensamblar una instrucción en la línea actual, voltear un salto condicional, etc. Las ediciones y el análisis actualizado se reflejan inmediatamente en la interfaz de usuario.
Además, Binary Ninja se puede utilizar como editor binario general. Admite varias transformaciones y algoritmos de cifrado de uso común.
El compilador de shellcode permite al usuario compilar e insertar código a través de la sintaxis C.
Arquitecturas compatibles y formatos de archivo ejecutables
Arquitecturas
Binary Ninja admite oficialmente las siguientes arquitecturas de CPU:
- x86 de 32 bits
- x86 de 64 bits
- ARMv7
- Thumb2
- ARMv8
- PowerPC
- MIPS
- 6502
El soporte para estas arquitecturas varía y los detalles se pueden encontrar en las preguntas frecuentes oficiales. [dieciséis]
Además, la comunidad también creó varios complementos de arquitectura [17] que admiten otras arquitecturas.
Formatos de archivo ejecutables
Binary Ninja admite oficialmente los siguientes formatos de archivos ejecutables:
- PE / COFF
- DUENDE
- Macho
- .NES binario (a través de un complemento)
- Binario crudo
Ver también
Referencias
- ^ a b "Vector 35> inicio" . vector35.com . Consultado el 26 de julio de 2020 .
- ^ a b Inc, Vector 35. "Ninja binario> Ninja binario> registro de cambios" . binary.ninja . Consultado el 26 de julio de 2020 .
- ^ "Nube Ninja binaria" . cloud.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ a b faq.binary.ninja https://faq.binary.ninja/en/wasnt-this-an-open-source-project-at-first-6r43DzhbkvAzXSM6S . Consultado el 26 de julio de 2020 . Falta o vacío
|title=
( ayuda ) - ^ Vector35 / deprecated-binaryninja-python , VECTOR 35, 2020-07-12 , recuperado 2020-07-26
- ^ Vector35 / community-themes , VECTOR 35, 2020-07-09 , recuperado 2020-07-26
- ^ "Documentación de la API de Binary Ninja Python - Documentación de la API de Binary Ninja v2.1" . api.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ Vector35 / binaryninja-api , VECTOR 35, 2020-07-22 , consultado 2020-07-26
- ^ "Uso y escritura de complementos - Documentación de usuario de Binary Ninja" . docs.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ Vector35 / official-plugins , VECTOR 35, 2020-07-16 , recuperado 2020-07-26
- ^ "Uso y escritura de complementos - Documentación de usuario de Binary Ninja" . docs.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ Vector35 / debugger , VECTOR 35, 2020-07-25 , recuperado 2020-07-26
- ^ Vector35 / sigkit , VECTOR 35, 2020-07-14 , consultado 2020-07-26
- ^ "Guía BNIL: LLIL - Documentación del usuario de Binary Ninja" . docs.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ "Guía BNIL: MLIL - Documentación del usuario de Binary Ninja" . docs.binary.ninja . Consultado el 26 de julio de 2020 .
- ^ faq.binary.ninja https://faq.binary.ninja/en/what-cpu-architectures-are-supported-g8KfmMrgnM8LxGrCc . Consultado el 26 de julio de 2020 . Falta o vacío
|title=
( ayuda ) - ^ Vector35 / community-plugins , VECTOR 35, 2020-07-22 , recuperado 2020-07-26