Подтвердить что ты не робот

Как проверить, существует ли класс в пакете?

В настоящее время я занимаюсь конкретной проблемой с моим платным приложением. Внутри он содержит проверку лицензирования. Приложение исправлено хакерами, изменив приложение apk/jar. Они добавляют новый класс, который помогает обойти проверку лицензирования.

Моя цель - как-то проверить этот конкретный патч. Если я нахожу это, я знаю, что мое приложение было скомпрометировано.

Любые подсказки о том, как узнать, что что-то было изменено в пакете? Выполнение хэша над приложением на самом деле не вариант в моем случае.

Я думал, возможно, проверка того, будет ли этот класс существовать, поможет, но что, если они изменят имя класса? Тогда еще одна идея - это как-то проверить, что неожиданные включения добавляются в класс.

Любое из этих возможных? Любые предложения помогут:)

4b9b3361

Ответ 1

Не уверен в Android, но в стандартном JDK вы бы сделали что-то вроде этого:

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

Ответ 2

Вот что я использовал в 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();
}

Ответ 4

Как он загружается, если это случайный класс в случайном пакете?

Как говорится, см. http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29 и java.class.path. Для обычных Java-приложений вам нужно пройти путь к классам, а затем выполнить поиск записей (для банок) или каталогов (для файлов .class). Но в среде container-class-loader это не сработает (и я не уверен, как это относится к среде Android).