revjmoney/loklik-icraft-grbl

GitHub: revjmoney/loklik-icraft-grbl

记录并公开 LOKLiK iCraft 固件违反 GPLv3 许可证的证据,镜像全部八个固件版本并提供可复现的验证方法。

Stars: 2 | Forks: 0

# LOKLiK iCraft — 运行着 GPLv3 Grbl_ESP32,却未提供源码 **LOKLiK iCraft** 切割机作为一款封闭的、仅限 App 操作的设备出售。它的 控制器固件实际上是 **[Grbl_Esp32](https://github.com/bdring/Grbl_Esp32) 的修改版构建** —— 这是一款基于 **GNU GPL version 3** 许可证的开源 CNC 固件。供应商在 将其锁定在登录 App 后进行分发,并在其基础上添加了自己的修改,而且没有提供**任何源 代码和归属声明** —— 而这正是 GPLv3 许可证所强制要求的。 本仓库对此进行了记录,并镜像了该固件,以便任何人都可以独立进行验证。完整报告:**** ## 本仓库是什么 —— 以及不是什么 - ✅ 它**重新分发了供应商发布的 GPLv3 固件二进制文件**。GPLv3 明确 允许重新分发,因此这是被许可的 —— 这正是该许可证的核心目的。 - ✅ 它通过可复现的证据记录了**合规性差距**。 - ❌ 它**不是**“源代码”。**完整的对应源码 (Complete Corresponding Source)** —— 即修改后的 Grbl_Esp32 代码树、`LOKLiK_iCraft` 机器定义、`SJConfig` 层以及 构建/烧录脚本 —— 正是供应商有义务发布却未曾发布的部分。 这是一个软件许可证合规性问题。诉求很简单:**发布源代码。** ## 一分钟看完证据 **它在启动时会输出自己的名字:** ![启动日志](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/967720887a102705.png) ``` [MSG:Grbl_ESP32 Ver 1.3a Date 20211103] [MSG:Using machine:LOKLiK_iCraft] ``` **它自己的源码路径被编译进了二进制文件中** (`Grbl_Esp32/src/I2SOut.cpp`): ![ghidra strings](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8cdf60f072102742.png) **版本号与上游完全匹配。** Grbl_Esp32 的源代码 (`Grbl_Esp32/src/Grbl.h``) 定义了: ``` const char* const GRBL_VERSION = "1.3a"; const char* const GRBL_VERSION_BUILD = "20211103"; ``` 设备会打印出 `Ver 1.3a Date 20211103` —— 连字符都不差。这是该 特定上游版本的构建产物,绝非巧合。并且每个 Grbl_Esp32 文件都带有 GPL 授权头信息: **供应商的修改** —— 一个在上游代码中根本不存在的 `SJConfig` 设置命名空间 (`SJ` 代表供应商的 `com.sjtech` 命名空间):序列号、产品名称、双笔 偏移量、轴偏移/补偿。在 v01–v06 版本中有 18 个键,在 v07–v08 版本中扩展到了 62 个。 ![ghidra sjconfig](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/848daa2107102748.png) **在整个产品线中均处于锁定状态分发,且没有提供源码。** 供应商自己的 FlashTool 下载了八个版本,日期一直延续到 2026-01: ![flashtool versions](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/8746eb0dfa102754.png) ……并且通过一个工具刷入整个系列: ![flashtool models](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/e39a5cc27b102759.png) ## 固件文件 所有八个版本都识别为 `Grbl_ESP32 Ver 1.3a`,目标机器为 `LOKLiK_iCraft`,并且 带有 `SJConfig` 层。我们记录了它们的 SHA-256 哈希值,因此这些产物无法被悄悄 替换(`evidence/SHA256SUMS.txt` —— 使用 `sha256sum -c` 进行验证)。 | Version | Size (bytes) | Grbl | SJConfig keys | File | |---|---|---|---|---| | v01 | 1,562,832 | 1.3a | 18 | [`evidence/firmware_v01.bin`](evidence/firmware_v01.bin) | | v02 | 1,563,824 | 1.3a | 18 | [`evidence/firmware_v02.bin`](evidence/firmware_v02.bin) | | v03 | 1,565,200 | 1.3a | 18 | [`evidence/firmware_v03.bin`](evidence/firmware_v03.bin) | | v04 | 1,565,232 | 1.3a | 18 | [`evidence/firmware_v04.bin`](evidence/firmware_v04.bin) | | v05 | 1,565,664 | 1.3a | 18 | [`evidence/firmware_v05.bin`](evidence/firmware_v05.bin) | | v06 | 1,565,728 | 1.3a | 18 | [`evidence/firmware_v06.bin`](evidence/firmware_v06.bin) | | v07 | 1,219,808 | 1.3a | 62 | [`evidence/firmware_v07.bin`](evidence/firmware_v07.bin) | | v08 | 1,219,744 | 1.3a | 62 | [`evidence/firmware_v08.bin`](evidence/firmware_v08.bin) | ## 自行复现 这里的一切都不需要盲目听信他人 —— 只需使用免费工具即可在零售设备上 复现,并且没有任何 flash 加密。参见 **[tools/REPRODUCE.md](tools/REPRODUCE.md)**。 ESP32 Ghidra 加载器脚本位于 **[tools/ESP32_EsptoolLoad.java](tools/ESP32_EsptoolLoad.java)**。 完整的正式报告(研究方法、段映射、证据附录)请见 **[REPORT.md](REPORT.md)**。 ## 许可授权与致谢 此处的固件是 **Grbl_Esp32** 的构建版本,因此它基于 **GPLv3** 许可,并 在该许可证下重新分发。参见 **[NOTICE.md](NOTICE.md)**。 - 上游:由 Barton Dring 开发的 **[bdring/Grbl_Esp32](https://github.com/bdring/Grbl_Esp32)** —— 它是 Sungeon "Sonny" Jeon 开发的 **[Grbl](https://github.com/gnea/grbl)** 的移植版。 - 许可证:**[GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)** 本项目存在的目的是为了*支持*开源,而不是为了攻击某家公司。补救措施是让 供应商履行他们所基于的许可证的要求:发布对应的源代码。 *报告与证据作者 Rev — JMS CNC · *
标签:CNC数控, GPL协议, Grbl_ESP32, 云资产清单, 后端开发, 固件分析, 嵌入式系统, 开源合规, 逆向工具, 逆向工程