
Saludos
Creo que ha llegado el momento. Inflado / hirviendo / tener una opinión. Con el lanzamiento de Hydra, la situación con las herramientas para ingenieros inversos ha cambiado bastante. Si no había mucha opción antes de qué usar ( Binary Ninja , Hopper , JEB o Radare2 no se mencionarán aquí , porque en las empresas y comunidades de seguridad de la información sé que usan un número muy pequeño de personas, o el umbral para ingresar a algunas (hola, Radar) muy alto, o la cobertura de las arquitecturas se limita solo a x86 / x64 / ARM / ARM64 / MIPS ), ahora tenemos un competidor muy poderoso Hex-Rays
en la persona de la NSA con su GHIDRA
.
¿Pero es tan buena Hydra? ¿ IDA
es malo (o viceversa)? Vamos a hacerlo bien. En este "artículo" intenté reducir todos los pros y los contras de ambas herramientas. No tenía el objetivo de decir que esta o aquella herramienta es mejor: sacar sus propias conclusiones. Además, se están desarrollando uno y el segundo instrumento. Y el artículo contendrá solo los resultados de la comparación al momento de escribir. La comparación se realizará en las siguientes categorías:
- Arquitecturas compatibles
Si usted es un ingeniero inverso que trabaja solo con plataformas Intel (x86 / x64), entonces la presencia de todos los demás realmente no le importa. Pero, si tienes que trabajar con muchos diferentes alojamiento de archivos arquitecturas, cuanto más haya en entrega predeterminada, mejor.
- Formatos Soportados
Lo mismo que en el párrafo anterior, solo con respecto a los formatos de datos.
- Calidad de descompilación
Casi el componente más necesario e importante es el descompilador. No tiene mucho sentido solo el desensamblador, así que aquí hay una descripción general de lo que Ghidra
/ IDA
puede / produce.
- Extensibilidad, SDK / API
Es importante que los ingenieros inversos que trabajan con diversas arquitecturas, formatos y realicen muchas tareas similares de manera regular puedan escribir rápida y convenientemente módulos / cargadores / scripts adicionales. También sería bueno poder
depurarlos Veamos cómo va cada producto.
- La documentación
Parecería, ¿por qué es necesario? Todos hemos estado acostumbrados a las teclas de acceso rápido, encontramos maná para escribir complementos, etc., también descubrimos la interfaz. ¿Pero cuánto tiempo tomó? Con documentación, especialmente de alta calidad, esto será más rápido y tranquilo.
- Depurador (para archivos investigados)
Un componente importante y necesario para un entorno de ingeniería inversa. En estática también es posible, pero en dinámica es más fácil.
- Velocidad de análisis de archivos
Si se trata de archivos muy grandes (de 10 MB o más), es importante que el entorno de ingeniería inversa no lo obligue a ir a tomar el té, a acostarse mientras se analiza el archivo.
- Conveniencia del trabajo (interfaz, teclas de acceso rápido, enfoque en la entrada del teclado)
A pesar de que lo principal es la funcionalidad, la forma en que se presenta al usuario, su aspecto, juega un papel importante. Si la interfaz permite no usar el mouse para formularios y comandos de uso frecuente, esto es una ventaja. Si necesita pasar por un montón de ventanas para agregar un argumento de entrada a una función, esto ya es un signo menos. Comparar
- Lanzamiento de nueva versión
La rapidez con la que se corrigen los errores, se agregan nuevas características y, en consecuencia, se lanzan nuevas versiones, es un indicador de un buen equipo de desarrollo y un enfoque serio.
- La dificultad de obtener un kit de distribución
Compre, descargue, cree la distribución, eso es todo.
- Apoyo
¿Desea informar un error a los autores, sugerir una nueva función o simplemente preguntar sobre algo? Todo esto se trata de soporte. Averiguaremos quién es mejor: un producto pagado o gratuito.
- Comunidad
La presencia de la comunidad y la oportunidad de comunicarse con ella, discutir problemas de desarrollo, preguntas sobre la funcionalidad o simplemente obtener buenos consejos de personas conocedoras (no desarrolladores): esta es la comunidad.
- Proyecto de colaboración
El trabajo de varias personas en un proyecto es un punto lo suficientemente importante como para ignorarlo.
Comparación
1. Arquitecturas compatibles (IDA)
Fuera de la caja, IDA Pro
admite una gran cantidad de procesadores y sus modificaciones. La lista es respetable: https://hex-rays.com/products/ida/processors.shtml
La lista de procesadores es diferente para Starter
y Professional Edition
, solo se admite 64 bits en la versión Pro (así como en la versión demo , gracias a slinkinone ). Las plataformas en este último son bastante raras, pero no obstante.
Si el trabajo no se centra en IoT, entonces Starter
suficiente; de lo contrario, tendrá que comprar una versión Pro
.
La descompilación está disponible solo para x86
/ x64
/ arm
/ arm64
/ PowerPC
, en la primera mitad del próximo año prometen lanzar el descompilador MIPS
.
1. Arquitecturas compatibles (GHIDRA)
No hay una versión en línea de la lista, así que la traigo aquí:

