吕 杨,李 超
(公安部第一研究所,北京 100048)
摘 要:逆向工程的一个重要应用就是软件破解。通过反汇编软件的程序,发现软件的加密算法,对软件实施破解。软件的破解是对软件版权和安全的一个重大挑战,通过对软件破解的方法、注册机编写的说明和常用破解工具及软件常用加密算法的介绍,解释了软件破解的整个流程,并通过对某一种软件的实际破解操作,演示了软件破解的过程及注册机的编写。经过探讨软件破解的过程,使软件开发者知己知彼,加强软件的安全意识,提高软件的安全性。 关键词: 软件破解;加密算法;注册机
1 逆向工程
逆向工程是从任何人造的东西中提取知识或者设计规划的过程。当我们无法得到想要的知识、思想和设计理念时,通常使用逆向工程来获取他们。 软件是目前我们周围最复杂,也是最能引发人们兴趣的技术之一,而软件逆向工程就是要打开程序的“外
壳”,观察其内部。当然,在这个过程中我们并不需要螺丝刀。就像软件工程一样,软件逆向工程完全是一个虚拟的过程,只需要C P U和人的思维即可。软件逆向工程需要将技能以及对软件开发和计算机的全面理解结合起来。软件逆向工程融合了下列技术:密码破解、猜字谜、程序设计和逻辑分析等。通常软件破解也是逆向工程的一部分,通过逆向软件程序,解析软件的加密算法,达到破解软件注册限制的目的。
1.1 软件破解
我们都知道很多软件是需要注册的,就是花钱向软件作者购买注册码。当然了,注册码就相当于密码,只有知道密码才能完全使用软件。软件本身都有一个注册的算法,只要我们到它就可以破解了。
1.1.1 软件破解方法
软件破解的方法和具体流程有很多种,这里作了一个简单的总结,不管哪种破解方法,基本上都离不开这几个步骤:
(1)检测壳
所谓“壳”就是专门压缩的工具。 这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,壳的
压缩指的是针对e x e、c o m和d l l等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。壳的作用主要是以下两方面:保护程序不被非法修改和反编译;对程序专门进行压缩,以减小文件大小,方便传播和储存。壳和压缩软件的压缩是有区别的,压缩软件只能够压缩程序,而压缩后的经过壳e x e、c o m和dll等程序文件可以跟正常的程序一样运行。
(2)如果有壳的话,就脱壳
对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把它的壳脱去,解除伪装,还原软件本来的面目。这个过程就叫作脱壳。
脱壳成功的标志是:脱壳后的文件正常运行,功能没有损耗。一般脱壳后的文件长度都会大于原文件的长度。即使同一个文件,采用不同的脱壳软件进行脱壳,由于脱壳软件的机理不通,脱出来的文件大小也不尽相同。
脱壳分为手动脱壳和自动脱壳两种,自动脱壳就是用专门的脱壳机脱;手动脱壳相对自动脱壳,需要的技术含量比较高。
(3)使用ollydbg调试要破解的软件程序。
使用ollydbg调试软件的程序,ollydbg将软件进行反汇编,通过查看反汇编的程序代码,我们可以到软件的注册过程,软件的加密算法等,掌握了软件的注册过程,我们就可以通过跳转软件的运行流程达到破解软件的目的,也可以在掌握了软件
的加密算法后编写注册机完成软件的注册。
(4)保存修改后的反汇编程序,运行查看是否已经破解。
保存的前提是我们修改的软件,如果我们是在软件运行调用动态链接库(dll)时,就不能保存软件了,当然,一般的情况是右键“复制到可执行文件”—“选择”或“全部选择”,一般是全部选择。然后就可以运行破解的软件,看一看是否破解。
(5)制作注册机
通常在掌握了软件的加密算法后,我们就可以自行制作出一个注册机,用来生成注册码,这样可以保证软件是被注册过的,能用其所有的功能。编写注册机的软件可以有很多种,比如delphi等。注册机的编写可以说是软件破解的一个最终成果,通过注册机,可以彻底完成软件破解。
1.1.2 软件破解工具
软件破解需要熟练使用很多工具,如:p e i d. ollydbg.w32asm.importrec,因此,对于软件破解来说,必须熟练使用这些工具才能完成破解,这里介绍几个常用的破解工具:
(1)PEiD
PEiD是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470种P E 文档的加壳类型和签名。P E i D有三种扫描模式:正常扫描模式、深度扫描模式、核心扫描模式。P E i D内置有差错控制的技术,所以一般能确保扫描结果的准确性。前两种扫描模式几乎在瞬间就可得到结果,最后一种有点慢,原因显而易见。
(2) IDApro
I D A p r o是一款静态的、强大的、功能复杂呃交互式反汇编工具,简称IDA,它是一个交互的分析员,用户可以进行进程分解。惟一的缺点就是反汇编的速度比较慢,而且并不自动解决程序中的问题,只是暗示指令的可疑之处。
(3)ollydbg
简称O D。一个新的动态追踪工具,是一款结合动态调试分析和静态分析的Ring3级下的的调试工具,它简单易用,能运行子各个Windows平台工具了。同时还支持插件扩展功能,是目前最强大的调试工具。
1.2 软件加密算法与注册机
1.2.1 常用算法介绍
软件加密的方法有很多中,这里介绍几种常用的算法:
巧克力喷泉机(1)HASH算法
H A S H算法又称为单向散列算法,是一种将任意长度的消息经过各种处理返回一定长度的消息再要算法,H A S H算法是不可逆的。正是由于HASH算法的这种特性,它不能用于加密,只能用于数字签名、数据的完整性校验等。
这里着重介绍H A S H算法中的M D5算法。M D5加密是采用单向加密的加密算法,对于M D5而言,有两个特性是很重要的,第一是任意两段明文数据,加密以后的密文不能是相同的;第二是任意一段明文数据,经过加密以后,其结果必须永远是不变的。前者的意思是不可能有任意两段明文加密以后得到相同的密文,后者的意思是如果我们加密特定的数据,得到的密文一定是相同的。
(2)对称算法
对称算法也称为传统算法或是单密钥算法,就是加密密钥能够从解密密钥中推算出来,反之也成立,其实也就是加密密钥和解密密钥是同一个密钥。对称算法的安全性依赖于密钥。密钥已知就意味着任何人都能对消息进行加密和解密。
D E S算法是对称算法的一种,其入口参数有三个:key、data、mode。key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,k e y用于对数据加密,当模式为解密模式时,key用于对数据解密。
到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的。
(3)公开密钥算法
67算机安全 2011.01
建筑装饰材料技术自动旋转喷雾喷头公开密钥算法是基于数学函数的而不是基于替换和置换的,与使用一个密钥的对称算法不同,公开密钥算法是非对称的,并且它使用两个密钥,用于加密的公钥和用于解密的私钥。
R S A算法是公开密钥算法的一种,R S A的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。R S A的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无需分解大数的算法,那它肯定可以修改成为大数分解算法。目前,R S A的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。
1.2.2 注册机介绍
注册机的种类有很多种,算法注册机是其中一种,算法注册机是在破解者分析了软件的注册码算法后,制作出来的一种可以自动生成软件注册码的程序。由于用这种方式破解的软件和正版注册的一模一样,功能上没有任何区别,所以它是最完美的软件破解方式。下面介绍算法注册机的三种工作流程。
(1)运行未注册软件,得到软件机器码,再用算法注册机算号注册
这类软件加密的特点是一个注册码只能在一台电脑上使用,就像和电脑进行了一对一的绑定。
(2)用算法注册机直接算出注册码
摄像头测试
这类软件的加密方式最普遍,用一个注册码就可以给不同的电脑上的同一软件注册。
(3)用算法注册机直接注册
采用这种注册方式的软件非常少,其特点是一旦运行算法注册机,软件便注册成功了!
2 软件破解案例
对于需要注册才能使用其功能的软件,一般我们可以通过跳转该软件的注册流程,来达到破解软件的目的。下面我们以一种具体的软件为例,通过跳转其注册流程,来达到不需注册,也可以使用软件功能的目的。
这是一款小型的软件,在未注册时,我们点击程序页面上的功能,是无法使用的,软件会提示需要注册之后才能使用它的所有功能,如图1所示。
图1 软件未注册提示无法使用图
按照软件破解的步骤,首先我们检查软件是否加壳,这里利用查壳工具P E I D就可以实现。我们将软件程序拖入P E I D中,在会提示是否加壳的信息框中,工具提示的是“Brland Delphi 6.0-7.0”,而不是提示软件已加壳,因此该软件并未加壳,这样软件破解起来就容易多了。如图2所示。
图2 软件未加壳图
由于软件并没有加壳,因此我们利用反汇编工具o l l y d b g对软件进行逆向分析,我们查软件错误提示的文本字串,也就是“You can not use this feature before you register”,在内存地址的005B1157处,根据此提示判断,在出现该提示之前,程序作了是否注册的判断,由于软件并没有注册,因此程序跳转到出现错误提示的代码段上。据此我们发现,在错误提示的反汇编代码前面,也就是内存地址为005B114E的地方,有一个程序的跳转语句,这个语句就是判断是否注册的语句,我们修改这个跳转语句,使其跳过会出现错误提示的代码段,直接运行能够运行软件功能的代码段,我们可以不用注册就能使用软件了。如图3所示。
图3 关键跳转语句图
3.1 算法分析
能够不进行注册就使用软件的功能,只是软件破解的初级阶段,如果我们能够分析出来软件注册的过程,明白注册的原理,我们就可以成功地完成软件的注册,达到彻底破解软件的目的。因此,分析软
件加密算法是非常重要的一个环节。
在上面的软件中,我们通过点击注册按钮,发现需要输入用户名和注册码才能进行注册,因此我们首先输入一个错误的用户名和密码,软件会提示我们输入的信息是无效的,这个时候我们根据提示的文本信息,到O L L Y D B G中文本信息所在的代码段中的位置,也就是内存地址为005A E A C8的地方,按照软件对于信息的处理过程,软件中对于输入信息的处理很有可能就在005A E A C8的前面进行,也就是通过调用注册的算法函数来完成检查。在内存地址005A E A B8处我们到一个CALL函数调用,在此断点进行分析。如图4所示。
图4 注册算法函数图
通过对函数的具体分析,我们发现在该函数里程序进行了注册的验证过程。对于函数代码的关键部分,在每条语句的后面添加了注释。如图5所示。
图5 关键函数分析图
通过分析可以看出,用户输入的用户名和字符串‘m i n i’相连后做M D5运算,然后取前4位并转换成大写,再与用户输入的注册码比较,不相同有效的注册码是什么了,这样这个软件的注册算法我们就完全掌握了。
螺杆钻具
3.2 注册机编写
通过对软件注册算法的分析,我们已经可以完成软件的注册了,并且,我们还可以通过输入不同的用户名,得出不同的注册码来使用,为了更方便地使用注册码注册软件,我们可以根据注册算法写一个注册机,让它自动生成注册码,使注册更容易。
我们可以使用DELPHI来编写注册机,首先我们读取用户输入的字符串,并且保证必须多于4位,然后将字符串“mini”连接在其后面组成一个新的字符串,然后将该字符串使用M D5加密,然后获取前4位,就得到了注册码。编写好的注册机如图
6所示。
图6 注册机图
通过注册机自动生成的注册码,我们就可以顺利地完成注册了,这是非常方便的,也是软件破解最终要完成的工作。
实心锥形喷嘴4 结论
虽然软件的破解可以给我们使用软件带来很多方便,但是,这种方便建立在非法使用软件的基础上,
当我们使用破解软件的时候,已经侵犯了他人对于软件的拥有权。因此,我们只有通过学习软件的破解方法,才能知己知彼,有的放矢,提高软件的版权意识,增强软件防破解的能力,使软件的使用更安全。
参考文献:
[1]Reversing:逆向工程揭密.Elada Eilam著,Elliot Chikofskuy
作序,韩琪、杨艳、王玉英、李娜等译.北京,电子工业
出版社.2007.9.[309-315].
[2]史子荣.软件加密技术从入门到精通.北京,清华大学
出版社.2007.5.[120-130].
作者简介:吕 杨(1983-),男,助理工程师,硕士研究生。
69算机安全 2011.01