破解 OctoStudio
文章目录
介绍 OctoStudio
OctoStudio 改变了年轻人使用手机和平板电脑的方式,使他们能够随时随地创作自己的故事和游戏。孩子们可以拍照和录制声音,用编码块将它们变为现实,并将他们的项目发送给朋友和家人。
OctoStudio 由 MIT Media Lab 终身幼儿园研究小组开发;这个小组还创建了 Scratch: 世界上最流行的儿童编程语言。 OctoStudio 完全免费,没有任何广告。
创始团队在新闻稿里提到他们的初衷:
在世界各地,越来越多的儿童和青少年可以使用移动设备,但许多人花费大把时间被动观看视频和社交媒体。相比之下,OctoStudio 邀请年轻人使用手机和平板电脑创造性地表达自己,并在此过程中学习计算和解决问题的技能。
“我们设计 OctoStudio 的目的是为年轻人提供随时随地创建项目的机会” 负责 OctoStudio 项目的研究科学家 Natalie Rusk 说道 “让他们有机会发展自己的兴趣、表达自己的想法并与他人分享。”
就我而言,OctoStudio 是迄今为止第一个让我愿意在手机里编程的应用。OctoStudio 使得在手机上编程变得简单而充满乐趣。它充分利用了手机的特点,又通过出色地设计,让用户得以轻松愉快地使用这些功能。
OctoStudio 让我觉得 “哇 这就是使用手机编程的方式!"。而不是 “我没有电脑,只好暂时迁就手机这个笨拙的替代品”,大多数手机上的编程产品都是后者。
破解它 !
Information wants to be free – wiki
OctoStudio 如此有趣,以至于我们迫不及待把玩它的各种功能,想突破它的极限。
黑客们有这样一种怪癖,当他们对一个系统着迷,而这个系统又不开放时,黑客们首先想到的是: 破解它。通过破解给予系统自由,好像解救一个被束缚的人。这是他们表达敬意的一种方式,黑客从不花时间去破解三流系统,甚至连脚本小子都不屑这样做,不然就会被其他人瞧不起。
思路
破解之前,需要观察和把玩目标系统,寻找切入点。
在 OctoStudio 的 ...
分类里,有这样两块积木:
- beam to phones (给手机发送信号)
- wait for beam (等待信号)
使用这两块积木,可以让不同手机上的 OctoStudio 互相发送消息。
如果你之前使用过 micro:bit, 它有点像 micro:bit radio。
如果我们能够弄懂这两块积木是如何工作的(很容易猜到是基于蓝牙), 我们就能够让其他系统(诸如Python、MicroBlocks)与之通信,互相发消息, 做到这点,就能极大扩展 OctoStudio 的能力: Python、MicroBlocks 生态的所有的软硬件都能够被 OctoStudio 指挥调度,而 OctoStudio 接管的所有手机功能,也能够被 Python、MicroBlocks 使用!
先玩起来吧 !
提醒: 本文基于桥接器的方法比较旧, 更推荐 MicroBlocks ❤️ OctoStudio: 将手机用作 MicroBlocks 的传感器与执行器
尽管我迫不及待想与你分享我是如何与 OctoStudio 斗智斗勇, 在这个过程中 ChatGPT 又如何慷慨地为我承担脏活累活…
但是,有些读者只是想知道 “具体怎么做”, 而不想要听我絮叨一个黑客的英雄之旅。
先玩起来吧!感兴趣的读者可以阅读之后的破解过程,对技术细节没兴趣的读者,读完这部分,就不用往下读啦!
让我们一起来实现视频中的案例:
在这个案例中,摇晃手机将切换风扇的开关(如果没有风扇,可以控制其他的开关,诸如开关 MicroBlocks 中的用户 LED )。
这个案例包含 3 个方面的工作:
- 在 OctoStudio 中编程 (目前仅支持 iPhone 和 iPad)
- 在 MicroBlocks 中编程
- 运行桥接器(它是通用的,无需编程)
1. 在 OctoStudio 中编程
使用 OctoStudio 编写了一个程序: 当手机摇晃时,发送 “爱心”(heart) 信号。
国外的 MicroBlocks 用户可能会阅读这篇文章, 以下分别提供程序的中文和英文版本:
你可以自己编写这个程序,也可以点击下载 到 OctoStudio。
2. 在 MicroBlocks 中编程
需要一块支持 wifi 功能的板子, 我使用的是 ESP32, 但是任何支持 wifi 功能的板子都行(m5stack, pico w…)
程序等待接收 wifi Radio 信号,当收到 OctoStudio 发出的 “爱心” 信号时,切换风扇的开关。
OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号? 下边的第 3 部分会讲到。
以下是 MicroBlocsks 程序的中文和英文版本:
3. 运行桥接器
前边提到:
OctoStudio 发出的信号(蓝牙信号)如何转化为 MicroBlocks 的 wifi Radio 信号
我们制作了一个 OctoStudio-MicroBlocks bridge, 这个桥接器是一个 Python 库,它会把 OctoStudio 发出的信号转为 MicroBlocks Wifi Radio 信号。
以下是运行运行桥接器的步骤:
- 确保你的电脑开启蓝牙
- Windows 需要 Windows10 或者 Windows11
- 确保你的电脑上装有 Python (Python 3.10 或者更高版本)
- 使用 Python 安装桥接器库(octostudio) :
python -m pip install octostudio
。- MacOS 系统对权限的管理非常严格, 确保 Python (terminal) 可以访问到蓝牙。
- 在命令行中运行桥接器:
octostudio-microblocks-bridge
。
桥接器是通用的,不需要对它编程,只需运行起来即可。
局域网里只需要有一台电脑(诸如树莓派)运行了桥接器,它就能够转发给局域网里的所有 MicroBlocks 设备!
现在可以开始玩啦, 修改 OctoStudio 和 MicroBlocks 中的积木,去探索你的奇思妙想吧。
提醒:
- octostudio 是普通的 Python 库,也可以将其用于 Python 与 OctoStudio 的通信,具体使用方式参考项目页面。
分析与破解 OctoStudio
以下部分记录破解的过程。
目前只做到了解码 OctoStudio 往外发出的消息。
还做不到往 OctoStudio 里发送消息,但这方面已经取得了不错的进展,我会在这里会分享目前掌握的一些信息。
以下是我分析 BLE 信号, 使用的一些工具,感兴趣的读者可以使用它们自行探索:
- Chrome bluetooth-internals
- nRF Connect
- 可在 iOS 和 Android 中使用
- lightBlue
- 可在 MacOS, iOS 和 Android 中使用
- Python BLE 库
- btlejack
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
- Python 3.11.6
更多
OctoStudio & Python
安装依赖:
pip install octostudio
|
|
OctoStudio & Scratch
安装依赖:
pip install paho-mqtt octostudio
在命令行里,运行桥接器: octostudio-scratch-bridge
打开示例项目
OctoStudio & Snap!
安装依赖:
pip install paho-mqtt octostudio
在命令行里,运行桥接器: octostudio-snap-bridge
打开示例项目
参考
文章作者 种瓜
上次更新 2023-10-28