Aquí la lista se presenta en forma de procesadores centrales (sin modificaciones), pero esto no significa que no sean compatibles. Los descompiladores están disponibles para cada uno de los módulos de procesador.
La lista de formatos aquí: https://hex-rays.com/products/ida/file_formats.shtml
La lista es bastante grande. Además, hay complementos de la comunidad que nunca se agregarán a la caja, como Para hacer esto, necesitará discutir el momento con Ilfak Gilfanov (el desarrollador principal).
Lista de formatos 1- androide
- apk
- bootimg
- dex
- grano
- odex
- xml
- bplist
- ataúd
- complzss
- cpio
- ext4
- gzip
- ios
- apple8900
- btree
- decmpfs
- dmg
- dyldcache
- genérico
- ibootim
- img2
- img3
- img4
- ipsw
- png
- preenlace
- xattr
- iso9660
- java
- lzss
- omf
- sevenzip
- imagen dispersa
- alquitrán
- ubi
- xar
- yaffs2
- cremallera
- zlib
Lista de formatos 2- ataúd
- enano
- enano4
- duende
- lx
- macho
- macos
- mz
- ne
- objc2
- Objetivo C
- omf
- pdb
- pe
- pef
- ubi
- xcoff
La lista anterior es solo una lista de directorios en https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats
Otra lista de archivos aquí: https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format
3. Descompilación de calidad (IDA)
El descompilador de Ida funciona maravillosamente con el código x86
/ x64
/ arm
/ arm64
(no puedo decir nada sobre PowerPC
, porque no lo he visto), que fue generado por algún compilador estándar, la mayoría de los cuales produce una ordenada lista C.
Los desarrolladores inicialmente se centraron en el código MS-DOS, por lo que se tienen en cuenta los artefactos de compiladores incluso bastante antiguos (desde aquí en la interfaz en muchas ventanas hay
,
, es
/ ds
/ ss
/ fs
/ gs
( ds
, ¡incluso en MIPS!)), Hasta bastante nuevo Es cierto que las optimizaciones del compilador IDA
activadas no funcionan tan bien, y el escape se convierte en un infierno.
Con el código escrito en un compilador desconocido para Ida (o en ensamblador), los resultados se vuelven muy malos: el uso de una calling convention
no estándar convierte una lista descompilada en un conjunto de líneas casi ilegible.
La necesidad de establecer los registros necesarios manualmente en la línea de entrada del prototipo de la función a través de __usercall
con su @
y <>
, por un lado, es una gran desventaja, especialmente cuando hay muchos registros, y por otro lado, Hydra no tiene esto, y solo está a través de la GUI, que no es Siempre es conveniente si el número de registros utilizados es pequeño.
3. Calidad de la descompilación (GHIDRA)
No conozco personas que digan que el descompilador Hydra es genial. Aquí, para alegría, es más probable que generalmente exista, ¡y existe para cada procesador compatible!
El descompilador Hydra tiene mucha basura en el código emitido que es inusual para el usuario de Ida, lo que a menudo distrae la comprensión de la esencia de lo que está sucediendo en él.
Pero el descompilador Hydra tiene una gran característica: tiene un emulador de instrucciones, que le permite tirar basura que no se usa y nunca se llamará, al tiempo que simplifica algunos puntos.
Además, al descompilador Hydra no le importa en qué registros vienen los argumentos; si se accede a ellos, se utilizarán.
Aquí me gustaría señalar por qué Hydra o Ida tienen sus propios problemas particulares con la descompilación. El punto es la orientación de cada producto. IDA
, como señalé anteriormente, se creó con una orientación en MS-DOS y, en general, en x86, luego cubrió gradualmente x64 y ARM. Por lo tanto, solo una maravillosa calidad de escape para estas plataformas, pero absolutamente ninguna cobertura para otras.
Para Hydra, por el contrario, se creó con el objetivo de la ingeniería inversa de dispositivos IoT. De ahí la gran cantidad de procesadores compatibles, una descripción clara de cada uno de ellos y la capacidad simple de crear nuevos. Pero, debido al hecho de que los desarrolladores trataron de cubrir muchas arquitecturas, mejorar el escape del descompilador no se convirtió en una prioridad.
4. Extensibilidad de funcionalidad (IDA)
Ida le permite escribir cargadores, complementos, depuradores y módulos de procesador, así como scripts directamente en la interfaz. Algunos se pueden escribir en python, lo cual es un poco más conveniente (a través del complemento IDAPython , escrito no por IDA
desarrolladores de IDA
, por Elias Bachaalany
).
El proceso de desarrollo de complementos durante la versión 6.x
fue bastante complicado, ya que faltaba documentación sensata. Ahora los tiempos han cambiado, escribir tu propia pieza se ha vuelto más fácil. Cada año se celebra un concurso en el que los desarrolladores eligen el mejor complemento en su opinión (y la opinión es bastante controvertida). Por ejemplo, en el último concurso ganado, nunca adivines cuál contratista expansor funcional ... ¡Resultó ser un complemento que KILLS Undo
admite en IDA
! Simplemente no hay palabras. Los desarrolladores han estado pidiendo esta característica durante tanto tiempo, pero hasta que salió GHIDRA
, nadie quería mover un dedo. Y ahora, por favor, elimine la característica genial con el complemento, ganó, ¡felicidades!
La depuración de complementos es fácil, especialmente si fue escrita en C ++. La depuración de scripts de Python o IDC
es más difícil y no existe una forma oficial.
Un dolor muy severo en el ano comenzó cuando la API se reescribió por completo en la versión 7.0
, por lo que es incompatible con versiones anteriores. Por un lado, los nombres de las funciones se hacen más claros, se eliminan los argumentos adicionales, el desarrollo se ha vuelto más fácil. Pero si usted, como yo, desarrolló complementos para las versiones 6.x
necesita transferir su creación a un SDK nuevo, entonces le duele la cabeza.
Y luego, en la versión 7.1
, se produjeron cambios nuevamente, y todo tuvo que repararse de una manera nueva.
4. Extensibilidad de funcionalidad (GHIDRA)
Ghidra
escrito en Java
(con un descompilador en C++
), con soporte para secuencias de comandos Python
(a través de Jython
). GhidraDev
complemento GhidraDev
para Eclipse
se incluye en el paquete estándar, lo que le permite crear plantillas de proyecto (que se pueden importar más tarde en IntelliJ IDEA
). La finalización automática en el IDE y la documentación funcionan bien y se tarda media hora en descubrir cómo escribir su primer complemento.
Además, en la entrega básica hay muchos scripts que se escribieron para casi todas las aplicaciones posibles. También se pueden corregir, si es necesario.
Usar Eclipse
conveniente para depurar sus proyectos durante el desarrollo.
5. Documentación (IDA)
IDA
documentación de la IDA
es su punto débil, y así lo ha sido durante mucho tiempo. Como con la mayoría de los desarrolladores, el sesgo entra en la funcionalidad en lugar de en su documentación. De ahí el escaso archivo HLP
que viene en la entrega.
El libro " IDA Pro Book " no fue escrito por desarrolladores, y fue lanzado solo para la sexta versión. Desde entonces, no se han publicado nuevos libros, no hay manuales para desarrollar complementos de desarrolladores.
En algún lugar a partir de la versión 7.0
documentación comenzó a convertirse en una versión web y una descripción pobre de las funciones API del SDK.


