Moukthar通信协议深度解析:WebSocket命令体系全揭秘

Moukthar通信协议深度解析:WebSocket命令体系全揭秘

【免费下载链接】moukthar Android remote administration tool 【免费下载链接】moukthar 项目地址: https://gitcode.com/gh_mirrors/mo/moukthar

Moukthar 是一款开源的 Android 远程管理工具(RAT),其核心竞争力在于一套设计精妙的 Moukthar通信协议——所有远程操作都通过 WebSocket 长连接完成实时指令传输。无论是窃取通讯录、远程拍照,还是下发短信、控制文件上传下载,背后都依赖这套统一命令体系。本文将从零开始,为你彻底拆解 Moukthar 的 WebSocket 命令体系:消息如何编码、命令如何下发、数据如何回传,让你一篇文章看懂整条通信链路。

Moukthar C2控制面板仪表盘与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.phponMessage() 中清晰可辨:$data->type 一旦命中对应分支,就会交给 clientConnection()serverConnection()jsServerFilesCommand() 处理,路由逻辑一目了然。

三、完整的命令下发流程:从点击按钮到手机执行

以「向目标手机发送一条短信」为例,一条命令在 Moukthar 通信协议中要经过六个环节:

  1. 操作者在控制面板点击「发送短信」
  2. 控制面板将表单数据 POST 到 /send 接口(见 ControlPanel.phpsendCommand()
  3. PHP 通过 WebSocket 客户端把 JSON 指令推送到中继服务
  4. 中继服务按 web_socket_id 在连接池中精确定位目标设备C2WebSocket.phpgetClient() + isClientConnected()
  5. 指令被转发到 Android 端 WebSocketClient.java
  6. 客户端解析 cmd 字段,执行对应操作

整个链路是「控制面板 → HTTP → WebSocket 中继 → Android 客户端」的单向指令通道,执行结果再沿相反方向回传,形成闭环。

四、16条核心命令一览:Moukthar WebSocket命令体系全盘点

Android 端所有可执行指令都被定义在一个枚举类里——Command.java,共 16 条,覆盖了设备管理的方方面面:

命令功能是否带参数
CALL拨打电话number
TEXT发送短信numbermessage
CAMERA_FRONT / CAMERA_BACK前后摄像头拍照
VIDEO录制视频frontCameraduration
SCREENSHOT屏幕截图
READ_CONTACTS / WRITE_CONTACT / DELETE_CONTACT读写删通讯录namenumber
LIST_INSTALLED_APPS列出已安装应用
LAUNCH_APP / INSTALL_APK启动应用 / 安装APKpackage / path
LIST_FILES / DOWNLOAD_FILE / UPLOAD_FILE文件浏览 / 下载 / 上传pathurlfilename
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.phpserverConnection() 中,DELETE_CONTACT 分支的转发载荷写成了 "cmd":"DOWNLOAD_FILE"——这是一个值得注意的 Bug,也提醒开发者实际阅读源码时要以客户端枚举为准。

六、客户端如何上报数据:响应字段与数据库落盘

Android 端执行完命令后,会用 res 字段标记结果类型回传,Moukthar 通信协议里共有 8 种响应类型

  • id:设备注册自己,把 web_socket_id 写回数据库
  • image / video / screenshot:媒体文件,回传 filename + timestamp
  • location:回传 latitudelongitudealtitude
  • contact / app_list:批量回传通讯录、应用列表
  • files:目录列表结果

中继服务收到后,会在 clientConnection() 中执行 SQL 插入,将数据落盘到 IMAGELOCATIONSCREENSHOTVIDEOCONTACTINSTALLED_APP 等数据表,控制面板再按需读取展示。媒体文件本身则通过 HTTP 上传到 C2 的 /doc 接口,由 ControlPanel.phpupload() 方法接收保存。

七、心跳保活与断线重连:长连接为何稳定不掉线

远程管理场景下,连接稳定性至关重要。Moukthar 通信协议做了两道保障:

  1. 周期心跳:客户端 MainService.java 每隔 5 秒检查连接状态,并发送 {"type":"client","res":"id"} 心跳包,中继服务据此更新数据库中的 web_socket_id
  2. 自动重连:当连接意外断开时,WebSocketClient.javaonClose() 会立刻再次 connect(),配合服务端 START_STICKY 前台服务机制,保证设备长时间在线

Moukthar文件管理页面的WebSocket实时日志与文件传输界面

八、前端如何接入 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.javaWebSocketClient.javaC2WebSocket.php」的顺序阅读,这是理解 Moukthar 通信协议最快的一条路径

总结

Moukthar 的 WebSocket 命令体系并不复杂:JSON 编码、type 路由、cmd 分发、res 回传,四步就串起了从控制面板到 Android 设备的整条远程管理链路。看懂这套 Moukthar 通信协议,你不仅能理解该项目的全部工作方式,也能为自建 Android 远程管理或 IoT 设备控制项目提供一份极佳的设计参考。如果想亲自部署体验,克隆仓库后按 README 指引配置即可运行完整的 WebSocket 服务。

【免费下载链接】moukthar Android remote administration tool 【免费下载链接】moukthar 项目地址: https://gitcode.com/gh_mirrors/mo/moukthar

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值