«Maximun Common Subgraph Isomorphism» o quien me mandaría meterme en este berenjenal
Desde hace algún tiempo estoy haciendo un proyectillo por mi cuenta de comparación de software en base a su comportamiento y a la estructura del binario. Para el análisis de la estructura del ejecutable obtengo datos de las funciones que componen el programa, sus conexiones con otras funciones, número de bloques básicos de cada función y otros datos estadísticos sacados a partir de estos conceptos.
Con esos datos de como se interrelacionan las funciones de un programa entre sí obtengo el «callgraph» del programa (un grafo dirigido de las relaciones de las funciones del programa entre si). En el ejemplo siguiente podéis ver el callgraph de un programa bastante simple sacado con el IDA:
En este gráfico se puede observar como se llama desde el punto de entrada a cada una de las funciones del programa y que funciones llaman a cuales.