4

破解 OctoStudio

 9 months ago
source link: http://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/extend-octostudio/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

介绍 OctoStudio

OctoStudio 改变了年轻人使用手机和平板电脑的方式,使他们能够随时随地创作自己的故事和游戏。孩子们可以拍照和录制声音,用编码块将它们变为现实,并将他们的项目发送给朋友和家人。

OctoStudio 由 MIT Media Lab 终身幼儿园研究小组开发;这个小组还创建了 Scratch: 世界上最流行的儿童编程语言。 OctoStudio 完全免费,没有任何广告。

创始团队在新闻稿里提到他们的初衷:

在世界各地,越来越多的儿童和青少年可以使用移动设备,但许多人花费大把时间被动观看视频和社交媒体。相比之下,OctoStudio 邀请年轻人使用手机和平板电脑创造性地表达自己,并在此过程中学习计算和解决问题的技能。

“我们设计 OctoStudio 的目的是为年轻人提供随时随地创建项目的机会” 负责 OctoStudio 项目的研究科学家 Natalie Rusk 说道 “让他们有机会发展自己的兴趣、表达自己的想法并与他人分享。”

就我而言,OctoStudio 是迄今为止第一个让我愿意在手机里编程的应用。OctoStudio 使得在手机上编程变得简单而充满乐趣。它充分利用了手机的特点,又通过出色地设计,让用户得以轻松愉快地使用这些功能。

OctoStudio 让我觉得 “哇 这就是使用手机编程的方式!"。而不是 “我没有电脑,只好暂时迁就手机这个笨拙的替代品”,大多数手机上的编程产品都是后者。

Information wants to be free – wiki

OctoStudio 如此有趣,以至于我们迫不及待把玩它的各种功能,想突破它的极限。

黑客们有这样一种怪癖,当他们对一个系统着迷,而这个系统又不开放时,黑客们首先想到的是: 破解它。通过破解给予系统自由,好像解救一个被束缚的人。这是他们表达敬意的一种方式,黑客从不花时间去破解三流系统,甚至连脚本小子都不屑这样做,不然就会被其他人瞧不起。

破解之前,需要观察和把玩目标系统,寻找切入点。

extend-octostudio-01.png

在 OctoStudio 的 ... 分类里,有这样两块积木:

  • beam to phones (给手机发送信号)
  • wait for beam (等待信号)

使用这两块积木,可以让不同手机上的 OctoStudio 互相发送消息。

如果你之前使用过 micro:bit, 它有点像 micro:bit radio

如果我们能够弄懂这两块积木是如何工作的(很容易猜到是基于蓝牙), 我们就能够让其他系统(诸如Python、MicroBlocks)与之通信,互相发消息, 做到这点,就能极大扩展 OctoStudio 的能力: Python、MicroBlocks 生态的所有的软硬件都能够被 OctoStudio 指挥调度,而 OctoStudio 接管的所有手机功能,也能够被 Python、MicroBlocks 使用!

先玩起来吧 !

尽管我迫不及待想与你分享我是如何与 OctoStudio 斗智斗勇, 在这个过程中 ChatGPT 又如何慷慨地为我承担脏活累活…

但是,有些读者只是想知道 “具体怎么做”, 而不想要听我絮叨一个黑客的英雄之旅。

先玩起来吧!感兴趣的读者可以阅读之后的破解过程,对技术细节没兴趣的读者,读完这部分,就不用往下读啦!

让我们一起来实现视频中的案例:

在这个案例中,摇晃手机将切换风扇的开关(如果没有风扇,可以控制其他的开关,诸如开关 MicroBlocks 中的用户 LED )。

这个案例包含 3 个方面的工作:

  1. 在 OctoStudio 中编程 (目前仅支持 iPhone 和 iPad)
  2. 在 MicroBlocks 中编程
  3. 运行桥接器(它是通用的,无需编程)

1. 在 OctoStudio 中编程

使用 OctoStudio 编写了一个程序: 当手机摇晃时,发送 “爱心”(heart) 信号。

国外的 MicroBlocks 用户可能会阅读这篇文章, 以下分别提供程序的中文和英文版本:

extend-octostudio-02.png

你可以自己编写这个程序,也可以点击下载 到 OctoStudio。

