{
  "added_at": "2026-11-03",
  "additional_evidence_urls": [
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/meson.build",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/Makefile",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/setup_vcan.sh",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/icsim.c",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/controls.c",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/lib.c",
    "https://github.com/zombieCraig/ICSim/tree/2b3333ef866987d8adc9c15ff15b9b9189edf85b/data",
    "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/LICENSE"
  ],
  "category": "learning",
  "description_en": "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.",
  "description_zh": "OpenGarages 开发的仪表盘模拟器，可在 Linux 虚拟 CAN 接口上练习 CAN 总线逆向分析，而无需真车。一个 SDL 窗口绘制仪表盘，其车速表、转向灯和车门锁指示会根据它监听到的 CAN 帧变化；另一个控制程序把手柄或键盘输入转换成这些帧，并回放一段录制的通用 CAN 流量作为背景噪声。训练模式下，两个程序依据共享的随机种子打乱各信号对应的仲裁 ID 和字节位置，最高难度还会在目标报文中加入额外的随机数据，学习者必须自己找出相关报文。",
  "entry_url": "https://awesomerea.org/resources/icsim/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/icsim/",
  "evidence_url": "https://github.com/zombieCraig/ICSim/blob/2b3333ef866987d8adc9c15ff15b9b9189edf85b/README.md",
  "group": "learn",
  "id": "icsim",
  "json_url": "https://awesomerea.org/resources/icsim/record.json",
  "kind": "learning-resource",
  "markdown_url": "https://awesomerea.org/resources/icsim/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/icsim/index.md",
  "name": "ICSim (Instrument Cluster Simulator)",
  "name_zh": "ICSim 汽车仪表盘 CAN 总线模拟器",
  "record_type": "resource",
  "relationship": "learning",
  "requirements": [
    "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."
  ],
  "requirements_zh": [
    "审阅基于 master 分支 2025-09-18 的最新提交，该提交合并了一处画面闪烁问题的修复；此前的改动集中在 2023 年 12 月至 2024 年 1 月，加入了 Meson 构建并清理了编译警告。仓库没有标签、发布版本、测试或 CI。默认信号布局是通用的，-m bmw 会把部分信号切换为源码中标注为 BMW X1 的 ID。",
    "需在支持 SocketCAN 的 Linux 上运行：README 用 sudo 加载 can 和 vcan 内核模块来创建 vcan0 虚拟接口，setup_vcan.sh 中是同样的命令。构建需要 SDL2、SDL2_image 和 can-utils，Meson 通过 candump 检查后者；控制程序会调用 canplayer 回放 data/sample-can.log，并从 ./data/ 读取数据文件。README 建议使用 Xbox 式手柄，源码也映射了键盘按键；其故障排除说明涉及 SDL 头文件路径，以及一例 Arch Linux 上需要 sdl2_gfx 的报告。",
    "仓库提交了 lib.o，这是 can-utils 中 lib.c 的预编译 x86-64 ELF 目标文件，Makefile 和 Meson 都会把它链接进 icsim；README 说明在其他架构上无法链接时，应从 can-utils 重新编译。仓库还附带 data/sample-can.log（一段录制的通用 CAN 流量，用作背景噪声）以及 PNG、SVG 和分层图像素材；不含任何车辆固件或软件。",
    "练习方式是监听模拟总线（例如使用 candump），推断哪些 ID 和字节驱动各个仪表；控制程序的用法说明把用 -X 关闭背景流量称为这种练习中的作弊。难度分 0 到 2 级，默认为 1，只有第 2 级会加入随机字节。",
    "GPL-3.0（LICENSE；meson.build 声明 GPL-3）。lib.c 保留了来自 can-utils 的 Volkswagen Group Electronic Research 版权声明，可按 BSD 式条款或 GPL-2.0 使用。"
  ],
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/zombieCraig/ICSim",
  "verification": "source-reviewed",
  "verified_at": "2026-10-27"
}
