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

Ligne 212 : Ligne 212 :


== Reverse-engineering ==
== Reverse-engineering ==
''Cet article est en cours de rédaction, ces informations seront ajoutées plus tard.''
=== 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://android-applications-gratuites.com/wp-content/uploads/2013/03/com.jeuxvideo.apk ici] (version 2.3). Ensuite, décompressez-le avec 7-Zip :
 
$ 7z x com.jeuxvideo.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 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.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).
 
Mais ce n'est pas tout : dans le fichier strings.xml, vous pourrez également voir des variables telles que :
 
<string name="aes_a">73A8202A24D470847E180EBA14434D16</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 com.jeuxvideo.activity'
cle = AES.new(pbkdf2(cle, cle, 10, 128/8, 'hmac-sha1'))
string = 'D034ED0612F7607C179BC66894A71654'
string = cle.decrypt(string.decode('hex'))
print repr(string[:-ord(string[-1])])
 
Si vous décompilez l'application des MP et non l'application normale, la clé sera ne sera pas ''package com.jeuxvideo.activity'' mais ''package com.jeuxvideo'''mp'''.activity''.


== Liens externes ==
== Liens externes ==
332

modifications