我们经常使用各种开发软件,比如IntelliJ IDEA、Navicat、Visual Studio等,这些软件都有一个特点,就是要收费。一般是我们需要去购买一个许可,然后输入这个许可到软件里就能够使用软件。
于是有的小伙伴就开始好奇这个许可是怎么实现的,特别是在离线情况下它是怎么给软件授权,同时又能避免被破解的。
 
许可内容
一个许可应该包含以下基本内容:
  • 授权用户(用户编号、MAC地址、IP地址等)
  • 授权期限(开始结束时间、无限期等)
  • 授权功能(应用版本、应用功能)
基本原理
数字签名:一种防伪造技术,能够通过公钥验证的数据一定是私钥拥有者所签发的。因此除非私钥泄露(一般放在服务器),否则没有人能够伪造。
许可生成就是服务器使用非对称加密私钥对许可进行数字签名,客户端使用对应的公钥对许可进行数字签名校验,校验通过再校验许可的内容。
 
 
提高破解难度
应用带上时间戳
应用带上发布时间戳,如果License允许时间小于这个时间戳就算系统时间大于也不能使用(避免修改系统时间情况),这样就限制了过期License没办法使用新版本应用。
加大反编译难度
不要用Java等容易被反编译的代码去校验,特别是校验许可的代码(避免直接改为True),存放公钥字符串的代码(避免直接替换公钥)。
尽量把校验代码放到二进制代码里面去,同时可以对代码进行混淆,增加破解难度。
 
以上是软件License授权的标准做法。当然也有一些比较low的做法,大致思路如下:
1.NET Winform程序逐个去读取在线设备的CPU,MAC地址,更有甚者还有读取主板信息
2.在程序中再去验证上面读取到的信息是否是当前设备的。
 
此处,并没有任何鄙视Winform开发者的的意思,那些在自动化领域的专家很多都是用Winform做开发,只是觉得这种做法真的有点土了。
 
部分内容参考链接:https://juejin.cn/post/7140328102709690398

软件离线许可(License)实现原理的更多相关文章

  1. AutoCAD 出现“安全系统(软件锁许可管理器)不起作用或未正确安装”的解决方法

    感谢高飞鸟提供解决方案.当AutoCAD或自动桌子公司的其它产品在启动过程中突然停电或其它原因造成操作系统重启时,可能会造成这些产品的许可出错而无法再运行.一般出错后第一次进入时,会提示你“产品需要激 ...

  2. 开源软件的许可(License)

    自由软件基金会(Free Software Foundation):FSF 0. GNU GNU (GNU is Not Unix 的递归缩写)计划,又称革奴计划,是由 Richard Stallma ...

  3. 逆向分析一款国外Blackjack Card Counter软件并附上License生成脚本

    没有学过逆向,一时兴起,搞了一下这个小软件,名为“逆向分析”,其实过程非常简单,难登大雅之堂,就当段子看吧.首先介绍一下背景吧.这是一款国外的Blackjack也就是21点算牌软件,我从来不玩牌的,机 ...

  4. HTML5离线存储的工作原理和使用

    在用户没有与因特网连接时,可以正常访问站点或应用,在用户与因特网连接时,更新用户机器上的缓存文件. 原理:HTML5的离线存储是基于一个新建的.appcache文件的缓存机制(不是存储技术),通过这个 ...

  5. IntelliJ IDEA 、PyCharm、WebStorm、PhpStorm等JetBrains公司软件 激活的License Server本地搭建教程

    一.背景 IntelliJ IDEA是JetBrains公司的一款IDE,主要用于java开发,可以编写Java.Groovy.Kotlin.Scala等语言,也可以直接做Android开发. 同系列 ...

  6. 开源纯C#工控网关+组态软件(四)上下位机通讯原理

    一.   网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...

  7. 各种开源许可 license 区别

    copy from http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html

  8. 我是一个录像机(NVR)

    我是一个网络录像机,简称NVR.我的前辈是DVR,我们的区别很简单,DVR接的是模拟摄像机,我连接的是IP摄像机. 我的前辈DVR比我辛苦,因为模拟摄像机的模拟信号连过来之后,他要进行数字化.编码压缩 ...

  9. 【谷歌浏览器】【谷歌地球】【Adobe 软件】离线安装包的下载地址

    因为某些原因?我们需要下载谷歌浏览器的离线安装版,找了好几次地址了,这次自己记录一下吧! 主要就是加两个参数,standalone 就是离线安装吧,platform 就是平台版本吧,哈~ 离线32位: ...

  10. linux的软件安装方式总结

    Linux系统中软件的“四”种安装原理详解:源码包安装.RPM二进制安装.YUM在线安装.脚本安装包   一.Linux软件包分类 1.1 源码包 优点: 开源,如果有足够的能力,可以修改源代码: 可 ...

随机推荐

  1. 四、流程控制、break、continue、return

    一. 程序流程控制概述 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 流程控制方式采用结构化程序设计中规定的只有三种基本流程结构,即:1.顺序结构程序 ...

  2. Vue.js中使用iView日期选择器并设置开始时间结束时间校验

    废话不多说直接上代码,拷贝代码保存为 html 文件,用浏览器打开就可以看到效果. 在线查看效果:https://run.iviewui.com/PmGsUW3P 1 <!DOCTYPE htm ...

  3. Flink常见问题解决记录

    1.Hardlink from files of previous local stored state might cross devices 开启了state.backend.local-reco ...

  4. 第四章:用Python对用户的评论数据进行情感倾向分析

    文章目录 项目背景 获取数据 情感倾向 senta_bilstm 模型 情感划分 数据描述 数据分析 总体评论倾向 评论分布 各分布的情感倾向 评论分词 去除停用词 绘制词云图 结论 源码地址 本文可 ...

  5. VMware Workstation Ubuntu 20.04 LTS无法连接网络问题

    本文记录了自己使用的安装在VMware Workstation上的Ubuntu20.04无法连接到网络的解决过程--终于解决困扰我两个小时的问题 出现问题# 毫无征兆,平时使用正常的Ubuntu在今天 ...

  6. NGINX websocket 配制

    http { map $http_upgrade $connection_upgrade {          default upgrade;          '' close; } upstre ...

  7. ubuntu下ntp时间同步

    1. 首先安装ntp服务(ubuntu 16.02)在linux的root用户下执行以下命   sudo apt-get install  ntp (如果不是ubuntu系统则执行 yum insta ...

  8. 19_webpack_externals

    假如我们购买了CDN服务器为我们的网站的访问速度进行优化,那么我们,该如何配置 假如我的CDN为:https://mr-hou88888/cdn/那么publicPath该如何配置 1.配置publi ...

  9. Android 杂项

    1. String to InputStream new ByteArrayInputStream(str.getBytes());

  10. UITextView布局不是从0开始的问题

    ///去掉padding UITextView.textContainer.lineFragmentPadding = 0; UITextView.textContainerInset = UIEdg ...