开源改变世界!!

帮助解码来自专有 vigotec 固件的奇怪消息 #639

推推 grbl 2年前 (2023-01-30) 133次浏览
关闭
arkypita 打开了这个问题 2020 年 10 月 12 日 · 13条评论
关闭

帮助解码来自专有 vigotec 固件的奇怪消息#639

arkypita 打开了这个问题 2020 年 10 月 12 日 · 13条评论

注释

帮助解码来自专有 vigotec 固件的奇怪消息 #639

大家好,我是LaserGRBL的开发者。

我试图让我的程序能够与激光雕刻机 (Vigo VG-L7x) 通信,制造商没有发布规格,也没有联系甚至电子邮件,对标准“grbl”进行了一些更改通过插入一些在我看来它们看起来是“编码”甚至“加密”的消息来实现协议。

这导致这台机器只能与他们的软件(这是一块垃圾)交谈,所以人们开始要求我在 LaserGRBL 中支持它(如果可能的话)。

看起来当雕刻师与他们的标准程序对话时,除了交换人类可读的 G 代码命令流之外,它还交换一些无法理解的消息,因为它们是编码的。

控制板有一个 ESP32 芯片和一个 Atmega32。我认为通信由与 Atmega32(它们具有标准 grbl 固件)通信的 ESP32 处理。

这里有一些这个编码通信的例子(见图片或 pastebin)
https://pastebin.com/v3q14rdE

帮助解码来自专有 vigotec 固件的奇怪消息 #639

这些消息会根据特定操作定期发送:连接时、开始发送作业文件之前、作业流结束时等,并在 ESP32 上激活某些使其能够工作的东西。

例如,开发板不会在接收到的每个命令时发送“ok”,而是使用一种状态报告的形式<VSta:2|SBuf:5,1,0|LTC:4095>通过 Sbuf 数字告诉接收、处理了多少行等。问题是该报告是仅当您发送一个特殊的加密命令时才会激活,该命令说“我正在开始流式传输作业”(并且当收到此命令时,电路板会发出哔哔声)。

在多个工作会话之间,消息内容总是不同,但长度相同。
https://pastebin.com/AXz6k3tQ

如果我发送以前的会话消息,雕刻师可以毫无问题地识别它。
了解它是简单编码(因此可逆)还是加密真的可以帮助我避免浪费时间。

任何的想法?
谢谢大家!

帮助解码来自专有 vigotec 固件的奇怪消息 #639 arkypita 更改了标题 直播帮助 帮助解码来自专有 vigotec 固件的奇怪消息 2020 年 10 月 12 日
帮助解码来自专有 vigotec 固件的奇怪消息 #639

这是电路板的图片

帮助解码来自专有 vigotec 固件的奇怪消息 #639

帮助解码来自专有 vigotec 固件的奇怪消息 #639
所有者

听起来 ESP32 没有使用我们的固件。我建议制作一个新的控制器。那会更容易,让您完全控制和未来升级。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。除了使用 : 而不是 + 之外,字符集看起来像 base64。但即使您确实反转了该编码,您仍然必须发现数据的含义。我怀疑这些消息可能是某种挑战/响应身份验证方案,用于防止未经授权使用激光。如果有人控制了 20W 无线激光器并开火,那将是非常危险的。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

谢谢两位

是的,我假设他们没有使用您的固件。由于板上有 ESP32 和 Atmega328,我假设 Atmega328 上有一个标准的 GRBL 固件,ESP 只是充当 Wi-Fi 的接口,也可能用于通过 USB 进行串行通信。

所以我认为模式是 PC <==> USB/WIFI <==> ESP32 <==> Atmega328

他们在 ESP32 中实现了一个固件,部分显示为“透明”(例如 GCODE 流被正常发送,以及一些即时命令和实时状态消息)并部分改变了一些东西;吃掉“ok”消息,以不同形式的消息更改错误消息,添加一个<VSta:2|SBuf:5,1,0|LTC:4095>报告流式接收进度的新状态消息(可以用来代替“ok”作为接收确认)以及那些奇怪的编码/编码器措辞。

我的第一个猜测是数据可能是二进制数据的 base64 编码的变体。

乍一看,我也有这种印象,但尝试用 base64 解码会导致不可读的结果。

这些消息在某些特定场合交换:

  • 当电路板打开时
  • 当控制软件连接/断开时
  • 当作业流开始时作为“标题”
  • 作为最后一个 gcode 发送后的“页脚”
  • 在处理结束时(在董事会的倡议下)当最后一个 gcode 被执行时

我怀疑这些消息可能是某种挑战/响应身份验证方案,用于防止未经授权使用激光。

