
diaphora v3.4.2
Diaphora, la herramienta de comparación de programas gratuita y de código abierto más avanzada.
δiaphora
Instalación
Instálalo con el gestor de plugins de Hex-Rays:
hcli plugin install https://github.com/joxeankoret/diaphora/archive/refs/tags/3.5.0.zip
Instalación manual: descarga el código y colócalo en tu directorio plugins/.
Diaphora (διαφορά, griego para 'diferencia') versión 3.5 es la herramienta de diffing de programas (funcionando como plugin de IDA) más avanzada disponible a día de hoy (2026). Fue publicada en 2015 y se ha mantenido activamente desde entonces: Diaphora lleva ya 11 años siendo portada a cada una de las versiones menores de IDA desde la 6.8 hasta la 9.5.
Diaphora es compatible con versiones de IDA >= 7.4 porque el código solo se ejecuta en Python 3.X (Python 3.11 fue la última versión probada).
Características únicas
Diaphora tiene muchas de las características más comunes de diffing de programas (bindiffing) que cabría esperar, como:
- Diffing de ensamblador.
- Diffing de grafos de flujo de control.
- Portado de nombres de símbolos y comentarios.
- Adición de coincidencias manuales.
- Cálculo del ratio de similitud.
- Automatización por lotes.
- Cálculo de coincidencias de grafos de llamadas.
- Docenas de heurísticas basadas en teoría de grafos, ensamblador, bytes, características de las funciones, etc...
Sin embargo, Diaphora también tiene muchas características que son únicas y no están disponibles en ninguna otra herramienta pública. La siguiente es una lista no exhaustiva de características únicas:
- Capacidad de portar structs, enums, unions y typedefs.
- Detección de vulnerabilidades potencialmente corregidas para sesiones de patch diffing.
- Soporte para unidades de compilación (encontrar y comparar unidades de compilación).
- Soporte de microcódigo.
- Diffing en paralelo.
- Heurísticas basadas en pseudocódigo.
- Generación de parches de pseudocódigo.
- Diffing de pseudocódigos (¡con resaltado de sintaxis!).
- Soporte de scripting (tanto para el proceso de exportación como para el de diffing).
- ...
Donaciones
Puedes ayudar (o agradecer) al autor de Diaphora haciendo una donación. Si te apetece hacerlo, puedes usar uno de los siguientes enlaces:
Soporte
No dudes en abrir issues en Github si tienes algún problema o necesitas ayuda. Si prefieres chatear de forma interactiva, puedes usar el siguiente canal de Discord: https://discord.gg/atg34w2xjV
Problemas de licencia
Si tu empresa no permite el uso de la licencia AGPL, puedes obtener licencias comerciales de Diaphora para usarla en tu empresa o para usarla como particular en cualquier empresa en la que trabajes (concepto similar a las licencias con nombre de IDA). Para más detalles, contacta conmigo en [email protected].
Recuerda que no soy yo quien te impide usar Diaphora: es tu empresa. Gracias por tu comprensión.
Wiki
Si estás buscando cómo automatizar el proceso de exportación o de diffing, o quieres acelerar las operaciones, etc... Quizá quieras echar un vistazo a la wiki, donde se responden ese tipo de preguntas.
Capturas de pantalla
Diaphora encontrando la función exacta donde se parcheó una vulnerabilidad en CVE-2020-1350:

Diaphora, de nuevo, encontrando la función exacta donde se corrigió CVE-2023-28231:

CVE-2023-28231. Como se explica en un blog de ZDI, la vulnerabilidad se corrigió comprobando que el número de mensajes de reenvío de retransmisión en "ProcessRelayForwardMessage()" no es mayor o igual que 32 (0x20), como se muestra en el siguiente diffing de pseudocódigo:

Diaphora realizando diffing del microcódigo de Hex-Ray:

Diffing de ensamblador, pseudocódigo y microcódigo:

Diffing de CVE-2023-21768 con Diaphora 3.0:

Esta es una captura de pantalla de Diaphora realizando diffing de la vulnerabilidad del kernel de iOS PEGASUS corregida en iOS 9.3.5:
Y esta es una captura de pantalla antigua de Diaphora realizando diffing del boletín de Microsoft MS15-034:
Diaphora realizando diffing de MS15-034
Estas son algunas capturas de pantalla de Diaphora realizando diffing del boletín de Microsoft MS15-050, extraídas de la entrada del blog Analyzing MS15-050 With Diaphora de Alex Ionescu.

Aquí hay una captura de pantalla de Diaphora realizando diffing de iBoot de iOS 10.3.3 contra iOS 11.0: