我只是使用proguard对我的Android代码进行了模糊处理,然后对其进行了反编译.有许多字符串我真的想隐藏在窥探之中.当我反编译我的代码时,每个人都可以看到字符串......并进行更改.其中一个字符串是我的许可服务器的URL,它们实际上可以将URL更改为指向虚假服务器(因为我将向公众发布服务器代码).隐藏此类信息的最佳方式是什么?
另外,我注意到R类字符串都是随机数,但我在反编译代码中找不到R类.它在哪里?
敌人的例子我看到:new SimpleCursorAdapter(localActivity, 2130903058, localCursor, arrayOfString, arrayOfInt);
2130903058是一个布局文件,但它引用了什么?除非它指向某种地址,否则该数字没有任何意义.
我需要在Android应用程序中存储一些敏感信息.如果我把它放在一个资源文件中,看起来另一个应用程序只需使用PackageManager.getResourcesForApplication()就能浏览和读取该文件是微不足道的.
放置这样的信息的正确位置在哪里,我们不希望人们能够轻松窥探?
它应该在编译的java文件中吗?或者类文件也易于阅读?此外,如果它们在java文件中,是否可以从需要它们的XML文件中引用它们(例如,用于google maps api密钥)?
当您在Java应用程序中使用敏感数据时,通常建议您使用原始类型-例如,使用char []代替String ...
但是,对于加密密钥,我们通常需要使用java.security.Key对象,因为这是JCE提供程序使用的对象。密钥通常是非常敏感的信息,我们希望能够最小化可能的攻击窗口-即,尽可能晚地创建Key对象,进行加密/解密/签名,然后尽快清除对象。但是Key没有提供任何有助于这种清除的方法。
当前,我们的方式是将密钥保留在字节数组中,并在使用它之前立即初始化Key对象,Key立即超出范围,可以进行垃圾回收,并且我们还立即清除字节数组。但这似乎并不十分优雅……它还会在我们的界面中造成二分法-有些接受字节数组,有些接受Key对象,这有点混乱。
我知道Java没有提供任何通用机制来从内存中清除对象的事实,但是我在问是否有专门针对Keys的东西。或者,是否有其他方法可以最小化密钥的攻击窗口?
谢谢。