它可能看起来像,但事实并非如此。即使不发送加密命令,您仍然可以发送 GCode 命令并激活激光。

相反,这些消息似乎激活了“模式”。例如,您作为“页眉”交换的内容激活了一种“在程序中”模式,电路板发出“哔”声并开始发送<VSta|Sbuf>报告,并在收到“页脚”时停止该模式

帮助解码来自专有 vigotec 固件的奇怪消息 #639

PS:即使我知道它与您的 fw 无关,我还是选择写在这里,因为也许你们中间有一些 ESP32 的小专家,可以识别出与已经看到的东西有一些相似之处。我希望它不会打扰!

帮助解码来自专有 vigotec 固件的奇怪消息 #639

他们正在做的事情不太可能与 ESP32 处理器的任何特定内容有关。这显然是某种协议喋喋不休。我所知道的唯一特定于 ESP 的协议是 ESP-Now,它适用于完全不同的用例——比如智能灯。

一种可能是他们发明了自己的 base64 变体,并使用它直接传输数据结构值。

由于透明发送似乎有效,可以忽略那个额外的协议吗?

如果不是,对于特定用例,消息是否始终相同,或者即使您在做完全相同的事情,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中包含哪些消息值激活哪些模式。您可能已经想到了这一点;我只是为了完整性而提到它。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

您能否窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的?

帮助解码来自专有 vigotec 固件的奇怪消息 #639
作者
阿尔基皮塔 评论了 2020 年 10 月 14 日  

由于透明发送似乎有效,可以忽略那个额外的协议吗?

从执行命令的意义上讲,它是有效的,但是由于缺少“ok”的响应,很难(如果不是不可能的话)将 gcode 流式传输到板子而不会溢出缓冲区,因为您不知道 grbl 何时收到和管理他们这样你就可以发送更多。

从开发板获得命令/流式反馈(并因此能够实施字符计数协议)的<VSta:2|SBuf:5,1,0|LTC:4095>唯一方法是激活报告,该报告只能通过发送开发板识别为“开始”的正确加密字符串来激活工作流”。

理解这些 VSta、SBuf、LTC 的含义也会很有趣。
我的猜测是:

  • VSta:“Vigo”状态(0 = 空闲,2 = 工作中)。从未见过不同于 0/2 的值
  • SBuf:串口缓冲区状态。第一个数字可能是 esp32 接收到的 gcode 行数,第二个是 esp 接收和“吃掉”的 ok\n 数,第三个数字始终为零(也许是错误计数?我应该尝试发送错误的 gcode)。

如果不是,对于特定用例,消息是否始终相同,或者即使您在做完全相同的事情,它们也会因运行而异?如果它们相同,那么也许您可以尝试不同的用例并创建一个映射,其中包含哪些消息值激活哪些模式。

我做了一些分析,这是我所看到的:

  1. 他们交换的加密消息(从 sw 到 fw,反之亦然)总是不同的,没有任何相似的可识别序列/模式。只有消息的长度(相同类型)看起来是重复的。
  2. 如果我发送一条旧的已知/侦听消息,则该操作会被 fw 确认并接受(这对我来说是个好消息!)。董事会回复一条与先前回复消息不同的加密消息,即使您继续向他发送相同的旧窥探消息也是如此。
  3. 如果您尝试更改消息的某些字符(考虑长度),则董事会无法识别该消息并且不会回复。

所有这些让我认为消息是加密的,并且添加了 foo/ignored character/number 来随机化加密结果。

幸运的是,似乎在不知道消息的含义的情况下发送已知消息会欺骗接收者。
我将按照您的建议映射消息。

您能否窥探 ESP32 和 AVR 之间的串行线路,看看是否有额外的 GCode 或 GRBL 消息是由有趣的协议消息产生的?

没那么容易,因为我应该放一些电线,也许还要在 PCB 上切一些路径。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

我从http://www.vigotec.cn/下载了VG-L7 和VG-L7x 的软件。在 VG-L7 zip 文件中,我找到了这样的自述文件

Important for using VigoEngraverL7_v2.32:
    1.Please upload the new firmware 'VigoEngraver_Firmware_V1.3_B20200718.hex' to the control board before using the new VigoEngraverL7_v2.32.
    2.Two methods for upload the new firmware, use VigoEngraverL7_v2.32 or XLoader.exe.
    3.Follow the software manual, if use the VigoEngraverL7_v2.32, click connect, and the firmware will upload automatically!
    4.If you have other control software and want to use it, please upload the standard grbl firmware named 'Standard_Grbl_1.1f.hex'. Or if you have the appropriative firmware just for the control software, upload it !



