应用内购买安全和远程方法调用

15

我已经在应用程序中实现了应用内购买,现在我想更加安全地保护它。阅读开发者材料时,它指出:

除了运行混淆程序外,我们建议您使用以下技术来混淆您的应用内购买代码。

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

动态构建字符串而不是定义为常量。

使用Java反射调用方法。

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

混淆(Obfuscation) - 好的,我可以使用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
    }

这是否是良好的安全性措施,还是只是代码膨胀,导致我的应用程序无法调试真正的用户问题?

谢谢。


我也在想"内联方法"和"使用反射"这些点。所有这些似乎都很麻烦。我想把你的方法变成巨大的超级方法可能会有所帮助,特别是在混淆名称之后。但是要在每个地方使用反射......(接下来在下一条评论中) - Tony Chan
但是如果到处都使用反射,我的头会爆炸。你的反射方法很有趣,但我不确定它是否考虑了抛出其他异常的方法(你没有放置一个 catch all:catch (Exception everythingelse))。我想你可以重新抛出它并在调用它的地方处理它。但是你还必须考虑到 proguard。由于你将混淆名称,这将破坏你的反射,因此你需要在 proguard 配置文件中添加 -keep 规则。所以也许这些方法会稍微不那么安全,因为它们可能有意义的名称。 - Tony Chan
嘿,Proguard不能隐藏您的字符串。在运行时构建它们并不意味着字符串连接。通常意味着将它们从更加混淆的状态(如字节或编码值)转换回原始字符串。 - Kevin Lee
1个回答

1

这似乎是在出现更高的盗版威胁时可以考虑的事情。如果使用反射有可能影响用户体验,我无法为了额外的混淆层而辩解使用它。


8
等待我的应用程序被破解和分发...然后发布更新。你是在为微软工作吗? - Blundell
6
我认为破解的软件包相对较少,下载破解版本的人也相对较少。即使这些人下载了破解版,你也能从中获得利润吗?我知道作为程序员,我们训练自己要假设最坏的情况,但某种平衡是必需的。 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接