Premessa: dopo 2 mesi di totale mancanza di notifiche push sull’applicazione per cellulare, motivazione principale per la quale ho iniziato questo progettino, dal primo marzo sono tornate a funzionare. Ovvio. Ma comunque ho iniziato, vediamo dove si riesce ad arrivare.

Login

L’applicazione, durante tutto il dialogo col server setta i seguenti headers

x-xiaoyi-appVersion:    windows;10;0
User-Agent: YIHomePCClient/1.0.0.0_201811201000 (Windows 10.0)
Connection: Keep-Alive
Accept-Encoding: gzip
Accept-Language: it-IT,en,*

E per prima cosa fa una chiamata GET all’endpont: https://api.eu.xiaoyi.com/v4/users/login con parametri :

  • seq = 1
  • account= <nome account>
  • password= <la password codificata con algoritmo sconosciuto>
  • dev_id= <null>
  • dev_name=windows
  • dev_type=10.0
  • dev_os_version=Windows

Il primo obbiettivo è quindi capire come viene codificata la password. A prima vista serve un URL decode ( https://www.urldecoder.org/ ) e si ottiene quella che sembra essere una stringa in base64. Piccolo problema: decodificando il base64 non ottengo la password che mi aspetto. Anzi si ottiene una stringa più lunga, forte indizio di una effettiva codifica o hashing.

La lunghezza, di 16 byte, sembra compatibile con l’hash in MD5 ed esclude algoritmi di hashing più recenti (SHA*), ma il risultato dell’hash della mia password non è uguale al dato che mi ritrovo. Che ci abbiano aggiunto del sale?

Purtroppo anche una ricerca nell’archivio di MD5Online non ha dato risultato.

Il risultato della chiamata (al momento comunque inutile) è un JSON:

{
   “code”:”20000″,
   “data”:{
      “birthday”:””,
     “token_secret”:”<token1>”,
      “img”:””,
      “flag”:true,
      “name”:”simoneb0sh”,
      “mobile”:””,
      “last_name”:””,
     “userid”:<useridnumerico>,
      “first_name”:””,
     “account”:”<nomeaccount>”,
     “email”:”<emailaccount>”,
     “token”:”<token2>”
   }
}

Nella prossima puntata qualche prova per vedere come diverse password vengono codificate e se la codifica cambia nel tempo, indice di una “salatura” variabile in funzione di data e ora.

Se la codifica invece rimanesse stabile, pur non sapendo come funziona si potrebbe ignorare il problema e andare avanti comunque, anche se l’utilizzo del client che si andrebbe a realizzare sarebbe molto più complesso.