« Documentation de l'API Jeuxvideo.com » : différence entre les versions

Aucun résumé des modifications
Ligne 11 : Ligne 11 :
=== Mise en place du processus de décompilation ===
=== Mise en place du processus de décompilation ===
Pour pouvoir décompiler l'application mobile, vous aurez besoin des outils suivants :
Pour pouvoir décompiler l'application mobile, vous aurez besoin des outils suivants :
# [https://www.java.com/en/download/ Java 8 ou plus]
* [https://www.java.com/en/download/ Java 8 ou plus]
# [https://apktool.org/ apktool]
* [https://apktool.org/ apktool]
# [https://github.com/skylot/jadx JADX]
* [https://github.com/skylot/jadx JADX]


Il faut également le fichier ''.apk'' de l'application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier ''.xapk'' et appliquer le processus de décompilation sur le fichier ''.apk'' principal).
Il faut également le fichier ''.apk'' de l'application mobile, téléchargeable [https://apkpure.fr/fr/jeuxvideo-com-pc-et-consoles/com.jeuxvideo ici] (privilégiez les versions supérieures à la 5.4.3, sans quoi vous devrez extraire le fichier ''.xapk'' et appliquer le processus de décompilation sur le fichier ''.apk'' principal).
Ligne 26 : Ligne 26 :


=== JvApiService ===
=== JvApiService ===
Une fois le code Java disponible, on peut ouvrir la classe '''JvApiService''' (située dans ''com.jeuxvideo.api.web''), qui contient tous les ''endpoints''. L'application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l'API, et la classe contient tous les ''endpoints'' formels de l'API.
Une fois le code Java disponible, on peut ouvrir l'interface '''JvApiService''' (située dans ''com.jeuxvideo.api.web''), qui contient tous les ''endpoints''. L'application utilise le bibliothèque [https://square.github.io/retrofit/ Retrofit 2.x] pour gérer l'API, et la classe contient tous les ''endpoints'' formels de l'API.


''Exemple de code dans l'interface '''JvApiService'''''
''Extrait de l'interface JvApiService''
<pre>
<pre>
     @POST("contents/{contentID}/comments")
     @POST("contents/{contentID}/comments")
Ligne 37 : Ligne 37 :
</pre>
</pre>


=== ApiLogin ===
Interface complète disponible [https://pastebin.com/WiQiutAf ici].
La classe ''com.jeuxvideo.utils.'''ApiLogin''''' (nom de la classe donné arbitrairement car perdu lors de la compilation), permet de déduire la valeur du ''header Jvc-Authorization'' à envoyer dans les requêtes à l'API.
 
=== SigningInterceptor ===
La classe '''SigningInterceptor''' (du package ''com.jeuxvideo.api.utils''), permet de déduire la valeur du ''header Jvc-Authorization'' à envoyer dans les requêtes à l'API.
<pre>
<pre>
     public static String f(String str, String str2, String str3, String str4, String str5) {
     public static String m27149f(String str, String str2, String str3, String str4, String str5) {
         StringBuilder sb2 = new StringBuilder();
         StringBuilder sb2 = new StringBuilder();
         sb2.append("550c04bf5cb2b\n");
         sb2.append("550c04bf5cb2b\n");
Ligne 55 : Ligne 57 :
         }
         }
         sb2.append(str5);
         sb2.append(str5);
         String b10 = j5.f.b("d84e9e5f191ea4ffc39c22d11c77dd6c", sb2.toString());
         String m14428b = CryptoUtils.m14428b("d84e9e5f191ea4ffc39c22d11c77dd6c", sb2.toString());
         return "PartnerKey=550c04bf5cb2b, Signature=" + b10 + ", Timestamp=" + str;
         return "PartnerKey=550c04bf5cb2b, Signature=" + m14428b + ", Timestamp=" + str;
     }
     }
</pre>
</pre>
Classe complète disponible [https://pastebin.com/sMpiYDqQ ici].


=== JVApi et UserAgentInterceptor ===
=== JVApi et UserAgentInterceptor ===
''JVApi'' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) et ''UserAgentInterceptor'' (du package ''com.jeuxvideo.api.utils'') permettent de déduire le ''user-agent'' et la valeur des ''headers'' contenant des informations sur la version et la plateforme.
'''JVApi''' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) et '''UserAgentInterceptor''' (du package ''com.jeuxvideo.api.utils'') permettent de déduire le ''user-agent'' et la valeur des ''headers'' contenant des informations sur la version et la plateforme.


=== JVApiManager ===
=== JVApiManager ===
La classe ''JVApiManager'' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) est celle qui envoie les requêtes à l'API. Elle permet de savoir quelles variables sont passées à la requête vers tel ''endpoint''.
La classe '''JVApiManager''' (du package arbitrairement nommé ''p379s3'' car nom perdu lors de la compilation) est celle qui envoie les requêtes à l'API. Elle permet de savoir quelles variables sont passées à la requête vers tel ''endpoint''.
 
Classe complète disponible [https://pastebin.com/hDWMZwbq ici].


<div id="jvc-auth-header"></div>
<div id="jvc-auth-header"></div>
=== Le cas Jvc-Auth-Header ===
=== Le cas Jvc-Auth-Header ===
''Jvc-Auth-Header'' est le ''header'' envoyé à l'''endpoint'' nommé ''accounts/register''. Cet ''endpoint'' est crucial en ce qu'il représente l''''unique manière de créer un compte JVC sans le système reCaptcha'''.
'''Jvc-Auth-Header''' est le ''header'' envoyé à l'''endpoint'' nommé ''accounts/register''. Cet ''endpoint'' est crucial en ce qu'il représente l''''unique manière de créer un compte JVC sans le système reCaptcha'''.


Il est actuellement impossible que la requête soit validée par l'API sans ce ''header''.
Il est actuellement impossible que la requête soit validée par l'API sans ce ''header''.
Ligne 77 : Ligne 83 :


<div id="interception"></div>
<div id="interception"></div>
== Interception du trafic ==
== Interception du trafic ==


Kheys
410

modifications