5. Documentación (GHIDRA)
La documentación para Hydra, a diferencia de Ida, se escribió simultáneamente con el desarrollo. Desde aquí, tenemos comentarios sobre casi todas las funciones de API llamadas, elementos de enumeración y clases. El archivo de ayuda que viene con la entrega y describe la interfaz y la configuración de Hydra también está hecho de manera sólida, con capturas de pantalla y ejemplos de, de hecho, cada botón o elemento de menú.


6. Depurador (IDA)
SÍ, lo es. Y funciona Windows, Linux, MacOS, más la capacidad de conectarse a través de gdb
. Con respecto a lo último: para la mayoría de las plataformas no estándar, tuve que escribir mi propio módulo de depurador, ahora existe la oportunidad de depurar a través de gdb para plataformas como: x86
/ x64
, ARM
/ AArch64
, PowerPC
, MIPS
, Motorola 68k
, Infineon TriCore
, Renesas RH850
. Lista completa aquí: https://hex-rays.com/products/ida/debugger/index.shtml#details
6. Depurador (GHIDRA)
Por desgracia, todavía no hay un depurador en el dominio público. Los muelles en WikiLeaks
mencionaron algunos módulos de depuración. Sin embargo, se sabe que la NSA está trabajando en esto, ¡y habrá un depurador!
Mientras tanto, a través de complementos que amplían las capacidades de la interfaz, es posible escribir su propio depurador. Pero aparentemente, nadie hace esto.
7. Velocidad de trabajo (IDA)
Sobre archivos grandes, Ida inhala mucho menos Hydra, pero no siempre. El analizador Ida se ejecuta en modo de subproceso único y en archivos grandes un núcleo está completamente cargado mientras que el resto está inactivo. En un futuro cercano, los autores no van a cambiar esto (según las palabras de los desarrolladores).
7. Velocidad de trabajo (GHIDRA)
Cuando la conversación entre los dos inversores llega a discutir la velocidad de estos Ida e Hydra, todos llegan a la conclusión de que Hydra tarda mucho tiempo en procesar archivos grandes. Aunque está escrito teniendo en cuenta el multihilo. Y Java
culpa: más por multiplataforma, menos por velocidad. Sin embargo, si configura la cantidad de memoria, pila y almacenamiento dinámico para la JVM
, así como la cantidad de subprocesos, el trabajo se acelera ligeramente.
8. Usabilidad (IDA)
Sin lugar a dudas, muchas personas conocen las teclas de acceso directo de Ida de memoria. Son simples y directas, a menudo intuitivas. Muchos de los elementos del menú y las características de Ida se pueden llamar desde el teclado, lo cual es bastante conveniente.
En cuanto a la apariencia, hasta algunas versiones 6.x
se utilizó una interfaz gráfica autoescrita. Además, los desarrolladores cambiaron completamente a Qt
. La interfaz se ha vuelto definitivamente más agradable. La ubicación de las pestañas, botones y elementos de la interfaz no ha cambiado durante mucho tiempo.
Desde aquí siguen los pros y los contras. Pros: la interfaz es familiar, no necesita buscar dónde está y luchar contra los hábitos. Contras: algunos elementos permanecen rudimentarios (el editor de estructura parece un legado de versiones antiguas de Ida) o no se usan el 90% del tiempo.

