Kheys
410
modifications
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://apktool.org/ apktool] | |||
* [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 | 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. | ||
'' | ''Extrait de l'interface JvApiService'' | ||
<pre> | <pre> | ||
@POST("contents/{contentID}/comments") | @POST("contents/{contentID}/comments") | ||
Ligne 37 : | Ligne 37 : | ||
</pre> | </pre> | ||
=== | Interface complète disponible [https://pastebin.com/WiQiutAf ici]. | ||
La classe '' | |||
=== 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 | 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 | String m14428b = CryptoUtils.m14428b("d84e9e5f191ea4ffc39c22d11c77dd6c", sb2.toString()); | ||
return "PartnerKey=550c04bf5cb2b, Signature=" + | 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 == | ||