Detailed description:
    The default firmware of engraving machine control main board is VIGOTEC special firmware. You can only use the VigoEngraveL7 laser engraving machine software you just downloaded to control engraving. There are two firmware files in the software directory, which are special firmware and general firmware. If you want to use other engraving machine control softwares, please update the firmware of engraving machine motherboard to general firmware. If you still want to use the VigoEngraveL7 laser engraving machine software after you updated the general firmware, please update the firmware back to the special firmware. The main board firmware update method is as follows: Click "Settings > Model Select", Click "Upload Firmware" at the bottom left of the dialog box, Click "OK". Then select one of the firmware file you want to update and click "Open", and wait for the firmware to update automatically.
    If you fail to update the firmware with VigoEngraveL7, you can also use XLoader to update the firmware of the control board. Please refer to step 8 of the User-Guide for update method.

这让我觉得 ESP32 可能被编程为 USB 和 AVR 之间的透明网关,在 AVR 芯片中有特殊的固件。ESP32 可能还有一种 WiFi 模式,可以将 WiFi 网关连接到 AVR。

如果这个想法是正确的,那么就可以使用 XLoader 用标准 GRBL 对 AVR 重新编程,问题就解决了。

Vigo 应用程序有一个屏幕,可以将设备恢复为出厂默认设置,这可能会让您在必要时将特殊固件放回 AVR。

根据我对产品开发团队工作方式的了解,我认为我的猜测很可能是正确的。更简单的 VG-L7 版本可能是第一个产品。他们开发了特殊的 AVR 固件来支持他们的应用需求。后来,当他们想要添加新的支持 WiFi 的版本时,他们保持 AVR 代码与以前相同,并且只添加支持新功能所需的最少 ESP 功能。他们首先将 ESP32 编程为透明网关,因此所有现有的应用程序代码和 AVR 固件都无需更改即可运行,然后他们加入了额外的 WiFi 网关功能。

注意:根据我刚刚发现的信息,以下想法可能已过时。

另一种可能性是将 ESP32 重新编程为真正透明的网关。您可以分阶段进行,如下所示

  • 通过将串行线路连接到两个 USB 串行转换器的 Rx 线路来窥探 AVR 的串行线路,这样您就可以验证 AVR 正在接收标准的 GRBL 消息,并且没有被重新编程为需要一些奇怪的东西。
  • 使用 esptool 保存 ESP32 flash 的当前内容,以便在必要时恢复到出厂程序(尽管可能可以在网上找到恢复映像)。如果您无法使用 esptool 与 ESP32 通信,请参阅下面的讨论。
  • 确定哪些 ESP32 引脚连接到 USB 端口和 AVR。你可以用欧姆表来做。如果您需要帮助,我可以提供更详细的说明。
  • 编写一个简单的 ESP32 程序,从连接到 USB 的串行端口读取数据,并写入连接到 AVR 的串行端口。Arduino 示例中可能有一个示例草图。如果没有,我可以帮忙。
  • 稍后,如果有用的话,您可以添加对 SD 卡和 WiFi 连接的支持。

如果 esptool 不起作用,可能是制造商试图让通过 USB 端口重新编程变得困难。我怀疑这是因为他们使用了 CH330N USB 串行芯片而不是更常见的 CH340 或 CP2102。CH330N 的引脚太少,无法支持大多数 ESP32 模块用于将 ESP32 切换到编程模式的额外 RTS 和 DTR 引脚。CH330N 有 RTS 但没有 DTR。他们可能有一个聪明的方法来让它工作,但你必须尝试 esptool 才能看到。
幸运的是,通过暂时将 IO0 短接到地然后重置 ESP32 可以很容易地强制编程模式。

或者,可以使用 ESP32 OTA 更改 ESP32 固件。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

关于窥探,没有必要切割痕迹,因为您会在线路上添加额外的接收器,并且可以安全地完成。电线可以焊接到 ESP32 模块上的引脚。这些引脚很大且易于访问。

帮助解码来自专有 vigotec 固件的奇怪消息 #639
作者
阿尔基皮塔 评论了 2020 年 10 月 16 日  

我无法与之通信的雕刻机型号是L7x,它是带WiFi的型号,使用VigoWork软件。VigoWork for L7x 的下载包中没有提供 Atmega 和 ESP32 固件。

L7 模型有一个标准的 Atmega328 控制器,并使用不同的软件(尽管 UI 相似)称为VigoEngraver。下载中的固件是一个非常标准的 grbl,尽管自述文件中有说明。加载到 Arduino 上进行通信,没有任何加密包或与 GRBL 的显着差异。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

拥有一个透明的 ESP32 是最简单的事情,除此之外,我还发布了一个用作 telnet 网桥的 ESP8266 草图,只需进行一些修改就可以适用于 ESP32。虽然是最简单的选择,但这似乎并不是VG-L7x的开发者所走的路

