基本常识

来源:互联网 发布:java api书籍 编辑:程序博客网 时间:2024/04/29 08:08

软件保护与解密

    软件的破解技术与保护技术是矛与盾的关系,它们是在相互斗争中发展进步的。两者在技术上的较量归根到底是一种利益的冲突。软件开发者为了维护自身的商业利益,不断地寻找各种有效的技术来保护自身的软件版权,推迟软件被破解的时间;而破解者则受盗版所带来的高额利润的驱使或处于纯粹的个人兴趣,而不断开发新的破解工具,针对新出现的保护方式进行跟踪分析以找到相应的破解方法。从理论上讲,几乎没有破解不了的保护。软件保护方式的设计应在一开始就作为软件开发的一部分来考虑,选择一个平衡点。

    在桌面操作系统中,微软的产品自然是独霸天下,一般个人用户接触最多,研究的自然也更多。在DOS时代就有了不少较好的软件保护技术,而在DOS中使用的最多的恐怕要算软盘指纹防拷贝技术了。由于DOS操作系统的脆弱性,在其中运行的普遍应用程序几乎可以访问系统中的任何资源,如直接访问任何物理内存,直接读写任何磁盘扇区,直接读写任何I/O端口等,这给软件保护着提供了极大的自由度,是其可以设计一些至今仍为人们称道的保护技术;自W

indows95开始(特别是WindowsNT和Windows2000这样严格意义上的多用户操作系统),操作系统利用硬件特性增强了对自身的保护,将自己运行在Ring 0 特权级中,使得软件保护技术在一定程度上受到一些限制。开发者要想突破Ring 3的限制,一般需要编写驱动程序,如读写并口上的软件狗的驱动程序等,这增加了开发难度和周期,自然也增加了成本。由于Win32程序内存寻址使用的是相对简单的平坦寻址模式(其采用的PE文件格式也相应地比以前的16为EXE程序的格式要容易处理一些),并且Win32程序大量调用系统提供的API,而Win32平台上的调试器如SoftICE等恰好有针对API设置断点的强大功能,因而这些特点都给跟踪破解带来极大的方便。

 

软件分析技术

        静态分析技术

所谓静态分析即从反汇编出来的程序清单上分析,最常用的方法是从提示信息入手。日前,大多数软件在设计时,都采用人机对话方式。所谓人机对话,即在软件运行过程中需要由用户选择或输入的地方,软件即显示相应的提示信息,并等待用户的选择或输入。然后根据用户的选择或输入,出现一串提示信息,以反映是正确运行还是出现错误,并给出相应的提示消息,或帮助信息。为此,如果对静态反汇编出来的程序清单进行阅读,通过显示提示信息的程序段,就可知道在显示提示信息前后的程序片段所完成的功能,从而宏观了解软件的编程思路。以前常用的静态分析工具是W32Dasm , IDA 和HIEW 等,现在的网上的很多,而且W32Dasm 的最新版本提供了更加强大的功能。

         动态分析技术

虽然从静态上可以了解各个模块的功能以及整个软件的编程思路,但是,并不可能真正地了解软件中各个模块的技术细节。对于被分析的软件来说,静态分析只是工作的第一步,动态跟踪是分析软件的关键所在。所谓动态跟踪主要是指利用SoftICE或TRW2000等调试工具,一步步跟踪分析。

            1、对软件进行粗跟踪

所谓粗跟踪,即在跟踪时要大块快地跟踪。也就是说,每次遇到调用指令CALL,重复操作指令REP,循环操作指令LOOP以及中断调用指令INT等,一般不要跟踪进去,而是根据执行结果分析该段程序的功能。在此设置断点是很重要的环节,如何合理的设置中断断点呢?这就需要了解Win32 API函数了,根据当时的情况选择合适的断点,如拦截对话框,一般对话框是调用MessageBoxa函数来实现的,就可用此函数设断点,程序一调用此函数就被中断。

            2、对关键部分进行细跟踪

对软件进行了一定程度的粗跟踪之后,便可获取软件中我们所关心的模块或程序段。这样就可以有针对行地对该模块紧系具体而详细的跟踪分析。一般情况下,对关键代码跟踪可能要反复进行若干此才能读懂该程序,每次要把比较关键的中间结果或者指令地址记录下来,这样会对下一次分析有很大的帮助。

 

       看了上面的基本的分析思路,是不是对软件分析有了一定的了解呢,呵呵,其实软件分析是一种比较复杂和艰辛的工作,若要积累软件分析的经验,需要在实践中不断地探索和总结。

 

 

原创粉丝点击