Android / Étude de cas expliquée / 18 min de lecture
Aegis : pourquoi le code change-t-il à 60 secondes ?
Une application d’authentification semble se résumer à six chiffres et un compte à rebours. Suivez l’analyse documentée d’Aegis avec REA, puis essayez une petite version avec une horloge que vous contrôlez.
Sur cette page
Retrouver un calcul de code fondé sur le temps, le reproduire dans le navigateur et vérifier le passage entre deux périodes de 30 secondes.
Avant de commencerLa démonstration fonctionne immédiatement. Pour reproduire l’inspection de l’APK, il vous faut REA, Aegis v3.4.3, un JDK 17+ complet et le moteur jadx présenté dans notre guide Android.
01. Passez de 59 à 60 secondes
Cliquez sur les deux boutons de temps ci-dessous. Avec la clé de test publique fixée, 59 secondes donnent 287082; 60 secondes donnent 359152. Revenez à 30 secondes : le premier code réapparaît, car 30 et 59 appartiennent à la même période.
CLÉ DE TEST PUBLIQUE · SHA-1 · 6 CHIFFRES
Temps Unix 59s Compteur 1
59 ÷ 30 → compteur 1. À 60 secondes, le compteur passe à 2.
Nouvelle implémentation pédagogique utilisant la clé de test publique du RFC 6238. Aucun secret de compte. Aucun appel à REA dans votre navigateur.
Ces valeurs utilisent les secondes écoulées depuis l’époque Unix, pas les secondes affichées sur votre horloge. La démonstration implémente le TOTP standard avec la clé ASCII publique 12345678901234567890. Elle ne lit aucun coffre Aegis et n’utilise aucun secret de compte.
02. Trouvez la méthode fondée sur le temps dans l’APK
Le rapport officiel REA a inspecté Aegis v3.4.3 avec REA 6.1.0. Pour suivre la même piste, obtenez cette version, notez son empreinte et recherchez la classe TOTP. Les commandes ci-dessous utilisent REA 6.4.0.
npx -y [email protected] inspect-android-package "/absolute/path/aegis-v3.4.3.apk" --json
npx -y [email protected] search-android-classes "/absolute/path/aegis-v3.4.3.apk" Totp --jsonUtilisez le nom exact de classe renvoyé pour inspecter ses membres. La surcharge de getOtp qui accepte un horodatage est utile, car elle permet de fournir le temps directement. Sélectionnez-la dans l’inventaire au lieu de supposer que la première méthode portant ce nom convient.
Utilise REA pour inspecter la classe TotpInfo dans /absolute/path/aegis-v3.4.3.apk. Sélectionne la surcharge de getOtp qui accepte un horodatage. Suis ses appels à travers l’encodage du compteur, HMAC, la troncature et le formatage décimal. Retrouve la période, la fonction de hachage et le nombre de chiffres par défaut. Cite chaque méthode inspectée et distingue les valeurs par défaut des réglages propres à chaque compte. N’exécute pas l’APK.03. Retrouvez le calcul complet
Trouver une division par 30 n’est que le début. Le rapport du projet relie cinq étapes : ramener le temps à un compteur par arrondi inférieur ; encoder ce compteur sur huit octets en ordre gros-boutiste ; calculer HMAC avec la clé ; sélectionner une valeur positive sur 31 bits dans le hachage ; la ramener à six chiffres en conservant les zéros initiaux.
Suivez les appels de méthodes renvoyés au lieu de vous fier à des noms de code familiers. Dans la version inspectée, l’optimisation a placé les fonctions auxiliaires de génération sous kotlin.ExceptionsKt. Le rapport distingue aussi les valeurs par défaut — SHA-1, six chiffres et 30 secondes — des réglages propres à chaque compte.
04. Reconstruisez la règle et testez les limites
Implémentez indépendamment le comportement retrouvé, puis utilisez des vecteurs de référence publics. Testez juste avant et après un changement de période, un résultat commençant par zéro et des sorties à six et huit chiffres. Deux périodes adjacentes n’ont pas nécessairement des codes différents, même si c’est le cas dans cet exemple.
Écris une petite implémentation TOTP indépendante de ce comportement. Utilise uniquement les clés de test publiques du RFC 6238. Vérifie les six horodatages de référence SHA-1 à huit chiffres et leurs restes à six chiffres. Teste les limites 29/30 et 59/60 et préserve les zéros initiaux. Explique tout écart avec la méthode inspectée ; ne prétends pas reconstruire le coffre ou l’application Android.| Temps Unix | Compteur | Résultat à 6 chiffres | Ce que cela vérifie |
|---|---|---|---|
| 29 | 0 | 755224 | Fin de la première période |
| 30 | 1 | 287082 | Passage à la période suivante |
| 59 | 1 | 287082 | Même période |
| 60 | 2 | 359152 | Compteur suivant |
| 1111111109 | 37037036 | 081804 | Zéro initial conservé |
05. Comprenez ce que signifient « 133 vérifications »
Le projet indique une concordance sur 133 entrées entre un banc de test JVM assemblé à partir de méthodes décompilées sélectionnées et des reconstructions indépendantes. Il n’a pas lancé l’APK original. Cela étaye le calcul choisi, pas une équivalence complète de l’application.
Pour ce site, nous avons écrit une démonstration WebCrypto distincte et vérifié les six vecteurs SHA-1 publiés avec deux longueurs de code, ainsi que chaque seconde entière de 0 à 120, face à une implémentation HMAC Node séparée. Nous n’avons pas reproduit l’investigation originale de l’APK ni son banc de test Java.
Sources : Rapport d’analyse Aegis de REA · Vecteurs de test RFC 6238. Démonstration et explication rédigées indépendamment. Aucun code source de l’application Aegis n’est redistribué ici.
Vous découvrez l’outil ? Qu’est-ce que REA ? · Comment nous vérifions nos guides