|
向日葵C1Pro插座逆向实战:MonkeyCode私有化部署打通智能充电自动化
标签: 软件逆向 | MonkeyCode | 智能家居 | Python自动化
【前言:为什么折腾这个?】
各位大佬好~ 最近入手了向日葵智能插座C1Pro,用途很简单——给我的电脑做智能充电管理。

背景: Codex跑起来基本24h不停,需要一个靠谱的方案自动控制电源开关,低电量开充、满电断电,防止过充。
结果: 买回来一看,向日葵APP压根没有开放个人API接口,想搞自动化控制只能对着APP手动点。
正好最近在玩 MonkeyCode私有化部署,迁移了一下自己本机的逆向工作流。抱着试试的心态,让它帮忙分析了一下向日葵Android APP(v15.5.8)。
结论前置:整个过程比我预期顺利太多,半小时出原型,直接上干货。
【一、逆向分析过程】

1.1 APK反编译定位核心入口
MonkeyCode私有化部署后,把APK扔进去自动反编译、定位关键函数。
定位结果:插座控制的核心入口在
以前这种活可能要对着jadx翻一整天,现在AI直接梳理调用链,一步到位。
1.2 协议分析:两套API体系
MonkeyCode自动识别出向日葵插座的两套API:
| 功能 |
域名 |
协议格式 |
备注 |
| 登录认证 |
api-std.sunlogin.oray.com |
标准JSON |
常规登录流程 |
| 设备控制 |
slapi.oray.net |
GET请求+query参数 |
核心控制接口 |
1.3 协议逆向:双层认证 + 动态签名
控制接口的认证比想象中复杂——实际上是双层认证叠加使用:
第一层:OAuth2 Bearer Token(登录态)
登录走标准JSON协议,但密码传输做了MD5预处理:
POST https://api-std.sunlogin.oray.com/authorization
Content-Type: application/json
{
“type“: “password“,
“account“: “手机号“,
“password“: MD5(明文密码), ← 客户端先哈希
“ismd5“: true ← 告诉服务端这是已哈希的
}
注意这个双MD5设计:客户端哈希一次传上去,服务端大概率还会再哈希一次存储。经典防撞库方案,但密码只哈希一次不做salt,强度有限。
返回的 access_token 会作为Bearer Token附加到后续所有请求,同时还需要两个硬编码的客户端标识:
Authorization: Bearer {access_token}
EX-Clientid: e8013768-a34e-4c30-9502-5c9a43d3086e ← APP唯一标识
EX-Client-Auth: 3yLLt7MwRs4#dPi9@!986^EMtIoyB6l0 ← 客户端密钥
第二层:请求级动态签名(防重放)
控制接口走独立域名 slapi.oray.net,用 GET请求 + URL参数 的方式通信(不是POST),每个请求都携带动态签名:
GET https://slapi.oray.net/plug?
_api=set_plug_status& ← 操作类型
sn=14958XXXXXXXX& ← 设备序列号
index=0& ← 端口号(多口插座用)
time=08101430& ← 当前时间 MMddHHmm
key=a1b2c3d4e5f6...& ← 签名值
status=1 ← 业务参数(开=1/关=0)
签名算法还原:
key = MD5( SN + “==smart-plug==“ + TIME_STR )
其中:
SN = “14958XXXXXXXX“ (设备序列号,12位)
分隔符 = “==smart-plug==“ (硬编码在APP中)
TIME_STR = “08101430“ (MMddHHmm格式)
拼接明文: “14958XXXXXXXX==smart-plug==08101430“
MD5结果: “a1b2c3d4...“
逆向定位过程:
在JADX中搜索关键字符串
,直接命中
,这是插座控制的核心路由类。签名逻辑大约20行代码,没有混淆、没有native层,属于一眼真级别的简单算法。
完整调用链:
APK入口 → SunloginService → dg/lf.java(路由+签名)
→ pd/b.java(HTTP执行) → slapi.oray.net/plug
安全性评估:
| 维度 |
分析 |
风险等级 |
| 签名强度 |
MD5+字符串拼接,无HMAC,无密钥轮换 |
弱 |
| 重放攻击 |
时间精度到分钟,1分钟窗口内可重放 |
中 |
| 密钥管理 |
签名密钥=设备SN,相当于公开信息 |
弱 |
| 传输安全 |
全链路HTTPS,但参数明文拼在URL中 |
中 |
| 客户端密钥 |
EX-Client-Auth硬编码在APK中 |
弱 |
总体评价:签名的目的更多是“防止误调用“而非“防止逆向“,对于IoT设备来说算行业平均水平,但安全性确实不高。
1.4 定时任务逻辑梳理
定时任务这块比较坑,MonkeyCode帮我理清楚了转换逻辑:
时间存储: 服务端存UTC时间(分钟数)
时间显示: 设备端显示北京时间(+8转换)
重复规则: 7位位掩码控制(bit0=周日 … bit6=周六)
示例:
repeat=62 → 二进制 01111110 → 周一到周五(工作日)
repeat=65 → 二进制 1000001 → 周六+周日(周末)
repeat=127 → 二进制 1111111 → 每天
北京时间 22:00 → 存储值 (2260 - 860) = 840 分钟(UTC)
搞定这个之后,定时开关、周期性任务都能精确控制。
【二、最终成果:Python控制脚本】
基于以上分析,最终输出一个完整的Python控制脚本,功能覆盖:

