Table des matières
Hello barbie
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
- Le jouet chez toytalk : https://www.toytalk.com/product/hello-barbie/
- Le soft Android pour configurer hello barbie : https://apkpure.com/hello-barbie-companion-app/com.toytalk.hellobarbie
- Hello Barbie Security: Part 1 - Teardown http://www.somersetrecon.com/blog/2015/11/20/hello-barbie-security-part-1-teardown
- Hello Barbie Security: Part 2 - Analysis http://www.somersetrecon.com/blog/2016/1/21/hello-barbie-security-part-2-analysis
- Hello Barbie Initial Security Analysis https://static1.squarespace.com/static/543effd8e4b095fba39dfe59/t/56a66d424bf1187ad34383b2/1453747529070/HelloBarbieSecurityAnalysis.pdf
Sources d’inspirations
- Reverse engineering and removing Pokémon GO’s certificate pinning : Comment patcher un APK (ici Pokemon GO) pour contourner une histoire de « key pinning ».