软件破解与防破解的那些事:云服务器bcc的价格

時間:2024-01-01 00:51:11 作者:云服务器bcc的价格 熱度:云服务器bcc的价格
云服务器bcc的价格描述::

首先我们要领会一点

理论上不存在无法破解的软件,但也并不是说破解软件比开发容易一万倍

防破解的目标不是要做一个无法破解的软件,而是让破解软件的成本远大于买入软件的成本

现在笔者简略表演几个有典型性的软件破解,当然,要看懂下面的内容,需要一点点C语言的编程底层

我们先来一个最最简朴的软件破解,假设我们写了一个软件,它的注册策略代码如下

includestdioh
includestringh
intmain()
{
	charKey[32];
	printf(请输入注册码);
	gets(Key);
	if(strcmp(Key,abc123456)==0)
		printf(注册胜利);
	else
		printf(注册失败);
}

把他编译成exe,运行一下

要破解怎么办呢?超简朴的,你把这个程序后缀改成txt然后打开,搜索注册码然后翻一翻key就找到了

别笑,就算是今日,仍然有一大堆软件使用这种软件保卫机制,不过这类软件要不大多不怎么值钱比如xx控制系统,计算器之类的,要不就是软件作者别有专注防君子不防小人你可能会问了,疑问出在那了呢,这类保卫机制的疑问是,目前大部门的编译器都会将字符串常量直接存储在可执行文件组织中,所以你要是硬编码key,那么上面这种破解想法几乎是屡试不爽甚至不需要什么逆向破解知识就能搞定

那么,让我们进入防破解V20时代,为了与时俱进,我们稍微把上面的代码改一下

includestdioh
includestringh
includeindosh
includemathh

intmain()
{
	chariKey[32];
	charKey[32];
	char[32];
	inti=0xabc1d3f;
	sprintf(Key,x,i*8+123456);
	printf(你的机器码是x\n,i);
	printf(请输入注册码);
	gets(iKey);
	if(strcmp(Key,iKey)==0)
		MessageBoxA(0,注册胜利,,MB_OK);
	else
		MessageBoxA(0,注册失败,,MB_OK);
}

现在TXT破解法已经不顶用了,你看,key找不到了

怎么样,这种保卫策略是不是认识的味道认识的配方,这个机器码可以从网卡MAC,CPU型号,内存大小等等等等去生成,当然,key的算法也可以拉上MD5,SHA等等等等策略来弄而不是简简朴单的乘一个8再加上123456,总之从机器码到注册码的算法你能玩出花

但,这又有什么卵用呢,打开ollydbg,对MessageBoxA下断点(也就是弹窗的函数)

然后输入一个过错的注册码,命中断点,很快,我们来到了判断注册码是否正确的逻辑处置代码

你猜猜,要是我们把这个判断注册码是否正确的代码给它删了)(nop指令填充)会怎么样

你会发明,握草,不管我输入什么,都是注册胜利

那么疑问出在哪了呢,你发明,万恶之源都始于那个MessageBox函数,正是这个函数,让我们顺藤摸瓜找到了注册码判断代码,时至今天,仍然有非常非常大的一部门软件采用着这个二三十年前就在用的保卫策略,每年死于MessageBox被破解的软件,围起来可以绕地球三圈也就是这个保卫机制,功绩了所谓软件发布后十分钟就被破解的悲惨结果

这个时候,你痛定思痛,mmp,有内鬼,既然MessageBox不好用,那我不用就是了,于是你把代码改成下面这样

includestdioh
includestringh
includeindosh
includemathh

intmain()
{
	chariKey[32];
	charKey[32];
	char[32];
	inti=0xabc1d3f;
	sprintf(Key,x,i*8+123456);
	printf(你的机器码是x\n,i);
	printf(请输入注册码);
	gets(iKey);
	if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
}

你看,啧只要你注册码没输对,我直接把软件退出(或者跳到别的场所),看你怎么办

