« Documentation de l'API Jeuxvideo.com » : différence entre les versions
user: d2adb2d (?) (Ask for list of bionicle sets) |
m (Révocation des modifications de 159.224.160.157 (discussion) vers la dernière version de Kuji) |
||
Ligne 1 : | Ligne 1 : | ||
L''''API de [[Jeuxvideo.com]]''', utilisée à l'origine par les applications mobiles de Jeuxvideo.com, permet de développer plus facilement des applications, sites web, et autres scripts en rapport avec Jeuxvideo.com. | |||
Elle est au format XML, ce qui fait qu'elle est plus facile à parser, mais aussi plus rapide à charger qu'une page web normale. | |||
== Identification == | |||
< | L'API utilise le nom de domaine [http://ws.jeuxvideo.com/ ws.jeuxvideo.com]. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique). | ||
Tous ces identifiants fonctionnement actuellement, et je n'ai pas repéré de page semblant afficher un comportement différent selon. | |||
{| class="wikitable" | |||
| | |||
! scope="col" | Utilisateur | |||
! scope="col" | Mot de passe | |||
|- | |||
! scope="row" | Android 1.0 | |||
| appandr | |||
| e32!cdf | |||
|- | |||
! scope="row" | Android 2.0.3 | |||
| app_and_gnw | |||
| FC?4554? | |||
|- | |||
! scope="row" | Android 2.5 | |||
| app_and_ms | |||
| D9!mVR4c | |||
|- | |||
! scope="row" | Android MP | |||
| app_ag_jvmp | |||
| LXnb45=d# | |||
|- | |||
! scope="row" | Android Tab | |||
| nex12sz | |||
| GT4!V2cT | |||
|- | |||
! scope="row" | iPhone | |||
| app_ios_nw | |||
| W!P45-R | |||
|- | |||
! scope="row" | iPad | |||
| ip45de | |||
| XpD5!FT | |||
|} | |||
== Utilisation == | |||
=== Connexion === | |||
Pour vous connecter, utilisez la page [http://ws.jeuxvideo.com/mon_compte/connexion.php mon_compte/connexion.php]. | |||
Voici les paramètres à envoyer (GET ou POST) : | |||
{| class="wikitable alternance centre plainlinks" | |||
! scope="col" | Paramètre | |||
! scope="col" | Valeur | |||
|- | |||
| newnom | |||
| Le pseudo de l'utilisateur. | |||
|- | |||
| stamp | |||
| Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l'heure où la requête est envoyée. | |||
|- | |||
| hash | |||
| Un hash MD5 sous la forme :<br>md5(pseudo + motDePasse + "OpX234" + stamp)<br>''OpX234'' est un [http://en.wikipedia.org/wiki/Salt_(cryptography) salt]. | |||
|} | |||
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie ''wenvjgol'', que vous devrez utiliser pour poster sur les forums et utiliser les messages privés. | |||
Pour information, ''wenvjgol'' signifie ''logjvnew'' à l'envers, et c'est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années. | |||
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant ''Cisla'' par le pseudo ou bien l'adresse e-mail) : | |||
[http://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla http://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=''Cisla''] | |||
=== Jeux, astuces, news... === | |||
{| class="wikitable alternance centre" | |||
! scope="col" | URL | |||
! scope="col" | Description | |||
|- | |||
| 00.machines_version.xml<br>00.version_tablette.xml | |||
| Dernière version de l'application, informations sur la publicité, liste des consoles | |||
|- | |||
| 01.flux_jeux_nouveautes.xml<br>01.flux_jeux_prochainement.xml | |||
| Listes de jeux | |||
|- | |||
| 01.jeux/''21963''.xml<br>01.jeux/details/''21963''.xml<br>01.jeux/videos/''21963''.xml<br>01.jeux/screen/''21963''.xml<br>03.preview/''43689''.xml<br>03.test_complet/''9813''.xml<br>01.jeux/news/''21963''.xml<br>05.jeu_astuce/''41030''.xml<br>05.astuce/''33258''.xml<br>01.jeux/screen_ast/''38024''.xml | |||
| Informations sur le jeu (le nombre correspond à l'id) | |||
|- | |||
| 03.dossier/''18270''.xml<br>03.dossier/''18270''/''1''.xml | |||
| Un dossier : ''18270'' est l'id du dossier, ''1'' est la page (si vous n'en mettez pas, vous avez le sommaire) | |||
|- | |||
| 02.flux_news.xml<br>02.flux_news-''4''.xml | |||
| La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu'à 9) | |||
|- | |||
| 03.flux_articles_tests.xml<br>03.flux_articles_tests-''4''.xml<br>03.flux_articles_apercus.xml<br>03.flux_articles_apercus-''4''.xml<br>03.flux_articles_dossier.xml<br>03.flux_articles_dossier-''4''.xml<br>04.flux_videos_cliq.xml<br>04.flux_videos_cliq-''4''.xml<br>04.flux_videos_gaming.xml<br>04.flux_videos_gaming-''4''.xml<br>04.flux_videos_autres.xml<br>04.flux_videos_autres-''4''.xml<br>05.flux_astuces.xml<br>05.flux_astuces-''4''.xml<br>04.flux_videos_chroniques.xml<br>04.flux_videos_chroniques-''4''.xml<br>04.flux_toutes_les_videos.xml<br>04.flux_toutes_les_videos-''4''.xml | |||
| Même chose pour les derniers articles, tests, astuces et aperçus | |||
|- | |||
| 02.news/''1234''.xml<br>02.news_screen/''1234''.xml | |||
| Voir une news (le nombre correspond à l'id) | |||
|- | |||
| ean.php?ean=''0045496830144'' | |||
| Voir le jeu associé au code-barre (EAN) 0045496830144 | |||
|- | |||
| forums_index.xml | |||
| Liste des forums généraux | |||
|- | |||
| search_n/''mario''<br>search/''mario''<br>search_sug/''mario''<br>search_forums/''mario''<br>search_forums_sug/''mario'' | |||
| Effectuer une recherche dans le nom des jeux ou des forums | |||
|- | |||
| tab_suggest_blocs.xml<br>tab_suggest_forums.xml | |||
| ''À compléter'' | |||
|- | |||
| cgi-bin/liste.cgi | |||
| ''À compléter'' | |||
|} | |||
=== Forums === | |||
Pour les forums, les URL sont les mêmes que pour JVC, à part que : | |||
* Le .htm est transformé en .xml | |||
* Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com | |||
* La chaîne de caractères à la fin de l'URL (comme ''blabla-15-18-ans'' ou ''nom-du-topic'') est remplacée par un 0 (sauf pour la recherche). | |||
Par exemple :<br> | |||
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm<br> | |||
Devient :<br> | |||
http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml | |||
Exemples d'URL : | |||
{| class="wikitable alternance centre" | |||
! scope="col" | URL | |||
! scope="col" | Description | |||
|- | |||
| http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml | |||
| La liste des sujets | |||
|- | |||
| http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml | |||
| Rechercher « cactus » dans le titre des topics | |||
|- | |||
| http://ws.jeuxvideo.com/forums/1-50-128244545-1-0-1-0-0.xml | |||
| Un topic | |||
|- | |||
| http://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml | |||
| Formulaire pour créer un topic | |||
|- | |||
| http://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml | |||
| 10 derniers messages d'un topic + formulaire | |||
|- | |||
| http://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml | |||
| Formulaire de réponse à un topic | |||
|- | |||
| http://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi | |||
| Envoyer un message (avec les données POST) | |||
|- | |||
| http://ws.jeuxvideo.com/profil/cisla.xml | |||
| Voir une CDV | |||
|} | |||
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise ''params_form'', vous devez ajouter le paramètre ''yournewmessage'' qui contient le message et ''newsujet'' qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d'envoyer les données POST à la page ''forums.cgi''. En cas de captcha à gérer, vous devez répéter l'opération à partir des informations qu'on vous envoie en réponse, avec la solution du captcha en paramètre ''code''. | |||
Vous devez être connecté (envoyer le cookie ''wenvjgol'') pour récupérer et envoyer un formulaire. | |||
Le même formulaire peut aussi bien être envoyé au ''forums.cgi'' de ws.jeuxvideo.com qu'à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC. | |||
=== Messages privés === | |||
L'id de l'utilisateur mentionnée ci-dessous correspond à la partie du cookie ''wenvjgol'' qui se trouve avant le premier "$". | |||
Une fois connecté, vous devez envoyer le cookie ''wenvjgol'' à chaque requête. | |||
{| class="wikitable alternance centre" | |||
! scope="col" | URL | |||
! scope="col" | Description | |||
|- | |||
| jvmp.xml | |||
| Dernière version de l'application, liste des consoles et des smileys, lien vers la charte, pub activée ou non | |||
|- | |||
| messages-prives/connexion_ws.php | |||
| Les paramètres sont les mêmes que pour la connexion depuis ''mon_compte/connexion.php'', décrite [[#Connexion|plus haut]]. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP. | |||
|- | |||
| messages-prives/boite-reception_ws.php | |||
| Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
|- | |||
| messages-prives/envoyes_ws.php | |||
| Permet de connaître la liste des messages envoyés. Paramètre à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
|- | |||
| messages-prives/message_ws.php | |||
| Permet de lire le contenu d'un message privé. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''id_discussion'' : id de la discussion | |||
* ''nb_clic'' : le nombre de fois où l'utilisateur a cliqué sur « Voir les messages précédents » | |||
* ''last_position_message'' : Si ce paramètre vaut 0, les 5 derniers messages sont affichés. Sinon, les 10 messages les plus anciens en partant du ''x''<sup>ème</sup> sont affichés, la numérotation débutant à partir de 0. | |||
|- | |||
| messages-prives/nouveau_ws.php | |||
| Permet d'envoyer un nouveau message privé. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''all_dest'' : les destinataires, séparés pas des point-virgules | |||
* ''sujet'' : le titre du MP | |||
* ''yournewmessage'' : le contenu du MP | |||
* ''tmp'' : le timestamp actuel | |||
* ''control'' : md5("k_ys4+a]x" + idUtilisateur + "j6A=d?6-W*-" + timestamp + "z_.Im") | |||
Il se peut également que vous ayez à gérer un code de confirmation. | |||
|- | |||
| messages-prives/repondre_ws.php | |||
| Permet de répondre à un message privé. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''id_discussion'' : id de la discussion | |||
* ''yournewmessage'' : le contenu du message | |||
* ''tmp'' : le timestamp actuel | |||
* ''control'' : md5("vx*96-dP" + timestamp + "8e63ddO_" + idUtilisateur + "al)orc9W") | |||
* ''box'' : 1 | |||
Il se peut également que vous ayez à gérer un code de confirmation. | |||
|- | |||
| messages-prives/suggest_pseudo_ws.php | |||
| Liste quelques pseudos qui commencent par ce que l'utilisateur est en train de taper. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''search'' : ce que l'utilisateur est en train de taper | |||
|- | |||
| messages-prives/indesirable_ws.php | |||
| Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
|- | |||
| messages-prives/add_indesirable_ws.php | |||
| Permet d'ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur actuel | |||
* ''pseudo'' : pseudo de l'utilisateur | |||
* ''id_user_indesirable'' : id de l'utilisateur à ajouter en indésirable | |||
* ''pseudo_indesirable'' : pseudo de l'utilisateur à ajouter en indésirable | |||
* ''time_indesirable'' : le timestamp actuel | |||
* ''key_indesirable'' : md5("5d*" + timestamp + "v1S{" + idIndesirable + "I,5|S9z)" + pseudoIndesirable + "52Sx69,") | |||
|- | |||
| messages-prives/del_indesirable_ws.php | |||
| Permet d'enlever un utilisateur des indésirables. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur actuel | |||
* ''id_user_indesirable'' : id de l'utilisateur à enlever des indésirables | |||
|- | |||
| messages-prives/info_alerte_ws.php | |||
| Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur qui fait la DDB | |||
* ''id_message'' : id du message concerné | |||
|- | |||
| messages-prives/alerte_ws.php | |||
| Permet d'effectuer une DDB (ce qui est inutile, étant donné qu'elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur qui fait la DDB | |||
* ''pseudo'' : pseudo de l'utilisateur | |||
* ''motif'' : le motif, par exemple ''Piratage'' (les mêmes motifs que dans les MP sur JVC normal) | |||
* ''id_message'' : id du message concerné | |||
* ''id_discussion'' : id de la discussion concernée | |||
* ''time_alerte'' : timestamp actuel | |||
* ''key_alerte'' : md5("v6dE{" + idDiscussion + "d96/" + idMessage + "mvn85Qa" + timestamp + "auxarmeheuuuuuuu") | |||
|- | |||
| messages-prives/connexion_valid_ws.php | |||
| Permet d'afficher le nombre de messages non-lus ainsi que l'URL de l'avatar. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''pseudo'' : pseudo de l'utilisateur | |||
|- | |||
| messages-prives/add_destinataire_ws.php | |||
| Permet d'ajouter un destinataire à un message privé. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''id_discussion'' : id de la discussion | |||
* ''tab_pseudo'' : liste des destinataires à ajouter, séparés par un point-virgule | |||
|- | |||
| messages-prives/del_message_ws.php | |||
| Permet de supprimer un message privé. Paramètres à envoyer : | |||
* ''id_user'' : id de l'utilisateur | |||
* ''del_discussion'' : id des discussions à supprimer séparés par un tiret | |||
* ''box'' : 1 | |||
|} | |||
== Reverse-engineering == | |||
=== Décompilation === | |||
Cette section concerne la décompilation de l'application Android de JVC sous Linux. | |||
Pour décompiler l'application JVC, commencez par récupérer le fichier APK [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk ici] (version 2.5). Ensuite, décompressez-le avec 7-Zip : | |||
$ 7z x com.jeuxvideo-2.5.apk | |||
Puis, transformez le .dex en .jar à l'aide de l'utilitaire [http://code.google.com/p/dex2jar/downloads/list dex2jar] : | |||
$ dex2jar classes.dex | |||
Ensuite, vous pouvez ouvrir le .jar dans [http://java.decompiler.free.fr/?q=jdgui jd-gui], qui s'occupera de décompiler les fichiers : | |||
$ jd-gui classes-dex2jar.jar | |||
=== Déobfuscation === | |||
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères : | |||
this.g.getString(2131230723) | |||
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, ''resources.arsc''. Pour en extraire le contenu, nous allons utiliser l'utilitaire [http://code.google.com/p/android-apktool/ apktool] : | |||
$ apktool d com.jeuxvideo-2.5.apk strings | |||
Ensuite, vous pourrez trouver dans le fichier ''strings/res/values/strings.xml'' la liste des chaînes de caractères associées à leurs variables, et dans ''strings/res/values/public.xml'', la liste des variables associées aux nombres (en hexadécimal) comme ''2131230723'' que vous voyez dans le code décompilé. Ce n'est pas très pratique mais je n'ai pas trouvé d'outil qui modifie directement le code décompilé pour y intégrer les valeurs du ''resources.arsc'' (mais je n'ai pas beaucoup cherché non plus). | |||
Ce n'est pas tout. À partir de la version 2.0.3 de l'application JVC, et pour toutes les version de l'application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que : | |||
<string name="md5_a">290B2FB20CFD682C120BBBFFFE5928D9</string> | |||
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j'ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire : | |||
from Crypto.Cipher import AES | |||
from passlib.utils.pbkdf2 import pbkdf2 | |||
cle = 'package android.content' | |||
cle = AES.new(pbkdf2(cle, cle, 10, 128/8, 'hmac-sha1')) | |||
string = '290B2FB20CFD682C120BBBFFFE5928D9' | |||
string = cle.decrypt(string.decode('hex')) | |||
print repr(string[:-ord(string[-1])]) | |||
Modifiez la clé selon l'application que vous décompilez : | |||
* Pour l'application Jeuxvideo.com (version >= 2.0.3), c'est ''package com.jeuxvideo.activity'' | |||
* Pour l'application Jeuxvideo.com (version >= 2.5), c'est ''package android.content'' | |||
* Pour l'application Jeuxvideo.com MP (version >= 1.0), c'est ''package com.jeuxvideomp.activity'' | |||
L'application pour tablettes n'est pas concernée par ce mécanisme d'obfuscation. | |||
== Liens externes == | |||
* [http://www.jeuxvideo.com/forums/1-1000021-1691093-1-0-1-0-documentation-de-l-api-de-jeuxvideo-com.htm Lien du topic sur JVC pour poser vos questions] | |||
* [https://play.google.com/store/apps/details?id=com.jeuxvideo&hl=fr L'application Android] | |||
* [https://play.google.com/store/apps/details?id=com.jeuxvideomp&hl=fr L'application Android des MP] | |||
* [https://itunes.apple.com/fr/app/id393077232 L'application iPhone] | |||
* [https://itunes.apple.com/fr/app/id547233024 L'application iPhone des MP] | |||
* L'APK de l'application Android : | |||
** [http://pool.apk.aptoide.com/outstore/com-jeuxvideo-7-604082-50bec6ac892f7a0868936f6a1478de7d.apk Version 1.5.4] | |||
** [http://android-applications-gratuites.com/wp-content/uploads/2012/04/com.jeuxvideo-9.apk Version 2.0.1] | |||
** [http://www.app-android-free.com/wp-content/uploads/2012/08/Jeuxvideo.com-2.0.4.apk Version 2.0.4] | |||
** [http://android-applications-gratuites.com/wp-content/uploads/2012/09/com.jeuxvideo-13.apk Version 2.0.5] | |||
** [http://pool.apk.aptoide.com/el-bucho/com-jeuxvideo-15-1700633-aebd47783deaffd1cead7c788d49c824.apk Version 2.1.1] | |||
** [http://pool.apk.aptoide.com/cuvelier/com-jeuxvideo-17-2741356-e85ee96f02f8d4db3d178c7d85cd8157.apk Version 2.2] | |||
** [http://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk Version 2.3] | |||
** [http://painarguer.alwaysdata.net/com.jeuxvideo-2.5.apk Version 2.5] | |||
* L'APK de l'application Android des MP : | |||
** [http://android-applications-gratuites.com/wp-content/uploads/2012/10/com.jeuxvideomp-1.apk Version 1.0] | |||
[[Catégorie:Extensions et outils]] |
Version du 9 juillet 2014 à 12:47
L'API de Jeuxvideo.com, utilisée à l'origine par les applications mobiles de Jeuxvideo.com, permet de développer plus facilement des applications, sites web, et autres scripts en rapport avec Jeuxvideo.com.
Elle est au format XML, ce qui fait qu'elle est plus facile à parser, mais aussi plus rapide à charger qu'une page web normale.
Identification
L'API utilise le nom de domaine ws.jeuxvideo.com. Pour y accéder, il faut utiliser un des identifiants ci-dessous (authentification HTTP basique).
Tous ces identifiants fonctionnement actuellement, et je n'ai pas repéré de page semblant afficher un comportement différent selon.
Utilisateur | Mot de passe | |
---|---|---|
Android 1.0 | appandr | e32!cdf |
Android 2.0.3 | app_and_gnw | FC?4554? |
Android 2.5 | app_and_ms | D9!mVR4c |
Android MP | app_ag_jvmp | LXnb45=d# |
Android Tab | nex12sz | GT4!V2cT |
iPhone | app_ios_nw | W!P45-R |
iPad | ip45de | XpD5!FT |
Utilisation
Connexion
Pour vous connecter, utilisez la page mon_compte/connexion.php.
Voici les paramètres à envoyer (GET ou POST) :
Paramètre | Valeur |
---|---|
newnom | Le pseudo de l'utilisateur. |
stamp | Le timestamp (le nombre de secondes depuis le 1er janvier 1970) à l'heure où la requête est envoyée. |
hash | Un hash MD5 sous la forme : md5(pseudo + motDePasse + "OpX234" + stamp) OpX234 est un salt. |
En réponse, vous recevez plusieurs informations présentes dans la CDV, mais surtout le cookie wenvjgol, que vous devrez utiliser pour poster sur les forums et utiliser les messages privés.
Pour information, wenvjgol signifie logjvnew à l'envers, et c'est le cookie de session de JVC dont le nom a subi plusieurs transformations au fil des années.
Pour le renvoi de mot de passe, utilisez cette URL (en remplaçant Cisla par le pseudo ou bien l'adresse e-mail) :
http://ws.jeuxvideo.com/cgi-bin/passperdu_ws.cgi?email_pseudo=Cisla
Jeux, astuces, news...
URL | Description |
---|---|
00.machines_version.xml 00.version_tablette.xml |
Dernière version de l'application, informations sur la publicité, liste des consoles |
01.flux_jeux_nouveautes.xml 01.flux_jeux_prochainement.xml |
Listes de jeux |
01.jeux/21963.xml 01.jeux/details/21963.xml 01.jeux/videos/21963.xml 01.jeux/screen/21963.xml 03.preview/43689.xml 03.test_complet/9813.xml 01.jeux/news/21963.xml 05.jeu_astuce/41030.xml 05.astuce/33258.xml 01.jeux/screen_ast/38024.xml |
Informations sur le jeu (le nombre correspond à l'id) |
03.dossier/18270.xml 03.dossier/18270/1.xml |
Un dossier : 18270 est l'id du dossier, 1 est la page (si vous n'en mettez pas, vous avez le sommaire) |
02.flux_news.xml 02.flux_news-4.xml |
La liste des dernières news. Dans le deuxième exemple, en ajoutant le nombre 4, vous retournez 4 jours en arrière (ça peut aller jusqu'à 9) |
03.flux_articles_tests.xml 03.flux_articles_tests-4.xml 03.flux_articles_apercus.xml 03.flux_articles_apercus-4.xml 03.flux_articles_dossier.xml 03.flux_articles_dossier-4.xml 04.flux_videos_cliq.xml 04.flux_videos_cliq-4.xml 04.flux_videos_gaming.xml 04.flux_videos_gaming-4.xml 04.flux_videos_autres.xml 04.flux_videos_autres-4.xml 05.flux_astuces.xml 05.flux_astuces-4.xml 04.flux_videos_chroniques.xml 04.flux_videos_chroniques-4.xml 04.flux_toutes_les_videos.xml 04.flux_toutes_les_videos-4.xml |
Même chose pour les derniers articles, tests, astuces et aperçus |
02.news/1234.xml 02.news_screen/1234.xml |
Voir une news (le nombre correspond à l'id) |
ean.php?ean=0045496830144 | Voir le jeu associé au code-barre (EAN) 0045496830144 |
forums_index.xml | Liste des forums généraux |
search_n/mario search/mario search_sug/mario search_forums/mario search_forums_sug/mario |
Effectuer une recherche dans le nom des jeux ou des forums |
tab_suggest_blocs.xml tab_suggest_forums.xml |
À compléter |
cgi-bin/liste.cgi | À compléter |
Forums
Pour les forums, les URL sont les mêmes que pour JVC, à part que :
- Le .htm est transformé en .xml
- Le www.jeuxvideo.com est remplacé par un ws.jeuxvideo.com
- La chaîne de caractères à la fin de l'URL (comme blabla-15-18-ans ou nom-du-topic) est remplacée par un 0 (sauf pour la recherche).
Par exemple :
http://www.jeuxvideo.com/forums/0-50-0-1-0-1-0-blabla-15-18-ans.htm
Devient :
http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml
Exemples d'URL :
URL | Description |
---|---|
http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-0-0.xml | La liste des sujets |
http://ws.jeuxvideo.com/forums/0-50-0-1-0-1-2-cactus.xml | Rechercher « cactus » dans le titre des topics |
http://ws.jeuxvideo.com/forums/1-50-128244545-1-0-1-0-0.xml | Un topic |
http://ws.jeuxvideo.com/forums/3-50-0-1-0-1-0-0.xml | Formulaire pour créer un topic |
http://ws.jeuxvideo.com/forums/3-50-128244545-1-0-1-0-0.xml | 10 derniers messages d'un topic + formulaire |
http://ws.jeuxvideo.com/forums/5-50-128244545-1-0-1-0-0.xml | Formulaire de réponse à un topic |
http://ws.jeuxvideo.com/cgi-bin/jvforums/forums.cgi | Envoyer un message (avec les données POST) |
http://ws.jeuxvideo.com/profil/cisla.xml | Voir une CDV |
Pour envoyer un message ou créer un topic : aux données de formulaires qui vous sont communiquées dans la balise params_form, vous devez ajouter le paramètre yournewmessage qui contient le message et newsujet qui contient le titre du topic (si vous créez un nouveau topic). Vous devez ensuite attendre une seconde avant d'envoyer les données POST à la page forums.cgi. En cas de captcha à gérer, vous devez répéter l'opération à partir des informations qu'on vous envoie en réponse, avec la solution du captcha en paramètre code.
Vous devez être connecté (envoyer le cookie wenvjgol) pour récupérer et envoyer un formulaire.
Le même formulaire peut aussi bien être envoyé au forums.cgi de ws.jeuxvideo.com qu'à celui de www.jeuxvideo.com, ce qui vous permet de choisir entre apparaître « via mobile » ou non. Les données POST à envoyer sont donc les mêmes sur toutes les versions de JVC.
Messages privés
L'id de l'utilisateur mentionnée ci-dessous correspond à la partie du cookie wenvjgol qui se trouve avant le premier "$".
Une fois connecté, vous devez envoyer le cookie wenvjgol à chaque requête.
URL | Description |
---|---|
jvmp.xml | Dernière version de l'application, liste des consoles et des smileys, lien vers la charte, pub activée ou non |
messages-prives/connexion_ws.php | Les paramètres sont les mêmes que pour la connexion depuis mon_compte/connexion.php, décrite plus haut. Cependant, la réponse XML contient quelques informations supplémentaires à propos des MP. |
messages-prives/boite-reception_ws.php | Permet de connaître le contenu de la boîte de réception. Paramètre à envoyer :
|
messages-prives/envoyes_ws.php | Permet de connaître la liste des messages envoyés. Paramètre à envoyer :
|
messages-prives/message_ws.php | Permet de lire le contenu d'un message privé. Paramètres à envoyer :
|
messages-prives/nouveau_ws.php | Permet d'envoyer un nouveau message privé. Paramètres à envoyer :
Il se peut également que vous ayez à gérer un code de confirmation. |
messages-prives/repondre_ws.php | Permet de répondre à un message privé. Paramètres à envoyer :
Il se peut également que vous ayez à gérer un code de confirmation. |
messages-prives/suggest_pseudo_ws.php | Liste quelques pseudos qui commencent par ce que l'utilisateur est en train de taper. Paramètres à envoyer :
|
messages-prives/indesirable_ws.php | Liste les utilisateurs ajoutés en indésirable. Paramètres à envoyer :
|
messages-prives/add_indesirable_ws.php | Permet d'ajouter un utilisateur dans les indésirables. Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :
|
messages-prives/del_indesirable_ws.php | Permet d'enlever un utilisateur des indésirables. Paramètres à envoyer :
|
messages-prives/info_alerte_ws.php | Permet de connaître les informations qui permettront de faire une DDB ou une mise en indésirable sur un message. Paramètres à envoyer :
|
messages-prives/alerte_ws.php | Permet d'effectuer une DDB (ce qui est inutile, étant donné qu'elles ne sont jamais traitées). Certaines données nécessaires pour former la requête doivent être récupérés avec info_alerte_ws.php. Paramètres à envoyer :
|
messages-prives/connexion_valid_ws.php | Permet d'afficher le nombre de messages non-lus ainsi que l'URL de l'avatar. Paramètres à envoyer :
|
messages-prives/add_destinataire_ws.php | Permet d'ajouter un destinataire à un message privé. Paramètres à envoyer :
|
messages-prives/del_message_ws.php | Permet de supprimer un message privé. Paramètres à envoyer :
|
Reverse-engineering
Décompilation
Cette section concerne la décompilation de l'application Android de JVC sous Linux.
Pour décompiler l'application JVC, commencez par récupérer le fichier APK ici (version 2.5). Ensuite, décompressez-le avec 7-Zip :
$ 7z x com.jeuxvideo-2.5.apk
Puis, transformez le .dex en .jar à l'aide de l'utilitaire dex2jar :
$ dex2jar classes.dex
Ensuite, vous pouvez ouvrir le .jar dans jd-gui, qui s'occupera de décompiler les fichiers :
$ jd-gui classes-dex2jar.jar
Déobfuscation
En parcourant le code source, vous verrez des choses de ce genre à la place des chaînes de caractères :
this.g.getString(2131230723)
Cela correspond à des chaînes de caractères stockées dans un fichier séparé, resources.arsc. Pour en extraire le contenu, nous allons utiliser l'utilitaire apktool :
$ apktool d com.jeuxvideo-2.5.apk strings
Ensuite, vous pourrez trouver dans le fichier strings/res/values/strings.xml la liste des chaînes de caractères associées à leurs variables, et dans strings/res/values/public.xml, la liste des variables associées aux nombres (en hexadécimal) comme 2131230723 que vous voyez dans le code décompilé. Ce n'est pas très pratique mais je n'ai pas trouvé d'outil qui modifie directement le code décompilé pour y intégrer les valeurs du resources.arsc (mais je n'ai pas beaucoup cherché non plus).
Ce n'est pas tout. À partir de la version 2.0.3 de l'application JVC, et pour toutes les version de l'application JVC MP, vous pourrez également voir dans le fichier strings.xml des variables telles que :
<string name="md5_a">290B2FB20CFD682C120BBBFFFE5928D9</string>
Ces chaînes de caractères (des URL et quelques salts) sont obfusquées. Après avoir lu un peu de code, j'ai trouvé comment les restituer. Voici un bout de Python qui montre comment faire :
from Crypto.Cipher import AES from passlib.utils.pbkdf2 import pbkdf2 cle = 'package android.content' cle = AES.new(pbkdf2(cle, cle, 10, 128/8, 'hmac-sha1')) string = '290B2FB20CFD682C120BBBFFFE5928D9' string = cle.decrypt(string.decode('hex')) print repr(string[:-ord(string[-1])])
Modifiez la clé selon l'application que vous décompilez :
- Pour l'application Jeuxvideo.com (version >= 2.0.3), c'est package com.jeuxvideo.activity
- Pour l'application Jeuxvideo.com (version >= 2.5), c'est package android.content
- Pour l'application Jeuxvideo.com MP (version >= 1.0), c'est package com.jeuxvideomp.activity
L'application pour tablettes n'est pas concernée par ce mécanisme d'obfuscation.
Liens externes
- Lien du topic sur JVC pour poser vos questions
- L'application Android
- L'application Android des MP
- L'application iPhone
- L'application iPhone des MP
- L'APK de l'application Android :
- L'APK de l'application Android des MP :