332
modifications
Ligne 212 : | Ligne 212 : | ||
== Reverse-engineering == | == 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://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 == |
modifications