Gbrothers1/magicjack-hacking
GitHub: Gbrothers1/magicjack-hacking
逆向工程 magicJack Plus 加密狗,将其改造为由 Linux 和 Asterisk 驱动的自托管 VoIP 电话系统。
Stars: 0 | Forks: 0
# 破解 magicJack:将云锁定的 VoIP 加密狗逆向工程为自托管电话系统





**关键词:** magicJack · 逆向工程 · TigerJet · Silicon Labs ProSLIC · USB HID ·
SIP · Asterisk · 自托管 VoIP · ATA · FXS · 电话通信 · 硬件破解 · homelab
这个仓库是一个 homelab 项目的完整记录,主题只有一个:**拿一个廉价、被云锁定的
消费级电话小设备 —— [magicJack](https://en.wikipedia.org/wiki/MagicJack) —— 对其进行
逆向工程,直到它能做*我*想让它做的事,而不是仅仅局限于厂商允许的范围。** 它最终
变成了一个完整的自托管电话系统:magicJack 的电话端口现在可以振铃、拨号,
并完全由一台 Linux 机器负责通话,且连接到了我自己的 PBX。
**如果你搜索过 "magicjack hacking" / "magicjack reverse engineering" —— 你来对地方了。**
从通俗易懂的故事开始看 **[`docs/the-magicjack-hack.md`](docs/the-magicjack-hack.md)**,
或者直接跳转到核心的拆解分析
**[`06-magicjack-usb-tigerjet/`](06-magicjack-usb-tigerjet/)**。
## 新手入门
**你需要准备:** 一个 **magicJack Plus** (USB `06e6:c200`),一台 Linux 机器 (Debian/Ubuntu),一部接入 magicJack 的 RJ11 接口的普通模拟
电话,以及**你已经在运行的任何 SIP PBX**。
将 magicJack 插入 USB,把电话连到它的 RJ11 接口,然后执行:
```
git clone https://github.com/Gbrothers1/magicjack-hacking && cd magicjack-hacking
sudo ./setup.sh # detects the device, installs deps, asks for your PBX, wires it up
```
`setup.sh` 会安装 [`baresip`](https://github.com/baresip/baresip) (负责音频) +
`mj-fxs-bridge.py` root daemon (负责 FXS 行为),自动检测 TigerJet 声卡,根据
你的回答生成配置,并以 systemd 服务的形式启动所有进程。完成后:拿起听筒
就会有拨号音,在你的 PBX 上创建匹配的 extension,拨打它即可让电话响起。
**它兼容任何 SIP PBX —— Asterisk、FreePBX、FreeSWITCH、3CX 以及其他系统** —— 因为 magicJack
被呈现为一个**标准的 SIP endpoint**(baresip 是一个纯粹的 SIP 客户端;没有任何 magicJack 特定的东西
会触及你的 PBX)。你只需使用提供给安装程序的用户名 + 密码创建一个普通的 ulaw/alaw extension 即可。
- 想了解它*如何*工作,或者想从头手动操作?
→ [`06-magicjack-usb-tigerjet/REPRODUCE.md`](06-magicjack-usb-tigerjet/REPRODUCE.md)
- 想了解集成的内部原理 (baresip ↔ bridge daemon ↔ 注册)?
→ [`03-magicjack-sip/README-fxs-usb.md`](03-magicjack-sip/README-fxs-usb.md)
## 什么是 magicJack,为什么要破解它?
**magicJack** 是一个约 40 美元的设备,可通过互联网为你提供一条家庭电话线。你将一部普通的
电话插入它的 RJ11 接口,将 magicJack 插入电源/以太网(或 PC 的 USB 端口),支付年费,
然后就可以打电话了。它是一个经典的 **[ATA](https://en.wikipedia.org/wiki/Analog_telephone_adapter)**
(模拟电话适配器)—— 但是一个被锁定的版本:它只与 magicJack 的服务器通信,只能
配合 magicJack 的应用/订阅使用,并且让你对*自己的*电话线没有任何控制权。
在底层,magicJack Plus 实际上是**一个盒子里的两台计算机**:
1. 一个**联网的 ATA 大脑** —— 一个带有以太网端口的小型 SoC,使用 **SIP**(标准的
VoIP 协议)与 magicJack 的云端通信,并拥有你的电话号码。在**墙壁电源**供电时激活。
2. 一个 **USB "softphone" 前端** —— 一套*独立的*芯片(一个 **TigerJet** USB 控制器 +
一个 **Silicon Labs Si321x ProSLIC** 电话线芯片),当你将 magicJack 插入 PC
而不是墙壁插座时,它可以让 magicJack 的 Windows/Mac 应用程序驱动连接的电话。在 **USB** 供电时激活。
两者都被牢牢封闭在 magicJack 的软件生态中。**为什么还要费心破解它们?**
- **所有权。** 它是我的硬件,也是我的电话线。我想让它呼叫*我的* PBX,路由到*我的*
extension,并且即使厂商的云服务或订阅消失了也能继续工作。
- **互操作性。** 标准的 SIP 设备(Asterisk、softphone、trunk)应该能够使用它。
对产品进行逆向工程以使其与你自己的软件互操作是一件正常、合法且成熟的
事情(参见下方的[道德声明](#is-this-legal--ethical))。
- **这是一个极好的谜题。** 两个未公开的芯片,一个专有协议,以及一个可供
拆解的驱动二进制文件 —— 这是学习真实的 USB、SIP、电话通信和逆向工程的绝佳方式。
## 成果:一个完全由 Linux 驱动的破解版 magicJack
旗舰级破解解放了 **USB 大脑**。现在,所有的模拟电话功能都由一个
与 `/dev/hidraw` 通信的 Python 脚本控制,并且 magicJack 的软件**从未运行** —— 所有
功能均通过插入真实的电话在硬件上完成了验证:
| 功能 | 驱动方式 | 硬件验证结果 |
|---|---|---|
| **线路供电** (拨号音 + 端口 LED) | ARM 控制寄存器 `reg0` bit0 + 一次 `InitTjHardware` 重放 | ✅ 听筒中有拨号音,LED 点亮,可重复开/关 |
| **振铃** | `reg0` bits 8–9 (`0x300`) → 固件生成约 90 V 振铃电压 | ✅ 听筒物理振铃 |
| **摘机检测** (听筒拿起/放下) | 轮询 `reg0x14` **bit 31** | ✅ 拿起/放下时状态翻转 |
| **DTMF 拨号数字** | 片上解码器 → `reg0x14` (有效标志 + 数字 nibble) | ✅ 与实时键盘按下完全匹配 |
| **双向音频** | 标准 USB Audio Class,ALSA 卡 1,原生 8 kHz | ✅ 双向语音正常 |
| **Asterisk extension** | `baresip` softphone (音频) + `mj-fxs-bridge.py` root daemon (FXS 行为) | ✅ 作为 **ext 200** 运行 |
这背后的寄存器协议**不是**猜出来的 —— 它是从 magicJack 自己的
公开下载的 **macOS 驱动二进制文件**中读取出来的,(与被剥离符号的 Windows DLL 不同)该文件仍然保留了所有的符号。**[亲自复现 →](06-magicjack-usb-tigerjet/REPRODUCE.md)**
## 构建了什么(简述)
| # | 行动 | 结果 |
|---|----------|--------|
| **A** | 通过实验路由器进行数据包嗅探,**抓取 ATA 的 SIP** | 了解到 magicJack 使用简单的 `user@domain` 注册,**无密码**,G.711 音频 |
| **B** | 在 [Asterisk](https://www.asterisk.org/) 中**自托管该 SIP** | 联网版 magicJack 现在注册到**我的** PBX,而不是 magicJack 的云端 —— 保留了它的号码,完全运行在我的基础设施上 |
| **C** | 从 macOS 驱动二进制文件**逆向工程 USB 个性** | **完全从 Linux** 驱动模拟电话端口 —— 拨号音、振铃、摘挂机、DTMF、双向音频 —— 通过未公开的寄存器协议,无需 Windows/Mac 应用 |
| **D** | 将 USB 听筒作为真实的 extension (200) **接入 Asterisk** | 连接在 magicJack 上的一部物理电话现在的表现就像任何 PBX 电话一样:可拨出,遇来电振铃,双向语音 |
## 导航
刚来这里?按顺序阅读以下内容:
1. **[`docs/the-magicjack-hack.md`](docs/the-magicjack-hack.md)** —— 通俗易懂的完整故事,
从头到尾。不需要电话或逆向工程 (RE) 背景。**最佳的入门起点。**
2. **[`06-magicjack-usb-tigerjet/HOW-IT-WAS-HACKED.md`](06-magicjack-usb-tigerjet/HOW-IT-WAS-HACKED.md)**
—— 旗舰级方法论:走过的死胡同、向 macOS 驱动的转变,以及差异
寄存器发现技术。
3. **[`06-magicjack-usb-tigerjet/REPRODUCE.md`](06-magicjack-usb-tigerjet/REPRODUCE.md)** —— 自己动手做:
前置条件、获取 + 反汇编驱动程序、精确的 HID 帧结构、寄存器
映射表以及相关工具。
### 各个项目
大致按时间顺序编号。magicJack 的主线历程为 **02 → 03 → 06**。
| 目录 | 内容 |
|-----|-----------|
| [`02-cisco-1841/`](02-cisco-1841/) | 实验室的边缘路由器 (Cisco 1841) —— 以及用于**抓取 magicJack ATA 的 SIP 数据包**的观测点 ([`magicjack-sip-notes.md`](02-cisco-1841/magicjack-sip-notes.md))。 |
| [`03-magicjack-sip/`](03-magicjack-sip/) | **自托管 PBX。** magicJack ATA 注册到的 Asterisk 服务器,取代了 magicJack 的云端 —— 此外还有自动接听/IVR、语音邮件、trunk 以及 **USB-FXS 集成**。 |
| [`06-magicjack-usb-tigerjet/`](06-magicjack-usb-tigerjet/) | ⭐ **USB 逆向工程。** 完整拆解 magicJack 的 USB 个性,以及在 Linux 上驱动电话端口的工具。**旗舰级破解。** |
有关带日期的、详细的完整时间线,请参见 [`CHANGELOG.md`](CHANGELOG.md)。
## 这合法 / 合乎道德吗?
是的。这是教科书般的爱好者行为:**为了实现互操作性和个人用途而进行逆向工程**:
- 这里的一切都运行在**我自己的硬件**和**我自己的网络**上。
- **从未触碰、攻击或干扰 magicJack 的服务器。** 核心目的就是为了
*停止*依赖它们 —— 该设备与我的 LAN 上的 Asterisk 通信。从 magicJack 的角度来看,
他们观察到的仅仅是一个停止注册的设备,这与被拔掉电源毫无区别。
- **没有重新分发任何 magicJack 代码。** 逆向工程是针对**公开
下载的** macOS/Windows 驱动程序(官方安装程序获取的同一个文件)进行的,纯粹是为了学习
实现互操作所需的协议事实 —— 这是一项被广泛认可的合理使用。这个仓库记录的是
*协议事实*,而不是厂商源代码。
- 这里的任何内容都没有绕过 DRM、伪造身份或实施欺诈。它只是让我自己的电话按照
我想要的方式响铃。
如果你在 magicJack/YMAX 工作:这是一名粉丝对他们购买的硬件进行互操作逆向工程 (RE),而不是攻击。
## 仓库说明
- 每个项目一个文件夹;每个文件夹都是独立的,并有自己的 README。
- 这个公开仓库中的所有凭证都是**占位符** (`CHANGEME_*`, `YOUR_*`, `EXXXXXXXXXXXX`,
`you@example.com`)。请填入你自己的信息以便使用相关配置。
- 原创代码和文档采用 **MIT** 许可;第三方文件 (GPL 许可的 `tjctl.c`,厂商
数据手册) 保留其自身的条款 —— 参见 [`LICENSE`](LICENSE)。
- **建议的仓库 topics:** `magicjack` `reverse-engineering` `voip` `sip` `asterisk` `tigerjet`
`usb` `hardware-hacking` `telephony` `ata` `fxs` `homelab`
标签:Asterisk, PBX, SIP, VoIP, 云资产清单, 硬件黑客, 红队技术, 逆向工具, 逆向工程