Network & remote access
RDP bitmap cache
RDP bitmap cache cheat sheet: bcache*.bmc and Cache*.bin files on the RDP client, what screen tiles reveal, timestamps, and rebuilding screens with bmc-tools.
- Location
- %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache\
- Proves
- Fragments of what a user saw on remote screens during RDP sessions from this host
- Timestamps
- No per-tile time; cache file $SI created/modified (NTFS, UTC) approximate sessions; date them with RDPClient events 1024/1102
- Retention
- Size-limited, oldest tiles overwritten by new sessions; absent if persistent bitmap caching is disabled; lost if the folder is cleared
- Access
- Per-user profile folder on the RDP source host; readable by the user or an administrator, copy with robocopy
- Evidence of
- Network & remote access
- Type
- File / file system
- Windows
- XPVista / 78 / 8.11011
- KAPE target
- RDPCache
- Velociraptor
- Windows.Triage.Targets:RDPCache
Tools
Compare all toolsWhat it is
To save bandwidth, the Remote Desktop client (mstsc.exe) caches small bitmap tiles of the remote screen on the client machine and reuses them instead of downloading them again. With persistent bitmap caching enabled (the default "Persistent bitmap caching" option of the client), those tiles are written to disk in the user's profile. Reassembled, they show pieces of what the user saw on the remote host: windows, command prompts, file names, tools.
Location
| Windows version | Path | Files |
|---|---|---|
| XP | C:\Documents and Settings\<user>\Local Settings\Application Data\Microsoft\Terminal Server Client\Cache\ | bcache*.bmc |
| Vista / 7 | C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ | bcache*.bmc and/or Cache000N.bin depending on client version |
| 8 / 10 / 11 | C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ | Cache0000.bin, Cache0001.bin… |
The cache is per user on the source of the RDP connection, not on the server.
What it proves
- The user of this profile had RDP sessions with graphical content, and the tiles show what was displayed: remote desktops, open windows, typed commands, folder listings, dialog boxes.
- Combined with the source-side RDP connection artifacts, it links a user to activity on a remote system.
- It does not identify the remote host by itself, and tiles are not ordered by time; reconstruction is partial.
Key fields
| Element | Meaning |
|---|---|
| Tile | Bitmap, typically up to 64 × 64 pixels |
| Cache file order | Tiles are stored in cache order; bmc-tools can also output a "collage" of all tiles |
File name (Cache000N.bin) | Separate cache files, often one per recent connection or cache generation |
Timestamps
| Timestamp | Set when | Format | Pitfalls |
|---|---|---|---|
| Cache file $SI created / modified | Cache file created / last written by the client | NTFS, UTC | Approximates when sessions happened; no per-tile time |
| RDP client events (1024, 1102) | Connection attempts | UTC | Use them to date the sessions the tiles came from |
Retention and clearing
- The cache has a size limit; older tiles are overwritten as new sessions add content.
- Disabling persistent bitmap caching (client option or
bitmapcachepersistenable:i:0in an.rdpfile) prevents it; clearing the folder removes it. - Deleted cache files can sometimes be recovered from unallocated space or shadow copies.
Collection
- KAPE target:
RDPCache - Velociraptor (
Windows.Triage.Targets):RDPCache;Windows.Forensics.RDPCacheextracts tiles on live endpoints. - Built-in:
robocopy "C:\Users\bob\AppData\Local\Microsoft\Terminal Server Client\Cache" E:\case\rdpcache /COPY:DAT
Parsing tools
- bmc-tools (ANSSI, open source): extracts tiles from
.bmcand.binfiles, with an option to produce a collage (bmc-tools.py -s <cache> -d <out> -b). - RdpCacheStitcher (BSI, open source): helps rebuild screens by placing tiles on a canvas.
- Velociraptor:
Windows.Forensics.RDPCache.
Investigation tips
- Scan the collage first: command prompts, PowerShell windows, file explorers and remote tools are easy to spot even in fragments.
- Text in tiles (server names, user names, IP addresses) helps identify the remote host when the client registry keys were cleared.
- Correlate with the source-side registry keys and RDPClient events to decide which session each cache file belongs to.
- An attacker's jump host often holds the richest cache: collect it early, before new sessions overwrite tiles.
Related artifacts
- RDP connection artifactsRDP forensics cheat sheet: target-side event IDs (4624 type 10, 1149, 21–25, 131) and source-side traces (Terminal Server Client keys, Default.rdp, 1024).
- Jump ListsJump Lists cheat sheet: AutomaticDestinations and CustomDestinations, AppIDs, DestList entries with last access, access count and pin status, and JLECmd.
- UserAssistUserAssist cheat sheet: NTUSER.DAT GUID keys, ROT13 value names, run count, focus time and last run FILETIME for programs a user launched from Explorer.
- Windows event logs (EVTX)Windows event log cheat sheet: EVTX locations, must-know event IDs for logons, processes, services and log clearing, retention, audit policy and parsing tools.