惋惜,内鬼年年有,注册胜利几个字还是出卖了你,打开ollydbg,查找字符串参考,然后双击

哦豁,完蛋,换汤不换药,还是给逮住了

你察觉到这样一个场所判断注册码实在不靠谱,所以,你变更了手段,把查验注册码的代码仿制了n遍,或者逐字符查验注册码的精确性,还有人将注册胜利等字样进行加密或混淆,等到要用的时候再掏出来

includestdioh
includestringh
includeindosh
includemathh

intmain()
{
	chariKey[32];
	charKey[32];
	char[32];
	inti=0xabc1d3f;
	sprintf(Key,x,i*8+123456);
	printf(你的机器码是x\n,i);
	printf(请输入注册码);
	gets(iKey);
	if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
}

你放心,不管你仿制多少次,要找出来都是时间疑问,吃枣是会被破解的同时只要你要用到明文字符串你早晚还是要解密的,这种策略相似于加upx压缩壳,只需要等待数据解压完成,所有的东西又都是明文的了。因此对照智慧的做法是,要用时解密,用完后立刻把明文抹掉,这样说不定能拖延更长的时间。但这仍然也是时间疑问。

你开端发明,与其揪出内鬼,不如主动出击,也就是我们着名的与其解决疑问不如解决提出疑问的人,终于,你开端对调试器下手了,然后你胜利进化到防破解V25时代

这个时候,不得不介绍一个老掉牙的但非常驰名的函数

IsDebugPresent

你可能有点懵,这个函数是干啥子用的?,简朴来说,当我们破解一个程序的时候,大部门场合下我们会打开一个叫调试器的东西来对软件进行反编译解析,诶,重点就在这,IsDebugPresent这个函数,就能检测我们的程序有没有被一个调试器附加,你想啊,正常场合我们用软件谁会吃饱撑着附加一个调试器来用,你要是用调试器附加我,你肯定就是想干坏事

于是,你开端把代码写成这样

includestdioh
includestringh
includeindosh
includemathh

intmain()
{
	chariKey[32];
	charKey[32];
	char[32];
	inti=0xabc1d3f;
	if(IsDebuggerPresent())
	{
		MessageBoxA(NULL,小样,就你还破解我的程序,回家喝奶去吧,,MB_OK);
		return0;
	}
	sprintf(Key,x,i*8+123456);
	printf(你的机器码是x\n,i);
	printf(请输入注册码);
	gets(iKey);
	if(strcmp(Key,iKey)==0)
		printf(注册胜利);
	else
		exit(0);
}

于是,当下次再ollydbg加载调试你的程序的时候,就会显露下面的情景

曾经很长一段时间(包括现在),许多软件或加密壳都会查验是否有调试器正在调试自己,比如tls段会在加载时被执行,假如查验到自己正在被人调试破解,就会设置一个tag让程序跑到没啥用的场所去或者直接退出重新,也有应用变形的PE头让调试器无法加载,总之策略许多

惋惜这还是没什么卵用,比如IsDebugPresent可以通过改动FS存放器的标记位来让它完全哑火,同样的策略包括但不限于查验int 3软中断,Ra Call,Query PEB,查验Debug Privilege和父进程等等等等,都有绕过的方式

暗桩嘛,只要你插,一个一个拔老是拔的完的

好了,还有啥法子不,放心道高一尺魔高一丈,现在我们来到了现在最流行的,防破解V30 VMP时代,

先澄清一下,这里的VMP并不是VMP壳,它全程叫Virtual Machine Protection,简朴来说,为啥我们破解软件那么轻车熟路,还不是由于x86 x64 arm的那堆汇编指令集我们太认识了呗要是我们自己发现一套指令集,然后用这个指令集写程序并运行在我们自己的虚拟机上,那么,破解者一进来,看到的不就是一脸懵逼了么

