
另外,我注意到R类字符串都是随机数,但我在反编译代码中找不到R类.它在哪里?
我看到的敌人示例:new SimpleCursorAdapter(localActivity,2130903058,localCursor,arrayOfString,arrayOfInt);
2130903058是一个布局文件,但它引用了什么?除非它指向某种地址,否则该数字没有任何意义.
要实现这一点,你需要自己对字符串进行编码或加密,你使用的方法取决于你想要防范的内容,如果它只是试图隐藏明显的检查,那么编码可能就足够了(请参阅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 – 隐藏在混淆代码中的字符串 - 乐贴网