Learning resource

ICSim (Instrument Cluster Simulator)

OpenGarages' Instrument Cluster Simulator for practising CAN bus reverse engineering on a Linux virtual CAN interface instead of a car. One SDL window draws a dashboard whose speedometer, turn signals and door-lock indicators react to the CAN frames it sniffs, while a separate controls program turns gamepad or keyboard input into those frames and replays a recorded sample of generic CAN traffic as background noise. In training mode the arbitration IDs and byte positions behind each signal are randomized from a seed shared by both programs, and the highest difficulty level adds further random data to the target messages, so learners have to find the relevant messages themselves.

Targets
Protocol
Category
Learning resources
Relationship
Learning resource
Sources reviewed

Requirements & limits

  • Reviewed at the master head of 2025-09-18, which merged a fix for canvas glitches; the changes before it, from December 2023 and January 2024, added the Meson build and cleaned up compiler warnings. There are no tags or releases, tests or CI. The default signal layout is generic, and -m bmw switches some signals to IDs that the source labels for a BMW X1.
  • Runs on Linux with SocketCAN: the README creates a vcan0 virtual interface by loading the can and vcan kernel modules with sudo, and setup_vcan.sh repeats those commands. Building needs SDL2, SDL2_image and can-utils, which Meson checks for through candump; controls launches canplayer to replay data/sample-can.log and reads data files from ./data/. The README suggests an Xbox-style gamepad, and the source also maps keyboard keys; its troubleshooting notes cover SDL header paths and one Arch Linux report that needed sdl2_gfx.
  • The repository commits lib.o, a prebuilt x86-64 ELF object for can-utils' lib.c that both the Makefile and Meson link into icsim; the README says to rebuild it from can-utils when it does not link on another architecture. It also ships data/sample-can.log, a recorded log of generic CAN traffic used as background noise, plus PNG, SVG and layered-image artwork; it includes no vehicle firmware or software.
  • The exercise is to sniff the simulated bus, for example with candump, and infer which IDs and bytes drive each gauge; the controls usage text calls disabling the background traffic with -X cheating for that practice. Difficulty runs from 0 to 2, with 1 as the default, and only level 2 adds random bytes.
  • GPL-3.0 (LICENSE; meson.build declares GPL-3). lib.c keeps the Volkswagen Group Electronic Research copyright from can-utils, offered under BSD-style terms or GPL-2.0. The reviewed sources mention no AI or REA use, and nothing was built or run for this record.

About this entry

The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.md GitHub · zombieCraig/ICSim · Revision 2b3333e
  2. meson.build GitHub · zombieCraig/ICSim · Revision 2b3333e
  3. Makefile GitHub · zombieCraig/ICSim · Revision 2b3333e
  4. setup_vcan.sh GitHub · zombieCraig/ICSim · Revision 2b3333e
  5. icsim.c GitHub · zombieCraig/ICSim · Revision 2b3333e
  6. controls.c GitHub · zombieCraig/ICSim · Revision 2b3333e
  7. lib.c GitHub · zombieCraig/ICSim · Revision 2b3333e
  8. data GitHub · zombieCraig/ICSim · Revision 2b3333e
  9. LICENSE GitHub · zombieCraig/ICSim · Revision 2b3333e

More in References and learning

All 61 entries in References and learning