Hello barbie

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Reverse Hello Barbie

Projet créatif autour de la nouvelle poupée de matel qui parle via l'échange avec un serveur Toytalk :

Tech

  • Mac adress Barbie 1 : 28:c2:dd:bd:43:0e
  • compte chez toytalk : 01azer@free.fr - pwd : ?!******01

Analyse

Récupération de l’identifiant du compte associé à la Barbie (tentative)

Pour récupérer (ou tenter de) l’identifiant du compte associé à la Barbie (« account_id »), il faut basculer la Barbie en mode « access point » (appuyer quelques secondes sur le bouton « power » et sur la ceinture). Il faut ensuite se connecter au réseau Wi-Fi mis en place par la Barbie et se connecter à l’adresse https://192.168.10.1/. Sauf que ça ne marche pas. Il est nécessaire de s’authentifier à l’aide d’un certificat x509 (authentification HTTPS mutuelle). Par chance, on peut retrouver un bout de ce certificat dans l’application Android de Barbie.

Pour ce faire, on récupère l’APK (lien dans les ressources en ligne), on le décompresse, on regarde ce qu’on a récupéré, on lance un peu de décompilation sur le « byte-code » DEX et on regarde enfin le code :

$ unzip hello Barbie Companion App_v1.3_apkpure.com.apk

On a trouvé notre certificat x509 au format PKCS12, w00t

$ ls -l assets/toytalk_barbie_app_identity.p12

Bon, en fait, non. Il nous manque le mot de passe pour déchiffrer le fichier

$ openssl pkcs12  -nocerts -in assets/toytalk_barbie_app_identity.p12 -out toto.pem 
Enter Import Password:

On peut donc essayer de décompiler le « DEX » (byte-code Dalvik/Android). On utilise ici dex2jar-2.0.zip et jd-gui-1.4.0.jar

$ d2j-dex2jar.sh APK/classes.dex
$ java -jar jd-gui-1.4.0.jar classes-dex2jar.jar

Et là, on peut naviguer dans le code Java. On retrouve notamment dans le fichier com/toytalk/barbie/HelloBarbieAppController.class le bout de code suivant :

  protected void InitializeAppInfoDict(Map<String, String> paramMap, Activity paramActivity)
  {
    super.InitializeAppInfoDict(paramMap, paramActivity);
    paramMap.put("hockey_app_id", "3dbbf69259041c9939d88369f543e5af");
    paramMap.put("toytalk_ssl_client_certificate", "toytalk_barbie_app_identity.p12");
    paramMap.put("toytalk_ssl_cl_cert_alg", "cl_cert_alg_sha1");
    paramMap.put("toytalk_ssl_cl_cert_input", "w$0dsd9gr4n{kj-;#)21zez3y5osj3qlh1pqgelpc8");
  }

Victoire ? Presque, sauf que le mot de passe indiqué, « w$0dsd9gr4n{kj-;#)21zez3y5osj3qlh1pqgelpc8 » ne marche pas…

En fait, il semblerait que ce mot de passe soit fourni à une bibliothèque écrite en C, libToyTalk.so, que l’on retrouve dans l’APK, dans le fichier lib/armeabi-v7a/libToyTalk.so.

Ressources en ligne

Sources d’inspirations