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

2019-02-07 16:42:07 +08:00
 kingmo888

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

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 的公私钥都是临时生成,所以基本没有公私钥之分了。。

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

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

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

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

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

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

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

一切需要和客户端交互的识别方式,都有可能被伪造
ian19znj
2019-02-07 22:22:23 +08:00
@kingmo888 #13 我的意思是,你防破解是基于别人不知道你的数据结构的,如果别人知道了你返回的授权信息的格式,就可以破解你的软件了。
msg7086
2019-02-07 23:54:07 +08:00
你可以把少量核心功能做成远程计算。
因为你没有说是什么样的软件,所以我就随便说说。比如是做报表的,那你可以做成每小时或者每天里有一个数学计算结果是交给服务器处理的。如果服务器密钥验证失败,就返回随机数,等等。如果有人破解你的软件,又没有注意到这个问题的话,那程序就会运行不正常。
kokutou
2019-02-07 23:57:27 +08:00
注意放暗桩就行了,放到人怀疑人生。
kokutou
2019-02-08 00:06:18 +08:00
另外有验证出错不要立马给提示,给数据上几个随机数加减,文件保存了但是是损坏的,这样子之类的。
程序编译开编译器优化,上个狗,再上个 tmd 壳等等。
wd
2019-02-08 03:37:53 +08:00
以前 v2 有一个兄弟做的软件,检查到盗版不好不让用,但是计算结果会不准确,而且误差随时间越来越大。可以想想对方发现有问题的时候

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533322

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX