Beste Tweakers,
In mijn vorige topic ben ik geholpen om over de eerste drempel te komen van de weg naar communicatie met mijn Ecovacs Deebot robot zuiger. Hier had ik problemen met het nabouwen van de authSign en later bleek er ook nog wat mis met de X509 en RSA. Nu dat allemaal goed loopt ben ik in staat de 3 stappen voor het verkrijgen van de XMPP (of Jabber) sleutel te doorlopen. Maar het lukt me alleen nog niet om echt in te loggen op de XMPP servers van Ecovacs...
Mijn functie voor het sturen van een commando tot nu toe: [link]
Als ik dit met mijn test code er door rammel:
0ed6edc2a12a716381650c81xxxxxxxx
nl_e096aadd525f3d563afb6f0bxxxxxxxx
BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
Array
(
[username] => 201802265a9437ee73aa7@ecouser.net
[password] => 0/a42ad27c/BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
[continent] => eu
[resource] => a42axxxx
[domain] => ecouser.net
[robot] => Array
(
[0] => E00010914176xxxxxxxx@107.ecorobot.net/atom
)
)
Array
(
[server] => msg-eu.ecouser.net
[port] => 5223
[username] => 201802265a9437ee73aa7@ecouser.net
[password] => 0/a42ad27c/BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
[resource] => a42axxxx
[domain] => ecouser.net
[vacAddr] => E00010914176xxxxxxxxx@107.ecorobot.net/atom
)
connect() start
1534616596 [INFO]: Connecting to tcp://msg-eu.ecouser.net:5223
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT:
1534616597 [VERBOSE]: Successfully sent 116 bytes.
processUntil() start
1534616597 [VERBOSE]: RECV:
1534616597 [VERBOSE]: RECV: PLAIN
1534616597 [DEBUG]: Calling features_handler
1534616597 [INFO]: Attempting Auth...
1534616597 [INFO]: Trying PLAIN (available : PLAIN)
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT: ADIwMTgwMjI2NWE5NDM3ZWU3M2FhN0BlY291c2VyLm5ldAAwL2E0MmFkMjdjL0JETnZxbGVEM01NaUV0bTVodTdwUnhraGV1bTlMUm53
1534616597 [VERBOSE]: Successfully sent 176 bytes.
1534616597 [VERBOSE]: RECV: auth error
1534616597 [DEBUG]: Calling sasl_failure_handler
1534616597 [ERROR]: Auth failed!
1534616597 [VERBOSE]: Disconnecting...
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT:
1534616597 [VERBOSE]: Successfully sent 16 bytes.
1534616597 [VERBOSE]: RECV:
Auth failed!
Ik probeer de code van wpietri (wpietri/sucks te gebruiken voor het bouwen van een IP-Symcon module voor deze stofzuigers. Ik probeer om in het XMPP deel van de code debug outputs in te bouwen om te zien wat er nou precies gebeurt. Maar volgens mij moet ik in dit geval echt de sleekxmpp lib in om dit zichtbaar te maken. Voor de XMPP in mijn php code gebruik ik XMPPHP en ik draai dit alles weg met PHP 7.2
Ik heb een test VM aan gemaakt met de "Sucks" code erop om het eens met wireshark te bekijken maar verder als de eerste twee handshakes kom ik niet omdat de rest encrypted is.
Iemand een idee hoe ik dit verder kan reversed engineren? Of heeft er iemand een idee wat er in mijn code fout gaat? Als ik alleen al in staat ben om de rouwe tekst uit die XMPP te trekken dan kan ik er zelf wel wat omheen bouwen.
Groeten Martijn
In mijn vorige topic ben ik geholpen om over de eerste drempel te komen van de weg naar communicatie met mijn Ecovacs Deebot robot zuiger. Hier had ik problemen met het nabouwen van de authSign en later bleek er ook nog wat mis met de X509 en RSA. Nu dat allemaal goed loopt ben ik in staat de 3 stappen voor het verkrijgen van de XMPP (of Jabber) sleutel te doorlopen. Maar het lukt me alleen nog niet om echt in te loggen op de XMPP servers van Ecovacs...
Mijn functie voor het sturen van een commando tot nu toe: [link]
PHP:
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
| function EcoVacsXMPP_SendCommand($XMPP, $robotNr, $command) { $set['server'] = 'msg-'.$XMPP['continent'].'.ecouser.net'; //'msg-'.$glb_continent.'.ecouser.net'; $set['port'] = 5223; $set['username'] = $XMPP['username']; //sucks DEBUG username used to login: 201802265a9437ee73aa7@ecouser.net $set['password'] = $XMPP['password']; //sucks DEBUG password used to login: 0/372d00ce/glcSomethingTBbzoppbndSRpTflNTpk1gDCAYLQv $set['resource'] = $XMPP['resource']; $set['domain'] = $XMPP['domain']; $set['vacAddr'] = $XMPP['robot'][$robotNr]; //self.vacuum['did'] + '@' + self.vacuum['class'] + '.ecorobot.net/atom' print_r($set); // Send: $conn = new XMPPHP_XMPP($set['server'], $set['port'], $set['username'], $set['password'], $set['resource'], $set['domain'], $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE); $conn->useEncryption(true); try { echo "connect() start "; $conn->connect(); echo "processUntil() start "; $conn->processUntil(array('session_start')); echo "presence() start "; $conn->presence(); $conn->message($set['vacAddr'], '<query xmlns="com:ctl"><ctl td="GetChargeState" />'); $conn->disconnect(); } catch (XMPPHP_Exception $e) { die($e->getMessage()); } return; // tijdelijk tot ik kan inloggen // Receive Answer $conn = new XMPPHP_XMPP($set['server'], $set['port'], $set['username'], $set['password'], $set['resource'], $set['domain'], $printlog = true, $loglevel = XMPPHP_Log::LEVEL_VERBOSE); //$conn = new XMPPHP_XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=true, $loglevel=XMPPHP_Log::LEVEL_INFO); $conn->autoSubscribe(); $vcard_request = array(); try { $conn->connect(); while(!$conn->isDisconnected()) { $payloads = $conn->processUntil(array('message', 'presence', 'end_stream', 'session_start', 'vcard')); foreach($payloads as $event) { $pl = $event[1]; print_r($pl); } } } catch(XMPPHP_Exception $e) { die($e->getMessage()); } } |
Als ik dit met mijn test code er door rammel:
PHP:
>>> Output:35
36
37
38
39
40
41
42
43
44
45
46
47
48
| EcoVacsHTTPS_Login($meta); //print_r($meta); echo $meta['accessToken'].' '; EcoVacsHTTPS_getAuthCode($meta); echo $meta['authCode'].' '; EcoVacsHTTPS_loginByItToken($meta); echo $meta['token'].' '; $XMPP = json_encode(EcoVacsHTTPS_GetDeviceList($meta)); print_r($XMPP); EcoVacsXMPP_SendCommand2($XMPP, 0, ''); |
0ed6edc2a12a716381650c81xxxxxxxx
nl_e096aadd525f3d563afb6f0bxxxxxxxx
BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
Array
(
[username] => 201802265a9437ee73aa7@ecouser.net
[password] => 0/a42ad27c/BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
[continent] => eu
[resource] => a42axxxx
[domain] => ecouser.net
[robot] => Array
(
[0] => E00010914176xxxxxxxx@107.ecorobot.net/atom
)
)
Array
(
[server] => msg-eu.ecouser.net
[port] => 5223
[username] => 201802265a9437ee73aa7@ecouser.net
[password] => 0/a42ad27c/BDNvqleD3MMiEtm5hu7pRxkhxxxxxxxx
[resource] => a42axxxx
[domain] => ecouser.net
[vacAddr] => E00010914176xxxxxxxxx@107.ecorobot.net/atom
)
connect() start
1534616596 [INFO]: Connecting to tcp://msg-eu.ecouser.net:5223
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT:
1534616597 [VERBOSE]: Successfully sent 116 bytes.
processUntil() start
1534616597 [VERBOSE]: RECV:
1534616597 [VERBOSE]: RECV: PLAIN
1534616597 [DEBUG]: Calling features_handler
1534616597 [INFO]: Attempting Auth...
1534616597 [INFO]: Trying PLAIN (available : PLAIN)
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT: ADIwMTgwMjI2NWE5NDM3ZWU3M2FhN0BlY291c2VyLm5ldAAwL2E0MmFkMjdjL0JETnZxbGVEM01NaUV0bTVodTdwUnhraGV1bTlMUm53
1534616597 [VERBOSE]: Successfully sent 176 bytes.
1534616597 [VERBOSE]: RECV: auth error
1534616597 [DEBUG]: Calling sasl_failure_handler
1534616597 [ERROR]: Auth failed!
1534616597 [VERBOSE]: Disconnecting...
1534616597 [VERBOSE]: Socket is ready; send it.
1534616597 [VERBOSE]: SENT:
1534616597 [VERBOSE]: Successfully sent 16 bytes.
1534616597 [VERBOSE]: RECV:
Auth failed!
Ik probeer de code van wpietri (wpietri/sucks te gebruiken voor het bouwen van een IP-Symcon module voor deze stofzuigers. Ik probeer om in het XMPP deel van de code debug outputs in te bouwen om te zien wat er nou precies gebeurt. Maar volgens mij moet ik in dit geval echt de sleekxmpp lib in om dit zichtbaar te maken. Voor de XMPP in mijn php code gebruik ik XMPPHP en ik draai dit alles weg met PHP 7.2
Ik heb een test VM aan gemaakt met de "Sucks" code erop om het eens met wireshark te bekijken maar verder als de eerste twee handshakes kom ik niet omdat de rest encrypted is.
Iemand een idee hoe ik dit verder kan reversed engineren? Of heeft er iemand een idee wat er in mijn code fout gaat? Als ik alleen al in staat ben om de rouwe tekst uit die XMPP te trekken dan kan ik er zelf wel wat omheen bouwen.
Groeten Martijn