应用内计费安全和远程方法调用

2022-09-03 16:16:23

我已经在应用计费中实现了应用计费,现在我想进一步保护它。阅读开发人员材料时,它指出:

除了运行模糊处理程序之外,我们还建议您使用以下技术对应用内结算代码进行模糊处理。

将方法内联到其他方法中。

动态构造字符串,而不是将它们定义为常量。

使用 Java 反射来调用方法。

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

混淆 - 好吧,我可以做到= proguard

将方法内联到其他方法中 - 这是不是说一旦我的代码完成,就尽可能地摆脱OO,并在一种方法中将所有代码放在尽可能多的行中(对于我的应用程序的计费部分)?这是否包括内联类?在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

这似乎是您可以在盗版威胁较高时进行调查的事情。如果反射有可能损害用户体验,我将无法证明仅仅为了额外的混淆层而使用反射是合理的。


答案 2