最专业的脚本、辅助学习平台,易语言培训/C++教程学习基地
1 2 3
天野学院 门户 编程人生 查看内容

所有软件都可以被破解吗?

2018-7-21 02:34| 发布者: admin| 查看: 541| 评论: 0|来自: 知乎

摘要: 也就是说,破解软件不是不可能,而是一个时间问题和价值问题。假设一个付费软件做的非常赞,破解它要花费一年多的时间,而作者的定价仅仅是1元就可以终身免费,那么谁还会花那么多时间去破解这个软件呢? ...

实际上,任何一个靠注册码作为一个开关来限制程序功能的程序,都是理论可破解的。
为什么可以破解呢?这还得从程序的构造开始说起。

一个付费软件一般都是这样的——在你的程序上做了一些小的限制,让你无法使用付费版的某些功能;亦或是给你一个使用时间的限定,在这个"规定的"时间内,超过这个时间你就不得不花钱去把这个软件请回来。
那么,cracker又是怎么给这些程序加上"无期徒刑"的呢?
我们知道,这些软件之所以能够限定你程序的功能,靠的是一个授权验证。这个验证可以多种多样,可以是电脑的注册表,也可以是系统时间,还可以是版本号,再或者是网络的一个http请求……总之,如果你不符合这个条件了,程序就会根据作者的设定,把相应的功能锁死。
但是呢,问题也正是出在了这里。程序的功能是完全的,只是因为一些原因被关闭了而已。而cracker要做的,就是强行启动这些被关闭的功能。
强行启动这些被关闭的功能,cracker可谓是绞尽脑汁,用尽手法。我们最常见的破解手法就是硬性修改程序的机器码,cracker拿到一个程序之后,通过ollydbg这样的软件来将验证的逻辑修改掉,达到突破授权验证的目的。

不理解?好,我们来看看这一个小的逻辑:
01:读取名称叫做zhuce.txt的文件
02:如果这个文件存在,跳到04
03:提示用户输入注册码
04:系统检测输入的注册码是否正确
05:如果注册码不正确,跳到08
06:注册码写入到zhuce.txt文件里面
07:注册码验证通过,启用限制功能,本逻辑执行完毕
08:注册码校验失败,停用限制功能,本逻辑执行完毕
这就是一个典型的注册码验证系统。如果我们要修改这个逻辑,我们应该怎么改呢?
如果按照上面的说法,cracker们会修改第05行逻辑,改成下面的:
05:如果注册码正确,跳到08
或者索性修改成
05:这是一行空指令,啥都不干

这样整个程序的逻辑就被修改了,也就达到了软件破解的目的。
当然,cracker们也可以在04行下断点,从堆栈中强行揪出cpu正在对比的注册码,从而拿到真正的注册码来进行注册。

这个简单的原理,被大批量应用之后就成了我们目前看到的这一切。那么,为什么破解的软件那么多呢?
破解软件好比写代码,刷github,挖web漏洞一样,这是一种兴趣。cracker们喜欢破掉软件之后的那种成就感,所以,被破解的软件日益增多。
其实,我也是破解过软件的,这种感觉我着实清楚。在cracker们看来,没有什么比破解掉一个软件之后的成就感更为开心了。还记得我们当年刚刚写出一个hello world程序,在屏幕上成功输出第一句话时的心情吗?
“哇,我可以指挥电脑干一件事呀!”
同样,对于cracker的心情也是一样的:
“哇,我能够用我的超能力来改变这一切呀!”
因此,cracker总是乐此不疲的破软件,一个个软件接连被破,开发者看在眼里,疼在心里。

当开发者知道了这一切的来龙去脉之后,开发者就会想办法去阻止破解的行为,阻止的方法无非就是给破解的过程增加难度和干扰。
于是,壳诞生了。

壳可以将一个程序给套在里面,可以非常直观的理解为一个程序的外壳。开发者加的外壳,一般都是一些保护壳,到目前为止还没有发现为了防破解而给自己的软件加单纯的压缩壳的。
保护壳的保护机理一般都是反调试器、反虚拟机、垃圾指令、代码虚拟化(或者混淆)等,程序运行起来是没有什么太大问题的,但是让一个cracker的逆向过程变得异常艰辛。
但是加壳有了,相对应的脱壳也就会出现。由于壳的滥用,这引起了一些cracker大牛的注意。cracker大牛通过分析壳的运作机理,模拟壳的环境,通过隐藏调试器等方式躲过壳的反调试功能。毕竟能运行的东西总是理论可修改的,在大牛们的研究下,一个个脱壳机或者脱壳教程就这么出现了。直到现在,加壳和脱壳之间的较量,仍然是那么激烈……

既然壳被脱了,开发者还是不甘心。于是想到了暗桩。
暗桩代码,一般正常使用情况下是不会触发的。它到底是什么呢?它有可能是一小段自校验代码,在你修改了他的程序之后,程序发现自己被修改而自动退出。也可能是一小段警告代码,给你来个小的框框,提示“XXX你个逗13别修改我的程序!”这类的东西。心怀恶意的开发者则是喜欢使用威力更大的东西,比如给你来个蓝屏,格式化你的硬盘,给你加硬盘锁(江民硬盘锁是典型的例子),或者是潜伏一段时间,当你的程序使用一段时间后突然清空程序中的全部数据,让你损失惨重。
暗桩无疑是cracker们最头疼的问题,当然有了暗桩,就有相应的去暗桩手段。cracker为了防止这类代码的破坏,总是喜欢在虚拟机内搞这些东西,即便是不幸中招,也可以利用虚拟机的快照来实现时光倒流。而去暗桩的手段无非两种,第一是摸清楚所有的暗桩,尽量不去触发它;第二是和破解软件一样,硬性修改这些代码。

就这样,本地验证逐渐的没落了……
云的时代正在崛起。

有一些软件,本身代码是不全的,比如软件下载下来就是一个试用版,相应的功能根本就没有,当你购买了这个软件之后会给你一个完整版的软件。
这下可好,除非cracker去入侵开发者的服务器,或者是共享自己的已付费版,否则是没法破解这个软件的。
同样的道理,有些软件代码也是不全的,但是和上面的方式有点不同——它依赖于网络来工作。一些数据的处理和计算,是在服务器上进行的。比如图片云识别,当你购买了这个服务之后,你就可以在软件上登录你的账号,然后将一张图片通过这个软件发到服务器上去,服务器验证了你的授权信息有效之后进行识别,并将识别结果返还给你。而整个核心的过程没有在你的软件上实现,又谈何破解?
破解的方法一样,除非cracker去入侵服务器,否则没有办法破解的。

但是,你会发现,无论是什么样的软件,都是理论可破解的。即便是云计算,cracker还有最后一招,入侵服务器。

也就是说,破解软件不是不可能,而是一个时间问题和价值问题。假设一个付费软件做的非常赞,破解它要花费一年多的时间,而作者的定价仅仅是1元就可以终身免费,那么谁还会花那么多时间去破解这个软件呢?

所以说,话归到底,每个软件都是理论可破解的,破解它只是一个时间和价值问题。

鲜花

握手

雷人

路过

鸡蛋

最新评论

相关分类

关闭

站长推荐上一条 /8 下一条

 
 
工作时间:
9:00-22:00
天野学院2群:648301976(建议加好友再发信息,有时候直接发消息可能收不到))
返回顶部