Binary Ninja es una plataforma de ingeniería inversa desarrollada por Vector 35 Inc. [ 1 ] Permite a los usuarios desensamblar un archivo binario y visualizar el desensamblaje tanto en vista lineal como gráfica. El software realiza un análisis de código automatizado y exhaustivo, generando información que facilita el análisis del binario. Convierte las instrucciones de ensamblaje a lenguajes intermedios, generando código descompilado.
Binary Ninja es compatible con diversas arquitecturas de CPU y formatos ejecutables binarios, y funciona en Windows, macOS y Linux. También ofrece una versión gratuita en la nube y una versión comercial nativa. [ 3 ]
Historia
Originalmente desarrollada como una herramienta interna para un equipo de CTF , [ 4 ] los desarrolladores posteriormente formaron Vector 35 Inc. para convertir Binary Ninja en un producto comercial. El desarrollo comenzó en 2015 y la primera versión pública se lanzó en julio de 2016.
La versión comercial se desarrolló desde cero y no comparte código con la herramienta interna original. [ 4 ] Esta última ahora es de código abierto bajo la licencia GPLv2 . [ 5 ]
Características y uso
Interfaz de usuario
La interfaz de usuario de Binary Ninja está desarrollada con Qt y consta de varios componentes, como una lista de símbolos, una ventana de referencias cruzadas, vistas de desensamblaje (tanto lineales como gráficas), un minigráfico y un mapa de características. También incluye herramientas como un editor hexadecimal, una lista de cadenas de texto y una vista de clasificación.
Binary Ninja genera anotaciones extensas en la interfaz de usuario para ayudar al análisis binario y también admite temas definidos por el usuario para la personalización. [ 6 ]
API y complementos
Binary Ninja ofrece una API a la que se puede acceder a través de Python , C++ o Rust . [ 7 ] La API es de código abierto bajo la Licencia MIT . [ 8 ] Puede interactuar con la mayor parte de la funcionalidad de Binary Ninja, incluyendo la interfaz de usuario, las herramientas de análisis y los lenguajes intermedios (ver más abajo). Se puede utilizar para agregar soporte para nuevas arquitecturas o para automatizar tareas,
Se pueden desarrollar complementos [ 9 ] utilizando la API para mejorar Binary Ninja. Vector35 mantiene una colección de complementos oficiales, [ 10 ] mientras que la comunidad ha creado numerosos complementos adicionales. [ 11 ]
Algunos complementos notables incluyen el depurador, [ 12 ] y el kit de firmas. [ 13 ]
Lenguajes intermedios Binary Ninja (BNIL)
Binary Ninja ofrece tres lenguajes intermedios (IL).
- El IL de bajo nivel (LLIL) [ 14 ] proporciona una elevación detallada de las instrucciones subyacentes de varias arquitecturas a una representación unificada.
- El IL de nivel medio (MLIL) [ 15 ] crea variables con tipos y abstrae la noción de pila.
- El IL de alto nivel (HLIL, también conocido como descompilador) ofrece una representación del código similar al código fuente de C.
Análisis central
Binary Ninja realiza automáticamente varios análisis sobre el archivo binario. Algunos ejemplos son:
- detección de funciones
- referencias cruzadas para código y datos
- inferencia de tipo
- propagación constante
- análisis del conjunto de valores
- resolución de tabla de saltos
Edición y parcheo de binarios, compilador de shellcode (SCC)
Binary Ninja ofrece funciones de edición y modificación de código binario. Puede ensamblar una instrucción en la línea actual, invertir un salto condicional, etc. Las ediciones y el análisis actualizado se reflejan inmediatamente en la interfaz de usuario.
Binary Ninja puede utilizarse como editor binario general. Admite varios algoritmos de transformación y cifrado de uso común.
El compilador de shellcode permite al usuario compilar e insertar código mediante la sintaxis de C.
Arquitecturas compatibles y formatos de archivo ejecutables
Arquitecturas
Binary Ninja es compatible oficialmente con las siguientes arquitecturas de CPU:
- x86 de 32 bits
- x86 de 64 bits
- ARMv7
- Pulgar 2
- ARMv8
- PowerPC
- MIPS
- RISC-V
- 6502
- nanoMIPS (solo Ultimate)
- TriCore (solo Ultimate)
- Hexágono (solo Ultimate)
El soporte para estas arquitecturas varía y los detalles se pueden encontrar en las preguntas frecuentes oficiales. [ 16 ]
Los complementos creados por la comunidad añaden soporte para diversas arquitecturas. [ 17 ]
Formatos de archivos ejecutables
Binary Ninja admite oficialmente los siguientes formatos de archivo ejecutable:
- PE/COFF
- DUENDE
- Macho
- Binario .NES (mediante un complemento)
- binario sin procesar
- md1rom
Véase también
Referencias
- 1 2 "Vector 35 > inicio" . vector35.com . Consultado el 26 de julio de 2020 .
- 1 2 Vector 35 Inc. "Binary Ninja > Binary Ninja > changelog" . binary.ninja . Consultado el 26 de julio de 2020 .
- ↑ "Prueba Binary Ninja" . binary.ninja . Consultado el 2 de marzo de 2024 .
- 1 2 "Binary Ninja > Preguntas frecuentes" . faq.binary.ninja . Consultado el 26 de julio de 2020 .
- ↑ Vector35/deprecated-binaryninja-python , VECTOR 35, 12-07-2020 , recuperado el 26-07-2020
- ↑ Vector35/temas-de-la-comunidad , VECTOR 35, 09-07-2020 , consultado el 26-07-2020
- ↑ "Uso de la API de Binary Ninja - Documentación de usuario de Binary Ninja" . docs.binary.ninja . Consultado el 17 de marzo de 2023 .
- ↑ Vector35/binaryninja-api , VECTOR 35, 22/07/2020 , consultado el 26/07/2020
- ↑ "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, 16/07/2020 , consultado el 26/07/2020
- ↑ "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, 25/07/2020 , consultado el 26/07/2020
- ↑ Vector35/sigkit , VECTOR 35, 14-07-2020 , consultado el 26-07-2020
- ↑ "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 de usuario de Binary Ninja" . docs.binary.ninja . Consultado el 26 de julio de 2020 .
- ↑ "Binary Ninja > Preguntas frecuentes" . binary.ninja . Consultado el 25 de julio de 2024 .
- ↑ Vector35/community-plugins , VECTOR 35, 22/07/2020 , consultado el 26/07/2020
- Desmontadores