解锁移动应用程序的代码

信息安全 javascript 密码学
2021-09-11 14:21:33

这是一个 Android(通过 Cordova/Phonegap)游戏项目。我的目标是能够提供一个“促销代码”,让任何人都可以免费解锁游戏,但我想限制每个代码只能工作一天,我不想依赖服务器端组件验证代码。我想出的解决方案是每天的代码是(前一天的代码+一个秘密值)的 md5 哈希的前几个字母。这是在js中:

function checkPromoCode(codeToCheck) {
    var secretString = "ABCDEFGH"; 
    var startDate = new Date(1388534400000);    // Jan 1 2014
    var currentDate = new Date();
    var todaysCode = "";
    while (startDate < currentDate) {
        todaysCode = md5(todaysCode + secretString).substring(0,6);
        startDate.setDate(startDate.getDate() + 1);
    }
    if (codeToCheck == todaysCode) return true;
    return false;
}

我认为攻击者(谁知道我正在使用的算法并知道前几天的代码)确定今天的代码的唯一合理方法是通过计算 secretString 的值,我是否正确?我知道一个坚定的攻击者可以通过暴力破解或分析 apk 来计算 secretString 的值。没有什么是牢不可破的;这里的目标只是让它变得相当困难。我错过了什么明显的东西吗?MD5 是一个合适的哈希值吗?

1个回答

不评论安全性,这是我曾经得到的:

  • 有一个逗号分隔的var语句被认为是更好的形式
  • 你可以做var startDate = new Date('2014/1/1');,然后你不需要你的评论
  • 你可以写

    if (codeToCheck == todaysCode) return true;
    return false;
    

    作为

    return codeToCheck == todaysCode;
    
  • 除此之外,我喜欢变量的命名、代码的流程和一般的可读性