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

📅 2026/8/20 19:38:49
Moukthar通信协议深度解析:WebSocket命令体系全揭秘
Moukthar通信协议深度解析WebSocket命令体系全揭秘【免费下载链接】mouktharAndroid remote administration tool项目地址: https://gitcode.com/gh_mirrors/mo/mouktharMoukthar 是一款开源的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拨打电话numberTEXT发送短信number、messageCAMERA_FRONT/CAMERA_BACK前后摄像头拍照无VIDEO录制视频frontCamera、durationSCREENSHOT屏幕截图无READ_CONTACTS/WRITE_CONTACT/DELETE_CONTACT读写删通讯录name、numberLIST_INSTALLED_APPS列出已安装应用无LAUNCH_APP/INSTALL_APK启动应用 / 安装APKpackage/pathLIST_FILES/DOWNLOAD_FILE/UPLOAD_FILE文件浏览 / 下载 / 上传path、url、filenameLOCATION获取定位无这 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媒体文件回传filenametimestamplocation回传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),仅供参考