专利名称:防止可执行程序的调变的方法和设备的制作方法
技术领域:
符合本发明的方法和设备涉及防止软件文件的调变(modulation),更具体地说,涉及一种可在运行与二进制可执行代码相应的代码的同时,直接/间接防止由外部源篡改数据的软件模块及其方法。
背景技术:
随着用于代码程序的技术的改进,软件内容变得更大程度上暴露于由黑客进行的各种未授权访问威胁,所述黑客是具有恶意意图的非法用户,所述恶意意图诸如改变软件结构或使得技术保护措施无效等。
换言之,黑客可入侵使用应用数字版权管理(DRM)的内容的计算机或终端,以便篡改或删除可执行代码。
软件入侵技术通过逆向分析和调试使得技术保护措施无效。例如,可通过使用诸如SoftIce、W32dasm等的调试工具、寄存器监测工具、文件监测工具等破坏已经建立的DRM。
此外,由于对时间和数据进行的篡改,所以可有意改变计算机或终端的时间,或者可操纵超过被准许的使用计数的内容的使用计数或使用细节,以便有意使用超过有效期限的内容。
最新软件以模块形式来设计和实现,因此可扩展性和集成性非常好。然而,这些模块通过接口被调用并交换消息,因此,欺诈模块可伪装为普通模块,以便操纵程序或窃取重要数据。
此外,DRM技术控制被准许用户根据他们被准许的权限来使用内容。然而,由于各种数据在应用或计算机管理系统中进行交换,所以在安全性方面会存在弱点。例如,可通过数据漏泄路径来尝试进行篡改,所述异常数据漏泄路径,诸如,通过“复制粘贴”、“拖放”进行的数据复制,剪贴板,通过使用“打印屏幕”的屏幕捕获和各种其它捕获效用进行的数据复制等。
传统上,为了防止篡改,检验程序以检查所述程序是否已经被黑客非法改变。通常,将篡改防止技术划分为在源级别插入扰码的方法和在管理系统中检测并拦截入侵尝试的方法。由于在源级别插入扰码的方法涉及将伪代码插入在程序中执行重要逻辑功能的模块,所以所述方法增加了执行调试的难度。在管理系统中检测并拦截入侵尝试的方法涉及当执行可用于入侵的程序时在系统级别进行检测,并停止入侵程序或将被保护的程序。
然而,存在各种软件入侵工具,并且某些软件入侵工具包括绕过所述在管理系统中检测并拦截入侵尝试的方法的功能。因此,需要更加基础的篡改防止技术。
发明内容
本发明提供一种在执行存储在硬盘中的程序之前以及正在执行所述程序时防止篡改所述程序的方法。
根据本发明的一方面,提供一种防止对可执行程序的调变(modulation)的方法,所述方法包括对可执行程序的头部进行解码并计算关于多个可执行代码的信息;参考关于所述多个可执行代码的信息将所述多个可执行代码分组为第一代码组和第二代码组;将包括在第一代码组中的每个可执行代码与包括在第二代码组中的各个可执行代码进行匹配;以及使用包括在第一代码组中的多个可执行代码中的每一个的第一哈希值对包括在第二代码组中的每个匹配的可执行代码进行编码。
所述方法还包括使用包括在第一代码组中的多个可执行代码中的每一个的第一哈希值对包括在第二代码组中的每个匹配的可执行代码进行解码;以及使用包括在第二代码组中的多个可执行代码的各哈希值对包括在第一代码组中的相应可执行代码进行编码。
所述方法还包括改变可执行程序的头部的符号串数据。
包括在第一代码组中的多个可执行代码和包括在第二代码组中的多个可执行代码可一一对应。
包括在第一代码组中的可执行代码可以是将被保护的可执行代码。
根据本发明的另一方面,提供一种防止对可执行程序的调变的方法,所述方法包括对可执行程序的头部进行解码并计算关于多个可执行代码的信息;参考关于所述多个可执行代码的信息将所述多个可执行代码分类为由编码的可执行代码形成的第一代码组和由未编码的可执行代码形成的第二代码组;将包括在第一代码组中的多个可执行代码中的每一个与包括在第二代码组中的多个可执行代码中的每一个进行匹配;使用与第一可执行代码相应的第二可执行代码的哈希值对第一可执行代码进行解码,所述第一可执行代码是包括在第一代码组中的多个可执行代码中将被执行的可执行代码;以及在已经执行所解码的第一可执行代码之后,使用第二可执行代码的哈希值对第一可执行代码进行编码。
在执行第一可执行代码的同时,可使用包括在第二代码组中的相应可执行代码的哈希值对除第一可执行代码之外的包括在第一代码组中的至少一个可执行代码进行编码。
第二可执行代码可包括在第二代码组中。
包括在第一代码组中的多个可执行代码和包括在第二代码组中的多个可执行代码可一一对应。
根据本发明的另一方面,提供一种防止对可执行程序的调变的设备,所述设备包括解析单元,对可执行程序的头部进行解码并计算关于多个可执行代码的信息;分类单元,参考关于所述可执行代码的信息将所述可执行代码分类为第一代码组和第二代码组;匹配单元,将包括在第一代码组中的每个可执行代码与包括在第二代码组中的各个可执行代码进行匹配;以及编解码器,使用包括在第一代码组中的多个可执行代码的每个哈希值对包括在第二代码组中的每个相应可执行代码进行编码。
根据本发明的另一方面,提供一种防止对可执行程序的调变的设备,所述设备包括解析单元,对可执行程序的头部进行解码并计算关于多个可执行代码的信息;分类单元,参考关于所述多个可执行代码的信息将所述可执行代码分组为由编码的可执行代码形成的第一代码组和由未编码的可执行代码形成的第二代码组;匹配单元,将包括在第一代码组中的多个可执行代码中的每一个与包括在第二代码组中的各个可执行代码进行匹配;编解码器,使用与第一可执行代码相应的第二可执行代码的哈希值对第一可执行代码进行解码,其中,所述第一可执行代码是包括在第一代码组中的多个可执行代码中将被执行的可执行代码;并且在已经执行所解码的第一可执行代码之后,使用第二可执行代码的哈希值对第一可执行代码进行编码。
通过参照附图进行的对本发明示例性实施例的详细描述,本发明的上述和其它方面将会变得更加清楚,其中 图1是示出根据本发明示例性实施例的篡改防止模块100的框图; 图2是示出根据本发明示例性实施例的在执行程序之前防止篡改的方法的流程图; 图3A至图3C是示出图2的程序的变换处理的示图; 图4是示出根据本发明示例性实施例的使用保护集合的哈希值对链路集合进行编码的编解码器150的示图; 图5是示出根据本发明示例性实施例的在执行程序的同时防止篡改的方法的流程图; 图6是示出当根据图5将程序载入外围装置的存储器中时程序的变换处理的示图;以及 图7A至图7C是示出在执行程序的同时图5的程序的变换处理的示图。
具体实施例方式 以下,将参照附图更加全面地描述本发明,在所述附图中示出本发明的示例性实施例。
图1是示出根据本发明示例性实施例的篡改防止模块100的框图。
篡改防止模块100包括控制单元110、解析单元120、分类单元130、匹配单元140、编解码器150和替代单元160。
首先,控制单元110通过与篡改防止模块100的每个单元进行链接来控制全部处理。解析单元120通过对程序的头部进行解析来提取关于二进制可执行代码的信息。
分类单元130将二进制可执行代码分类为保护集合和链路集合。链路集合包括二进制可执行代码中的多个纯文本编程命令,其实现各种非敏感服务。保护集合包括诸如编程命令的纯文本的多个组,其实现各种敏感服务,混淆单元(obfuscated cell)等。因此,将实现敏感服务或需要保护的服务的组存储为保护集合。这里,二进制可执行代码并非必须通过分类单元130存储为两个集合,而可以存储为三个或更多集合,其中包括不具有任何函数的普通集合。
匹配单元140产生并管理所选择的两个集合之间的相互关系。也就是说,将包括在保护集合中的多个可执行代码和包括在链路集合中的多个可执行代码一一对应。
编解码器150包括哈希函数单元152和加扰器154。哈希函数单元152使用哈希函数产生哈希值,加扰器154基于产生的哈希值对二进制可执行代码进行编码或解码。
替代单元160随机地排列或改变程序的头部的符号串数据,从而使符号串数据变得没有意义。
以下,将描述在执行存储在硬盘中的程序之前防止篡改的方法。此外,将描述当正在执行程序时防止篡改的方法。
首先,将参照图2至图4来描述由图1的篡改防止模块100使用的在执行程序之前防止篡改的方法。
图2是示出根据本发明示例性实施例的在执行程序之前防止篡改的方法的流程图,图3A至图3C是示出图2的程序的变换处理的示图。假设程序在被执行之前存储在盘中。
首先,在操作S10产生由如图3A所示的头部和函数部分形成的可执行程序。所述头部包括头部信息,诸如用于执行调试的函数的符号串数据、函数的位置等。函数部分包括表示为二进制可执行代码的各种函数,例如,func1、func2、...、func8等。
然后,解析单元120在操作S20解析所述可执行程序,以便获得记录在头部的关于二进制可执行代码的信息。
分类单元130在操作S30将每个二进制可执行代码分类为函数部分中的保护集合和链路集合。如上所述,保护集合包括实现敏感服务或需要保护的服务的二进制可执行代码,链路集合包括实现非敏感服务的二进制可执行代码。这里,可使用编码器存储保护集合和链路集合。分类单元130存储与存储的保护集合和链路集合相应的关于二进制可执行代码的信息。为了便于描述,在图3B中,假设函数func2、func5和func7是包括在保护集合中的二进制可执行代码,函数func1、func3和func6是包括在链路集合中的二进制可执行代码。
匹配单元140任意地将包括在保护集合中的函数func2、func5和func7与包括在链路集合中的函数func1、func3和func6进行匹配,编解码器150在操作S40使用包括在保护集合中的函数func2、func5和func7的哈希值对包括在链路集合中的相应函数func1、func3和func6进行编码。在当前的示例性实施例中,函数func2与函数func1匹配,函数func5与函数func6匹配,函数func7与函数func3匹配。
图4是示出根据本发明示例性实施例的使用保护集合的哈希值对链路集合进行编码的图1的编解码器150的示图。
如图4所示,当将包括在保护集合中的二进制可执行代码i输入到哈希函数单元152时,产生哈希值并将其输出到加扰器154。此外,当将包括在链路集合中的二进制可执行代码j输入到加扰器154时,加扰器154使用输入的哈希值对二进制可执行代码j进行编码,并输出重新编码的二进制可执行代码j#。
当输入的二进制可执行代码i被改变时,输出的二进制可执行代码j#被改变。因此,当黑客改变程序时,包括改变部分的函数的哈希值也改变。改变的哈希值用于对与包括改变部分的函数相应的其它函数进行解码。由于改变的哈希值不同于在对其它函数进行编码时使用的哈希值,所以不能正常执行程序。
以这种方式,如图3C所示,使用函数func2产生编码函数func1#,使用函数func5产生编码函数func6#,使用函数func7产生编码函数func3#。
因此,通过在执行程序之前对存储在盘中的程序的二进制可执行代码进行编码,黑客不能正常地执行程序。
传统上,在执行存储在硬盘中的程序之前,黑客使用“反汇编程序”,以便通过将作为机器代码的二进制可执行代码改变为汇编语言并跟踪汇编语言来尝试入侵。因此,通过对存储在盘中的二进制可执行代码的一部分进行编码,黑客不能正常的执行如图3A所示的原始程序。
同时,替代单元160可在图2的操作S50任意地改变或替代程序的头部的符号串数据以使其无意义,从而将错误信息发送到黑客。也就是说,通过改变记录在头部中的位置信息和函数的标题,黑客不能正常地执行或改变程序。
如上所述,通过在执行图3A的原始程序之前对所述程序的二进制可执行代码进行编码,在图2的操作S60产生如图3C所示的改变程序。因此,黑客不能正常地使用原始程序或改变程序。
以下,将参照图5至图7C来描述在执行程序的同时由图1的篡改防止模块100使用的防止篡改的方法。
图5是示出根据本发明示例性实施例的在执行程序的同时防止篡改的方法的流程图,图6是示出当根据图5将程序载入外围装置的存储器中时程序的变换处理的示图,以及图7A至图7C是示出在执行程序的同时图5的程序的变换处理的示图。
首先,当包括在如图3C所示的链路集合中的函数被编码时,在操作S110使用包括在保护集合中的函数的哈希值对包括在链路集合中的相应函数进行解码。使用保护集合的哈希值对链路集合进行解码的处理与如图4所示的使用保护集合的哈希值对链路集合进行编码的处理相同。因此,将省略对其的详细描述。
在使用图4所示的方法通过使用保护集合的哈希值对相应链路集合进行解码之后,在操作S120使用链路集合的哈希值对相应保护集合进行编码。因此,在使用包括在链路集合中的各个函数的哈希值对包括在保护集合中的相应函数进行编码之后,如图6所示,将程序上载到外围装置的存储器中。
如上所述,通过对包括在保护集合中的二进制可执行代码进行编码,可防止转储,黑客可通过所述转储顺序地读取上载到存储器中的二进制可执行代码。
接着,将描述执行上载到如图6所示的存储器中的程序。
通常,从上载到存储器中的程序中顺序执行在头部中指示的地址的函数。在当前的示例性实施例中,假设从函数func1开始顺序执行函数。
当控制单元110产生用于执行上载到存储器中的程序的命令时,在操作S130对将被执行的保护集合中的二进制可执行代码进行解码。
也就是说,在执行函数func1之后,应该执行编码函数func2#。因此,在如图6所示的编码函数func2#、func5#和func7#中,如图7A所示,仅将函数func2#解码为函数func2以便执行。然后,在执行函数func2之后,再次将执行的函数func2编码为函数func2#。当如图7B所示,将函数func5#解码为函数func5之后,函数func2#和函数func7#保持编码状态。
也就是说,在操作S140再次对执行的保护集合的二进制可执行代码进行编码,从而在执行程序的同时,所述程序不具有与图3A的原始程序相同的格式。
以相同的方式,在对函数func5#进行解码随后作为函数func5执行之后,再次将函数func5编码为函数func5#,并且在如图7C所示,将函数func7#解码为函数func7的同时,函数func2#和函数func5#保持编码状态。
因此,通过在多个二进制可执行代码中保持至少一个二进制可执行代码处于编码状态,当将程序上载到外围装置的存储器并执行所述程序时,黑客无法入侵所述程序。
在执行程序之前防止篡改的方法中,使用保护集合的哈希值对链路集合进行编码(操作S40),但是可使用链路集合的哈希值对保护集合进行编码。当执行程序之前对保护集合进行编码时,可在执行程序的同时对保护集合进行解码,随后可对链路集合进行编码以便防止篡改。
此外,在执行程序之前对链路集合进行编码并且在将程序上载到存储器中的同时对其进行解码,并且对保护集合进行编码,但是在执行程序之前可按原样将编码的链路集合上载到存储器中。
可将根据本发明示例性实施例的在执行程序之前防止篡改的方法和在执行程序的同时防止篡改的方法写为计算机程序。本发明所属领域的编程技术人员可容易地解释用于实现本发明示例性实施例的代码和代码段。此外,将计算机程序存储在计算机可读介质中,并由计算机程序读取以执行。因此,实现防止篡改的方法。计算机可读介质的示例包括磁记录介质和光数据存储介质。
根据本发明示例性实施例的防止篡改的方法通过在执行程序之前将程序上载到存储器中,在执行程序的同时将二进制可执行代码分类为链路集合和保护集合,并对二进制可执行代码进行编码,防止由黑客调变(modulation)程序和正常执行程序。
尽管已经参照本发明的示例性实施例具体示出和描述了本发明,但是本领域的技术人员将理解在不脱离由权利要求限定的本发明的精神和范围的情况下,可进行形式和细节上的各种改变。
权利要求
1.一种防止对可执行程序的调变的方法,所述方法包括
对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
参考关于所述多个可执行代码的信息将所述多个可执行代码分组为第一代码组和第二代码组;
将第一代码组的每个可执行代码与第二代码组的各个可执行代码进行匹配;以及
使用第一代码组的多个可执行代码中的每一个的各个第一哈希值对第二代码组的每个匹配的可执行代码进行编码。
2.如权利要求1所述的方法,还包括
使用第一代码组的多个可执行代码中的每一个的各个第一哈希值对第二代码组的每个匹配的可执行代码进行解码;以及
使用第二代码组的多个可执行代码中的每一个的各个第二哈希值对第一代码组的相应可执行代码进行编码。
3.如权利要求1所述的方法,还包括修改可执行程序的头部的符号串数据。
4.如权利要求2所述的方法,还包括修改可执行程序的头部的符号串数据。
5.如权利要求1所述的方法,其中,第一代码组的多个可执行代码中的每一个分别和第二代码组的多个可执行代码中的每一个对应。
6.如权利要求1所述的方法,其中,第一代码组的可执行代码是被保护的可执行代码。
7.一种防止对可执行程序的调变的方法,所述方法包括
对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
参考关于所述多个可执行代码的信息将所述多个可执行代码分类为包括敏感可执行代码的第一代码组和包括非敏感可执行代码的第二代码组;
将第一代码组的多个可执行代码中的每一个与第二代码组的多个可执行代码中的每一个进行匹配;
使用与第一可执行代码相应的第二可执行代码的第一哈希值对第一可执行代码进行解码,所述第一可执行代码是在第一代码组的多个可执行代码中将被执行的可执行代码;以及
在已经执行所解码的第一可执行代码之后,使用第二可执行代码的第一哈希值对第一可执行代码进行编码。
8.如权利要求7所述的方法,其中,在执行第一可执行代码的同时,使用第二代码组的相应可执行代码的第二哈希值,对除第一可执行代码之外的第一代码组的多个可执行代码中的至少一个可执行代码进行编码。
9.如权利要求8所述的方法,其中,第二代码组包括第二可执行代码。
10.如权利要求7所述的方法,其中,第一代码组的多个可执行代码中的每一个分别和第二代码组的多个可执行代码中的每一个对应。
11.一种防止对可执行程序的调变的设备,所述设备包括
解析单元,对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
分类单元,参考关于所述可执行代码的信息将所述可执行代码分组为第一代码组和第二代码组;
匹配单元,将第一代码组的每个可执行代码与第二代码组中的各个可执行代码进行匹配;以及
编解码器,使用第一代码组的多个可执行代码中的每一个的第一哈希值对分别对应于第一代码组的可执行代码的第二代码组的每个相应可执行代码进行编码。
12.如权利要求11所述的设备,其中,编解码器包括
哈希函数单元,产生与第一代码组的第一可执行代码相应的第一哈希值;以及
加扰器,操作与第一可执行代码相应的第二可执行代码和第一哈希值以输出编码的第二可执行代码。
13.如权利要求12所述的设备,其中,编解码器使用第一可执行代码的第一哈希值对相应的第二可执行代码进行解码,并使用第二可执行代码的第二哈希值对相应的第一可执行代码进行编码。
14.如权利要求13所述的设备,其中,第二代码组包括第二可执行代码。
15.如权利要求11所述的设备,还包括替代单元,改变可执行程序的头部的符号串数据。
16.如权利要求11所述的设备,其中,第一代码组的多个可执行代码中的每一个分别对应于第二代码组的多个可执行代码中的每一个。
17.如权利要求11所述的设备,其中,第一代码组的可执行代码是被保护的可执行代码。
18.一种防止对可执行程序的调变的设备,所述设备包括
解析单元,对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
分类单元,参考关于所述多个可执行代码的信息将所述可执行代码分组为包括敏感可执行代码的第一代码组和包括非敏感可执行代码的第二代码组;
匹配单元,将第一代码组的多个可执行代码中的每一个与第二代码组的各个可执行代码中的每一个进行匹配;
编解码器,使用与第一可执行代码相应的第二可执行代码的第一哈希值对第一代码组的多个可执行代码中将被执行的第一可执行代码进行解码,并且在已经执行所解码的第一可执行代码之后,使用第二可执行代码的第一哈希值对第一可执行代码进行编码。
19.如权利要求18所述的设备,其中,在执行第一可执行代码的同时,使用第二代码组的相应可执行代码的第二哈希值对除去第一可执行代码的第一代码组的至少一个可执行代码进行编码。
20.如权利要求18所述的设备,其中,第二代码组包括第二可执行代码。
21.如权利要求17所述的设备,其中,第一代码组的多个可执行代码中的每一个分别对应于第二代码组的多个可执行代码中的每一个。
22.一种具有用于执行防止对可执行程序的调变的方法的程序的计算机可读记录介质,所述方法包括
对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
参考关于所述多个可执行代码的信息将所述多个可执行代码分组为第一代码组和第二代码组;
将第一代码组的多个可执行代码中的每一个与第二代码组的各个可执行代码进行匹配;以及
使用第一代码组的多个可执行代码中的每个第一哈希值对与第一代码组的每个可执行代码相应的第二代码组的每个可执行代码进行编码。
23.一种具有用于执行防止对可执行程序的调变的方法的程序的计算机可读记录介质,所述方法包括
对可执行程序的头部进行解码并产生头部的关于多个可执行代码的信息;
参考关于所述多个可执行代码的信息将所述多个可执行代码分类为包括敏感可执行代码的第一代码组和包括非敏感可执行代码的第二代码组;
将第一代码组的每个可执行代码与第二代码组的各个可执行代码进行匹配;
使用与第一可执行代码相应的第二可执行代码的第一哈希值对第一可执行代码进行解码,所述第一可执行代码是在第一代码组的多个可执行代码中将被执行的可执行代码;以及
在已经执行所解码的第一可执行代码之后,使用第二可执行代码的第一哈希值对第一可执行代码进行编码。
全文摘要
提供一种防止对可执行程序的调变的方法和设备。所述方法包括对可执行程序的头部进行解码并产生关于多个可执行代码的信息;参考关于所述多个可执行代码的信息将所述多个可执行代码分组为第一代码组和第二代码组;将包括在第一代码组中的多个可执行代码中的每一个与包括在第二代码组中的多个可执行代码中的每一个进行匹配;以及使用包括在第一代码组中的可执行代码的每个哈希值对包括在第二代码组中的相应可执行代码中的每一个进行编码。
文档编号G06F21/22GK101131726SQ20071008474
公开日2008年2月27日 申请日期2007年2月28日 优先权日2006年8月25日
发明者南秀铉, 崔尚洙 申请人:三星电子株式会社