InApp Billing Security and Remote Method Invocation

Я реализовал биллинг приложения в приложении, и теперь я хочу немного его обезопасить. Прочитав материалы для разработчиков, в нем говорится:

В дополнение к запуску программы обфускации мы рекомендуем вам использовать следующие методы для обфускации кода биллинга в приложении.

Встраивать методы в другие методы.

Создавать строки на муха вместо того, чтобы определять их как константы.

Используйте отражение Java для вызова методов.

http://developer.android.com/guide/market/billing/billing_best_practices.html

Обфускация - отлично Я могу это сделать = proguard

Встроенные методы в другие методы - это высказывание, когда мой код будет завершен, избавьтесь от многих объектно-ориентированных объектов, насколько я могу, и поместите весь свой код в как можно больше строк (для биллинговой части моего приложения) одним способом? Включает ли это встраивание классов? В примере с Android у них есть класс констант, Могу ли я встроить все это?

Создавать строки на лету - да, поэтому переместите все постоянные переменные класса в строку - отлично proguard должен охватить это

Использовать Java Reflection - это мой главный вопрос. Должен ли я вызывать все мои методы вместо их вызова?

Чтобы сэкономить силы, я мог бы сделать следующее:

private static Object invokeMethod(String name, Class[] params, Object[] args){
    try {
        return MySpecificClass.class.getMethod(name, params).invoke(null, args);
    } catch (IllegalArgumentException e) {
        // Should never happen in my code, ignore and cancel in app charge
    } catch (SecurityException e) {
        // Should never happen in my code, ignore and cancel in app charge
    } catch (IllegalAccessException e) {
        // Should never happen in my code, ignore and cancel in app charge
    } catch (InvocationTargetException e) {
        // Should never happen in my code, ignore and cancel in app charge
    } catch (NoSuchMethodException e) {
        // Should never happen in my code, ignore and cancel in app charge
    }
    return null;
}

Тогда я мог бы сделать что-то вроде этого:

private static boolean someMethod() {
    return true; // just an example
}

params = new Class[0];
    if ((Boolean) invokeMethod("someMethod", params, null)) {
        // Do something
    }

Это хорошая защита или неужели это просто раздувание кода, из-за которого мое приложение не может быть исправлено из-за реальных проблем пользователей?

Спасибо.

15
задан Blundell 26 June 2011 в 14:32
поделиться