+-
java – 隐藏在混淆代码中的字符串
我只是使用proguard对我的 Android代码进行了模糊处理,然后对其进行了反编译.有许多字符串我真的想隐藏在窥探之中.当我反编译我的代码时,每个人都可以看到字符串……并进行更改.其中一个字符串是我的许可服务器的URL,它们实际上可以将URL更改为指向虚假服务器(因为我将向公众发布服务器代码).隐藏此类信息的最佳方式是什么?

另外,我注意到R类字符串都是随机数,但我在反编译代码中找不到R类.它在哪里?

我看到的敌人示例:new SimpleCursorAdapter(localActivity,2130903058,localCursor,arrayOfString,arrayOfInt);

2130903058是一个布局文件,但它引用了什么?除非它指向某种地址,否则该数字没有任何意义.

最佳答案
假设你对晦涩而不安全感到满意,你可以使用许多机制,但像proguard这样的混淆器无法帮助你.

要实现这一点,你需要自己对字符串进行编码或加密,你使用的方法取决于你想要防范的内容,如果它只是试图隐藏明显的检查,那么编码可能就足够了(请参阅android .util.Base64,http://developer.android.com/reference/android/util/Base64.html).请注意,编码是在NO WAY SECURE中完成的,它将删除对您站点的明显引用.

如果你试图防范更多的东西,那么你可以转向实际加密字符串,为此你可以使用像AES这样的对称密码通过javax.crypto.Cipher,http://www.androidsnippets.org/snippets/39/index.html提供了一个不错的用法示例.再次,这对于黑客来说更加烦人,因为你需要将密钥存储在jar中的某个位置,从而否定任何加密安全性.

为了更清楚,基本步骤是:

>使用已知密钥手动创建加密字符串.
>转换您的代码以使用此字符串的解密版本,例如:

之前:

public class Foo {
    private String mySecret = "http://example.com";

    ...
}

变为:

public class Foo {
    private String encrypted = "<manually created encrypted string>";
    private String key = "<key used for encryption";
    private String mySecret = MyDecryptUtil.decrypt(encrypted, key);

    ...
}

所有这一切的(好的)替代方案是考虑使用第三方drm解决方案,例如许可服务器谷歌提供http://android-developers.blogspot.com/2010/07/licensing-service-for-android.html.这可能比你自己的东西更安全,但受到与我上面描述的非常相似的限制.

点击查看更多相关文章

转载注明原文:java – 隐藏在混淆代码中的字符串 - 乐贴网