吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4664|回复: 16
收起左侧

[Android 原创] 分析博联智能APP协议

  [复制链接]
nisosaikou 发表于 2021-4-25 14:46

分析博联智能APP协议

本文章只用于学习交流

本文章只用于学习交流,任何人或组织不得用文章中涉及的技术进行违法犯罪活动。

关于博联智能(BroadLink)

​     杭州博联智能科技股份有限公司(BroadLink)成立于2013年,是专业的智能家居解决方案提供商,专注AI+IOT技术创新和应用,致力于打造全球领先的数字化服务平台。博联在智能单品、家居生态互联、智慧地产、智慧酒店、智慧家装、智慧楼宇及智慧养老等领域为客户提供有竞争力、安全可信赖的解决方案与服务。
  目前,公司业务遍及百余个国家,服务超5000万户家庭。自主研发的智能单品年销售量超 500 万件;智能模块年发货量超 3500 万片,客户涵盖了市面上所有的主流家电电工品牌;智慧酒店落地58个城市,改造客房近万间;智慧地产解决方案落地全国 25 个城市,与 18 家位居国内 TOP50 的地产商展开合作,覆盖全国百余个楼盘批量项目。目前,BroadLink DNA互通平台已经成为全球最大的物联网 PaaS 平台之一,在AI结合IoT落地领域居全球领先。
  博联智能坚持围绕客户需求持续创新,帮助每个家庭、企业、行业实现数字化转型,构建万物互联的智能世界。

关于博联智能来自官网。

数据传输方式

现在主流的物联网app的数据传输方式主要分为两种,第一种是通过蓝牙连接进行传输数据,第二种是通过网络流量进行数据传输。

确定数据传输的方式很简单,只要关闭蓝牙或者数据流量(包括WiFi),如果在关闭时,无法控制物联网设备,则可以大致地确定传输方式。

在本实验中,关闭了设备的蓝牙,能够正常的控制物联网设备,但是在关闭数据流量(WiFi)后,无法控制物联网设备,确定当前控制方式为网络数据控制方式。

jeb分析

用jeb 3.0进行分析。

分析Manifest

  • 包名

    image-20210316102909507

  • 初始Activity

    image-20210316103317343

分析包架构

image-20210316103648949

image-20210316150729522

因为本设备当前控制方式为网络流量控制,所以我们可以重点分析网络发送的代码。经过包结构和代码的初略分析,发现BLBaseHttpAccessor这个类向外发送数据。

分析BLBaseHttpAccessor

这个类中有许多关于网络的方法,其中主要包括了下载以及getpost请求。

来分析一下post方法。

image-20210316154219612

我们想要知道在代码执行的过程中,发送的数据。通过解包,插入代码来输出这些值。

解包、封包、签名

用baksmali、smali进行解包和封包。

image-20210316143709691

修改smali汇编代码。

image-20210316152001413

用smali进行封包后签名,安装运行,查看日志。

日志分析

安装app进入设备管理页面,用adb logcat查看运行日志。

image-20210316152212937

分析协议

经过日志的观察与分析,发现了开和关的控制指令。

image-20210316152546953

协议:

  • 其它的基本都没有变化。在改变物联网设备的状态时,主要改变的是msgId时间戳payload

  • msgId:设备编号-当前时间戳

  • 时间戳:当前时间戳

  • payload

    :paVaWsLDAgsJAAAAeyJwd3IiOjB9
    >
    > :paVaWsPDAgsJAAAAeyJwd3IiOjF9
    >
    > 状态不变:paVaWrPBAQsCAAAAe30=

编码规则

payload中的data是由base64编码。

:ZZƒ {"pwr":0}

:ZZÃ {"pwr":1}

状态不变ZZA {}

返回的状态。

ZZ⻃{"pwr":0,"ntlight":0,"indicator":1,"usbpwr":0,"maxworktime":0,"usbmaxworktime":0,"ntlbrightness":100,"current":0,"volt":-1,"power":0,"totalconsum":-1,"overload":-1,"childlock":0}
ZZA{"pwr":1,"ntlight":0,"indicator":1,"usbpwr":0,"maxworktime":0,"usbmaxworktime":0,"ntlbrightness":100,"current":-1,"volt":-1,"power":-1,"totalconsum":-1,"overload":-1,"childlock":0}

协议的思路总结

app和服务器一直处于一个交互发包的状态。

平常的情况下,app会向服务器发送心跳包。payload::data为paVaWrPBAQsCAAAAe30=

