{
  "added_at": "2026-11-02",
  "additional_evidence_urls": [
    "https://github.com/brent-stone/CAN_Reverse_Engineering/blob/096dfe828a54964a10d2967fc65bf7c6537761a0/requirements.txt",
    "https://github.com/brent-stone/CAN_Reverse_Engineering/tree/096dfe828a54964a10d2967fc65bf7c6537761a0/Pipeline",
    "https://github.com/brent-stone/CAN_Reverse_Engineering/tree/096dfe828a54964a10d2967fc65bf7c6537761a0/Pipeline_multi-file",
    "https://github.com/brent-stone/CAN_Reverse_Engineering/tree/096dfe828a54964a10d2967fc65bf7c6537761a0/R",
    "https://github.com/brent-stone/CAN_Reverse_Engineering/blob/096dfe828a54964a10d2967fc65bf7c6537761a0/LICENSE"
  ],
  "category": "protocol-analysis",
  "description_en": "Research Python and R scripts that automate reverse engineering of Controller Area Network (CAN) payloads recorded from passenger vehicles, implementing the pipeline from Brent Stone's AFIT dissertation. The Python pipeline pre-processes a CAN log into per-arbitration-ID data frames, pulls out public SAE J1979 diagnostic data, runs a lexical analysis that guesses individual signal time-series boundaries, then a semantic analysis that builds a correlation matrix and hierarchically clusters related signals, with plots and a dendrogram as output. A separate R script set applies the rEDM empirical dynamic modeling package to engine-RPM, brake-pressure and vehicle-speed time series to study causal relationships.",
  "description_zh": "一组研究用途的 Python 和 R 脚本，用于自动逆向分析从乘用车采集的控制器局域网（CAN）报文负载，实现了 Brent Stone 在 AFIT 的博士论文所述的流水线。Python 流水线先把 CAN 日志预处理为按仲裁 ID 组织的数据框，提取公开的 SAE J1979 诊断数据，再通过词法分析推测各信号时间序列的边界，随后通过语义分析构建相关性矩阵并对相关信号做层次聚类，输出图表和树状聚类图。另一组 R 脚本调用 rEDM 经验动力学建模包，对发动机转速、刹车压力和车速时间序列分析因果关系。",
  "entry_url": "https://awesomerea.org/resources/can-reverse-engineering/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/can-reverse-engineering/",
  "evidence_url": "https://github.com/brent-stone/CAN_Reverse_Engineering/blob/096dfe828a54964a10d2967fc65bf7c6537761a0/README.md",
  "group": "tools",
  "id": "can-reverse-engineering",
  "json_url": "https://awesomerea.org/resources/can-reverse-engineering/record.json",
  "kind": "tool",
  "markdown_url": "https://awesomerea.org/resources/can-reverse-engineering/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/can-reverse-engineering/index.md",
  "name": "Automated CAN Payload Reverse Engineering",
  "name_zh": "CAN 负载自动逆向分析流水线",
  "record_type": "resource",
  "relationship": "foundation",
  "requirements": [
    "Dissertation research code with no releases or tags; the reviewed commit dates to 2022-02-01. The README says the scripts were developed and tested on Python 3.6 and need NumPy, Pandas, scikit-learn and (for plotting) matplotlib listed in requirements.txt; the R scripts need R with the rEDM package. There is no packaging or install step, and the README says the scripts will not run immediately after cloning.",
    "Two Python folders implement the same concept: Pipeline is the basic single-file version driven from Main.py, and Pipeline_multi-file is the more complete batch version that the README says contains bug fixes not back-ported to Pipeline. Input is a CAN capture in the bundled loggerProgram0.log delta-time/ID/DLC/hex format; an April 2020 addition also reads the can-utils log format via a -c/--can-utils argument, and other formats require editing PreProcessor.py.",
    "The user supplies their own CAN capture. The repository bundles the author's own example data: the loggerProgram0.log vehicle capture, example pipeline output, an OBD2 PID table, and R-folder CSV time series of engine RPM, brake pressure and vehicle speed for different driving conditions, plus the author's dissertation PDF. The results are signal-boundary and clustering estimates that need analyst validation, not confirmed signal definitions.",
    "The repository includes a GPL-3.0 LICENSE file, while the README states the code is a work of the U.S. Government not subject to copyright protection in the United States, cleared for public release (case 88ABW-2019-0910). The scripts read passive logs and perform analysis only; no device interaction or frame transmission is described."
  ],
  "requirements_zh": [
    "这是论文研究代码，没有发布版或标签；所审阅的提交日期为 2022-02-01。README 称脚本在 Python 3.6 上开发和测试，需要 requirements.txt 中列出的 NumPy、Pandas、scikit-learn 和（用于绘图的）matplotlib；R 脚本需要安装了 rEDM 包的 R 环境。没有打包或安装步骤，README 也说明克隆后脚本无法立即运行。",
    "两个 Python 文件夹实现同一套思路：Pipeline 是由 Main.py 驱动的基础单文件版本，Pipeline_multi-file 是更完整的批处理版本，README 称其中包含未回移到 Pipeline 的缺陷修复。输入为随附 loggerProgram0.log 所示的 delta 时间/ID/DLC/十六进制格式 CAN 采集；2020 年 4 月新增可通过 -c/--can-utils 参数读取 can-utils 日志格式，其他格式需修改 PreProcessor.py。",
    "使用者需自备 CAN 采集数据。仓库附带作者自有的示例数据：loggerProgram0.log 车辆采集、示例流水线输出、一份 OBD2 PID 表，以及 R 文件夹中不同驾驶条件下发动机转速、刹车压力和车速的 CSV 时间序列，另含作者的博士论文 PDF。其结果是信号边界和聚类的估计值，需要分析者验证，而非已确认的信号定义。",
    "仓库包含 GPL-3.0 许可证文件，而 README 声明该代码属于美国政府作品，在美国不受版权保护，并已获准公开发布（案号 88ABW-2019-0910）。脚本读取被动日志、仅做分析，未描述任何设备交互或帧发送。"
  ],
  "targets": [
    "protocol"
  ],
  "url": "https://github.com/brent-stone/CAN_Reverse_Engineering",
  "verification": "source-reviewed",
  "verified_at": "2026-10-20"
}
