Jump List Parser
Volver al blog

Entendiendo las Jump Lists de Windows

2026-05-184 min de lectura

Entendiendo las Jump Lists de Windows

Las Jump Lists llegaron en Windows 7 para dar a los usuarios acceso rápido a archivos usados recientemente y frecuentemente por aplicación. Para un analista DFIR son algo completamente distinto: un registro por usuario y por aplicación de la interacción con archivos que sobrevive a la eliminación del archivo objetivo y frecuentemente sobrevive a los intentos del usuario de borrarlo. Si no estás extrayendo Jump Lists en cada encargo del tipo "¿qué tocó este usuario?", te estás perdiendo la fuente más barata de esa respuesta.

Empieza con la introducción a las Jump Lists de Windows si entras en frío. De lo contrario, la versión corta está abajo.

Dos archivos, dos autores

  • AutomaticDestinations (*.automaticDestinations-ms), un OLE Compound File escrito por la shell. Cada flujo numerado es un shell link (LNK) de Windows. Un solo flujo DestList los ordena y registra marcas temporales de acceso, recuentos de acceso, el hostname NetBIOS de origen y GUIDs de volumen / objeto. Esto es lo que Windows te cuenta sobre el usuario.
  • CustomDestinations (*.customDestinations-ms), un flujo de bytes plano escrito por la propia aplicación vía ICustomDestinationList. Categorías de estructuras LNK concatenadas espalda con espalda, terminadas por 0xBABFFBAB. Esto es lo que la aplicación le dijo a la shell que mostrara.

Ambos residen en %AppData%\Microsoft\Windows\Recent\(Automatic|Custom)Destinations\ y usan la misma denominación <AppID>.<extension>. La AppID es un CRC64 truncado sobre la ruta del ejecutable, el mismo binario en la misma ruta produce la misma AppID en todas las máquinas, lo que hace que las listas de AppID publicadas sean útiles para el triaje. Ver dónde almacena Windows los archivos de Jump List para las rutas por usuario y notas de adquisición.

Lo que realmente sacas de uno

Tras el parseo, por entrada: la ruta de destino completa (local, UNC o extraíble), tres FILETIMEs de la cabecera LNK incrustada, una marca temporal y recuento de acceso de DestList, el flag anclado, el hostname NetBIOS registrado en el momento del acceso, el serial y etiqueta del volumen, argumentos de línea de comandos y directorio de trabajo si están presentes, y el TrackerDataBlock con sus GUIDs droid (que incluyen la dirección MAC de la máquina que creó el LNK).

Ese conjunto cubre las preguntas que el caso realmente plantea: quién lo abrió, cuándo, desde dónde y desde qué disco físico. El campo hostname es al que recurro con más frecuencia en el trabajo de movimiento lateral, la Jump List en el endpoint comprometido recuerda el nombre NetBIOS del servidor de staging mucho después de que el servidor de staging haya desaparecido.

Por qué parsear en el navegador

La cadena de custodia importa en DFIR. También importa el hecho de que las Jump Lists de entornos regulados casi siempre contienen PII de usuarios y rutas de documentos que no quieres que crucen una frontera de proveedor. El parser de este sitio compila un crate Rust a WebAssembly y lo ejecuta enteramente del lado del cliente. Sin subida, sin registro del lado del servidor, sin telemetría. Suelta un archivo, obtén la vista parseada.

Para una mirada lado a lado de las otras opciones (JLECmd, JumpListExplorer, Jumplist-Browser de Kacos2000), consulta la comparación de herramientas. Para una investigación paso a paso, la guía DFIR es la siguiente lectura. ¿Intentas en su lugar eliminar el historial de Jump List? Consulta cómo borrar o eliminar las Jump Lists de Windows, pero lee la sección sobre qué sobrevive al borrado antes de confiar en ello.

Lecturas adicionales