| 功能 |
说明 |
状态 |
| 开关控制 |
远程开启/关闭插座电源 |
已实现 |
| 状态查询 |
查询当前开关状态、设备在线情况 |
已实现 |
| 定时任务 |
设置指定时间自动开关,支持重复规则 |
已实现 |
| 倒计时 |
设置延时关闭(如充电2小时后自动断电) |
已实现 |
| LED控制 |
控制插座指示灯开关 |
已实现 |
| 断电恢复 |
设置断电后恢复状态(记忆/关闭/开启) |
已实现 |
核心代码结构:
class SunloginPlug:
login()
_plug_request()
get_status()
set_status()
timer_add()
timer_del()
cntdown_add()
set_led()
set_dfltstat()
【三、自动化工作流】
现在我的完整方案跑起来了:
本地Python脚本(定时执行)
↓
查询插座当前状态 + 电脑电池电量
↓
电量 < 20
电量 > 95
↓
全程无需打开手机APP,24h自动循环
效果: Codex跑满24小时,电池始终维持在20%-95%之间,彻底告别过充焦虑。
【四、MonkeyCode私有化部署体验+教程】
4.1 为什么选私有化?
无安全围栏: 做协议分析类工作不会跟你扯“这可能涉及版权问题“之类的废话,直接干活
数据不出域: APK反编译、代码分析全在本地/私有云完成,敏感信息不外传
模型自由切换: DeepSeek/Qwen/GPT任切,哪个适合用哪个
成本可控: 一次性部署,后续仅承担服务器费用,无订阅制压力
4.2 部署环境准备
官方教程: MonkeyCode私有化部署Wiki
我的机器配置:
阿里云ECS
CPU:2核
内存:4G
硬盘:40G
系统:Ubuntu 22.04 LTS
实测2c4g跑私有化+宿主机一体丝滑流畅,逆向工作流迁移上去后,云机24h自动处理,很方便。
部署方式选择:
| 方式 |
适用场景 |
复杂度 |
| Docker一键部署 |
快速体验、测试环境 |
★☆☆ |
| 宿主机直接部署 |
长期使用、性能要求高 |
★★☆ |
| K8s集群部署 |
企业级、多实例 |
★★★ |
个人推荐宿主机直接部署,资源占用更低,响应更快。
4.3 逆向工作流一条龙
部署完成后,把逆向工作流完整迁移上去:
APK扔进去 → 自动反编译 → AI定位关键类 → 梳理调用链
→ 协议分析 → 生成可运行代码 → 本地直接测试
以前对着jadx翻一整天,现在半小时出原型,效率差距肉眼可见。
私有化后还能24h挂机跑自动化任务,比如批量分析APK、自动生成POC代码,云端版本做不到。
4.4 适合场景
硬件设备app端逆向(智能家居、IoT设备)
私有协议分析(APP无开放API时)
自动化脚本开发(签到、控制、数据采集)
敏感项目:金融、政务、企业内网工具
【五、声明与风险提示】
声明:
本文涉及的逆向分析仅针对个人购买的向日葵C1Pro设备
所有代码仅用于个人设备自动化控制,不对外提供服务
向日葵如果后续开放官方API,那自然是更好的选择,建议优先使用官方接口
私有化部署教程(有需求可自行研究)
🔗 开源地址:https://github.com/chaitin/MonkeyCode
📂 私有化部署:https://monkeycode.docs.baizhi.cloud/node/019eb0f3-9424-7c93-9489-4e584f989527
最后更新时间:2026-08-15
作者:吾爱 91vip
硬件:向日葵智能插座C1Pro
工具:MonkeyCode私有化部署 + Python 3.11
用途:Codex 24h运行智能充电管理
【互动区】
有搞硬件自动化的兄弟吗?还折腾过哪些设备的逆向?
MonkeyCode私有化部署做协议分析,你们还用来搞过什么项目?
有其他智能插座推荐吗?求避坑指南
有搞硬件自动化需求的兄弟可以参考一下思路,MonkeyCode私有化部署确实打开了很多可能性
|
暂无评论内容