8. Conveniencia del trabajo (GHIDRA)
Todo es exactamente lo contrario. Un nuevo producto en el mercado, la diferencia en teclas rápidas en comparación con Ida, está haciendo su trabajo. La velocidad del trabajo, que durante mucho tiempo trabajando con Ida ha alcanzado una velocidad tremenda, comenzó a disminuir en Hydra. Pero, por supuesto, con un trabajo prolongado en los últimos hábitos también aparecen, y no se vuelve tan difícil.
Hydra tiene muchos menús, la cantidad de elementos en los que a veces es bastante grande, y no todos los elementos tienen teclas de acceso rápido. Pero al mismo tiempo, el configurador de configuración de teclas de acceso rápido le permite colgar su propia tecla de acceso rápido en casi todos los comandos.
Porque Ghidra
escrito en Java
, los desarrolladores utilizaron la funcionalidad básica del JDK
, a saber, Swing
. Debido a esto, tenemos lo que tenemos. Pero esto no se puede llamar un menos de Hydra.
9. Lanzamiento de nuevas versiones (IDA)
¿Has notado que con el lanzamiento de Hydra, las nuevas versiones de Ida comenzaron a aparecer con más frecuencia? Pero he mirado atentamente. ¿Sabes por qué? Por supuesto, el punto es la competencia. Finalmente ella apareció!
Anteriormente, rara vez se lanzaban nuevas versiones de Ida; Ida es muy reacia a adquirir nuevas funcionalidades. Después de informar un error, no debe esperar que la corrección que le enviaron los desarrolladores aparezca muy pronto en sus colegas. No hay parches del sistema, ya que los desarrolladores revisan los archivos principales para cada cliente (marca de agua).
Parece que la velocidad de lanzamiento de nuevas versiones de Ida aumentará debido a la competencia del producto.
9. Lanzamiento de nuevas versiones (GHIDRA)
La regularidad del lanzamiento de nuevas versiones de Hydra es bastante grande: se han lanzado alrededor de seis versiones desde que se publicó la fuente.
Si espera mucho tiempo para una nueva versión de distribución, puede construir una rama maestra con github . La primera vez tomará más de una hora, pero vale la pena.
10. La dificultad de obtener un kit de distribución (IDA)
Todos conocen esta historia: " Ilfak Gilfanov - ¡lucha contra la piratería! ". Debido a esto, el acceso a las versiones Pro
y Starter
de los kits de distribución para la compra se ha vuelto muy difícil y triste. Para simples mortales que no tienen acceso a dinero loco los buzones que no están en servidores de correo público como gmail
, mail.ru
, etc., no son posibles distribuciones. E, incluso si tiene su propia IP, su sitio web, tendrá que pasar por muchos controles, enviar escaneos, confirmaciones, etc. Y todo para que la distribución no se publique en Internet. Esto no siempre ayuda.
Aparecen versiones eufóricas, pero rara vez. Por lo tanto, la mayoría de los entusiastas de los ingenieros inversos utilizan distribuciones antiguas, una vez fusionadas, de ESET
y antivirus chino.
No hace mucho tiempo, comenzaron a aparecer versiones oficiales, pero truncadas para estudiantes, sin descompiladores, y muchas otras restricciones (más detalles aquí ).
10. Dificultad para obtener una distribución (GHIDRA)
Parece que no hay nada que escribir, pero. De hecho, el acceso al sitio principal de Hydra está prohibido desde Rusia, Israel y China. Necesita una VPN
o Tor
(velocidad de descarga adecuada). No hay lanzamientos en github
, solo códigos fuente.
11. Soporte (IDA)
Cuánto tuve que comunicar con el soporte de Hex-Rays
, siempre hubo una experiencia diferente: algunas de las personas que trabajan en el soporte son muy educadas y siempre están listas para ayudar. Parte: El desarrollador principal, y la comunicación se volvió grosera. Especialmente si la opinión no coincidía. Pero, probablemente esta es la naturaleza de esto. Lo mismo ocurre en la comunicación con los usuarios en Internet.
Recientemente resultó que solo me comunico con el apoyo de mis amigos. Un error muy antiguo relacionado con la pérdida de selección durante el desplazamiento, que surgió en la versión 6.6, que todos conocen, nunca ha sido rebajado por los desarrolladores. Preguntó cuál era el problema. Y las respuestas están al estilo de: "No quiero comunicarme con una persona que trata a los usuarios de esta manera ". Por desgracia, la reputación funciona de esa manera.
Sin embargo, los errores y sugerencias que informé a los desarrolladores fueron corregidos y tomados en cuenta (no todos).
11. Apoyo (GHIDRA)
Hydra tiene un repositorio en github
. Hay issues
, y aquí es donde debe informar los errores. La velocidad de respuesta a algunos puede ser muy larga o bastante rápida. Pero, los errores no se cierran así, dicen, no queremos implementar esto. Todo es considerado, tomado en cuenta. Todos pueden contribuir.
PR . .
12. (IDA)
, . , -, . , , , .
12. (GHIDRA)
: ghidra.re , -, @GHIDRA , github. , .
13. (IDA)
. , , , -, .
13. (GHIDRA)
. -, .
Conclusiones
. , - . , Linux — // , , .
/ IDA
. , . .
, , Ghidra
. IDA
— .
— . . , Ghidra
, IDA
— . , , IoT — . .
, , . Gracias
PS .
PPS 2 - .
PPPS . . netch80 .