El análisis estático como motor de la ingeniería inversa

Cuando un compilador traduce un programa, destruye información: los nombres, los tipos, las fronteras entre estructuras, la forma de los bucles. Recuperarla exige razonar sobre el mismo objeto y con las mismas herramientas con las que el compilador razonó para destruirla. Esta referencia recorre esas herramientas, de la teoría de retículos a la anatomía de un decompilador.

Orientación

Qué cubre esta referencia, en qué orden leerla y con qué convenciones está escrita.

Del binario al modelo

Qué destruye el compilador, qué se puede recuperar, y sobre qué representación se razona.

Análisis de flujo de datos

Los marcos monótonos, los algoritmos de punto fijo y los análisis clásicos, hasta IFDS.

Forma SSA

La representación intermedia sobre la que están construidos Hex-Rays, Binary Ninja y angr.

Semántica, tipos y memoria

Punteros, alias, inferencia de tipos e interpretación abstracta: de dónde sale el rigor.

Del análisis al código

Redundancias, desofuscación, huellas del compilador y el pipeline completo de un decompilador.

Apéndices

Retículos, inducción, grafos, el índice de notación y la bibliografía.