首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模糊关键字缓存中的漏洞?Android许可

模糊关键字缓存中的漏洞?Android许可
EN

Stack Overflow用户
提问于 2010-12-11 08:28:39
回答 1查看 1.2K关注 0票数 7

每当Android Market Licensing ping服务器返回GRANT_ACCESS pong时,我都会缓存用户的身份验证。

有没有人发现这个策略有任何漏洞?我相信它是非常强大的,因为我混淆了一个密钥,而解开它的唯一方法就是知道它的盐。现在,可以想象有人可以打开apk并寻找盐,但这并不是真正的裂缝水平,我认为太重要了,不必担心。

如您所见,设备特定信息正被添加到模糊处理技术中。

代码语言:javascript
复制
// Try to use more data here. ANDROID_ID is a single point of attack. 
String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); 
obfuscator = new AESObfuscator(SALT, getPackageName(), deviceId); 
mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, obfuscator), BASE64_PUBLIC_KEY ); 

接下来是持久化数据的创建:

代码语言:javascript
复制
 public void allow() {
   SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0);
   SharedPreferences.Editor editor = settings.edit();
   String uid = UUID.randomUUID().toString();
   if(!settings.contains(ACCESS_KEY)) {
     editor.putString(ACCESS_KEY,uid);       
     editor.commit();
   } 
   if(!settings.contains(OBFU_ACCESS_KEY)) {
     String obfu = obfuscator.obfuscate(uid);
     editor.putString(OBFU_ACCESS_KEY,obfu); 
     editor.commit();
   }

然后,我使用另一种方法检查缓存内容的状态:

代码语言:javascript
复制
boolean isCachedLicense() {
  SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0);
  if(settings.contains(ACCESS_KEY) && settings.contains(OBFU_ACCESS_KEY)) {
    String accessKey = settings.getString(ACCESS_KEY, "");
    String obAccessKey = settings.getString(OBFU_ACCESS_KEY, "");
    try {
      if(accessKey.equals(obfuscator.unobfuscate(obAccessKey))) {
              return true;
      } else {
              return false;
      }
    } catch (ValidationException e) {
       e.printStackTrace();
       return false;
    }
  } else {
       return false;
  }
} 

最后,我检查了isCachedLicense是否位于LicenseCheckerCallback的以下位置:@Override dontAllow@override applicationError。如果isCachedLicense为真,那么我让用户转发。

另外,完整的源代码可以在here上找到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-11 09:11:18

一般来说,用盐进行混淆是一种薄弱的策略。攻击者只需要弄清楚salt,一旦你知道你要找的是什么,这是相当直接的,并且可以在不直接访问你的应用程序的情况下完成。一旦盐被发现(被任何人发现),我们所有的安装库都会遭到破坏。

您最好的选择是,不要使用具有固定密钥的模糊算法,而是使用一个经过验证的加密library+algorithm,其密钥对于用户或您正在运行的设备都是唯一的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4414449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档