1、申 请 I D:唯道集虚
2、个人邮箱:goefang@outlook.com
3、原创技术文章:
我虽然是学习Unity的,但无奈学艺不精,而且刚刚重装系统忘记备份很多东西了(~_~) 所以嘛。。只找到了个别的文章,然而有关破解的又少之又少,便粘一个很久以前的一篇制作带有激活码程序的教程,这是我刚学C#一个月时写的,只适合最最基础的新手,大神就不用看了,还有一个我因为年久失修废弃的博客,只有一个文章,那是一个破解补丁的发布,关键是有破解原理,可以看看(其实没有任何用。。)
前言
激活码就目前使用范围,主要分两种:一种是一般软件的激活码;一种是游戏激活码。一些软件为了使他们的软件面对特定的人群,在软件上添加了密码程序,也使用激活码,只有当你输入正确的密码才能正常使用此软件。就好比用一把锁把软件锁起来,只有有钥匙的人才能使用该软件。游戏激活码作为网游新作吸引玩家眼球的手段及控制游戏测试人数的控制方式,目前市场上所有游戏的公开注册之前都在使用激活码作为绝对重要的手段。
而我又为什么要研究激活码呢?前一段时间我曾要为一个程序加密,当时误以为openshift被墙了,所以第一目标就是单机的激活码(好像没什么关系哈),我本想找相关函数的,但是在网上却发现网上连个教程都没有,还有些初学者问此类的问题,于是便想将自己的经验整合成一篇文章,于是便有了这篇文章。
Ⅰ 机器码
那么怎么获取激活码呢,这里就要说到机器码了,一般的单机程序都是通过机器码来通过某种特定的复杂算法来得到的,而机器码就是将硬件序列号经过一系列加密、散列形成的一串序列号,硬盘,CPU都有一个无法修改的识别码,所以它是不可修改的。
那要怎么获得机器码呢?以C#为例,C# 提供了ManagementClass类来获取本机的一些基本信息,我们就可以用它来帮助生成机器码,而不同语言的语法不同,故在此不再赘述。
获得本机信息(如设备硬盘的卷标号、CPU的序列号等)之后,就要对它(们)做处理,有些信息包含字母,开发者可以将之转换成Ascii值后通过加密转换成数字或直接转换成相应的数字(其实无甚大区别),就这样,便获得了一堆数字,下一步就是要对它进行处理和加密
数字的处理就是将这些数字整合到一起,就比方说一个机器吗是包含设备硬盘的卷标号通过运算获得的数字和硬件序列号运算获得的数字相计算而成的,这可以说是很简单的,就比如说:
[C#] 纯文本查看 复制代码 //激活码的元素一为string类型的变量str1
//激活码的元素二为string类型的变量str2
char temp; //用作获取激活码字符
temp=str1[1] //temp变量为变量str1的首个字符(『0』)
int Temp;
int CBJH=Convert.ToInt(str2);
CBJH*=Temp
现在,变量CBJH就是一个经过了简单计算的变量了,在经过几次这个思路的运算,机器码就算基本成型了 可是此时,又出现了一个问题——机器码的位数经过多次运算,变得不好控制了,但其实,但凡有一丁点经验的程序员都可以解决这个问题,这可以用一个简单的方法来解决: [Asm] 纯文本查看 复制代码 //目标:将整数类型变量fang的位数在改变其根本的情况下控制在<变量Num>位下
fang%=Num+1
最后,一个任意位数的机器码就出来了
Ⅱ 激活码
· 与机器码相比,激活码就简单多了,因为它的算法都是前面的知识,这里先扩展一下前面涉及到的带有”『0』“标记(还请ctrl+f一下)的知识:访问每个字符的这个功能在有些时候有大用途,就比如说机器码的第n个、第n+3个、第2n个字符暗藏版本信息,那么计算激活码的程序就可以先获取这几个字符,逆向算出程序的版本号,不同的版本运用不同的算法或函数所需的不同的参数,加强加密强度
· 其次要说的是激活码所需的机器码的获得,这一是可以通过网络加密传输,二是人工服务,三则是现在那些主流大软件所用的极难破解的程序所用的那套与本文无关的方法,但对于非商业软件或不大出名的软件来说,这些已经够用了,因为很少有人以个人身份破解你一个默默无名的小软件的。
· 网络方面涉及高级编程,故不于此过多赘述。
总结 激活码方面总结本想用一个程序代替的,但唯恐不明细,便通过自制的图片来总结一下流程。
前言 |