
软件加密与授权思路和原理简析
最近需要对开发的软件设置给定日期后不能使用的限制,给软件使用限制,一般有以下限制方式,或说是授权方式:
- 离线
- 使用日期限制,在某个日期前可使用;
- 使用时间限制,时间段内可使用;
- 使用次数限制;
等等
- 在线
- 每隔固定日期,需要联网才能继续使用;
- 需要联网才能使用;
等等。
1.原理
软件试用版常用时间限制,通常是将安装软件的时间和系统当前时间对比:
- 安装时写入某隐藏文件,用来存储软件安装时间;
- 安装时将时间信息写入注册表;
- 程序本身自修改执行代码(能做到这一步必须对pe格式十分了解,难度很大)。
1.1 源码中限制
下面给出这种方法的C/C++
代码实现:
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
bool is_out_of_date(const int deadline_time_stamp) const
{
time_t cur_time_t = time(nullptr);
const int current_time_stamp = time(&cur_time_t); // 时间戳,距离1970.1.1的秒数
return (current_time_stamp > deadline_time_stamp) ? true : false;
}
更高级的方式,是在不影响源码的情况下,给exe
、dll
等文件加壳。以下内容来自百度百科:
1.2 加壳限制
- 利用特殊的算法,对可执行文件里的资源进行压缩,压缩后的文件可独立运行,解压过程完全隐蔽地在内存中完成;
- 这一层壳附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。
- 加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。
1.3 解压原理
- 加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。现在的CPU都很快,所以这个解压过程你看不出什么东西。软件一下子就打开了,只有你机器配置非常差,才会感觉到不加壳和加壳后的软件运行速度的差别;
- 当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的;
- 通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕;
- 加“壳”虽然增加了CPU负担,但是减少了硬盘读写时间,实际应用时加“壳”以后程序运行速度更快(当然有的加“壳”以后会变慢,那是选择的加“壳”工具问题);
- 一般软件都加“壳”这样不但可以保护自己的软件不被破解、修改还可以增加运行时启动速度;
- 加“壳”不等于木马,我们平时的绝大多数软件都加了自己的专用“壳”;
- RAR和ZIP都是压缩软件,不是加“壳”工具,他们解压时是需要进行磁盘读写,“壳”的解压缩是直接在内存中进行的。用RAR或者ZIP压缩一个病毒你试试,解压缩时杀毒软件肯定会发现。而用加“壳”手段封装木马,能发现的杀毒软件就少得多;
- 木马加壳的原理很简单,在黑客营中提供的多数木马中,很多都是经过处理的,而这些处理就是所谓的加壳。当一个程序生成好后,很轻松的就可以利用诸如资源工具和反汇编工具对它进行修改,但如果程序员给程序加一个壳的话,那么至少这个加了壳的程序就不是那么好修改了,如果想修改就必须先脱壳。
1.4 加壳分类
加壳工具通常分为压缩壳和加密壳两类:
- 压缩壳的特点是减小软件体积大小,加密保护不是重点;
- 加密壳种类比较多,不同的壳侧重点不同,一些壳单纯保护程序,另一些壳提供额外的功能,如提供注册机制、使用次数、时间限制等。
2.破解
既然是根据时间来限制,那么自然可以更改系统时间,或者在一个可控时间的虚拟环境如沙盘中,使其无法达到被限制的日期。
- 破解软件。网上有小伙伴说,可以在安装之后迅速用AnyDay一类软件把它变成”永久试用版”,从而接触限制。网上应该有类似不少的软件;
- 针对时间限制文件放在注册表或者隐藏写入文件的,可以清除注册表信息或者找到隐藏的文件进行清理(有办法就是在安装软件后,立即搜索更改日期为最新的小文件,有时可以挖得出来)。有些软件是在某个不知名的目录中,如
system32\XX\XXXXX\XXXX
的不引人注意且有很多文件的目录中创建一个文件,记录首次安装时间,在卸载时并不删除。
删除相关的隐藏文件或者清理注册表,仍旧被限制使用,可能是没有找到软件隐藏的注册表信息、隐藏文件,可以尝试把系统日期往回调几天看看,反复查找,不过这个方法建议在虚拟机里使用。
3.参考
- 一般试用版软件的时间限制原理是什么?怎么解决啊-CSDN论坛
- 加壳_百度百科