- 在搞博联的万能遥控器,抓包刚好发现一个问题。
- 博联大部分都用了自己的证书 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 请求。