V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sinv
V2EX  ›  数学

软件授权算法研究,兴趣入

  •  1
     
  •   sinv · 2018-06-26 00:22:06 +08:00 · 8376 次点击
    这是一个创建于 2103 天前的主题,其中的信息可能已经有所发展或是发生改变。

    发到数学节点下,不知是否合适,请教大家集思广益,凭兴趣研究。

    声明:兴趣所在,仅为算法研究,人格保证无作弊、无盗用。

    项目中遇到供应商提供的产品需要授权,我方已支付款项购买永久授权,因供应商内部原因暂时无法提供永久授权,故请我帮忙定期更新授权。

    至今进行了 4 次短期授权操作,每次都是根据软件操作界面提供的 8 个字符的编码作为输入、并指定授权时长,进而生成授权数据;成功导入授权数据后,产品软件界面显示新的 8 字符编码。下面给出 4 次授权相关的数据,格式为“编码|授权时长|授权数据”:

    4f1f2368|1 个月|23265,61680,57795,50115,54000,53985,50115,50145,38640,42450,46290,57825,38565,57840,57810,61680
    
    f92d534c|1 个月|19395,50115,50130,53985,54000,50160,57825,53955,46275,38625,46290,57825,38535,61680,57825,54000
    
    4d4b9612|2 个月|30945,61680,50115,53985,61635,61680,57810,50055,57750,61575,61665,50100,46290,53955,54000,57840
    
    fea364c2|2 个月|27075,57825,50115,57810,57810,57840,54000,50055,53925,57750,61635,53940,42465,61650,61680,50160
    

    观察每次得到的授权数据的规律发现以下特征:

    1. 均由 16 组数字构成,每组包含 5 个阿拉伯数字;
    2. 这 16 组数字里,每组的末位数字只有 0 和 5 两种情况;
    3. 提列第 2 条中的 0 或 5 后可以组合成 16 个数字串,联想到二进制,且正好是 16bit、2 个字节(猜测)。

    简单分析:

    1. 软件采用本地离线计算方式校验授权数据;
    2. 因为可以从授权数据中获取授权时长,所以授权数据中应该包括未加密的用以表示时长的数据;
    3. 因为是离线校验授权数据,所以授权数据必定包含对对应编码的散列或加密或其它变换。

    以上,未琢磨明白,不甘心,求教大家指点迷津。

    10 条回复    2018-06-26 09:51:33 +08:00
    zn
        1
    zn  
       2018-06-26 00:57:05 +08:00
    能简单从这些数据推导出算法的话,开发商的程序员可以杀了祭天了。

    洗洗睡吧,除非你会逆向。
    WildCat
        2
    WildCat  
       2018-06-26 00:59:12 +08:00 via iPhone
    信息论了解一下
    巧妇难为无米之炊
    fuchunliu
        3
    fuchunliu  
       2018-06-26 01:01:32 +08:00 via Android
    可以去外文网站找找注册机的资料,兴许有意外收获,比如:AutoCAD 的注册机就是离线注册的
    geelaw
        4
    geelaw  
       2018-06-26 01:07:47 +08:00 via iPhone   ❤️ 1
    整个帖子没看懂目的是啥。

    如果你想研究授权的运作机制,只要看软件的代码即可,从表面观察是没什么意义的。

    如果你想知道为什么离线验证可以是安全的(假设你不尝试绕过软件的逻辑),这是因为存在着公钥密码学方案。一个简单的授权机制可以是这样:
    软件作者生成一对密钥用于签名,公钥随着软件分发(比如写死到代码里),私钥用于产生授权数据。
    软件根据运行环境(例如硬件配置等)生成一段文本(不考虑客户隐私的话比如系统状态的总结,考虑隐私的话用一个 hash 函数)。
    用户把文本、想要得到的时长、费用交给作者,作者对 (文本, 时长) 签名(用私钥),交还给用户。
    用户把签名输入软件,软件用公钥验证后发挥其功能。
    crab
        5
    crab  
       2018-06-26 01:12:29 +08:00
    这样很难分析出算法,分析出也不能确定就对啊。逆向软件一步步跟出算法校验的流程。
    shiji
        6
    shiji  
       2018-06-26 02:20:11 +08:00
    @geelaw 这个方法也有缺陷,公钥容易被替换掉,比如说 Navicat 的离线激活就是通过替换掉软件自带的公钥实现的。
    kokutou
        7
    kokutou  
       2018-06-26 06:31:33 +08:00 via Android
    软件发看雪论坛,找大神帮你逆向。
    kokutou
        8
    kokutou  
       2018-06-26 06:31:57 +08:00 via Android
    不发软件,从注册码推出不出来的。
    mamax
        9
    mamax  
       2018-06-26 07:37:50 +08:00 via Android
    逆一下
    ioc
        10
    ioc  
       2018-06-26 09:51:33 +08:00 via Android
    说吧,什么软件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2842 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:18 · PVG 21:18 · LAX 06:18 · JFK 09:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.