¿Cómo verificar si la clase existe en algún lugar del paquete?

Actualmente estoy lidiando con un problema en particular con mi aplicación paga. Internamente contiene una verificación de licencia. La aplicación es parcheada por hackers modificando la aplicación apk / jar. Están agregando una nueva clase que ayuda a eludir el control de licencia.

Mi objective es verificar de alguna manera este parche en particular. Si lo encuentro, sé que mi aplicación se ha visto comprometida.

¿Algún consejo sobre cómo saber que algo ha sido modificado en el paquete? Hacer un hash sobre la aplicación no es realmente una opción en mi caso.

Pensé que quizás sería útil verificar si esta clase existe, pero ¿qué ocurre si cambian el nombre de la clase? Entonces, otra idea es verificar de alguna manera las inclusiones inesperadas agregadas a la clase.

Cualquiera de estos posibles? Cualquier sugerencia ayudaría 🙂

No estoy seguro acerca de Android, pero en JDK estándar harías algo como esto:

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

Aquí está lo que utilicé en Android: Java estándar:

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

Ejemplo de implementación:

 if (isClass("android.app.ActionBar")) { Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show(); } 

Puedes usar

 public static Class forName (String className) 

y compruebe la ClassNotFoundException

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

¿Cómo se carga si es una clase aleatoria en un paquete al azar?

Dicho esto, consulte http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29 y java.class.path. Para las aplicaciones java normales, debe recorrer el classpath y luego buscar las entradas (para jar) o directorios (para archivos .class). Pero en un entorno contenedor-clase-cargador, esto no funcionará (y no estoy seguro de cómo se aplica a un entorno Android).