软件授权与加密技术简单原理
2019-11-05
当前趋势下,互联网公司一般对外提供服务,而非直接出售软件,所以,大家不怎么关心软件授权、加密。但是,一些工业的软件拥有很核心的算法及技术专利。对外发布时,需要保护好程序。一般有如下要求:
不能让未被授权的第三方未经授权而使用程序。
不能让他人反编译程序,重现代码,推算出算法。
对于第一个需求,就是需要实现授权。简单的授权方式有:
1,license文件
2,USB加密狗
3,网络授权
license文件授权是使用方式最广的方式。成本最低,且使用限制条件较少,软件甚至不需要联网检查。license文件的方式,被一些日常工具类型的软件所采用。这些软件本身售价不高,采用license文件是成本最低的方式。激活码只有短短几十个字符,我们也可以认为那是license文件的方式。 把这些字符放到指定的文件内不就是license文件嘛!license授权的原理也很简单,给入一些数据,只有厂商知道哪些数据是符合的,哪些是不符合的。
如果license很容易被破解,那么就可以伪造license文件了。若二进制代码中只有一个点检查license,那很容易就被跳过。即使检查点很多,全都调用同一个license检查函数,这个函数的二进制代码很容易被篡改。这就导致license文件的方式最容易crack。我们需要很高的代码混淆技术,让cracker无法找到授权检查的代码,无法找到所有的检查调用点,这样,总有地方会触发授权失败,程序退出。
USB加密狗是更加严格的授权方式。花费也非常高昂,一个USB加密狗硬件价格一般几十甚至一两百,外加算法套件或者服务费用。很多软件的价格都没有这么贵。这种方式一般适合价格昂贵的软硬件系统。这样的系统中软件一般专机运行,甚至有专人负责软件使用。原理:软件代码中有授权算法厂商lib代码,其会查询机器的usb设备,授权lib会与USB进行通信,由USB内芯片告知是否通过授权。USB加密狗的方式,是最安全的方式,最不易被破解的。
随着人们越来越重视软件安全性与授权,可以预见USB加密狗加密软件在工业上越来越常见。USB加密狗为代表的硬件加密锁,已经有不少企业在做解决方案。成本也会越来越低的。
网络授权分为两类:局域网授权;广域网授权。但是,本质上是一样的。就是程序向远程的服务器查询,看看自己的机器是否被授权。授权lib会给当前PC设备生成一个ID,利用网卡MAC、CPU、GPU等等硬件附带的信息来生成此ID。一般很难伪造ID。也因此,这些PC上的硬件可能无法随意更换,否则会导致新的ID,PC无法通过授权。把ID提交给授权服务器并记录,这样,就能够对一个PC做授权了。
当向一个组织出售软件,数量稍大,且软件所在网络架构易变,或者软件可能随时在不同的机器上安装使用,license软件或者USB加密狗的方式都不适合了。而且,采取网络授权的方式进行大批量授权的公司,一般也很大,不敢公然破解程序,收到律师函可不是闹着玩儿的。
软件开发者使用到的一些工具,如Jetbrains系列,设计人员需要用到Autodesk公司的产品,基本上使用账户购买的方式来授权。这些软件会定时要求联网到软件厂商的授权服务器。若检查失败,或者一个账号多人使用,很容易就会导致授权失败,程序不可用。
对于第二个需求,为了增加软件被反编译的难度,我们可以采用代码混淆技术。这里也有两个层次的混淆技术:源代码、二进制。像JS、VB这样语言写的程序,需要对写出来的源代码做混淆技术。对于Java、Python等半编译半解释语言,其bytecode是很容易被反编译到源代码的,所以,混淆技术可能作用就不那么大了。对于C/C++写的程序,反编译到源语言是极其困难的,但是,对于简单的模块还是能够反编译到C的,也可读,即使反汇编到汇编语言,也是能够大概了解算法的。对于算法模块而言,这已经相当致命了。所以,需要对二进制做混淆,让反汇编出来的结果基本不可读,增加反编译的难度。
当使用clang/LLVM编译C/C++时,还有专门的混淆工具Obfuscator-llvm。
除了代码混淆,我们还需要防止软件被debug。若获知软件的运行流程,cracker会更容易获知软件信息。一般,加密与授权的算法lib 一般会使用一些技术防止进程被debug。例如safenet lib检测到有debugger附加到进程,就会让程序崩溃。
不管是源代码混淆,还是二进制混淆,混淆工具都可能会出错,会导致测试小组增加工作量。且加密后的软件,很难再通过debugger工具来排查错误,只能借助log、审查代码来解决问题。简直要了命了。有些软件,处于不同授权层次时,会展现出不同的UI以及交互流程。这对于开发团队来讲,提出了额外的要求。需要在架构上对于此需求做准备。
如果有任何意见,欢迎留言讨论。
[ 主页 ]
软件授权与加密技术简单原理相关推荐
- PHP接口开发加密技术实例原理与例子
下面例子简单讲解PHP接口开发加密技术: 如app要请求用户列表,api是"index.php?module=user&action=list" app生成token = ...
- 视频加密技术详解一机一码怎么用?
视频加密技术应用范围很广,可以说大部分的视频所有者都希望自己的视频是有条件才能给用户看的.尤其是在线教育.行业培训.特殊单位(比如医院.大学.出版社等)等等.不同的行业和加密的目的不同,使用的视频加密 ...
- 即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
本文由融云技术团队分享,原题"互联网通信安全之端到端加密技术",内容有较多修订和改动. 1.引言 在上篇<IM聊天系统安全手段之通信连接层加密技术>中,分享了关于通信连 ...
- 小编带你简单了解一下加密技术原理:AES加密标准
随着因特网的发展,信息传输及存储的安全问题成为影响因特网应用发展的重要因素.信息安全技术也就成为了人们研究因特网应用的新热点. 信息安全的研究包括密码理论与技术.安全协议与技术.安全体系结构理论.信息 ...
- 软件加密技术及实现(转载)
标题 软件加密技术及实现 选择自 whinah 的 Blog 关键字 encrypt 软件加密 保护 散列 数字签名 出处 软件加密技术及实现 雷 鹏 ( 桂林电子工业学院 计算 ...
- 一种混合加密方案在软件授权中的应用
拥有知识产权的软件一般采取软件保护手段,需要使用某种方式激活软件才可以使用.软件激活本质是对密文数据进行比较,而密文数据是由软件开发商根据目标机器的特征数据进行加密产生的.激活过程是在认证服务器或者目 ...
- 剖析:从软件加密到软件授权保护
一直在关注软件授权保护相关的技术内容,发现一些基本概念经常容易被我们混淆,比如软件保护,软件加密,硬件加密,软件授权等,下面就阐述一下我对上述概念的理解,以及它们之间的关系. AD:网+线下沙龙 | ...
- 软件加密技术和注册机制加密基础(转)
软件加密技术和注册机制加密基础 本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统 ...
- 软件加密技术和注册机制加密基础
本文是一篇软件加密技术的基础性文章,简要介绍了软件加密的一些基本常识和一些加密产品,适用于国内软件开发商或者个人共享软件开发者阅读参考. 1.加密技术概述 一个密码系统的安全性只在于密钥的保密性,而 ...
最新文章
- 力扣(LeetCode)刷题,简单题(第7期)
- .NET连接SAP系统专题:C#调用RFC代码(三)
- 变异函数 python_使用Python进行变异测试
- request重定向_golang不想http自动处理重定向的解决方案
- MySQL 删除用户权限
- 准确实用,7个优秀的开源中文分词库推荐
- eclipse中如何远程java debug配置
- 电容或电感的电压_低成本电容电感测量电路
- JAVA排课教务系统
- APS先进规划与生产排程系统--介绍
- Inverting the Generator of a GAN 生成器反向
- 傅里叶变换就是这么简单?
- vue中对鼠标划过事件处理方式
- C++十一月月末总结
- 系统错误null是什么意思_为什么NULL是错误的?
- 生成拼音语料及拼音识别转换成中文
- 计算机应用Office2016,Office 2016
- 全国大学计算机专业排名2021,2021全国计算机专业大学排名一览表
- (172)SystemVerilog[打两拍]
- 开源复杂网络分析软件中社团发现算法总结