虽然使用机器码加注册码模式进行软件授权验证有些落后,但作为学习方法而言是值得的学习的。很久很久以前,基本上的软件授权都采用机器码加注册模式,但这种模式极为脆弱,在电脑高手面前就如同一层窗户纸。
即便如此,给软件添加一件保护外衣总是好的。那么如何在matlab中实现基于计算机硬件设备的机器码呢?第一步就得知道如何用matlab读取计算机硬件信息,采用wmic命令即可轻松完成,这里不再赘述,直接进入下一个环节。
常用的电脑硬件信息有CPUID、主板序列号、硬盘序列号、物理MAC等等,原则上这些信息是独一无二的,但还是可以通过技术手段进行修改的,这里我们暂且不谈该问题。假设每台电脑的硬件信息独一无二,且我们已经通过matlab将所有需要硬件信息读取,那如何来处理这些信息呢?
如果只是简单的让用户提供硬件信息,这是极不安全的验证方式,也不利于保护用户的个人隐私,因此需要对计算机硬件信息进行预处理。一则可以让用户不清楚到底使用哪些硬件信息,二则可以有效保护用户隐私。
这里仅是为了抛砖引玉,所以不用太复杂,将获取的用户信息进行简单的加密来生成机器码。而最简单的文本加密莫过于凯撒加密算法,仅需移位替换即可完成信息加密。为了增强凯撒加密的强度,小编自行对凯撒加密算法进行了升级,即移位替换的字母串不再是规则的“ABCD...”,而是随机打乱之后的,通过引入随机操作的方式来提高破解难度 (其实毫无难度可言,只是个障眼法)。
下面物理MAC为例来演示如何采用凯撒加密方法生成机器码:
% 作者:巴山
% 感谢关注matlab爱好者公众号
clc;clear;
% 随便设置的物理MAC
str = '001B44113AB7';
% 正常字母顺序
tab = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678';
len = length(tab);
% 置随机数种子
% rng(2020315657);
% 随机打乱字母顺序
ntab = tab(randperm(len,len));
% 移位位数
n = 6;
% 重组字符串
if n == 0
ttab = ntab;
elseif n == len
ttab = strcat(ntab(n),ntab(1:n-1));
else
ttab = strcat(ntab(n+1:end),ntab(1:n));
end
% 加密过程
lens = length(str);
sstr = str; % 存储加密后的信息
for k = 1:lens
loc = strfind(ntab,str(k));
sstr(k) = ttab(loc);
end
% 解密过程
jstr = str; % 存储解密后的信息
for k = 1:lens
loc = strfind(ttab,sstr(k));
jstr(k) = ntab(loc);
end
本文仅作为演示用,实际操作过程中切勿使用本文所讲方法。对机器码生成感兴趣的伙伴,可以加原创代码共享Q群与小编详聊。
最后感谢大家的阅读,祝大家生活愉快!
参考资料:https://zh.wikipedia.org/wiki/%E5%87%B1%E6%92%92%E5%AF%86%E7%A2%BC
封面图片:Pixabay + 自行设计