2. 在 MicroBlocks 中编程

需要一块支持 wifi 功能的板子, 我使用的是 ESP32, 但是任何支持 wifi 功能的板子都行(m5stack, pico w…)

程序等待接收 wifi Radio 信号,当收到 OctoStudio 发出的 “爱心” 信号时,切换风扇的开关。

OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号? 下边的第 3 部分会讲到。

以下是 MicroBlocsks 程序的中文和英文版本:

extend-octostudio-03.png

点击这里 可以打开程序。

3. 运行桥接器

前边提到:

OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号

我们制作了一个 OctoStudio-MicroBlocks bridge, 这个桥接器是一个 Python 库,它会把 OctoStudio 发出的信号转为 MicroBlocks Wifi Radio 信号。

以下是运行运行桥接器的步骤:

  1. 确保你的电脑开启蓝牙
    • Windows 需要 Windows10 或者 Windows11
  2. 确保你的电脑上装有 Python (Python 3.10 或者更高版本)
  3. 使用 Python 安装桥接器库(octostudio) : python -m pip install octostudio
    • MacOS 系统对权限的管理非常严格, 确保 Python (terminal) 可以访问到蓝牙。
  4. 在命令行中运行桥接器: octostudio-microblocks-bridge

桥接器是通用的,不需要对它编程,只需运行起来即可。

局域网里只需要有一台电脑(诸如树莓派)运行了桥接器,它就能够转发给局域网里的所有 MicroBlocks 设备!

现在可以开始玩啦, 修改 OctoStudio 和 MicroBlocks 中的积木,去探索你的奇思妙想吧。

  1. octostudio 是普通的 Python 库,也可以将其用于 Python 与 OctoStudio 的通信,具体使用方式参考项目页面

分析与破解 OctoStudio

以下部分记录破解的过程。

目前只做到了解码 OctoStudio 往外发出的消息

还做不到往 OctoStudio 里发送消息,但这方面已经取得了不错的进展,我会在这里会分享目前掌握的一些信息。

以下是我分析 BLE 信号, 使用的一些工具,感兴趣的读者可以使用它们自行探索:

OctoStudio 往外发出的消息

对应 OctoStudio 的 beam to phones (给手机发送信号) 积木。

要解码 beam to phones 往外发出的信号,我们需要找到工具来接收这个信号,然后观察它的模式。通过与 ChatGPT 交流,我们知道它很可能基于 BLE(低功耗蓝牙) 广播。于是我打算采用 bleak 来观察 BLE 蓝牙信号。

具体的实现参考这段脚本

往 OctoStudio 里发送消息

对应 OctoStudio 的 wait for beam (等待信号) 积木。

基本的想法是,模仿 OctoStudio 往外发出的消息。既然不同手机上的 OctoStudio 能够发送蓝牙消息,我们伪装成其中的一台设备发送消息就好了。

目前这部分我直接实现在了 MicroBlocks 中(暂未在桥接器里实现,在微控制器中实现比在电脑上实现简单很多。如果你想与 OctoStudio 进行双向通信,参考MicroBlocks ❤️ OctoStudio

最小原理演示参考beam-to-phone.ino

兼容性问题

如果你遇到兼容性问题,无法使用,欢迎提 issue

以下是我的测试环境, 供调试时参考:

  • iPhone X(iOS 16.1) 运行 OctoStudio (1.0.1)
  • Android 10(MI 8) 运行 OctoStudio (1.0.0)
  • MacOS(MacBook Air M1, 2020, MacOS 13.4.1)
    • Python 3.10.10
    • Python 依赖库:
      • bleak==0.21.1
  • Windows 11
    • Python 3.11.6
      • bleak==0.21.1

OctoStudio & Python

安装依赖:

pip install octostudio

from octostudio import OctoStudio

def on_message(shape_id):
    print(shape_id)

octo = OctoStudio()
octo.on_message = on_message
octo.start()

OctoStudio & Scratch

安装依赖:

pip install paho-mqtt octostudio

在命令行里,运行桥接器: octostudio-scratch-bridge

打开示例项目

OctoStudio & Snap!

安装依赖:

pip install paho-mqtt octostudio

在命令行里,运行桥接器: octostudio-snap-bridge

打开示例项目


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK