Reconstruir pantallas RDP con los mosaicos de la caché
Por qué un collage de caché RDP se alinea en unas zonas y se desplaza en otras, cómo elegir su ancho y cómo rehacer una pantalla mosaico a mosaico.
Resumen. Los mosaicos de la caché RDP no tienen coordenadas en pantalla, y las piezas idénticas se guardan una sola vez. Un collage con el número adecuado de mosaicos por fila alinea las partes de una ventana que entraron en caché fila a fila, pero cada mosaico deduplicado desplaza una posición todo lo que viene detrás, así que los bordes se descuadran. Use el collage para localizar la región y después reconstruya la pantalla a mano sobre una cuadrícula: arrastre los mosaicos a su sitio, reutilice un mismo mosaico donde se repita y exporte el resultado como PNG con un JSON de disposición que documente qué colocó y dónde. RDP Bitmap Cache Parser lo hace en la pestaña Reconstruir; RdpCacheStitcher del BSI es la alternativa de escritorio.
Este artículo forma parte de la serie de investigaciones. Para los detalles de formato en los que se basa, vea el formato de archivo bcache*.bmc y Cache*.bin.
El problema: mosaicos sin coordenadas
Cada mosaico de mapa de bits de la caché se guarda con una clave, un ancho, un alto y los píxeles. Nada indica dónde estaba en la pantalla. Lo que sí tiene:
- El orden de caché. Los mosaicos se guardan en el orden en que los contiene la caché. Para una región que el cliente recibió de una vez, como una ventana que se está dibujando, ese orden puede seguir las filas de la región.
- El tamaño de los mosaicos. La mayoría son de 64×64. Los más estrechos o más bajos suelen venir del borde derecho o inferior de una región.
- El contenido. El texto que continúa de un mosaico al siguiente, los bordes de ventana, las barras de título y las barras de desplazamiento son las piezas del rompecabezas.
Lo que rompe el orden:
- La deduplicación. Una pieza que ya está en la caché no se vuelve a guardar. Un tramo de barra de título liso, una zona de consola negra vacía o un fondo de escritorio uniforme existen una sola vez, por muchas veces que aparecieran en pantalla.
- Sesiones y vistas mezcladas. El mismo archivo acumula mosaicos de distintos momentos, ventanas y sesiones.
- La reutilización de ranuras en los archivos
.bmc, que puede dejar restos de ranura de contenido anterior.
El collage: rápido, útil y algo inexacto
Un collage dispone todos los mosaicos en una sola imagen, N mosaicos por fila, en orden de caché. bmc-tools genera uno con -b, con el número de mosaicos por fila fijado mediante -w (64 por defecto). RDP Bitmap Cache Parser ofrece la misma vista en la pestaña Collage, con un número de mosaicos por fila configurable y dos disposiciones:
| Disposición | Distribución |
|---|---|
| Orden de caché | Mosaico 0 arriba a la izquierda, luego de izquierda a derecha, fila a fila |
| Disposición de bmc-tools | Reproduce la distribución del _collage.bmp de bmc-tools, para comparar las imágenes directamente |
Elegir el ancho
Si una ventana entró en caché fila a fila y tiene W mosaicos de ancho, un collage con W mosaicos por fila alinea verticalmente las filas de esa ventana. Para encontrar W:
- Busque un mosaico con un elemento vertical evidente (un borde de ventana, una barra de desplazamiento, una columna de texto).
- Cambie el valor de mosaicos por fila hasta que ese elemento forme una línea vertical recta a lo largo de varias filas.
- Confírmelo con el texto: las palabras cortadas en el borde de un mosaico deben continuar en el mosaico siguiente, a la derecha.
El valor por defecto de 64 mosaicos por fila rara vez coincide con el ancho de algo en pantalla. Es una visión general razonable, no una reconstrucción.
Por qué se desplaza: un ejemplo práctico
El ejemplo ficticio incluido en la herramienta (un caso sintético, no un incidente real) hace visible el efecto. Su Cache0000.bin contiene 47 mosaicos:
- El mosaico 0 es el fondo de escritorio liso, guardado una sola vez.
- Los mosaicos 1–25 son una ventana de consola, en orden de filas, de 7 mosaicos de ancho.
Una consola de 7 mosaicos de ancho y varias filas de alto ocupa más de 25 celdas. Las celdas que faltan son piezas idénticas a otras ya guardadas: tramos lisos de la barra de título y zonas de consola negras vacías. Cada vez que el cliente evitó guardar una pieza repetida, todos los mosaicos posteriores se desplazaron una celda a la izquierda respecto a su posición real en pantalla.
Con 7 mosaicos por fila en orden de caché:
| Filas del collage | Mosaicos | Resultado |
|---|---|---|
| Filas centrales | 7–20 | Se alinean: el comando rclone.exe copy C:\Users\Public\data E:\exfil y su resumen de transferencia se leen de corrido |
| Primera y última fila | Antes del 7, después del 20 | Se desplazan: la barra de título y la parte inferior de la consola aparecen corridas, porque faltan las piezas deduplicadas |
Las filas centrales se alinean porque las líneas de consola son todas distintas, así que no se deduplicó nada en ellas. Los bordes están hechos de piezas repetitivas, así que se comprimen. Es el comportamiento normal de la caché, no un error de análisis, y ningún ancho de collage puede corregirlo por sí solo.
Reconstruir la pantalla a mano
La reconstrucción manual consiste en colocar cada mosaico en la celda que le corresponde, incluido reutilizar un mismo mosaico en varias celdas cuando se deduplicó.
Con RDP Bitmap Cache Parser
La pestaña Reconstruir es un lienzo en cuadrícula:
- Filtre antes los mosaicos. Revisar primero reduce la lista a los mosaicos tipo consola y tipo texto; Ocultar mosaicos lisos y duplicados elimina el ruido.
- Arrastre un mosaico a una celda, o seleccione un mosaico y haga clic en una celda. Un mosaico puede colocarse en tantas celdas como haga falta, que es como se rellenan las barras de título deduplicadas y las zonas de consola vacías.
- Parta del punto de anclaje que encontró en el collage (en el ejemplo, las filas que contienen la línea de comandos) y avance hacia fuera: la fila de arriba debe continuar los bordes y el texto de la fila de abajo.
- Deje las celdas vacías cuando no lo sepa. Un hueco honesto es mejor que un mosaico supuesto.
- Exporte un PNG del lienzo para el informe y un JSON de disposición que registre qué mosaico colocó en cada celda. El JSON hace que la reconstrucción sea revisable y repetible.
No hay unión automática ni OCR: usted lee la pantalla y la herramienta solo le ayuda a colocar las piezas.
Con RdpCacheStitcher
RdpCacheStitcher, publicado por el BSI alemán, es una interfaz gráfica que ayuda a unir en pantallas los mosaicos exportados. Trabaja con los mosaicos exportados por bmc-tools. Si su equipo ya lo usa, la exportación ZIP BMP de RDP Bitmap Cache Parser nombra los mosaicos como la salida de bmc-tools (<file>_<NNNN>.bmp), así que puede mantener ese flujo de trabajo.
Leer lo que ha reconstruido
Una pantalla reconstruida es una interpretación. Descríbala como tal:
- Indique el método: «los mosaicos 7–20 de
Cache0000.binse alinean con 7 mosaicos por fila; las filas superiores e inferiores se colocaron manualmente; vea el JSON de disposición». - Separe lo observado de lo colocado: en el ejemplo, la línea de comandos es visible en mosaicos contiguos en orden de caché; la barra de título de encima la colocó el analista.
- No deduzca orden ni hora de la imagen. Un reloj visible en una barra de tareas reconstruida (10:52 en el ejemplo) es lo que mostraba la pantalla remota en ese momento, en su propia zona horaria. Vincúlelo a la cronología con otros artefactos, como se describe en movimiento lateral por RDP: artefactos del equipo de origen.
- Señale los restos: un resto de ranura es parte de un mosaico anterior y puede pertenecer a un momento distinto del de los mosaicos que lo rodean.
Consejos prácticos
| Situación | Consejo |
|---|---|
| Miles de mosaicos | Oculte los mosaicos lisos y duplicados y después use Revisar primero |
| Texto repartido entre mosaicos | Lea parejas de mosaicos en la galería antes de tocar el lienzo |
| Mosaicos estrechos de borde | Suelen cerrar una fila por la derecha o por abajo |
| Mosaicos de 8 bits | Los colores son aproximados; empareje por formas y texto |
| Varios archivos de caché | Reconstruya por archivo; archivos distintos pueden proceder de sesiones distintas |