Ответ 1
Не уверен в Android, но в стандартном JDK вы бы сделали что-то вроде этого:
try {
Class.forName( "your.fqdn.class.name" );
} catch( ClassNotFoundException e ) {
//my class isn't there!
}
В настоящее время я занимаюсь конкретной проблемой с моим платным приложением. Внутри он содержит проверку лицензирования. Приложение исправлено хакерами, изменив приложение apk/jar. Они добавляют новый класс, который помогает обойти проверку лицензирования.
Моя цель - как-то проверить этот конкретный патч. Если я нахожу это, я знаю, что мое приложение было скомпрометировано.
Любые подсказки о том, как узнать, что что-то было изменено в пакете? Выполнение хэша над приложением на самом деле не вариант в моем случае.
Я думал, возможно, проверка того, будет ли этот класс существовать, поможет, но что, если они изменят имя класса? Тогда еще одна идея - это как-то проверить, что неожиданные включения добавляются в класс.
Любое из этих возможных? Любые предложения помогут:)
Не уверен в Android, но в стандартном JDK вы бы сделали что-то вроде этого:
try {
Class.forName( "your.fqdn.class.name" );
} catch( ClassNotFoundException e ) {
//my class isn't there!
}
Вот что я использовал в Android - стандартная Java:
public boolean isClass(String className) {
try {
Class.forName(className);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
Пример реализации:
if (isClass("android.app.ActionBar")) {
Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show();
}
Вы можете использовать
public static Class<?> forName (String className)
и проверьте ClassNotFoundException
http://developer.android.com/reference/java/lang/Class.html#forName%28java.lang.String%29
Как он загружается, если это случайный класс в случайном пакете?
Как говорится, см. http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29 и java.class.path. Для обычных Java-приложений вам нужно пройти путь к классам, а затем выполнить поиск записей (для банок) или каталогов (для файлов .class). Но в среде container-class-loader это не сработает (и я не уверен, как это относится к среде Android).