是的,重新编程芯片可以是一个解决方案,但我的目标不是让电路板与 LaserGRBL 兼容,而是相反(使 LaserGRBL 与该电路板兼容)。这允许该模型的所有所有者使用 LaserGRBL,而不仅仅是能够重新编程 fw 的“极客”。

幸运的是,我现在有不错的成绩。我可以发送“嗅探”的加密消息,并且董事会会按预期做出响应。我相信我可以对 LaserGRBL 进行必要的更改,使其与雕刻机兼容。

此外,我手头的板子不是我的。它是由购买此雕刻机的 LaserGRBL 用户发给我的。
在我把它寄回给他之前,我绝对想做一些你建议的事情。

  1. 窥探 AVR 和 ESP 之间的串行线路,看看加密和 VSta/SBuf 消息是在 esp 还是 avr 中完成的(我猜是在 esp 中,因为 atmega328 没有可用的程序空间来实现这种功能)但我想检查一下。
  2. 转储 ESP32 固件并克隆到另一个 ESP32(我有一些 esp devkit),这样我就可以发回电路板并在测试环境中进行测试。

我有电子技能,所以我可以使用欧姆表、焊机和 co。

关于第 2 点。我从未直接转储/编程 ESP32 芯片(仅使用集成 USB 的 devkit)。
该芯片通过 CH330N 通过电阻接线将 u0TXD 和 u0RXD 连接到 USB 端口。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

所以你把 IO0 接地并重置 ESP32 应该足以通过 USB 板端口读取 esp 内容吗?
抱歉,对于 NOOB 问题,IO0 是 23 号引脚吗?

帮助解码来自专有 vigotec 固件的奇怪消息 #639

明天我会做一些测试,我希望能够克隆固件(如果没有读保护)。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

是的,引导加载引脚是 GPIO0 / 引脚 23。https ://github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection

CH330N 到 u0TxD 和 U0RxD 的连接完全符合预期,并且与串行引导加载程序兼容,因此在复位后将 GPIO0 保持为低电平应该可以让您连接到 esptool。

我想他们有问题 – 就像其他发件人一样 – 在大量激光作业的重负载下使用标准 GRBL ok 响应协议,有很多短移动和 S 字更改。如果他们通过延迟不一致的 WiFi 导出标准 GRBL 线路协议,此类问题可能会特别麻烦。他们可能正在使用 ESP32 进行额外缓冲。SBuf 报告比 ok 计数更明确,尤其是当您考虑错误情况时。我想知道第三个数字是否与 ESP32 中的额外缓冲有关?如果我要为 AVR GRBL 设计 ESP32 前端,我可能会在 ESP32 内部提供更多的线路缓冲。窥探 AVR 线路并将 ok 流与 SBuf 流进行比较可以为您提供线索。lines-sent/lines-received 的一个问题是它不会直接向您提供有关队列中可用空间/行数的信息。也许队列长度是隐式已知的,并将其与两个 SBuf 数字之间的差异进行比较。更好的协议设计是直接报告可用空间,就像 TCP 对“窗口大小”所做的那样。无论如何,您或许可以弄清楚他们对窥探做了什么。

关于 VG-L7x .zip 下载中缺少固件映像:我怀疑他们将固件映像隐藏在应用程序中。对于新用户来说,这更不容易出错,也更简单,并且需要更少的关于如何查找和选择写入固件文件的文档。

Bart 的 ESP32_Grbl 板之一可以为该设备制作比所示板更好的控制器,因此,为了感谢您在这里获得的支持,您可以考虑将该建议转达给您的 Vigotech“客户”。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

谢谢米奇
,您关于转储 ESP32 fw 的建议为我指明了正确的方向,并允许我创建系统的副本。这样我就可以进行所有我想要的测试,而不会有损坏原始电路板的风险。

第一个测试是让 ESP 与带有来自 gnea/grbl 的标准 grbl 固件的 arduino nano 通信。
一切正常,VigoWork 软件认为它正在与它的董事会对话。

帮助解码来自专有 vigotec 固件的奇怪消息 #639

这证实了 arduino 固件是标准的,并且协议更改(加密消息、no ok 等)仅由 esp32 fw 完成。

但是我认为我不会进一步尝试解码编码消息,因为我认为这必然需要对 sw/fw 进行逆向工程才能理解加密方案。一旦我验证了“间谍”消息在每种情况下都被机器正确接受,我想我会感到满意并且我拥有制作 LaserGRBL 伪造 VigoWork 协议所需的所有信息:-)

再次感谢您的所有建议,我可以关闭线程
最好的问候