Gbrothers1/magicjack-hacking

GitHub: Gbrothers1/magicjack-hacking

逆向工程 magicJack Plus 加密狗,将其改造为由 Linux 和 Asterisk 驱动的自托管 VoIP 电话系统。

Stars: 0 | Forks: 0

# 破解 magicJack:将云锁定的 VoIP 加密狗逆向工程为自托管电话系统 ![许可证: MIT](https://img.shields.io/badge/license-MIT-blue) ![平台: Linux](https://img.shields.io/badge/platform-Linux-lightgrey) ![逆向工程](https://img.shields.io/badge/reverse--engineering-magicJack%20%C2%B7%20TigerJet-red) ![PBX: 任意 SIP](https://img.shields.io/badge/PBX-Asterisk%20%C2%B7%20any%20SIP-brightgreen) ![GitHub stars](https://img.shields.io/github/stars/Gbrothers1/magicjack-hacking?style=social) **关键词:** 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, 云资产清单, 硬件黑客, 红队技术, 逆向工具, 逆向工程