Web security

   Failles include, XSS, CRLF, injection SQL, bypass, etc…

Skip to: Content | Sidebar | Footer

logo

Contourner la LVL d’Android

25 août, 2010 (04:09) | Failles, Google | Rédigé par: Mathieu

* * * *   4 vote

Definition

La LVL de Google est une librairie de verification de licence ( License Verification Library ). C’est le système de protection qu’a mis en place Google pour contrer le piratage des applications de ses smartphones.

Contexte

Ce système de protection de licence était tres attendu par la communauté car des rumeurs nous laissaient croire qu’ils réussiraient la ou Apple avait misérablement échoué… Le fait est qu’a peine mis en route, le voila mis en déroute… Un programmeur, qui lutte contre le piratage, a en effet mis en evidence la facilite de piratage des applications protégées par cette LVL.

La demarche

C’est tres simple, mais il faut tout de meme avoir quelques notions de base sur la maniere dont marche la LVL.
L’idee, c’est que lorsqu’une application se lance, elle doit demander a la LVL si le produit est bien enregistré comme « acheté » dans l’Android Market. Pour ce faire, elle envoi une requête HTTP, recupere et parse la réponse, puis, si la licence est valide, la LVL lance l’application ou la termine dans le cas contraire.


Schema explicatif du fonctionnement de la LVL

Il faut savoir aussi que la LVL n’est pas une fonctionnalité native a Android, ce qui fait que lorsque l’on veut proteger son application grace a la LVL, on doit importer dans son projet les librairies necessaire.

Maintenant, si l’on veut creuser un peu plus, il suffit d’analyser le code d’une application a l’aide d’un désassembleur comme baksmali ( voir section Liens ). Ce desassemblage nous donnera des fichiers au format dex. On pourra notamment voir ces constantes dans les fichiers de configuration de la LVL :

.field private static final ERROR_CONTACTING_SERVER:I = 0x101
.field private static final ERROR_INVALID_PACKAGE_NAME:I = 0x102
.field private static final ERROR_NON_MATCHING_UID:I = 0x103
.field private static final ERROR_NOT_MARKET_MANAGED:I = 0x3
.field private static final ERROR_OVER_QUOTA:I = 0x5
.field private static final ERROR_SERVER_FAILURE:I = 0x4
.field private static final LICENSED:I = 0x0
.field private static final LICENSED_OLD_KEY:I = 0x2
.field private static final NOT_LICENSED:I = 0x1

On peut ainsi voir les différents états possible de la licence, et ce qui est important, c’est de voir les deux états valides ( 0×0 et 0×2 ) et le non valide ( 0×1 ).

Lorsque l’on descends dans le code, on trouve ce code ci :

.sparse-switch
0x0 -> :sswitch_d3
0x1 -> :sswitch_de
0x2 -> :sswitch_d3
0x3 -> :sswitch_11d
0x4 -> :sswitch_f3
0x5 -> :sswitch_101
0x101 -> :sswitch_e5
0x102 -> :sswitch_10f
0x103 -> :sswitch_116
.end sparse-switch

On comprend facilement le lien entre les états de la LVL et ce switch : selon le resultat ( valeur d’état de la licence ) obtenu par la requête a l’Android Market, ce switch va executer une fonction ou une autre.

On imagine aisément que la fonction exécutée pour les états 0×0 et 0×2 est une fonction de lancement de l’application, aussi, tout ce que’il faut faire ici est de changer la ligne

0x1 -> :sswitch_de

en

0x1 -> :sswitch_d3

Par ce biais, nous venons de changer la fonctions appelée par la LVL lorsque l’état de la licence est NOT_LICENSED.
Il ne reste plus qu’a reassembler le code avec smali, replacer le fichier dex dans le fichier apk et resigner l’application pour que celle-ci soit patchée. Elle se lancera ainsi que la licence soit valide ou non…

Conclusion

Pour conclure, ce nouveau système de protection est, a la base, de tres bonne conception, mais le fait que la LVL ne soit pas native au SDK permet de passer outre cette protection assez facilement. Les developpeurs d’Android ont encore du boulot…

Liens

Sources de l’article : Android police
Smali et Backsmali : Google code

Post to Twitter Post to Delicious Post to Facebook Post to MySpace

Partager : Post to Google Buzz Post to Twitter Post to Delicious Post to Facebook Post to MySpace

Ecrire un commentaire