InApp Billing Security и удаленный вызов метода - PullRequest
15 голосов
/ 31 марта 2011

Я реализовал биллинг приложений в приложении, и теперь я хочу защитить его немного больше. Читая материал для разработчиков, он заявляет:

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

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

Создайте строки на лету, а не определяйте их как константы.

Использовать отражение 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
    }

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

Спасибо.

1 Ответ

1 голос
/ 01 апреля 2011

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

...