======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 : {{ youtube>QEDk2M2_tH4 }} ===== 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/| 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 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 Forensics http://files.sans.org/summit/Digital_Forensics_and_Incident_Response_Summit_2016/PDFs/Hello-Barbie-Forensics-Andrew-Blaich-and-Andrew-Hay.pdf * Hello Barbie Initial Security Analysis https://static1.squarespace.com/static/543effd8e4b095fba39dfe59/t/56a66d424bf1187ad34383b2/1453747529070/HelloBarbieSecurityAnalysis.pdf ==== Sources d’inspirations ==== * [[https://eaton-works.com/2016/07/31/reverse-engineering-and-removing-pokemon-gos-certificate-pinning/|Reverse engineering and removing Pokémon GO’s certificate pinning]] : Comment patcher un APK (ici Pokemon GO) pour contourner une histoire de « //key pinning// ». {{tag>bj net_art ia}}