wehrwolfmann/openaxon

GitHub: wehrwolfmann/openaxon

该项目通过 Wine 集成和原生 GTK4 客户端,让 Razer Axon 壁纸引擎能够在 Linux 上运行,并附带完整的协议逆向文档与壁纸解密工具。

Stars: 0 | Forks: 0

# OpenAxon — 在 Linux 上运行 Razer Axon 通过 Wine 在 Linux 上运行 [Razer Axon](https://www.razer.com/software/axon) —— 支持授权登录、任务栏修复以及壁纸解密。包含原生的 GTK4 客户端以及完整的 Razer Axon 协议逆向工程文档。 ## 包含内容 ### 脚本 | 文件 | 描述 | |------|----------| | `razer-login.py` | Razer ID 授权登录 | | `razer-token-inject.py` | 将 token 注入到 Razer Central Service(无需修改 DLL 即可运行) | | `razer-axon-gui.py` | Linux 原生 GTK4/Adwaita 客户端 | | `openaxon-player.py` | 原生 wallpaper daemon(视频/静态,多显示器,特效) | | `razer-axon.sh` | 通过 Wine 启动原版 Axon 的脚本 | | `razer-axon-decrypt.py` | 提取加密的视频壁纸 | | `razer-sync.py` | 与 Razer 账号同步壁纸 | | `patch/RazerAxon.UserManager.dll` | 修改版 DLL(已弃用的方法,见下文) | ### 逆向工程文档 完整的 Razer Axon 协议文档,从 27 个 .NET DLL 和 JS bundle 中提取: | 文档 | 描述 | |----------|----------| | [`docs/razer-central-ipc.md`](docs/razer-central-ipc.md) | Razer Central IPC 协议 — 4 个服务,137+ 个命令,wire format | | [`docs/axon-api.md`](docs/axon-api.md) | REST API — 约 110 个 endpoint,HMAC 授权,下载管理器 | | [`docs/react-architecture.md`](docs/react-architecture.md) | React 18 frontend — 24 个路由,state management,WebView2 bridge | | [`docs/wallpaper-player.md`](docs/wallpaper-player.md) | Player pipe 协议 — JSON 命令,特效,多显示器 | | [`docs/chroma-sdk.md`](docs/chroma-sdk.md) | Chroma RGB — REST API,.chroma 格式,AI 生成,LED 映射 | | [`docs/design-system.md`](docs/design-system.md) | CSS 设计系统 — 颜色,字体,13 个组件组 | | [`docs/webview-host-objects.md`](docs/webview-host-objects.md) | JS↔C# bridge — 6 个 host object,111 个方法 | | [`docs/utilities.md`](docs/utilities.md) | Logger,Environment,Notifications,Telemetry | | [`docs/reporter-screensaver.md`](docs/reporter-screensaver.md) | Analytics reporter 和 screensaver 启动器 | ## 依赖项 ### 必需 - **Wine**(已测试 Wine 9.x / 10.x) - **Python 3.10+** - **PyGObject**(包含 GTK4, libadwaita 和 WebKit2) - **xdotool**, **xprop**(用于修复 X11 下的任务栏问题) - **7z** 或 **unzip**(用于解密壁纸) ### 可选 - **mpvpaper** — 在 Wayland 下使用视频壁纸 - **xwinwrap** + **mpv** — 在 X11 下使用视频壁纸 - **feh** — 设置静态壁纸(fallback) ### Arch Linux / CachyOS ``` sudo pacman -S wine python-gobject gtk4 libadwaita webkit2gtk-4.1 xdotool xorg-xprop p7zip ``` ### Ubuntu / Debian ``` sudo apt install wine python3-gi gir1.2-gtk-4.0 gir1.2-adw-1 gir1.2-webkit2-4.1 xdotool x11-utils p7zip-full ``` ### Fedora ``` sudo dnf install wine python3-gobject gtk4 libadwaita webkit2gtk4.1 xdotool xprop p7zip ``` ### openSUSE ``` sudo zypper install wine python3-gobject gtk4 libadwaita webkit2gtk3-soup2-devel xdotool xprop p7zip ``` ### Void Linux ``` sudo xbps-install wine python3-gobject gtk4 libadwaita webkit2gtk41 xdotool xprop p7zip ``` ### Gentoo ``` sudo emerge app-emulation/wine dev-python/pygobject gui-libs/gtk:4 gui-libs/libadwaita net-libs/webkit-gtk x11-misc/xdotool x11-apps/xprop app-arch/p7zip ``` ### NixOS ``` # configuration.nix 或 home-manager environment.systemPackages = with pkgs; [ wineWowPackages.stable python3 python3Packages.pygobject3 gtk4 libadwaita webkitgtk_4_1 xdotool xorg.xprop p7zip ]; ``` ## 安装 ### 1. 通过 Wine 安装 Razer Axon ``` # 下载安装程序 wget -O /tmp/RazerAxonInstaller.exe "https://rzr.to/axon" # 安装 wine /tmp/RazerAxonInstaller.exe ``` 跟随安装程序操作。默认路径为:`C:\Program Files (x86)\Razer\Razer Axon`。 ### 2. 注册 Razer Central Service Razer Axon 使用 Razer Central Service 进行授权。将其注册为 Wine 服务(只需一次): ``` wine sc create RazerCentralService \ binPath= "C:\Program Files (x86)\Razer\Razer Services\Razer Central\RazerCentralService.exe" \ start= auto ``` 该服务将在 Wine 启动时自动运行。 ### 3. 安装脚本 ``` cp razer-axon.sh razer-login.py razer-token-inject.py razer-axon-decrypt.py ~/.local/bin/ chmod +x ~/.local/bin/razer-axon.sh ~/.local/bin/razer-login.py ~/.local/bin/razer-token-inject.py ~/.local/bin/razer-axon-decrypt.py ``` ### 4. 登录 Razer ID ``` # 获取 token razer-login.py # 注入到 Razer Central Service razer-token-inject.py ``` `razer-login.py` 会打开一个显示 Razer ID 登录页面的 WebKit 窗口。授权后,脚本会拦截 JWT token 并将其保存。 `razer-token-inject.py` 通过 named pipe IPC 将 token 传递给 Razer Central Service。首次运行时会自动构建 .NET helper(需要 `dotnet` SDK 6.0+)。 ### 5. 运行 Razer Axon ``` razer-axon.sh ``` ### 替代方法:修改版 DLL(已弃用) 如果 Razer Central Service 的方法无效,可以将 `RazerAxon.UserManager.dll` 替换为修改版: ``` AXON_DIR="$WINEPREFIX/drive_c/Program Files (x86)/Razer/Razer Axon" cp "$AXON_DIR/RazerAxon.UserManager.dll" "$AXON_DIR/RazerAxon.UserManager.dll.orig" cp patch/RazerAxon.UserManager.dll "$AXON_DIR/" ``` 该方法消除了对 Razer Central 的依赖,但在每次 Axon 更新后都需要重新应用。 ## 使用方法 ### 登录 / 刷新 token ``` razer-login.py # Открыть окно входа razer-login.py --status # Проверить статус текущего токена razer-token-inject.py # Инжектировать токен в сервис razer-token-inject.py --status # Проверить состояние ``` token 大约在 24 小时后过期。请通过 `razer-login.py` 刷新,然后运行 `razer-token-inject.py`。 ### 启动 ``` razer-axon.sh # Запустить Razer Axon ``` 启动脚本会: - 设置 Wine 环境变量以兼容 WebView2 - 如果 Axon 已经运行,则激活现有窗口 - 动态修复任务栏可见性(Wine 会设置 `WM_TRANSIENT_FOR`,导致窗口从任务栏中隐藏 —— 脚本会监控并移除该属性) ### 壁纸解密 Razer Axon 将下载的壁纸存储为伪装成 `.mp4` 的 ZipCrypto 加密 ZIP 压缩包。 ``` # 自动扫描并提取所有壁纸 razer-axon-decrypt.py # 仅显示密码 razer-axon-decrypt.py -p # 试运行(不提取) razer-axon-decrypt.py -n # 跳过已提取的 razer-axon-decrypt.py -s # 自定义目录 razer-axon-decrypt.py -d /путь/к/обоям -o /путь/к/выходу # 单个文件 razer-axon-decrypt.py -f wallpaper.mp4 -c ResourceConfig.txt # JSON 输出(用于自动化) razer-axon-decrypt.py -j # 英文界面 razer-axon-decrypt.py --lang en # 详细输出(debug) razer-axon-decrypt.py -v ``` #### 解密原理 每个壁纸的密码都根据其 `ResourceConfig.txt` 计算得出: ``` import hmac, hashlib content = open("ResourceConfig.txt").read() password = hmac.new(b"j6l-aUmhCc@tN%T_", content.encode(), hashlib.sha256).hexdigest() ``` HMAC 密钥硬编码在 Razer Axon 的 .NET 程序集中。 ## 工作原理 ### 架构 ``` ┌─────────────────────────────────────────────────────┐ │ Razer Axon (Wine) — оригинальные файлы, без патчей │ │ │ │ RazerAxon.exe │ │ │ │ │ ├── RazerAxon.UserManager.dll (ОРИГИНАЛ) │ │ │ └── NacClient ──► named pipe IPC │ │ │ │ │ ├── WebView2 UI ──► axon-api.razer.com │ │ │ │ │ └── WallpaperPlayerManager │ │ └── Расшифровка ZIP → воспроизведение │ │ │ │ RazerCentralService.exe (Wine-сервис) │ │ ├── AccountManager ──► авторизация │ │ ├── Named pipe IPC ──► связь с Axon │ │ └── Razer API ──► manifest.razerapi.com │ │ │ ├─────────────────────────────────────────────────────┤ │ Linux │ │ │ │ razer-login.py ──► id.razer.com ──► JWT-токен │ │ razer-token-inject.py ──► pipe IPC ──► сервис │ │ razer-axon.sh ──► Wine + фиксы окружения/панели │ │ razer-axon-decrypt.py ──► HMAC-SHA256 → unzip │ │ │ └─────────────────────────────────────────────────────┘ ``` ### 授权原理 Razer Central Service (`RazerCentralService.exe`) 作为 Wine 服务运行,并监听 named pipe `{FC828A97-C116-453D-BD88-AD471496E03C}`。Axon 通过 `NacClient.dll` 连接到它以获取授权 token。 `razer-token-inject.py` 连接到同一个 pipe,并发送带有 JWT token 的 `WebApp_SetLoginSuccessFromWeb` 命令(该 token 是通过 `razer-login.py` 获取的)。这模拟了通过 Razer Central GUI 进行的网页授权(由于 WPF 渲染限制,该 GUI 无法在 Wine 下显示)。 所有 Razer 文件均保持原样 —— 没有对二进制文件进行任何修改。 ### Token 格式 `~/.wine/drive_c/users//AppData/Local/Razer/RazerAxon/wine_login_token.json`: ``` { "convertFromGuest": false, "token": "eyJhbGciOiJFUzI1NiI...", "isOnline": true, "isGuest": false, "uuid": "RZR_...", "loginId": "user@example.com", "tokenExpiry": "2026-04-01T21:46:43.000Z", "stayLoggedIn": true } ``` ### 壁纸加密 `~/RazerAxonWallpapers//Resource/` 中的壁纸是 ZipCrypto 加密的 ZIP 压缩包: ``` password = HMAC-SHA256("j6l-aUmhCc@tN%T_", ResourceConfig.txt).hexdigest() ``` ## 故障排除 ### Axon 显示黑屏/空白窗口 Token 未注入或已过期: ``` razer-login.py # Обновить токен razer-token-inject.py # Инжектировать ``` ### Razer Central Service 未启动 ``` # 检查状态 wine sc query RazerCentralService # 重启 Wine(服务自动启动) wineboot ``` ### 托盘中的西里尔字母显示为方块 ``` wine reg add "HKCU\Software\Wine\Fonts\Replacements" /v "Segoe UI" /t REG_SZ /d "Tahoma" /f ``` ### Token 过期 ``` razer-login.py --status # Проверить razer-login.py # Обновить razer-token-inject.py # Инжектировать заново ``` ### 窗口在任务栏中不可见 启动脚本会自动修复此问题。如果问题仍然存在,请确保已安装 `xdotool` 和 `xprop`。 ### 壁纸解密失败 确保已安装 `7z` 或 `unzip` 并且支持 ZipCrypto。 ## 许可证 MIT
标签:GTK4, Wine, 动态壁纸, 协议逆向, 多人体追踪, 数据可视化, 桌面应用, 逆向工具