论文部分内容阅读
摘 要:大家知道,共享软件在未注册之前都有某些限制,有的限用多少日子,有的只能用部分功能,也有厚道点的,只是经常弹出提示注册的窗口。不管是哪种,只要软件有一定的实用性,都会很快被破解者盯上。保护与破解之间,就像是一场永不落幕的好戏。为此,本文分析了软件破解中几个重要的专业术语和常见的软件破解方法,并具体介绍了软加密和硬加密技术。
关键词:知识产权 软件加密 软件破解 保护
开发软件时,尤其当用到商业用途时,注册码和激活码是非常重要的,未注册的用户会加上某些限制,如使用天数,延迟,未注册画面等等。但是现在的软件破解技术十分强大,各种国内外大型软件都有注册机制,却同时也不断地被破解,国家一再加大力度,打击非法软件出版物,扶持正版软件,但实际效果并不理想。大多的软件商选择了购买加密产品或者加密技术来保护自己的软件,软件保护一般分为软加密和硬加密。
一、常见的软件破解方法
1、暴力破解法。这是最常见的也是最简单的破解方法,破解者直接利用编辑工具<例如ULTRAEDIT-32>对可执行文件进行修改,也就是说通过修改可属性程序的源文件来达到破解目的。某些元件在验证用户注册信息和注册码时候,如果用户输人的信息与软件通过的算法生成的注册码相等,程序就会注册成功,否则就会注册失败。
2、利用算法注册机。算法注册机是要在分析了软件的注册码算法的基础上,制作出来的一种可以自动生成软件注册码的程序。所以软件的算法很重要,一般软件作者自己也编写,方便软件的销售使用。这类软件加密的特点是一个注册码只能在一台电脑上使用,像和电脑进行了一对一的绑定。使用步骤是首先运行试用的软件,得到本台机器的软件机器码,再用算法注册机算号注册,然后用算法注册机直接算出合适的注册码,最后用算出来的注册码直接注册。
3、利用内存破解。我们知道所有正在运行的程序的数据,全部都要加载到内存中去,软件在进行注册码认证的时候会有个比较的过程,所以我们只须知道所要破解软件的注册码的内存地址,就达到目的了。这种方法的优点是无须花大力气掌握软件注册码的算法,非常节省编写内存注册机的时间。步骤是先加载内存注册机,再通过它去获得内存中软件的真实注册码,或修改内存中软件相关的某些数据,来达到破解软件的目的。主要有2种方式,第一种直接从内存中得到注册码,第二种在内存中模拟已注册程序的运行环境。
4、补丁破解法和文件注册法。补丁破解法是指用相关的补丁程序来修改软件,以达到破解软件的目的。此方法一般是破解软件的验证注册码或时间,基本上都是修改原程序的判断语句。比如程序试用期是一个月,就可以把这个修改掉,来达到无限使用的目的。文件注册法就是把软件的注册内容放到一个文件里,以方便自己或别人用它来注册,主要有注册表导人和注册文件导人两种方式。
二、常用的软件保护技术
1、软件加壳
软件加壳技术是软件安全使用的比较早的技术之一,但是随着加壳技术的不断进步,加壳仍然是许多软件采取的保护措施之一,并没有落伍,而且随着技术的成熟,目前已经有了不少软件支持对其他软件进行加壳。
软件加壳就是通过在windows的PE加载器加载应用程序后,率先取得控制权,之后对要保护的软件进行解密等操作,再交还控制权,从而降低软件被静态反编译的可能。目前安全性能比较好的软件壳是Virtual Machine壳,中文为虚拟壳,这种壳可以很大程度的提升软件的安全性能。软件加壳在提升软件安全性的同时,也降低了软件的运行效率,基本上壳越复杂,软件的运行效率就越低。
当前对于软件壳的破解已经出现了很多的手法,但是对于VM壳的破解还是非常难的,对于软件加壳,最好的办法是自己设计一种算法用来实现保护软件。
2、软件验证
这种技术目前的应用比较广泛,软件会通过某些不起眼的函数来实现对自身的验证,一旦发现自身的特征值结果与原来的特征值不符,就可以认定自己被修改过,从而退出软件,达到保护自己的目的。但是这种验证办法一旦破解者发现了该函数,就可以通过修改该函数达到跳过验证的目的,所以对于验证模块一定要做的隐秘。
另一种验证办法是通过网络验证,这个办法主要是网络游戏程序使用,当软件启动后便会联网对程序进行各项检查,一旦发现异常就退出程序,进而确保程序安全。
软件验证有效的关键是能够很好的隐藏验证模块,一旦验证模块被发现就极有可能被修改,让软件误以为自己安全。对于软件验证这种保护方法,最好的处理方法是采用多模块守护同步验证,这样可以增大软件破解的难度,达到保护软件的目的。
3、代码混淆与垃圾代码
代码混淆与垃圾代码的使用目前在中国研究深度不如国外,对于这方面的研究也稍晚。代码混淆是使用一些看起来有用,实际上并不起作用的代码块用以迷糊逆向者,转移逆向者的思路,增大破解者找到真实有用代码的困难度。垃圾代码是使用花指令或者是把一些垃圾无用的代码插入到正常代码里的一种手法,目前已经出现了向正常代码里插入花指令的软件。
代码混淆与垃圾代码的使用都大大增加了软件逆向的难度,极易使逆向者错过真实的目标。同样的,这些手法也大大的降低了软件的执行效率,并且现在也专门的出现了去除垃圾代码的逆向工具,但是对于代码混淆,只能通过插断点跟踪或者是依靠逆向者出色的个人经验进行破解。
4、进入系统内核保护代码
随着HOOK、ROOKIT技术的普及和发展,各种内核级软件逐渐出现,一些涉及到系统安全的程序,特别是杀毒软件或者是系统辅助软件,纷纷进入到RING0层,然后HOOK系统的关键部位,拦截其他软件对其修改,对自己进行保护。
进入内核级对自己的软件进行保护是一种非常有效的软件保护办法,RING0级别的权限足以让程序做很多事情来实现对自己的保护,但是这却是对用户不负责任的办法。Windows并没有公开其源代码,对于内核普通使用者仅仅是一知半解甚至完全不清楚,多种软件在内核级进行操作相互争夺系统控制权极易引起系统崩溃,给用户造成损失,同时由于软件涉及到了系统安全,其行为除了对系统进行破坏外,已经同流氓软件和病毒相差无几,会引起杀毒软件的拦截。
5、其他方法
除以上所说的方法外,还有一些办法用来实现对软件进行保护,多数是一些小技巧,所以其针对性往往较强,其中很多是针对一些逆向软件、破解软件的工作原理进行反破解和反逆向的技巧,还有一些是针对于内存访问、断点拦截等破解、逆向常用的办法进行反逆向反破解的技巧和办法,除此之外还有许多技巧用来实现对软件的保护。这些技巧在一定程度上降低了程序被逆向的可能,但是要求程序的编写者有较高的逆向与反逆向能力,熟悉逆向的过程和手法,了解其优缺点,并能找到制衡逆向的办法。
软件破解和软件加密就是矛和盾的关系,好的加密效果在于让盗版者在破解被保护的软件时,付出巨大的代价,耗费极大的时间精力,最终被迫放弃攻击。最后我们要认识到软件破解是不道德的,是违法《计算机软件保护条例》的,现如今软件的大众化、市场化,低价化,也让我们有机会有能力去使用正版软件,所以我们要提高觉悟,力所能及的不使用盗版,以实际行动支持中国的软件行业发展。
关键词:知识产权 软件加密 软件破解 保护
开发软件时,尤其当用到商业用途时,注册码和激活码是非常重要的,未注册的用户会加上某些限制,如使用天数,延迟,未注册画面等等。但是现在的软件破解技术十分强大,各种国内外大型软件都有注册机制,却同时也不断地被破解,国家一再加大力度,打击非法软件出版物,扶持正版软件,但实际效果并不理想。大多的软件商选择了购买加密产品或者加密技术来保护自己的软件,软件保护一般分为软加密和硬加密。
一、常见的软件破解方法
1、暴力破解法。这是最常见的也是最简单的破解方法,破解者直接利用编辑工具<例如ULTRAEDIT-32>对可执行文件进行修改,也就是说通过修改可属性程序的源文件来达到破解目的。某些元件在验证用户注册信息和注册码时候,如果用户输人的信息与软件通过的算法生成的注册码相等,程序就会注册成功,否则就会注册失败。
2、利用算法注册机。算法注册机是要在分析了软件的注册码算法的基础上,制作出来的一种可以自动生成软件注册码的程序。所以软件的算法很重要,一般软件作者自己也编写,方便软件的销售使用。这类软件加密的特点是一个注册码只能在一台电脑上使用,像和电脑进行了一对一的绑定。使用步骤是首先运行试用的软件,得到本台机器的软件机器码,再用算法注册机算号注册,然后用算法注册机直接算出合适的注册码,最后用算出来的注册码直接注册。
3、利用内存破解。我们知道所有正在运行的程序的数据,全部都要加载到内存中去,软件在进行注册码认证的时候会有个比较的过程,所以我们只须知道所要破解软件的注册码的内存地址,就达到目的了。这种方法的优点是无须花大力气掌握软件注册码的算法,非常节省编写内存注册机的时间。步骤是先加载内存注册机,再通过它去获得内存中软件的真实注册码,或修改内存中软件相关的某些数据,来达到破解软件的目的。主要有2种方式,第一种直接从内存中得到注册码,第二种在内存中模拟已注册程序的运行环境。
4、补丁破解法和文件注册法。补丁破解法是指用相关的补丁程序来修改软件,以达到破解软件的目的。此方法一般是破解软件的验证注册码或时间,基本上都是修改原程序的判断语句。比如程序试用期是一个月,就可以把这个修改掉,来达到无限使用的目的。文件注册法就是把软件的注册内容放到一个文件里,以方便自己或别人用它来注册,主要有注册表导人和注册文件导人两种方式。
二、常用的软件保护技术
1、软件加壳
软件加壳技术是软件安全使用的比较早的技术之一,但是随着加壳技术的不断进步,加壳仍然是许多软件采取的保护措施之一,并没有落伍,而且随着技术的成熟,目前已经有了不少软件支持对其他软件进行加壳。
软件加壳就是通过在windows的PE加载器加载应用程序后,率先取得控制权,之后对要保护的软件进行解密等操作,再交还控制权,从而降低软件被静态反编译的可能。目前安全性能比较好的软件壳是Virtual Machine壳,中文为虚拟壳,这种壳可以很大程度的提升软件的安全性能。软件加壳在提升软件安全性的同时,也降低了软件的运行效率,基本上壳越复杂,软件的运行效率就越低。
当前对于软件壳的破解已经出现了很多的手法,但是对于VM壳的破解还是非常难的,对于软件加壳,最好的办法是自己设计一种算法用来实现保护软件。
2、软件验证
这种技术目前的应用比较广泛,软件会通过某些不起眼的函数来实现对自身的验证,一旦发现自身的特征值结果与原来的特征值不符,就可以认定自己被修改过,从而退出软件,达到保护自己的目的。但是这种验证办法一旦破解者发现了该函数,就可以通过修改该函数达到跳过验证的目的,所以对于验证模块一定要做的隐秘。
另一种验证办法是通过网络验证,这个办法主要是网络游戏程序使用,当软件启动后便会联网对程序进行各项检查,一旦发现异常就退出程序,进而确保程序安全。
软件验证有效的关键是能够很好的隐藏验证模块,一旦验证模块被发现就极有可能被修改,让软件误以为自己安全。对于软件验证这种保护方法,最好的处理方法是采用多模块守护同步验证,这样可以增大软件破解的难度,达到保护软件的目的。
3、代码混淆与垃圾代码
代码混淆与垃圾代码的使用目前在中国研究深度不如国外,对于这方面的研究也稍晚。代码混淆是使用一些看起来有用,实际上并不起作用的代码块用以迷糊逆向者,转移逆向者的思路,增大破解者找到真实有用代码的困难度。垃圾代码是使用花指令或者是把一些垃圾无用的代码插入到正常代码里的一种手法,目前已经出现了向正常代码里插入花指令的软件。
代码混淆与垃圾代码的使用都大大增加了软件逆向的难度,极易使逆向者错过真实的目标。同样的,这些手法也大大的降低了软件的执行效率,并且现在也专门的出现了去除垃圾代码的逆向工具,但是对于代码混淆,只能通过插断点跟踪或者是依靠逆向者出色的个人经验进行破解。
4、进入系统内核保护代码
随着HOOK、ROOKIT技术的普及和发展,各种内核级软件逐渐出现,一些涉及到系统安全的程序,特别是杀毒软件或者是系统辅助软件,纷纷进入到RING0层,然后HOOK系统的关键部位,拦截其他软件对其修改,对自己进行保护。
进入内核级对自己的软件进行保护是一种非常有效的软件保护办法,RING0级别的权限足以让程序做很多事情来实现对自己的保护,但是这却是对用户不负责任的办法。Windows并没有公开其源代码,对于内核普通使用者仅仅是一知半解甚至完全不清楚,多种软件在内核级进行操作相互争夺系统控制权极易引起系统崩溃,给用户造成损失,同时由于软件涉及到了系统安全,其行为除了对系统进行破坏外,已经同流氓软件和病毒相差无几,会引起杀毒软件的拦截。
5、其他方法
除以上所说的方法外,还有一些办法用来实现对软件进行保护,多数是一些小技巧,所以其针对性往往较强,其中很多是针对一些逆向软件、破解软件的工作原理进行反破解和反逆向的技巧,还有一些是针对于内存访问、断点拦截等破解、逆向常用的办法进行反逆向反破解的技巧和办法,除此之外还有许多技巧用来实现对软件的保护。这些技巧在一定程度上降低了程序被逆向的可能,但是要求程序的编写者有较高的逆向与反逆向能力,熟悉逆向的过程和手法,了解其优缺点,并能找到制衡逆向的办法。
软件破解和软件加密就是矛和盾的关系,好的加密效果在于让盗版者在破解被保护的软件时,付出巨大的代价,耗费极大的时间精力,最终被迫放弃攻击。最后我们要认识到软件破解是不道德的,是违法《计算机软件保护条例》的,现如今软件的大众化、市场化,低价化,也让我们有机会有能力去使用正版软件,所以我们要提高觉悟,力所能及的不使用盗版,以实际行动支持中国的软件行业发展。