Moukthar通信协议深度解析:WebSocket命令体系全揭秘
【免费下载链接】mouktharAndroid remote administration tool项目地址: https://gitcode.com/gh_mirrors/mo/moukthar
Moukthar 是一款开源的Android 远程管理工具(RAT),其核心竞争力在于一套设计精妙的Moukthar通信协议——所有远程操作都通过 WebSocket 长连接完成实时指令传输。无论是窃取通讯录、远程拍照,还是下发短信、控制文件上传下载,背后都依赖这套统一命令体系。本文将从零开始,为你彻底拆解 Moukthar 的 WebSocket 命令体系:消息如何编码、命令如何下发、数据如何回传,让你一篇文章看懂整条通信链路。
一、Moukthar通信协议架构:三方协作,一条长连接
要理解 Moukthar 的 WebSocket 命令体系,首先要知道通信链路上有三个角色:
| 角色 | 技术实现 | 职责 |
|---|---|---|
| Android 客户端 | Java + java-websocket 库 | 维持长连接、接收并执行命令、回传结果 |
| WebSocket 中继服务 | PHP + Ratchet 框架(端口 8080) | 身份校验、消息路由、指令转发 |
| 浏览器控制面板 | 原生 JS WebSocket | 展示设备列表、发送操作指令、实时查看日志 |
三者通过一个 WebSocket 服务端完成全双工实时通信。服务端入口在 App.php,核心路由与消息分发逻辑全部集中在 C2WebSocket.php 中,它以onMessage()方法为总入口,根据消息里的type字段判断消息来自哪一方。
二、消息类型(type)字段:一秒钟识别消息身份
Moukthar 通信协议用type字段区分消息来源,这是整个命令体系的第一层路由,一共四种:
client:来自 Android 端设备,既包含命令执行结果,也包含主动上报的数据(短信、通知、定位等)server:来自控制面板下发的远程指令js-server:浏览器面板注册为日志接收端,用于实时显示通信状态js-server-files:文件管理页专用的浏览器连接,用于接收目录列表结果
对应代码在 C2WebSocket.php 的onMessage()中清晰可辨:$data->type一旦命中对应分支,就会交给clientConnection()、serverConnection()或jsServerFilesCommand()处理,路由逻辑一目了然。
三、完整的命令下发流程:从点击按钮到手机执行
以「向目标手机发送一条短信」为例,一条命令在 Moukthar 通信协议中要经过六个环节:
- 操作者在控制面板点击「发送短信」
- 控制面板将表单数据POST 到
/send接口(见 ControlPanel.php 的sendCommand()) - PHP 通过 WebSocket 客户端把 JSON 指令推送到中继服务
- 中继服务按
web_socket_id在连接池中精确定位目标设备(C2WebSocket.php 的getClient()+isClientConnected()) - 指令被转发到 Android 端 WebSocketClient.java
- 客户端解析
cmd字段,执行对应操作
整个链路是「控制面板 → HTTP → WebSocket 中继 → Android 客户端」的单向指令通道,执行结果再沿相反方向回传,形成闭环。
四、16条核心命令一览:Moukthar WebSocket命令体系全盘点
Android 端所有可执行指令都被定义在一个枚举类里——Command.java,共 16 条,覆盖了设备管理的方方面面:
| 命令 | 功能 | 是否带参数 |
|---|---|---|
CALL | 拨打电话 | number |
TEXT | 发送短信 | number、message |
CAMERA_FRONT/CAMERA_BACK | 前后摄像头拍照 | 无 |
VIDEO | 录制视频 | frontCamera、duration |
SCREENSHOT | 屏幕截图 | 无 |
READ_CONTACTS/WRITE_CONTACT/DELETE_CONTACT | 读写删通讯录 | name、number |
LIST_INSTALLED_APPS | 列出已安装应用 | 无 |
LAUNCH_APP/INSTALL_APK | 启动应用 / 安装APK | package/path |
LIST_FILES/DOWNLOAD_FILE/UPLOAD_FILE | 文件浏览 / 下载 / 上传 | path、url、filename |
LOCATION | 获取定位 | 无 |
这 16 条命令构成了 Moukthar 通信协议的命令体系主体,客户端 WebSocketClient.java 中一个switch (cmd)就完成了全部命令的分发与执行。
五、指令格式深度拆解:JSON 载荷与参数结构
Moukthar 通信协议的命令载荷统一采用 JSON 格式,每条指令都至少包含cmd(命令名)+ 具体参数两个部分。来看几个最典型的例子:
- 拨打电话:
{"cmd":"CALL","number":"+8613800138000"} - 发送短信:
{"cmd":"TEXT","number":"+8613800138000","message":"hello"} - 录制视频:
{"cmd":"VIDEO","frontCamera":false,"duration":10} - 浏览目录:
{"cmd":"LIST_FILES","path":"/sdcard/Download"}
注意服务端的细节:在 C2WebSocket.php 的serverConnection()中,DELETE_CONTACT分支的转发载荷写成了"cmd":"DOWNLOAD_FILE"——这是一个值得注意的 Bug,也提醒开发者实际阅读源码时要以客户端枚举为准。
六、客户端如何上报数据:响应字段与数据库落盘
Android 端执行完命令后,会用res字段标记结果类型回传,Moukthar 通信协议里共有8 种响应类型:
id:设备注册自己,把web_socket_id写回数据库image/video/screenshot:媒体文件,回传filename+timestamplocation:回传latitude、longitude、altitudecontact/app_list:批量回传通讯录、应用列表files:目录列表结果
中继服务收到后,会在clientConnection()中执行 SQL 插入,将数据落盘到IMAGE、LOCATION、SCREENSHOT、VIDEO、CONTACT、INSTALLED_APP等数据表,控制面板再按需读取展示。媒体文件本身则通过 HTTP 上传到 C2 的/doc接口,由 ControlPanel.php 的upload()方法接收保存。
七、心跳保活与断线重连:长连接为何稳定不掉线
远程管理场景下,连接稳定性至关重要。Moukthar 通信协议做了两道保障:
- 周期心跳:客户端 MainService.java 每隔 5 秒检查连接状态,并发送
{"type":"client","res":"id"}心跳包,中继服务据此更新数据库中的web_socket_id - 自动重连:当连接意外断开时,WebSocketClient.java 的
onClose()会立刻再次connect(),配合服务端START_STICKY前台服务机制,保证设备长时间在线
八、前端如何接入 WebSocket:文件管理页实战
控制面板的前端也直接使用原生 WebSocket。以文件管理页 files.php 为例:页面加载后即建立ws://localhost:8080连接,以js-server-files身份注册;操作者输入目录路径点击发送时,前端会构造{"cmd":"LIST_FILES","web_socket_id":"...","path":"..."}指令推送给中继服务,目录结果随后通过日志面板实时回显——这就是你在截图里看到的那块黑色终端日志区。
九、理解 Moukthar通信协议后:几个实用要点
- 身份绑定是关键:所有指令都依赖
web_socket_id定位设备,它其实是连接池中连接的resourceId,与数据库CLIENT表一一对应 - 参数校验要谨慎:客户端用
Command.valueOf()解析命令,非法命令会抛异常并被静默捕获 - 学习源码路线:建议按「Command.java → WebSocketClient.java → C2WebSocket.php」的顺序阅读,这是理解 Moukthar 通信协议最快的一条路径
总结
Moukthar 的 WebSocket 命令体系并不复杂:JSON 编码、type 路由、cmd 分发、res 回传,四步就串起了从控制面板到 Android 设备的整条远程管理链路。看懂这套 Moukthar 通信协议,你不仅能理解该项目的全部工作方式,也能为自建 Android 远程管理或 IoT 设备控制项目提供一份极佳的设计参考。如果想亲自部署体验,克隆仓库后按 README 指引配置即可运行完整的 WebSocket 服务。
【免费下载链接】mouktharAndroid remote administration tool项目地址: https://gitcode.com/gh_mirrors/mo/moukthar
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考