Récemment, j’ai lu un article sur frandoid qui expliquait que certains profitaient de promotions sur les téléphones Xiaomi en cumulant des points sur l’application MI Store. L’astuce consistait à cliquer sur un icone 1 fois chaque jours de l’année. N’ayant pas envie de faire cette tâche rébarbative, mais souhaitant quand même bénéficier de la promotion, je me suis lancé dans l’analyse des trames de l’application. Voyons ensemble comment ca fonctionne.
Comment fonctionne ce genre d’applications ?
En général, une application Android envoie des infos au serveur du genre + 50 points pour l’utilisateur X et le serveur rajoute les points en base de données. L’application masque ensuite l’icone pour éviter un nouveau clic. Si c’est mal fait, alors rejouer la requête rajoutera de nouveaux les points, et si c’est bien fait, alors il y aura un contrôle coté serveur pour bloquer cette nouvelle requête. Notre objectif est de nous poser entre l’application et le serveur et d’intercepter les requêtes pour voir ce qui est envoyé. On appelle cette technique : MITM (man in the middle).
Préparation du PC :
Un PC sous linux est bien plus simple à configurer, mais j’imagine que cela doit aussi fonctionner pour Windows, ou Mac.
On commence par télécharger l’apk d’origine via le site
https://m.apkpure.com/fr/mi-store/com.mi.global.shop (qu’on renomme mi.apk)
Puis on installe le SDK Android, et l’application MITM Proxy (il crééra automatiquement un certificat).
apt://android-sdk
apt-get install mitmproxy
ifconfig (pour récupérer l’ip du PC, on en aura besoin ensuite)
mitmproxy
Ensuite, il faut modifier l’application d’origine pour la signer numériquement avec un certificat à nous. Pour cela, on fera:
git clone https://github.com/levyitay/AddSecurityExceptionAndroid.git
cd AddSecurityExceptionAndroid
./addSecurityExceptions.sh mi.apk -b /usr/bin/ -k ~/.android/debug.keystore
Le fichier debug.keystore a été créé par mitmproxy. Normalement, si tout se passe bien, à ce stade, vous devriez avoir un fichier nommé mi_new.apk .
Préparation du téléphone:
On branche le téléphone en USB et on commence par autoriser l’installation d’applications de sources inconnues, ainsi que le mode debug. L’application d’origine (ici MI Store) doit avoir été désinstallée. On lance:
adb devices
Notre téléphone devrait apparaitre. Il va falloir lui envoyer/installer le certificat généré précédemment.
Copier le fichier ~/.mitmproxy/mitmproxy-ca-cert.pem ainsi que le mi_new.apk sur son google drive
ou faire la manipulation suivante
adb push ~/.mitmproxy/mitmproxy-ca-cert.pem /sdcard/
adb push ~/.mitmproxy/mi_new.apk /sdcard/
Ensuite, aller dans Certificat > Certificat CA , et Installer le fichier mitmproxy-ca-cert.pem
On peut maintenant installer notre nouveau mi_new.apk, et préparer la config réseau.
Pour cela, il faut bloquer les données mobiles, et activer le wifi.
Modifier les paramètres réseaux du wifi en ajoutant un proxy sur l’ip du PC et sur le port 8080. Ca y’est, vous devriez voir toutes les requêtes passer via le PC !
Analyse des trames:
Voici ce qu’on peut observer:
On voit par exemple que souvent on lance des requêtes qui sont du type ?taskId=11 ou ?taskId=12 pour ajouter les points au départ, ou encore getcoupons pour gagner les points quotidien.
Je comprends mieux comment Cocadmin avait fait son analyse des flux TikTok.
Conclusion:
Cet article complète un peu le précédent qui expliquait comment modifier un apk. Au final, l’application Xiaomi semble bien coder, et le fait de rejouer les requêtes n’a pas donné grand chose. Il va falloir que je creuse un peu plus profondément, et peut être qu’un jour, je trouverais quelque chose à exploiter. Merci à ce tutoriel qui m’a bien aiguillé pour en arriver là.
Au final, même si je sors bredouille de mes recherches, je peux maintenant observer chacune des applications et voir ce qui est envoyé, et cela me permet de mieux me rendre compte de comment marche le monde des APK et de mieux ajuster les urls à bloquer pour les trackings publicitaires.