V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
JCZ2MkKb5S8ZX9pq
V2EX  ›  全球工单系统

博联 Broadlink 的万能遥控,远程指令可以 replay,需要加个时间验证嘛?

  •  
  •   JCZ2MkKb5S8ZX9pq · 2020-01-11 21:34:13 +08:00 · 2075 次点击
    这是一个创建于 1777 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 在搞博联的万能遥控器,抓包刚好发现一个问题。
    • 博联大部分都用了自己的证书 fiddler 一下子还抓不到,刚好遥控指令可以抓到,就看了眼。
    • 发送的遥控指令,request 大概是这样的
    {
        "directive": {
            "header": {
                "namespace": "DNA.TransmissionControl",
                "name": "fkdjksfjdk",
                "interfaceVersion": "2",
                "messageId": "00000000000000000000?????"
            },
            "endpoint": {
                "devicePairedInfo": {
                    "did": "00000000000000000000????",
                    "pid": "000000000000000000000000????",
                    "mac": "fffffffffffffff",
                    "cookie": "fldajflksjkldfjsaldf????????"
                },
                "endpointId": "00000000000000000000???fffffffff",
                "cookie": {}
            },
            "payload": {
                "data": "????AAA????FFFFFFFF",
                "notpadding": 0
            }
        }
    }
    
    • 其中 data 应该是遥控码加了个编码或者自己指定的 Base64,cookie 就是个 base64,解出来这样。
    {
        "device": {
            "id": 321,
            "key": "3kj324lk32j4lk2j4l23j4l23kj4",
            "aeskey": "3kj324lk32j4lk2j4l23j4l23kj4",  # same as key
            "did": "00000000000000000000kjljlkjlkjlkj",  # device id
            "pid": "000000000000000000000ljljljljljlj",  # maybe product or sth. else
            "mac": "ff:ff:ff:ff:ff:ff"  # mac of RM Pro 
        }
    }
    
    • 因为我想要的是 data,也就是遥控指令的部分,那部分还没想好怎么解,我就去吃饭了。

    问题点

    • 吃饭时候忽然想到,好像没看到时间戳,会不会没 时间验证
    • 回来 fiddler 刚好没关过,就试着 replay 了一条,结果这边遥控器有回应。。。
    • 虽然说有好几个验证的 key,被拦截的可能性也不大,但要不要考虑加个时间验证啊?
    • 印象中其它平台大都是 apikey/ secret/ salt/ time, 有的还会加请求字串或者请求长度。
    • 改造的话好像客户端升级 + 服务器验证就行了。
    • 我也不太懂,大家觉得有问题吗?

    • 另外 webform 含一个 license,但应该也无关。
    • 因为从前一次测试,到吃饭回来,期间隔了两小时有的吧。我感觉是没验证(也不排除它打包在 key 里,然后时间宽容度很高?)
    • 现在已经差不多 4 小时了,还是可以 replay 请求。
    9 条回复    2020-01-12 01:47:01 +08:00
    JCZ2MkKb5S8ZX9pq
        1
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-01-11 22:00:27 +08:00
    另外我在想,那个 key 很短,不像 sid 校验。license 不确定。
    但会不会 data 部分也没有验证,换句话说,修改 data 部分,就能向我家里发任意指令了?那也满扯的。

    因为还不知道它 data 的编码规则,所以我也不方便测试,感觉可能是个坑点。
    先直接从路由器屏蔽了。
    sneezry
        2
    sneezry  
       2020-01-11 22:02:51 +08:00
    指令可以直接重放,我之前试过,同一个指令用了两年都可以正常控制
    JCZ2MkKb5S8ZX9pq
        3
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-01-11 22:05:35 +08:00
    @sneezry 真的这样啊,汗。。。
    倒是可以变相当 restapi 用
    JCZ2MkKb5S8ZX9pq
        4
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-01-11 22:10:39 +08:00
    @sneezry 试了下,多次请求,cookie 和 license 是不变的,也就是说很可能直接修改 data,就能发送任意指令到家里的万能遥控了。。。

    它这个 data 你知道是用什么编码的嘛?长得像 base64,但解出来乱码,好像 base64 可以自定义码表的是嘛?请问你知道它 data 部分是怎么编的嘛?
    sneezry
        5
    sneezry  
       2020-01-11 22:24:56 +08:00
    @JCZ2MkKb5S8ZX9pq data 不是可见字符,就是二进制数据,博联自己设计的协议,没有太多公开资料
    binux
        6
    binux  
       2020-01-11 23:18:50 +08:00 via Android
    houfukude
        7
    houfukude  
       2020-01-12 01:05:40 +08:00 via Android
    如果你指望去博联家的服务器下指令这个我没研究过

    我直接本地学习了然后进行本地重放
    可以参考一下这个项目
    https://github.com/mjg59/python-broadlink/
    JCZ2MkKb5S8ZX9pq
        8
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-01-12 01:45:11 +08:00
    @binux 不太一样,HA 是本地通过 ip/mac 直接连的。抓包的这个是从博联服务器走的。
    JCZ2MkKb5S8ZX9pq
        9
    JCZ2MkKb5S8ZX9pq  
    OP
       2020-01-12 01:47:01 +08:00
    @houfukude 嗯,HA 本地我已经都配置好了。我吐槽的这个是博联 App 里的。
    我在抓的部分是射频码和其它一些东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:31 · PVG 19:31 · LAX 03:31 · JFK 06:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.