V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kingmo888
V2EX  ›  问与答

请问如何做好 PC 软件在线授权?想了一个比较 Low 的方案,请大家指点。

  •  2
     
  •   kingmo888 · 2019-02-07 16:42:07 +08:00 · 3152 次点击
    这是一个创建于 2100 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,没有无法破解的软件,只是破解成本的高低。

    web 后台是 django 写的,加了个用户模块。

    我设想的是这样的: 1、PC 端有登录功能,登录时从 django 获取帐号的使用期限等各种限制。 2、PC 端会有需要登录其他平台账户的需求,PC 端软件主要功能就是能够对使用者使用其他平台时提供核心支持(举个不恰当例子,其他平台是个计算器的话,本 PC 软件就是帮使用者计算一个微积分之类的)。

    PC 端的上目标平台登录的帐号是从 web 拉取的,密码本地输入。

    加密方式,PC 端核心支持库采用 web 获取,每次登录临时加载关闭时清除。 使用期限等参数,加密没想好,目前想的是采用 RSA 方式,PC 软件启动时随机生成一组公私钥,然后将公钥与随即参数一并 post 到 web,当 web 获取到后生成授权参数,然后 web 生成一对公私钥,使用 web 私钥将授权参数加密一次,再用 pc 的公钥加密一次,同时将 web 生成的私钥使用 pc 的公钥加密一下,返回处理后的 web 生成的私钥、授权参数。

    pc 端获取到后,一次解密 web 私钥,2 次解密授权参数。

    由于 rsa 的公私钥都是临时生成,所以基本没有公私钥之分了。。

    请问,这样的解密难度怎么样?

    有其他方案可以推荐吗?谢谢。

    24 条回复    2019-02-08 22:43:42 +08:00
    ian19znj
        1
    ian19znj  
       2019-02-07 17:37:22 +08:00 via iPhone
    你 web 端的授权参数用私钥加密,客户端如何用私钥解密?
    r1chb0ss
        2
    r1chb0ss  
       2019-02-07 17:38:50 +08:00 via iPhone   ❤️ 1
    直接做 web 端得了呗
    ian19znj
        3
    ian19znj  
       2019-02-07 17:39:48 +08:00 via iPhone
    另外,最主要的漏洞在于,客户端怎么判断收到的授权信息来自你的 web 端?如果有人伪造授权数据返回给你的客户端呢?
    kingmo888
        4
    kingmo888  
    OP
       2019-02-07 19:42:41 +08:00
    @r1chb0ss 感谢。PC 依赖,无法纯 web。

    @ian19znj 感谢回复。我对 RSA 不是很理解。朋友第一个回复中提到的:我是 web 端再生成一对,公钥加密,私钥发回来。 第二个回复:既然无法鉴定,就把内容加密好,不知道返回的啥也没法伪造。再一个,就是中间会定时进行通讯。。不知道是不是可行。所以来问问。这方面东西刚开始研究。
    sunorg
        5
    sunorg  
       2019-02-07 20:52:40 +08:00 via Android
    oauth 了解一下
    ian19znj
        6
    ian19znj  
       2019-02-07 21:22:36 +08:00
    @kingmo888 #4 那我觉得二次加密是多余的,直接将内容用客户端的公钥加密返回,跟你现在的方案安全性没有差别。这个方案的密码其实就是你的授权数据结构。
    kersbal
        7
    kersbal  
       2019-02-07 21:23:48 +08:00 via iPhone
    直接上微软商店?
    ian19znj
        8
    ian19znj  
       2019-02-07 21:25:40 +08:00
    @kersbal #7 微软商店得 win10,我估计楼主服务的客户电脑 xp 都有可能。
    crab
        9
    crab  
       2019-02-07 21:26:55 +08:00
    功能如果是在 web 端只要不允许账号同时在线就可以。如果是本地的,做再多也无用啊,加大难度和时间就是关键验证的地方代码 vm 上。
    lingdux
        10
    lingdux  
       2019-02-07 22:01:45 +08:00
    推荐 Safengine Protector
    chinvo
        11
    chinvo  
       2019-02-07 22:11:41 +08:00 via iPhone
    可以配合 ddapi,数据交互不用太复杂的加密,也不要自己搞密钥交换

    密码学最忌讳闭门造车,只要你的方案依赖对加密过程的保密,那么你的加密只不过是自欺欺人
    chinvo
        12
    chinvo  
       2019-02-07 22:12:42 +08:00 via iPhone
    @chinvo #11 手滑,dpapi
    kingmo888
        13
    kingmo888  
    OP
       2019-02-07 22:17:33 +08:00
    @ian19znj 哈哈,二次密码安全性上确实一样,麻烦程度上,工作量会大一点?哈哈哈。“这个方案的密码其实就是你的授权数据结构。”这句话没怎么理解。

    @crab 功能不在 web 端,是想运行时 down 关键的 dll 下来,关闭时删除。

    @lingdux 这个我之前用过,有时候混淆了 exe 后,运行就有故障,不知道咋回事搞不太明白呢
    chinvo
        14
    chinvo  
       2019-02-07 22:19:53 +08:00 via iPhone
    @kingmo888 #13 不推荐国产的虚拟机保护,有能力一定要考虑 vmprotrct
    chinvo
        15
    chinvo  
       2019-02-07 22:21:07 +08:00 via iPhone
    另外有个悖论是如何确定客户端合法性

    一切需要和客户端交互的识别方式,都有可能被伪造
    ian19znj
        16
    ian19znj  
       2019-02-07 22:22:23 +08:00
    @kingmo888 #13 我的意思是,你防破解是基于别人不知道你的数据结构的,如果别人知道了你返回的授权信息的格式,就可以破解你的软件了。
    msg7086
        17
    msg7086  
       2019-02-07 23:54:07 +08:00
    你可以把少量核心功能做成远程计算。
    因为你没有说是什么样的软件,所以我就随便说说。比如是做报表的,那你可以做成每小时或者每天里有一个数学计算结果是交给服务器处理的。如果服务器密钥验证失败,就返回随机数,等等。如果有人破解你的软件,又没有注意到这个问题的话,那程序就会运行不正常。
    kokutou
        18
    kokutou  
       2019-02-07 23:57:27 +08:00 via Android
    注意放暗桩就行了,放到人怀疑人生。
    kokutou
        19
    kokutou  
       2019-02-08 00:06:18 +08:00 via Android
    另外有验证出错不要立马给提示,给数据上几个随机数加减,文件保存了但是是损坏的,这样子之类的。
    程序编译开编译器优化,上个狗,再上个 tmd 壳等等。
    wd
        20
    wd  
       2019-02-08 03:37:53 +08:00 via iPhone
    以前 v2 有一个兄弟做的软件,检查到盗版不好不让用,但是计算结果会不准确,而且误差随时间越来越大。可以想想对方发现有问题的时候
    badcode
        21
    badcode  
       2019-02-08 07:36:37 +08:00 via iPhone
    @wd 那帖子非常有意思
    RqPS6rhmP3Nyn3Tm
        22
    RqPS6rhmP3Nyn3Tm  
       2019-02-08 07:43:05 +08:00
    核心代码放在服务器
    wd
        23
    wd  
       2019-02-08 08:39:42 +08:00 via iPhone
    @badcode #21 嗯 是的 我记得还说发现错误之后联系他解决,那哥们好像可以根据错误数据还原…
    hotsun168
        24
    hotsun168  
       2019-02-08 22:43:42 +08:00 via iPhone
    之前做过这种 PC 软件的验证,上面有人说过的把核心代码放在服务器的方案较好。
    我以前做的那个东西,初版程序中只有验证逻辑,被破解后,破解版中整个验证逻辑被完整移除,相当于单机版。后面将部分核心逻辑移到服务器端,每次运算放在服务器进行,再没出现过破解版。
    P.S. 服务器被 DDOS 好几天,后面可能觉得搞我没意思了,就没再收到过破解或攻击。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:58 · PVG 05:58 · LAX 13:58 · JFK 16:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.