小爱控制美的空调(美的美居app 分析) 二

查看 133|回复 11
作者:asdnasiudn   
第三篇: 小爱控制美的空调(blinker集成) 完
==================================
先对上篇帖子有些坛友提出的问题回复一下:
有说申请遥控的,这确实是一种解决方法,但是我更想在不增加物理实体的情况下完成功能,后面会把代码放到GitHub,是纯代码实现的与小爱交互.
有说红外模拟的,我这个空调不支持红外,只能蓝牙,wifi(小程序和app,小程序我也分析了,但是需要wx.login返回的code,就没搞了)
有说用homeAssistant的,不是一个生态体系的
================================================================
好,接上篇  小爱控制美的空调(美的美居app 分析) 一
我们获取到了 loginId,可以正式开始 模拟登录了.
同样我们先观察一下 请求的 header 和body


image.png (62.73 KB, 下载次数: 0)
下载附件
2022-9-4 10:21 上传



image.png (57.22 KB, 下载次数: 0)
下载附件
2022-9-4 11:34 上传

可以看到 header 没什么变化,只有trace 变化了,这个不重要,主要是body体变化了
[Java] 纯文本查看 复制代码{"iotData":{"appVersion":"8.9.0","clientType":1,"deviceId":"***","iampwd":"***","iotAppId":"900","loginAccount":"***","password":"***","reqId":"97a5d7b8021142218a82afb104d6c4dc","stamp":"20220904113353"},"data":{"appKey":"46579c15","appVersion":"8.9.0","deviceId":"***","deviceName":"Xiaomi MI 9","osVersion":"11","platform":2},"stamp":"20220904113353","timestamp":"20220904113353","reqId":"62a1609db2c6427c844d26eeed9e89ff"}
可以看到我们只要找到这几个关键的参数即可:
1. deviceId: 看着就是设备id,一般随机字符即可
2.iampwd 应该和密码相关
3.password 加密后的秘密
4.loginAccount : 没啥好说的,手机号
5.appKey : 固定的,因为每次都一样
所以这里最关键的就是 password 和 iampwd  这两个参数是怎么加密出来的
直接看源码


image.png (37.1 KB, 下载次数: 0)
下载附件
2022-9-4 11:42 上传

[Java] 纯文本查看 复制代码
public final Observable> passwordLogin(String str, String str2, String loginId, String str3) {
        Intrinsics.checkNotNullParameter(loginId, "loginId");
        LoginLogTrackHelper.INSTANCE.addTrackerMethod("passwordLogin");
        Object m717as = api.passwordLogin(getTrackHeaders(), RequestUtils.INSTANCE.createBody(new CommonReqData(getLoginMucData(), new IotData(null, null, null, "900", str, null, SecurityUtils.encodeSHA256(loginId + SecurityUtils.encodeSHA256(str2) + HttpUtil.IOT_KEY), null, SecurityUtils.encodeMD5(SecurityUtils.encodeMD5(str2)), null, null, 1, str3, LoginParamsUtil.INSTANCE.getAppVersion(), LoginParamsUtil.INSTANCE.getDeviceId(), null, null, null, null, null, null, null, null, null, 16746151, null), null, 4, null))).m717as(LoginApiService$passwordLogin$1.INSTANCE);
        Intrinsics.checkNotNullExpressionValue(m717as, "api.passwordLogin(\n … )\n }");
        return (Observable) m717as;
}
可以看出
  
[Java] 纯文本查看 复制代码SecurityUtils.encodeSHA256(loginId + SecurityUtils.encodeSHA256(str2) + HttpUtil.IOT_KEY)
这个就是 password
[Java] 纯文本查看 复制代码 SecurityUtils.encodeMD5(SecurityUtils.encodeMD5(str2))
这个是 iampwd
loginId  没啥好说的 就是 我们在第一个接口获取到的返回值
[color=]HttpUtil
[color=].
[color=]IOT_KEY 和上篇一样 把搜索到的值 decode 一下才能用
那么到此我们登陆就完成了,下面 开始抓取 开关空调的接口
我们记下 登陆接口返回的
accessToken, 后面主要是利用这个操作空调


image.png (69.16 KB, 下载次数: 0)
下载附件
2022-9-4 12:46 上传

我们点击这个开关按钮


image.png (256.19 KB, 下载次数: 0)
下载附件
2022-9-4 13:09 上传

即可观察到空调打开,同时 charles 中可以看到相关接口


image.png (102.13 KB, 下载次数: 0)
下载附件
2022-9-4 12:57 上传

请求体
[Java] 纯文本查看 复制代码{"stamp":"20220904123831","power":true,"reqId":"85142bc6d9804ac88ab2485b9c041087"}
可以看到 这个接口主要就是多了一个请求头: accessToken,即登录接口返回的
但是url 里面还有一串sn 码,表示空调的唯一标识,即你要操作的空调.
  
这里我先写死,后面会在代码里面进行匹配
请求体中的 "power":true 即表示打开空调,  "power":false 表示 关闭空调.
最简单的开关就完成了.至于温度/模式这些功能的控制 在另外一个接口中,参数比较复杂, sign 签名发方式也不一样,暂时未分析完.
示例代码入下:


image.png (214.14 KB, 下载次数: 0)
下载附件
2022-9-4 13:06 上传

那么我们对于美的美居的分析暂时到这就完了,下一步就开始正式接入小爱.

下载次数, 代码

wxue   

美的美居是最烂的APP,没有之一。为了收集用户手机号,位置信息,推广告,无底线,比如定时,设备本身偏不提供,非得用APP。没手机就不让用定时功能了呗,收集手机号码也算了,还位置信息,手机串号,换个手机就不让用了呗,什么逻辑。
chenmo111   

我就喜欢评论技术区,有实力,期待大佬的作品,小米手机无敌。 ୧⍢⃝୨
xubin   

想研究,但是感觉没时间,大佬厉害👍
vip30200   

没成品  无爱
优质大叔   

跪求成品啊,大佬。我愿拿美国国运换你成品啊大佬
keyouli66   

期待大佬的成品。
hlw2008   

纯技术贴。赞
郁林   

等大佬的研究结果
pemconrv   

可以控美菱么
还有,上一篇没了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部