如果app改变了物联网设备的状态,其中的payload::data就会改成对应的控制码。

服务器一直向app返回当前物联网设备的状态信息。

验证

写一个bash脚本,修改其中的关键信息,模拟向服务器发送控制包。服务器正常相应,物联网设备正常关闭和开启。实验成功。

数据包格式:

POST https://app-service-chn-467a8f05.ibroadlink.com/device/control/v2/sdkcontrol?license=FAFHbgwKto7KIndSfYfvoF2fn4d9mo1O38bC2daV1YDIVSNtqPJHN0lydeBilOoARbIdXQAAAABhrY5+pJiOhusZn3NFrm8nbqcPo0m/vr7IlyWSeEQyNV1pfrZPeC/egGXMQWfKNpZTLy+ybRiPJmSZnlsrGQMMsEkbxXTfoUSQjDzWcfVjcAAAAAA= HTTP/1.1
Content-type:application/x-java-serialized-object
system:android
appPlatform:android
language:zh-cn
timestamp:1615858966
appVersion:1.6.13
loginsession:1a852f2aff09f773fa025798c81c72a6
lid:1401476e0c0ab68eca2277527d87efa0
licenseid:1401476e0c0ab68eca2277527d87efa0
userid:11d83f8482bfe8e3b2c3c8b62f330895
User-Agent:Dalvik/2.1.0 (Linux; U; Android 8.0.0; Pixel 2 Build/OPD1.170816.010)
Host:app-service-chn-467a8f05.ibroadlink.com
Connection:Keep-Alive
Accept-Encoding:gzip
Content-Length:952

{
  "directive": {
    "header": {
      "namespace": "DNA.TransmissionControl",
      "name": "commonControl",
      "interfaceVersion": "2",
      "messageId": "0000000000000000000024dfa7eedc5b-1615859500",
      "timstamp": "1615859500"
    },
    "endpoint": {
      "devicePairedInfo": {
        "did": "0000000000000000000024dfa7eedc5b",
        "pid": "00000000000000000000000068750000",
        "mac": "24:df:a7:ee:dc:5b",
        "devicetypeflag": 0,
        "cookie": "eyJkZXZpY2UiOnsiaWQiOjEsImtleSI6ImZmMTIzZTA3ZTJkN2Q3NDBjNDljNzE3YWE3NjEwYjM0IiwiYWVza2V5IjoiZmYxMjNlMDdlMmQ3ZDc0MGM0OWM3MTdhYTc2MTBiMzQiLCJkaWQiOiIwMDAwMDAwMDAwMDAwMDAwMDAwMDI0ZGZhN2VlZGM1YiIsInBpZCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4NzUwMDAwIiwibWFjIjoiMjQ6ZGY6YTc6ZWU6ZGM6NWIifX0="
      },
      "endpointId": "0000000000000000000024dfa7eedc5b",
      "cookie": {}
    },
    "payload": {
      "data": "paVaWsLDAgsJAAAAeyJwd3IiOjB9",
      "notpadding": 0
    }
  }
}

免费评分

参与人数 6吾爱币 +5 热心值 +5 收起 理由
nullable + 1 热心回复!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wangxd + 1 + 1 谢谢@Thanks!
PGH_9596 + 1 我很赞同!
chinawolf2000 + 1 + 1 热心回复!
许小诺always + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| nisosaikou 发表于 2021-4-30 09:19
kangxing126 发表于 2021-4-29 06:55
感谢楼主分享!!能不能放上打log的smali文件啊?

可以用Android studio的插件 java2smali,非常方便的将java转成smali,你可以看一下
StarvedFish 发表于 2021-4-26 23:22
为什么都不加密,base64加密太低级了,类似的,我一直想对公司的软件吐槽,所以接口都是明文的
许小诺always 发表于 2021-4-25 15:44
jswxtj 发表于 2021-4-25 16:09
感谢大佬分享.
tuc 发表于 2021-4-25 16:21
膜拜大佬~~~
酱鸭腿 发表于 2021-4-25 18:38

感谢大佬分享
xixicoco 发表于 2021-4-25 19:44
好的,支持你哈
ROGm 发表于 2021-4-26 04:54
感谢大佬分享
nullable 发表于 2021-4-26 08:01
感谢大佬分享,收藏了先
senooo 发表于 2021-4-26 09:07
这样一来是不是就可以用esp8266 用博联的服务器了
jenny95 发表于 2021-4-26 10:10
这种协议和websocket类似,APP服务器一直保持心跳
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表