软件授权与加密技术简单原理

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以及交互流程。这对于开发团队来讲,提出了额外的要求。需要在架构上对于此需求做准备。

 

 

如果有任何意见,欢迎留言讨论。


[ 主页 ]

你可能感兴趣的:(软件工程)