惋惜的是,VM的运行机制决择了它可能造成几十倍乃至几百倍的功能亏本,所以,VMP必要用于保卫那种关键且不是功能瓶颈的代码,否者你的软件跑起来就会像

那么,VMP保卫机制是美好的么,当然不是,VMP说白了,也只能做到延长解析时间,你要是把VMP做的充足复杂,充足让一个Cracker醉生梦死了,但是假如这个时间充足久,你的软件充足的值钱让人有欲望来破解, 他们仍然可以充裕地解析你VM机的运行机制,当你的VM机运行机制被摸清了,软件就离失守不远了

不过你可以放心,解析VM机执行机理,可比自己写VM机密头疼多了,终究一个是你需要通过代码来揣测别人的思路,而另一个本身是自己的思路转为代码,因此基于这点可以说

破解软件比制作软件简朴,在许多场合下,不存在的!

你可能会问了,为什么现在市面上那么多软件,那么多游戏,买入了那么多听起来那么牛逼的保卫软件,结局还是被破解了而且刚发出来一天就被破解了

其实很大的疑问就出在这个商务保卫软件(比如保卫壳)上,由于这类保卫壳大多都会被卖给一大票的软件开发商,有一句话叫树大招风,就像现在流行的VMP保卫机制,之所以能保卫,是由于其运行机理破解者不领会,假如你这个软件就给自己用,而且你这软件还不怎么值钱,除非大佬空洞孤单冷,不然谁会有那闲时光去解析你的虚拟机是怎么跑的,但商务保卫壳差异,不论其使用什么样的保卫机制,只要解析过一遍搞清晰了,几乎所有采用这类保卫机制的软件都会失守,而且在灰色产业上这种破解甚至还颇有利可图,只要这个保卫机制不更新,一次投入,长期回报于是只有说在第一次解析时会花上很长的时间,之后就都只是玩套路了

因此,买入商务保卫壳,其实其保卫功效并没有想象中的那么强,很可能在灰色产业中形同虚设,甚至一个具有反逆向底层的码农自己写的说不定还更有功效当然一个软件是被破解概率高不高,仍然是我之前提到的那句话防破解不是让软件无法破解,而是让破解软件的成本远大于买入软件的成本

终究你说你一个软件拿来开源都没人爱用,你还整天琢磨着怎么才不会被破解,寒掺不老铁

那么你会开端问了,有没有更给力点的防破解专业?似乎之前说的说来说去,无非就是拖延时间,诶,这个我们要摆正心态,不论是加密还是破解,其实说白了终极就是拖延时间,你看那些加密算法,根据其数学理论,假如要破解,它的计算量就算你把全世界的计算机加起来一块算,也够你算三个世界末日了

不过别担心,更给力的想法还是有的,你想啊,为什么我们之前说了那么多软件都被破解了,最最关键的一个原因,是我们能搞到代码,即使这个代码已经是途经编译后的一堆汇编指令,但只要我们有这堆代码,早晚我们还是能搞懂这个程序是怎么回事的,然后我们就可以对症下药干坏事

这就像给你有一包面粉,而程序就是一个面包机,你把面粉塞进面包机做出了面包,有天你好奇啊,这面包机咋整咋整就出来一块面包了呢,你就动手把面包机拆了,然后你就知道面包机是怎么回事了

所以有没有设法不让用户知道我们的代码是什么样的呢,就像你把面粉交给了面包师傅做面包,这个面包是怎么做的,你就只能指望看面包师傅有没有这个情绪通知你了

为此,有请早期一个相当流行且普遍的游戏防破解工具(物理)

你现在可能脸色是一脸问号,但我没和你开玩笑,在2000年时代,大部门的游戏运行在光盘CD中,但盗版也容易啊,把光盘里的数据一仿制下来,然后就可以仿制出一万张盗版光碟,所以游戏厂商们就想设法,想来想去就想到了榔头

