Reverse Engineer Mitsubishi Heavy Industries WF-RAC module
Things done:
- Disconnected Cloud services
- Discover local IP of airco
- Postscan on IP
- Remote Wireshark on Unifi accesspoint to sniff data
- Decode APK with APKTool and dex2jar
- Airco is reacting on port 51443 via http communication
- Reacts when posting json content data
- Useragent 'okhttp/4.9.1' but also responds to other user agents
- Main info via: http://:51443/beaver/command/getAirconStat by sending json: '{"apiVer":"1.0","command":"getAirconStat","deviceId":"1234567890ABCDEF","operatorId":"d2bc4571-1cea-4858-b0f2-34c18bef1901","timestamp":1649703587}'
deviceId seems to be android ID of the used phone. Can be random generated operatorId seems to be random generated. Can be random generated timestamp is unix epoch
Sending this json to the airco responds with data: { "airconId": "REMOVED", "airconStat": "AACyiKT/AAAAAAASCgAAAAAAAf////8sv4AEEAAkigAAiAAAAgAAAAAAAAOAIIr/gBCN/5QQAQBufw==", "logStat": 0, "updatedBy": "local", "expires": 1649704590, "ledStat": 1, "autoHeating": 0, "highTemp": "AB", "lowTemp": "66", "firmType": "WF-RAC", "wireless": { "firmVer": "010" }, "mcu": { "firmVer": "123" }, "timezone": "Europe/Amsterdam", "remoteList": [ "", "", "", "" ], "numOfAccount": 1 }
airconStat changes when settings are changed on airco.
- MakeBeaerApi.class defines buildup of api call paramstring1: local IP paramstring2: command (getDeviceInfo, getAirconStat, setAirconstat, deleteAccountInfo, setMetworkInfo, updateAccountInfo, updateFirmware)
- discovery works with AirconDiscovery.class by multicast broadcast _beaver._tcp.
- ResponseGetAirconStatEntity.class has AirconStat class
- ResponseAirconMApper.class and ResponseArconStartMapper.class contain mappings