web-dev-qa-db-fra.com

Comment vérifier si la classe existe quelque part dans le package?

Je suis actuellement confronté à un problème particulier avec mon application payante. En interne, il contient un contrôle de licence. L'application est corrigée par des pirates en modifiant l'application apk/jar. Ils ajoutent une nouvelle classe qui permet de contourner le contrôle de licence.

Mon objectif est de vérifier en quelque sorte ce correctif particulier. Si je le trouve, je sais que mon application a été compromise.

Des conseils sur la façon de savoir que quelque chose a été modifié sur le paquet? Faire un hachage sur l'application n'est pas vraiment une option dans mon cas.

Je pensais que peut-être vérifier si cette classe existait aiderait, mais qu'en serait-il s'ils changeaient le nom de la classe? Ensuite, une autre idée est de vérifier en quelque sorte les inclusions inattendues ajoutées à la classe.

Tout cela est-il possible? Toute suggestion aiderait :)

28
Jona

Je ne suis pas sûr de Android mais en JDK standard, vous feriez quelque chose comme ceci:

try {
 Class.forName( "your.fqdn.class.name" );
} catch( ClassNotFoundException e ) {
 //my class isn't there!
}
53
Liv

Voici ce que j'ai utilisé dans Android - Java standard:

public boolean isClass(String className) {
    try  {
        Class.forName(className);
        return true;
    }  catch (ClassNotFoundException e) {
        return false;
    }
}

Exemple d'implémentation:

if (isClass("Android.app.ActionBar")) {
    Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show();
}
14
Jared Burrows

Vous pouvez utiliser

public static Class<?> forName (String className)

et vérifiez le ClassNotFoundException

http://developer.Android.com/reference/Java/lang/Class.html#forName%28Java.lang.String%29

4
Aleadam

Comment est-il chargé s'il s'agit d'une classe aléatoire dans un package aléatoire?

Cela étant dit, voir http://download.Oracle.com/javase/6/docs/api/Java/lang/System.html#getProperties%28%29 et Java.class.path. Pour les applications normales Java, vous devez parcourir le chemin de classe, puis rechercher les entrées (pour les fichiers jars) ou les répertoires (pour les fichiers .class). Mais dans un environnement de chargeur de classe de conteneur, cela ne fonctionne pas (et je ne sais pas comment cela s'applique à un Android).

1
Paul Webster