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` 层以及
构建/烧录脚本 —— 正是供应商有义务发布却未曾发布的部分。
这是一个软件许可证合规性问题。诉求很简单:**发布源代码。**
## 一分钟看完证据
**它在启动时会输出自己的名字:**

```
[MSG:Grbl_ESP32 Ver 1.3a Date 20211103]
[MSG:Using machine:LOKLiK_iCraft]
```
**它自己的源码路径被编译进了二进制文件中** (`Grbl_Esp32/src/I2SOut.cpp`):

**版本号与上游完全匹配。** 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 个。

**在整个产品线中均处于锁定状态分发,且没有提供源码。** 供应商自己的
FlashTool 下载了八个版本,日期一直延续到 2026-01:

……并且通过一个工具刷入整个系列:

## 固件文件
所有八个版本都识别为 `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, 云资产清单, 后端开发, 固件分析, 嵌入式系统, 开源合规, 逆向工具, 逆向工程