其操纵想法很简朴,拿榔头和钉子,在光盘上钉几条刮痕出来,造成人工的坏道,然后再将数据烧录到正确的扇区中,这样下来固然程序还是可以正确运行,但是当光头读盘读到这个坏道的时候,就会读不过去,于是你会发明打开光盘后,没有关键的文件,这样你就没设法将游戏或者说程序拷贝出来了,同时还会对坏道的位置做一个标志,游戏运行时也会查验这个标志,那么想要盗版你就也得拿起榔头在光盘同样的位置上砸出同样的刮痕出来,当然,这几乎是不可能的

当年这个专业当年又叫防盗环专业,但不管它的名字叫的多高大上,本性上就和榔头钉钉子如出一辙是同样的东西,惋惜虚拟光驱显露后,同样有设法复刻光盘的一切数据(包括坏道),所以,这个专业拿到今日来看并没有什么卵用不过这仍然给了我们充足的激励

现在让我们进入防破解V3x时代,之所以不叫V40是由于这类专业很早就有并且比VMP保卫流行的时间还早的多,而且它可能是最近接理论上不可破解的防破解策略

我们先聊的是加密狗或者又叫Ukey保卫,就是运行软件你需要插入一个U盘一样的东西到电脑上,实际上这个Ukey是一个微型电脑,软件的一些关键的算法和代码,都在这个UKey的芯片里,当我们PC上的软件运行后,当我们需要执行这类关键算法时,我们会向这个Ukey传递数据,然后UKey将结局计算出来,返回给PC的软件上,这样就避免了用户直接能够逆向赢得关键的算法代码,破解也就无从谈起了这也就是为什么到了今日,Ukey保卫仍然非常的流行

惋惜,UKey保卫仍然有诸多的限制,首先就是带着一个Ukey贼麻烦,万一UKey丢了补办是一个麻烦事,运行软件插Ukey也是个神烦的事情,同时,UKey的功能决择了它可能不能执行一些过于耗损功能和内存空间的代码,数据交互也因带宽和通信耽搁会造成功能亏本,所以它和VMP保卫机制一样,同样不是一个省油的灯,同时开发人员的程度不到位,该保卫的代码没保卫,保卫来没啥用的代码塞了一堆,也会给Cracker带来时机,而且只要你的软件够值钱,你是不是太鄙视我华强北了

把Ukey拆开来,采用某种药水剥开外层找到内部的芯片并接上已经熔断的读引脚(有些芯片连这步都省了,直接热风枪一吹接板读ROM) 然后再把芯片的代码给读出来

于是,UKey保卫也公布失守

你发明,只要是把实体的东西交到用户的手上,早晚会出疑问,所以,这个Ukey保卫现在大部门场合下变成了带数字证书的网络验证模式,这类的关键代码从Ukey转移到了服务器上,数据交互通过网络来做其实这种保卫机制和Ukey保卫原理是一样的并没有什么本性的区别,但同样处于网络带宽也耽搁的斟酌,同样具有一定的功能亏本和设计不足

需要重点提及的是,这类网络保卫的策略必要专门设计以保卫程序中的一系列关键性能代码而不是防破解代码(比如代码解密,注册验证),由于后者几乎没啥卵用仍然能够将防破解的代码清理或Dump解密代码或仿造本地服务器实现破解

所以你指望一堆什么x盾,x宝一键能一劳永逸一键保卫程序,程序必要途经技术码农而不是彩笔专门的设计才能起到其应有的保卫功效

但现实场合是,处于用户离线运行和功能耽搁瓶颈的斟酌,这种网络保卫设计的往往都有很大的不足,因此,并不是说这东西不好,而是梦想很饱满现实很骨干,实在无能为力啊

当然,代码保卫的策略许多且花样弄法也许多,本文只是初略介绍几个对照有典型性的破解和反破解策略如有嗜好想要学

站長聲明:以上關於【软件破解与防破解的那些事-云服务器bcc的价格】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。