CN101136049A - 信息处理系统、方法和程序,计算机可读介质和数据信号 - Google Patents
信息处理系统、方法和程序,计算机可读介质和数据信号 Download PDFInfo
- Publication number
- CN101136049A CN101136049A CNA2007101478400A CN200710147840A CN101136049A CN 101136049 A CN101136049 A CN 101136049A CN A2007101478400 A CNA2007101478400 A CN A2007101478400A CN 200710147840 A CN200710147840 A CN 200710147840A CN 101136049 A CN101136049 A CN 101136049A
- Authority
- CN
- China
- Prior art keywords
- program
- supervisory programme
- protection
- information processing
- protection program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供信息处理系统、方法和程序,计算机可读介质和数据信号。信息处理系统包括监视程序启动单元和保护对象程序监视单元。当启动要保护的保护对象程序时,所述监视程序启动单元启动监视所述保护对象程序的监视程序。所述保护对象程序监视单元通过所述监视程序来监视所述保护对象程序。
Description
技术领域
本发明涉及信息处理系统、信息处理方法、信息处理程序、存储有该信息处理程序的计算机可读介质以及计算机数据信号。
背景技术
在现有技术中,出于安全的目的,将数据和程序进行加密。
然而,存在第三方分析加密数据或加密程序以窃取数据的危险。因而,需要保护数据和程序不受这种访问。针对由分析程序造成的诸如篡改的行为,存在称为“软件防篡改技术”或“模糊技术”的技术,其主要通过软件来防止这种行为(使其难以分析程序)。
作为与此相关的技术,JP平8-016385 A(对应于美国专利No.5,699,512)公开了一种包括对软件进行分割、将该软件的一部分设置在服务器上、并且无论何时使用程序都从该服务器向客户端发送该程序的一部分的方法。
此外,日本特许第3033562号公报在包括对程序的一部分进行加密并且然后恰当地对其进行解密的方法的前提下,公开了一种包括将它实现在重定位处理所需要的OS上的方法。
此外,JP 2005-018725 A(对应于US 2004/0123122 A)公开了一种包括对程序的一部分进行加密并且然后恰当地对其进行解密的方法,其中,其处理较为复杂。
此外,JP2003-337629 A公开了一种包括经由函数指针及其表来调用程序的函数由此使函数之间的调用关系模糊的方法。
此外,JP 2004-185064 A公开了一种包括使程序的控制结构(循环)变复杂的方法。
上述公报中公开的技术是使得难以分析程序的技术。即,这些技术基本上是使程序的控制结构变复杂或者对程序的一部分进行加密的技术。
另一方面,一般来说,通过调试器可以容易地分析程序的操作。为此,当程序中包括秘密信息时,通过分析该程序可以容易地窃取该秘密信息。
作为与此相关的技术,JP平11-175336 A(对应于美国专利No.6,237,137)公开了一种包括通过参照处理器的标志来检测软件目前是否在调试器上运行并且在检测到软件目前在调试器上运行时停止程序的运行的方法。
发明内容
鉴于上述情况作成了本发明。本发明提供可以防止通过调试器分析程序的信息处理系统、信息处理方法、信息处理程序、存储有该信息处理程序的计算机可读介质以及计算机数据信号。
[1]据本发明的一方面,仅通过单个程序来执行对特定程序的监视。信息处理方法包括以下步骤:当启动要保护的保护对象程序时,启动监视所述保护对象程序的监视程序;并且通过所述监视程序来监视所述保护对象程序。
[2]第[1]项所述的方法还可以包括以下步骤:通过所述保护对象程序来检查所述监视程序是否已经启动。
[3]第[1]项所述的方法还可以包括以下步骤:通过所述保护对象程序来存储秘密值;通过所述监视程序来存储与由所述保护对象程序存储的所述秘密值相同的另一秘密值;以及通过所述保护对象程序来确定由所述监视程序存储的秘密值是否与所述保护对象程序存储的秘密值相同。
[4]第[1]项所述的方法还可以包括以下步骤:通过所述监视程序来存储所述保护对象程序继续进行处理所必要的信息,并且通过所述监视程序将所述信息设置在所述保护对象程序中。
[5]第[1]项所述的方法还可以包括以下步骤:通过所述监视程序来存储作为所述保护对象程序的缺失程序代码的程序代码,并且通过所述监视程序将所述缺失程序代码设置在所述保护对象程序中。
[6]第[1]项所述的方法还可以包括以下步骤:通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密。
[7]在根据第[1]项所述的方法中,所述保护对象程序可以是通过函数调用目的地来调用函数的程序代码。所述信息处理方法还包括以下步骤:通过所述监视程序来存储所述函数调用目的地;并且通过所述监视程序将所述函数调用目的地设置在所述保护对象程序中。
[8]第[1]项所述的方法还可以包括以下步骤:通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息,并且通过所述保护对象程序将所述信息设置在所述监视程序中。
[9]第[1]项所述的方法还可以包括以下步骤:通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密;通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息;并且将所述信息设置在所述监视程序中。
[10]在第[1]项到第[9]项中的任一项所述的方法中,可以由另一监视程序来监视所述监视程序。
[11]在第[1]项到第[9]项中的任一项所述的方法中,所述监视程序可以解除对所述保护对象程序的监视,并且所述保护对象程序可以启动对所述监视程序的监视。
[12]在根据第[1]项到第[9]项中的任一项所述的方法中,所述监视程序和所述保护对象程序可以集成为一个模块,并且所述监视程序或所述保护对象程序可以根据所述模块启动时的参数而启动。
[13]第[1]项所述的方法还可以包括以下步骤:通过所述保护对象程序来检查所述监视程序是否被另一监视程序所监视。
[14]根据本发明的另一方面,一种信息处理系统包括监视程序启动单元和保护对象程序监视单元。当启动要保护的保护对象程序时,所述监视程序启动单元启动对该保护对象程序进行监视的监视程序。所述保护对象程序监视单元通过所述监视程序来监视所述保护对象程序。
[15]第[14]项所述的系统还可以包括检查单元,该检查单元通过所述保护对象程序来检查是否已经启动所述监视程序。
[16]第[14]项所述的系统还可以包括第一秘密值存储单元、第二秘密值存储单元以及确定单元。所述第一秘密值存储单元通过所述保护对象程序存储一秘密值。所述第二秘密值存储单元通过所述监视程序来存储与由所述保护对象程序存储的秘密值相同的另一秘密值。所述确定单元通过所述保护对象程序来确定由所述第二秘密值存储单元存储的秘密值是否与由所述第一秘密值存储单元存储的秘密值相同。
[17]第[14]项所述的系统还可以包括必要信息存储单元和设置单元。所述必要信息存储单元通过所述监视程序来存储所述保护对象程序继续进行处理所必要的信息。所述设置单元通过所述监视程序将所述信息设置在所述保护对象程序中。
[18]第[14]项所述的系统还包括程序代码存储单元和设置单元。所述程序代码存储单元通过所述监视程序而存储作为所述保护对象程序的缺失程序代码的程序代码。所述设置单元通过所述监视程序将所述缺失程序代码设置在所述保护对象程序中。
[19]第[14]项所述的系统还可以包括解密单元,该解密单元通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密。
[20]在第[14]项所述的系统中,所述保护对象程序可以是通过函数调用目的地来调用函数的程序代码。所述信息处理系统还可以包括函数调用目的地存储单元和设置单元。所述函数调用目的地存储单元通过所述监视程序而存储所述函数调用目的地。所述设置单元通过所述监视程序将所述函数调用目的地设置在所述保护对象程序中。
[21]第[14]项所述的系统还可以包括必要信息存储单元和设置单元。所述必要信息存储单元通过所述保护对象程序而存储所述监视程序继续进行处理所必要的信息。所述设置单元通过所述保护对象程序将所述信息设置在所述监视程序中。
[22]第[14]项所述的系统还可以包括解密单元、必要信息存储单元以及设置单元。所述解密单元通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密。所述必要信息存储单元通过所述保护对象程序而存储所述监视程序继续进行处理所必要的信息。所述设置单元将所述信息设置在所述监视程序中。
[23]第[14]项所述的系统还可以包括检查单元,该检查单元通过所述保护对象程序来检查所述监视程序是否被另一监视程序监视。
[24]仅仅通过单个程序来执行对特定程序的监视。根据本发明的又一方面,一种信息处理方法包括以下步骤:当启动要保护的保护对象程序时,启动监视该保护对象程序的监视程序;并且通过所述监视程序来监视所述保护对象程序。
根据第[1]项所述的方法,与没有设置第[1]项所述的构造的情况相比,可以防止所述保护对象程序被另一程序监视。
根据第[2]项所述的方法,与没有设置第[2]项所述的构造的情况相比,所述保护对象程序可以检查是否启动了所述监视程序,可以防止所述保护对象程序被另一程序监视。
根据第[3]项所述的方法,与没有设置第[3]项所述的构造的情况相比,所述保护对象程序可以确定由第二秘密值存储功能存储的秘密值是否与由第一秘密值存储功能存储的秘密值相同,可以防止所述保护对象程序被其他程序监视。
根据第[4]项所述的方法,与没有设置第[4]项所述的构造的情况相比,所述监视程序可以存储所述保护对象程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[5]项所述的方法,与没有设置第[5]项所述的构造的情况相比,所述监视程序可以存储作为所述保护对象程序的缺失程序代码的程序代码,可以防止所述保护对象程序被另一程序监视。
根据第[6]项所述的方法,与没有设置第[6]项所述的构造的情况相比,所述监视程序可以对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密,可以防止所述保护对象程序被另一程序监视。
根据第[7]项所述的方法,与没有设置第[7]项所述的构造的情况相比,所述监视程序可以将函数调用目的地设置在所述保护对象程序中,可以防止所述保护对象程序被另一程序监视。
根据第[8]项所述的方法,与没有设置第[8]项所述的构造的情况相比,所述保护对象程序可以存储所述监视程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[9]项所述的方法,与没有设置第[9]项所述的构造的情况相比,所述监视程序可以对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密,所述保护对象程序可以存储所述监视程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[10]项所述的方法,与没有设置第[10]项所述的构造的情况相比,除了根据第[1]项到第[9]项中的任一项所述的方法获得的优点以外,所述监视程序还被另一监视程序监视。结果,可以防止对监视程序进行监视的行为。
根据第[11]项所述的方法,与没有设置第[11]项所述的构造的情况相比,除了根据第[1]项到第[9]项中的任一项所述的方法获得的优点以外,所述监视程序还可以解除对所述保护对象程序的监视,所述保护对象程序还可以启动对所述监视程序的监视,可以进一步加强防范另一监视程序的监视。
根据第[12]项所述的方法,与没有设置第[12]项所述的构造的情况相比,除了根据第[1]项到第[9]项中的任一项所述的方法获得的优点以外,所述监视程序或所述保护对象程序还可以根据在启动所述保护对象程序时的参数而启动,可以进一步加强防范另一监视程序的监视。
根据第[13]项所述的方法,与没有设置第[13]项所述的构造的情况相比,可以检查所述监视程序是否被另一监视程序监视,可以防止所述保护对象程序被另一程序监视。
根据第[14]项所述的信息处理系统,与没有设置第[14]项所述的构造的情况相比,可以防止所述保护对象程序被另一程序监视。
根据第[15]项所述的信息处理系统,与没有设置第[15]项所述的构造的情况相比,所述保护对象程序可以检查是否启动了所述监视程序,可以防止所述保护对象程序被另一程序监视。
根据第[16]项所述的信息处理系统,与没有设置第[16]项所述的构造的情况相比,所述保护对象程序可以确定由所述第二秘密值存储单元存储的秘密值是否与由所述第一秘密值存储单元存储的秘密值相同,可以防止所述保护对象程序被其他程序监视。
根据第[17]项所述的信息处理系统,与没有设置第[17]项所述的构造的情况相比,所述监视程序可以存储所述保护对象程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[18]项所述的信息处理系统,与没有设置第[18]项所述的构造的情况相比,所述监视程序可以存储作为所述保护对象程序的缺失程序代码的程序代码,可以防止所述保护对象程序被另一程序监视。
根据第[19]项所述的信息处理系统,与没有设置第[19]项所述的构造的情况相比,所述监视程序可以对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密,可以防止所述保护对象程序被另一程序监视。
根据第[20]项所述的信息处理系统,与没有设置第[20]项所述的构造的情况相比,所述监视程序可以将函数调用目的地设置在所述保护对象程序中,可以防止所述保护对象程序被另一程序监视。
根据第[21]项所述的信息处理系统,与没有设置第[21]项所述的构造的情况相比,所述保护对象程序可以存储所述监视程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[22]项所述的信息处理系统,与没有设置第[22]项所述的构造的情况相比,所述监视程序可以对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密,所述保护对象程序可以存储所述监视程序继续进行处理所必要的信息,可以防止所述保护对象程序被另一程序监视。
根据第[23]项所述的信息处理系统,与没有设置第[23]项所述的构造的情况相比,所述保护对象程序可以检查所述监视程序是否被另一监视程序监视,可以防止所述保护对象程序被另一程序监视。
附图说明
下面,参照附图,对本发明的示例性实施方式进行详细说明,其中:
图1是示出整个系统的示例性构造的框图;
图2是示出调试器与被调试部之间的关系的说明图;
图3是示出根据示例性实施方式的整体构造的实施例的框图;
图4是示出第一示例性实施方式的示例性构造的框图;
图5是示出第二示例性实施方式的示例性构造的框图;
图6是示出第三示例性实施方式的示例性构造的框图;
图7是示出第四示例性实施方式的示例性构造的框图;
图8是示出第五示例性实施方式的示例性构造的框图;
图9是示出第六示例性实施方式的示例性构造的框图;
图10是示出第七示例性实施方式的示例性构造的框图;
图11是示出第八示例性实施方式的示例性构造的框图;
图12是示出实现示例性实施方式的计算机的硬件构造的框图。
具体实施方式
首先,为了便于理解示例性实施方式,对调试器的操作环境及其操作进行说明。这里,术语“调试器”表示用于对特定程序进行调试的程序,而术语“被调试部”表示要被调试的程序。一般来说,调试器是程序开发期间使用的用于检查程序行为的软件工具。此外,调试器是监视另一程序的行为的监视程序。此外,表述“一程序监视另一程序”表示“一程序用作另一程序的调试器”。
图2是示出调试器与被调试部之间的关系的说明图。假定调试对象程序220(被调试部)和作为用于调试该调试对象程序220的程序的调试器210都运行在特定计算机的操作系统(OS)上。
在步骤21中,调试器210使用调试对象程序220作为调试对象创建一进程,或者作为调试器附加到现有进程。这里,术语“附加”表示启动对当前运行进程的行为的监视。此外,术语“分离”表示解除(结束)对进程行为进行监视的状态。
即,调试器210启动调试对象程序220。这时,调试器210调用OS的API(应用程序接口),并且指定一参数以启动API以使得调试器210可以充当调试对象程序220的调试器。
例如,在Windows(注册商标)中,使用API函数“CreateProcess()”,并且指定“DEBUG PROCESS”标志作为参数。由此,当调试对象程序220处于挂起状态时,创建进程。也可以调试已经运行的进程(调试对象程序220)。在这种情况下,调用用于将调试器附加到现有进程的API。在Windows中,API函数是DebugActiveProcess(),并且,当附加了调试器210时,向调试对象程序220通知事件,并将其操作挂起。
在步骤22中,如果在调试对象程序220中出现事件(创建断点或创建线程等),则调试对象程序220向调试器210通知该事件。
即,如果在调试对象程序220中出现诸如执行调试器210设置的断点(用于在特定地址挂起当前运行程序)、改变特定存储地址的内容或者创建另一进程和另一线程的事件,则调试对象程序220向调试器210通知该事件已经出现(实际上,不是直接从调试对象程序220通知该事件,而是经由OS来通知)。在通知事件时,调试对象程序220的执行在此挂起。在Windows中,如果调试器210调用API函数WaitForDebugEvent(),并且如果将事件通知给调试器本身,则调试器210可以接收到通知的内容。
在步骤23中,调试器210获取并且显示调试对象程序220的状态。此后,调试器根据用户指令重写调试对象程序220的内部状态(设置断点、改变存储器的内容等),并且继续该进程。
即,调试器210接收表示在调试对象程序220中出现了事件的通知,获取调试对象程序220中的存储器的内容以及中断时的寄存器内容,按用户可以理解的格式显示这些内容,并且等待来自用户的下一个指令。用户改变存储器或寄存器的内容,并且如果有必要则新设置断点。接着,用户重新开始执行调试对象程序220。在Windows中,使用API函数“ReadProcessMemory/WriteProcessMemory”来读取/写入存储器的内容。使用API函数“VirtualProtectEx()”来重写存储器的属性(读取/写入/执行)。使用API函数“GetThreadContext/SetThreadContext”来读取/写入寄存器的内容。通过用中断命令来代替执行要中断的地址,从而设置断点。使用API函数“ContinueDebugEvent()”来重新开始执行调试对象程序220。
在步骤24中,重复步骤22到步骤23的处理,直到完成调试对象程序220或者调试器210中断该处理。
这样,调试器210可以在调试时监视调试对象程序220的行为。因此,还可以构想,不将调试器210用于调试,而将其用于解析已经模糊的程序的行为。在现有技术中,可以分析检测到调试器的部分。但是,这不是通过调试器来防止分析行为本身的方法。
接下来,为了进一步便于理解示例性实施方式,对基本概念进行说明。
后面描述的示例性实施方式利用了OS(操作系统,例如,Windows(注册商标)、Linux(注册商标)等)支持的调试API的如下特征:只有单个进程成为针对特定进程的调试器。
调试API通常是预先为OS预备的用于辅助程序调试的API。预备使得特定进程(程序)变为另一进程(程序)的调试器的功能。利用这些调试API来实现开发环境具有的普通调试功能。
另一方面,在调试API中,只有单个调试进程可以用作特定进程的调试器。这是因为,如果可以有多个进程充当调试器,则被调试部的状态将失去一致性(并且同时,存储器的内容被多个调试器改变)。无论OS的类型如何,调试API都具有该特性。
因而,为了防止调试器进行分析,将用作针对要保护的进程(保护对象进程)的调试器的进程预先设置为使得想要攻击保护对象进程的攻击者不能分析该调试器。
即,基本概念是:针对要保护不被攻击者分析的程序,启动作为所谓的哑调试器(dummy debugger)的进程,由此,即使攻击者试图通过调试器来分析对象程序,也不能调试该程序。此外,称为“哑调试器”的原因在于,对于原始调试功能,并不存在哑调试器。
参照图1对此进行说明。在OS 40上,对保护对象程序20只能创建一个调试器,不能对保护对象程序20创建两个或更多个调试器。由此,即使试图分析保护对象程序20的攻击者试图创建对保护对象程序20的行为进行监视的攻击者调试器30,在这种行为之前也已经创建了哑调试器10,并且哑调试器10正在对保护对象程序20进行调试。由此,可以防止保护对象程序20被攻击者的调试器30监视。
此外,存在多种示例性实施方式,它们被设计为如果哑调试器10不存在就不能正常地执行保护对象程序20。即,为了更强有力地保护程序,引入了一个进程取决于另一进程的方案。
参照图3,对示例性实施方式的整体构造的实施例进行说明。应注意到,图3所示的框图用于多个示例性实施方式,可以利用该框图中的一部分来实现各种示例性实施方式。此外,可以组合图3所示的多个模块,由此构成用于防止程序分析的多种程序和用于防止程序分析的多种系统。
这里,术语“模块”通常表示逻辑上可分离的软件和诸如硬件的部件。因此,示例性实施方式中的模块不仅表示程序中的模块,而且表示硬件构造中的模块。因此,示例性实施方式还用于说明程序、系统,以及方法。此外,模块基本上一对一地对应于其功能。然而,在安装过程中,可以由一个程序组成一个模块,或者可以由一个程序组成多个模块。与此相反,可由多个程序组成一个模块。此外,可以由一台计算机执行多个模块,或者可以由分布或并行环境中的多台计算机执行一个模块。此外,在下面的说明中,术语“连接”除了包括物理连接以外还包括逻辑连接。
此外,除了通过网络将多台计算机、多个硬件、多个装置等连接在一起的构造以外,术语“系统”还包括其由一台计算机来实现的情况。
如图3所示,示例性实施方式主要具有要保护不被攻击者分析的保护对象程序1300、监视保护对象程序1300的监视程序1200以及启动监视程序1200的监视程序启动模块1100。
监视程序启动模块1100在作为保护对象的保护对象程序1300启动时启动监视保护对象程序1300的监视程序1200。这里,当启动保护对象程序1300时,首先启动保护对象程序还是启动监视程序无关紧要。即,必须在创建攻击者调试器API之前启动监视程序1200。当监视程序1200在保护对象程序1300之前启动时,监视程序1200可以启动保护对象程序1300。与此相反,当保护对象程序1300在监视程序1200之前启动时,可以将监视程序1200附加到保护对象程序1300。
监视程序1200中的程序启动模块1210使得已由监视程序启动模块1100启动的监视程序1200启动保护对象程序1300或者附加到保护对象程序1 300。
保护对象程序1300中的检查模块1310检查监视程序1200是否已经启动。此外,检查模块1310可以检查监视程序1200是否被另一监视程序监视。
保护对象程序1300中的第一秘密值存储模块1320存储一秘密值。
监视程序1200中的第二秘密值存储模块1220存储与保护对象程序1300中的第一秘密值存储模块1320存储的秘密值相同的秘密值。
保护对象程序1300中的确定模块1330确定第二秘密值存储模块1220存储的秘密值与第一秘密值存储模块1320存储的秘密值是否相同。
监视程序1200中的必要信息存储模块1230存储保护对象程序1300继续进行处理所必要的信息。
保护对象程序1300中的必要信息获取模块1-1340获取必要信息存储模块1-1230存储的必要信息。
监视程序1200中的程序代码存储模块1240存储作为保护对象程序1300的缺失程序代码的程序代码。
监视程序1200中的解密模块1250对作为保护对象程序1300的一部分并且被加密的程序代码进行解密。这里,解密模块1250可以直接对保护对象程序1300中的加密代码保持部(不仅包括程序而且包括数据等)进行解密,并且接收来自保护对象程序1300中的程序代码获取模块1350的获取请求。
保护对象程序1300中的程序代码获取模块1350获取程序代码存储模块1240存储的程序代码或者解密模块1250解密出的程序代码。
监视程序1200中的函数调用目的地存储模块1260存储作为通过函数调用目的地来调用函数的程序代码或诸如函数表的数据的函数调用目的地。
保护对象程序1300中的函数调用目的地获取模块1360获取函数调用目的地存储模块1260存储的函数调用目的地。
保护对象程序1300中的必要信息存储模块2-1370存储监视程序1200继续进行处理所必要的信息。
监视程序1200中的必要信息获取模块2-1270获取必要信息存储模块2-1370存储的必要信息。
此外,监视程序1200可以被另一监视程序1200监视。即,为了防止攻击者分析监视程序1200,监视程序1200本身处于与保护对象程序1300相同的位置。
此外,监视程序1200可以从保护对象程序1300分离,即解除对保护对象程序1300的监视,并且,保护对象程序1300可以附加到监视程序1200,即可以启动监视。也就是说,颠倒监视程序1200的位置和保护对象程序1300的位置。
此外,可以将监视程序1200和保护对象程序1300制备为单个模块,以使得监视程序1200或保护对象程序1300可以根据启动该模块时使用的参数而启动。
此外,监视程序1200启动并监视保护对象程序1300,并且保护对象程序1300附加到监视程序1200以监视该监视程序1200。即,监视程序1200和保护对象程序1300可以是相互监视关系。
下文中,参照附图,对本发明的多种示例性实施方式进行说明。
图4示出了第一示例性实施方式(其中对象对主机进行认证的实施例)的概念性模块框图。
这里,主机310对应于图3的监视程序1200,对象320对应于图3的保护对象程序1300。
这个示例性实施方式是其中监视程序(下文中称为“主机”)1200充当调试器并且保护对象程序(下文中称为“对象”)1300充当被调试部的实施例。对象320间歇地监视主机310的存在。这里,术语“间歇地”表示按特定间隔重复。间隔可以是规则间隔或随机时间间隔。
下面示出程序的执行过程。
在步骤31中,用户启动主机310。
在步骤32中,主机310利用对象320作为调试对象而创建对象320的进程。即,主机310启动作为调试对象的对象320。此后,主机310等待接收来自对象320的调试事件。
在步骤33中,对象320在处理的开头创建新线程,并且检查在该线程中是否存在主机310的进程。例如,每分钟检查是否存在具有主机310的程序的执行文件名的进程。如果不存在该进程,则对象320的程序结束。
在步骤34中,如果在对象320中出现事件(创建断点或线程等),则向主机310通知该事件。
在步骤35中,如果主机310接收到该事件,则主机310继续对象320的进程并且等待后继事件,只要该事件不是结束事件。
在步骤36中,重复步骤34到35,直到从对象320通知了进程的结束事件。如果从对象320通知了进程的结束事件,则主机310也结束进程。
此外,在上述步骤33中,例如,通过从系统获取当前存在进程的列表(Windows中的EnumProcess),获取各个进程的启动文件名(Windows中的EnumProcessModules),并且确定各个模块的名称和属性是否正确,从而确定主机310的进程是否是正确的主机310。“属性”是关于各个模块的文件的创建者、日期等的信息。具体地说,例如,当按同一路径上的相同文件名将伪程序替换了正规程序时,难以通过仅仅基于文件名的认证来防止攻击者的分析。然而,如果利用如上所述的除文件名以外的属性信息来执行认证,则即使执行这种非法替换,也将增加可以防止攻击者的分析的可能性。此外,可以检查文件的电子签名。具体地说,为了防止非法分析,对象320通过检查数字签名来认证主机310,并且仅在认证结果表示主机310为正确主机时才使对象320的处理继续。
图5示出了第二示例性实施方式(其中对象通过询问&响应来认证主机的示例性实施方式)的概念性模块框图。
这里,主机410对应于图3的监视程序1200,对象420对应于图3的保护对象程序1300。
在第二示例性实施方式中,通过询问&响应来执行第一示例性实施方式中的步骤33的处理:对象320检查主机310是否为正规主机。“询问&响应”是如下的方法:发送特定询问,并且检查从对方返回的响应是否为针对该询问的正确值,由此验证(检查)对方是否为正确方。例如,共享特定的秘密字节序列,在验证时产生随机数,并向对方发送该随机数作为询问。对方计算通过将从秘密值和随机数的级联得到的值提供给单向散列函数(SHA1等)而获得的值,并返回计算出的值作为响应。在接收到响应时,通过执行相同计算来检查这些值是否彼此一致。只要没有将秘密值泄露给其他人,这种方法就可以认证对方是正确。
在该示例性实施方式中,将这种方法应用到第一示例性实施方式。具体地说,将第一示例性实施方式的步骤33到35改变成下列步骤43到45-3。第二示例性实施方式中还使用步骤36。此外,在此之前,假定主机410和对象420共享存储有作为秘密20字节数据的秘密值X和创建的随机数R的地址A1、以及存储有响应的地址A2。此外,尽管地址A1和A2可以类似地用于其他示例性实施方式中,但出于简化说明的目的,在其他示例性实施方式中可能没有明确提到这些地址。
在步骤43中,对象420创建随机数R,以产生调试中断。即,对象420在处理的开头创建新的线程。该线程间歇地执行下面的处理(或者可以例如每一分钟地定期执行下面的处理)。创建随机数R,将这个数设置在特定的预定地址中,并且产生调试中断。
在步骤44中,中断对象420的执行,出现调试中断事件,并且将调试中断事件通知给主机410。
在步骤45-1中,当主机410接收到事件通知并且该事件是调试中断事件时,主机410从对象420的特定地址A1读取数据R,将数据R的值与主机410本身保持的秘密值X级联,并且获取散列值H(SHA1等)。接着,主机410将该散列值写入对象420的特定地址A2。
在步骤45-2中,主机410按1递增程序计数器,以使得在对象420的进程中不重复调试中断命令,并且继续对象420的进程。如果接收到的事件为结束事件,则进程进行到步骤36。否则,主机410什么也不干地继续对象420的进程,并且等待后继事件。
在步骤45-3中,已经从主机410接收到继续执行指令的对象420随后对由对象420本身保持的秘密值X与存储在地址A1中的随机数R进行级联,并且获取散列值H'。接着,对象420检查该散列值与存储在地址A2中的值是否一致。如果该值彼此不一致,则对象420结束进程。
此外,在第二示例性实施方式中,使用调试中断事件在主机410与对象420之间发送/接收数据。由此,当主机410创建对象420的进程时,应当通过指定使得可以接收调试中断事件的参数来创建进程。
此外,尽管在第二示例性实施方式中对利用秘密数据和秘密散列函数来执行认证的情况进行了说明,但可以利用数字签名来执行类似的认证处理。此外,可以使用其他种类的事件(创建线程等)来代替调试中断事件。
图6示出了第三示例性实施方式(其中主机保持对象的数据的一部分的实施例)的概念性模块框图。
这里,主机510对应于图3的监视程序1200,而对象520对应于图3的保护对象程序1300。
在前述示例性实施方式中,对象仅仅执行对主机的认证处理,主机与对象应当执行的原始处理无关。在第三示例性实施方式中,继续对象程序的处理需要主机的辅助。
这里,对如下的实施例进行说明:其中,主机510保持对象520执行处理所不可缺少的特定种类的数据,在执行对象520的处理时,主机510将所述数据提供给对象520。
在第三示例性实施方式中,第二示例性实施方式的步骤43到45-3改变成下面的步骤53到53-3。第三示例性实施方式中还使用步骤36。此外,假定在对象520的程序中没有预先保持进行处理所必要的秘密数据Y。
在步骤53中,当必须获取继续原始处理所不可缺少的秘密数据Y时,对象520产生调试中断。
在步骤54中,中断对象520的执行,并且出现调试中断事件,接着将该调试中断事件通知给主机510。
在步骤55-1中,如果主机510接收到事件并且接收到的事件为调试中断事件,则将只有主机510保持的秘密数据Y设置在对象520的特定地址A中。
在步骤55-2中,主机510按1递增程序计数器,以使在对象520的进程中不重复调试中断命令,并且主机继续对象520的处理。如果接收到的事件为结束事件,则进程进行到步骤36。否则,主机510继续对象520的进程而不做任何事情,并且等待后继事件。
在步骤55-3中,已经从主机510接收到继续执行指令的对象520获取存储在地址A中的秘密数据Y以继续原始处理。
对象520在使用了秘密数据Y之后立即丢弃该秘密数据Y。由此,无论何时需要值,都必须从主机510获取该值。
上面说明了秘密数据仅为Y的情况。然而,还可以想到其中主机510保持多种秘密数据并且对象520指定并获取必要数据的方法。在这种情况下,主机510保持数据标识符(编号)和数据值的组。此外,可以将第三示例性实施方式设置如下:在特定地址中设置数据的标识符(编号)来代替第二示例性实施方式中的随机数R,产生调试中断事件,并且主机510将与标识符对应的数据设置在对象520的地址A中。
图7示出了第四示例性实施方式(其中主机保持对象的程序代码的一部分的实施例)的概念性模块框图。
这里,主机610对应于图3的监视程序1200,对象620对应于图3的保护对象程序1300。
第四示例性实施方式是其中主机侧保持执行处理并且对象应当具有的程序代码的一部分的实施例。
在第四示例性实施方式中,将第三示例性实施方式的步骤53到55-3改变成下面的步骤63到65-3。在第四示例性实施方式中也使用步骤36。此外,假定在对象620中执行处理所必要的程序代码的一部分缺失。
在步骤63中,如果对象620将要执行程序代码缺失的部分,则产生调试中断(在从程序提取的部分的开头预先嵌入调试中断命令)。
在步骤64中,中断对象620的执行。并且出现调试中断事件,将该调试中断事件通知给主机610。
在步骤65-1中,如果主机610接收到事件并且接收到的事件为调试中断事件,则主机610读取对象620的进程的程序计数器的值,并且将主机610预先保持的对象620的一部分程序代码嵌入由对象620的程序的程序计数器指示的位置。
在步骤65-2中,主机610继续对象620的进程。如果接收到的事件为结束事件,则进程进行到步骤36。否则,主机继续对象620的进程而不做任何事情,并且等待后继事件。
在步骤65-3中,因为出现中断的位置中的命令已经被替换,所以已经从主机610接收到继续执行指令的对象620继续后继处理。
此外,在步骤65-1中,当主机610将程序代码嵌入对象620的代码区时,可能必须将对象存储区的页属性设置成“可写入”(在Windows中执行VirtualProtectEx(),等等)。
在这个示例性实施方式中,说明的是主机610仅保持对象620的程序的程序代码的一部分的情况。当然,主机610可以保持多个程序代码。在这种情况下,如果主机610保持要嵌入的地址值和程序代码的组,则主机610可以在出现了调试中断事件时通过参照对象620的程序的程序计数器的值来指定应当嵌入哪一个程序代码。
在步骤65-3中,当主机610在对象620中写入了一次程序代码时,在写入之后在该位置将不会再次出现调试中断。因为这意味着主机610变得不必要了,所以从防止程序分析的角度来看不是优选的。
由此,如果将主机610写入的对象620的程序的最后部分设置为调试中断命令,则当嵌入有对象620的进程的代码执行结束时,执行最后的调试中断,以再次产生调试中断事件,接着将该事件通知给主机610。
当主机610侧接收到该事件时,可以执行从对象620擦除先前嵌入的程序代码的处理。此外,主机610可以通过参照对象620的进程的程序计数器的值来区分应当嵌入调试事件还是擦除程序代码。另外,可以在主机610写入的程序的最后部分中设置自身复原的命令(即,将调试中断设置在开头并且擦除剩余部分(清零)的命令),以代替调试中断命令。
图8示出了第五示例性实施方式(其中主机解密对象的加密程序代码的实施例)的概念性模块框图。
这里,主机710对应于图3的监视程序1200,对象720对应于图3的保护对象程序1300。
第五示例性实施方式是其中主机解密对象的程序代码(其一部分被预先加密)的实施例。在第五示例性实施方式中,将第三示例性实施方式的步骤53到55-3改变成下列步骤73到75-3。在第五示例性实施方式中也使用步骤36。此外,假定对象720侧的程序代码的一部分被预先加密,并且主机710保持有对于加密部分的解密密钥。此外,假定在加密程序代码的开头设置有调试中断命令。可以通过现有技术(例如日本特许3033562号公报和JP 2005-18725A)实现程序的加密。
在步骤73中,如果要执行加密的程序代码部分,则对象720执行恰位于加密部分之前的调试中断命令,并且产生调试中断。应注意到,调试中断命令没有被加密。
在步骤74中,中断对象720的执行,并且出现调试中断事件,将该调试中断事件通知给主机710。
在步骤75-1中,如果主机710接收到事件并且接收到的事件为调试中断事件,则主机710利用其预先保持的用于对象720的程序代码的解密密钥K和加密字节长度L,对来自对象720的程序计数器部分的“L”字节进行解密。接着,主机710在对象720的存储器中重写命令序列。
在步骤75-2中,主机710按1递增程序计数器,以使得在对象720的进程中不重复调试中断命令,并且主机继续对象720的进程。如果接收到的事件为结束事件,则进程进行到步骤36。否则,主机继续对象720的处理而不做任何事情,并且等待后继事件。
在步骤75-3中,因为解密了已经出现中断的位置之后的命令,所以已经从主机710接收到继续执行指令的对象720继续后继处理。
在步骤75-1中,类似于前述实施例,当主机710将程序代码嵌入对象720的代码区时,可能必须将对象存储区的页属性设置成“可写入”。
在这个示例性实施方式中,上述说明的是主机710仅解密对象720的程序的程序代码的一部分的情况。当然,主机710可以解密多个程序代码。此外,在要解密的每一个部分中可以改变解密密钥,或者可以改变算法。在这种情况下,可以通过参照出现调试中断事件时对象720的程序的程序计数器的值来指定解密密钥。另外,类似于其中将随机数R发送到主机的第二示例性实施方式,可以从对象720将指定解密密钥的诸如参数、加密算法以及初始值的信息发送到主机710。此外,解密处理不是通过主机710执行,而主机710可以仅提供解密密钥。这种情况下的构造变得与第三示例性实施方式的构造相同。
此外,类似于第四示例性实施方式,在步骤75-3中,如果主机710将程序代码写入对象720中,则在该位置中可能保留有明文程序代码。由此,通过在加密范围的最后嵌入调试中断命令,将加密范围的执行结束通知给主机,以使主机执行再加密。此外,尽管在此说明了其中采用程序代码作为加密对象的情况,但也可以采用数据作为加密对象。
图9示出了第六示例性实施方式(其中主机保持函数表的实施例)的概念性模块框图。
这里,主机810对应于图3的监视程序1200,对象820对应于图3的保护对象程序1300。
第六示例性实施方式是如下的实施例:其中,如JP2003-337629A所公开的那样,对象经由函数指针执行函数调用,并且,如果程序代码被编程为可以在特定函数中确定函数指针的内容,则主机执行确定函数调用目的地的处理。
在第六示例性实施方式中,将第三示例性实施方式的步骤53到55-3改变成步骤83到85-3。在第六示例性实施方式中也使用步骤36。此外,假定将对象820的程序代码的至少一部分编程为使其在调用函数时不直接调用该函数而是可以调用设置在特定函数指针中的地址、并且在确定了调用目的地时产生调试中断。此外,主机程序具有对象820中的函数地址与代表函数的标识符(编号等)之间的对应表。
在步骤83中,对象820在要确定调用目的地的位置将调用目的地参数存储在寄存器R1中,并且执行调试中断命令以产生调试中断。
在步骤84中,中断对象820的执行,并且出现调试中断事件,将该调试中断事件通知给主机810。
在步骤85-1中,如果主机810接收到事件并且该事件为调试中断事件,则主机810读取对象820的进程的寄存器R1的值,并且从由主机810预先保持的对象820的调用目的地列表中确定与该值的标识符对应的目的地。接着,主机810将该目的地的地址写入对象820的进程中的存储地址F的位置。
在步骤85-2中,主机810按1递增程序计数器,以使得在对象820的进程中不重复调试中断命令,并且主机继续对象820的进程。如果接收到的事件为结束事件,则进程进行到步骤36。否则,主机继续对象820的处理而不做任何事情,并且等待后继事件。
在步骤85-3中,已经从主机810接收到继续执行指令的对象820解析出存储在地址F中的地址信息为函数地址,执行对该地址的函数调用,并且继续进行处理。
该示例性实施方式被设置为主机810将确定的地址信息写入对象820的存储器中。然而,主机810可以直接重写对象820的程序的程序计数器。在这种情况下,如果有必要,则将来自函数的返回地址设置在对象820的程序的堆栈上。
此外,尽管主机810适于确定调用目的地,但是也可以将函数表本身发送到对象820并且对象820可以确定函数目的地。
图10示出了第七示例性实施方式(其中对象执行主机的处理所必要的处理的一部分的实施例)的概念性模块框图。
这里,主机910对应于图3的监视程序1200,对象920对应于图3的保护对象程序1300。
所有前述示例性实施方式都是其中为了继续对象的处理而由主机来支持处理(主机侧保持并且处理对象所必要的数据、程序、处理的一部分)的实施方式。然而,如在第五示例性实施方式的变型例中提到的,当主机保持用于解密对象的程序代码的一部分的解密密钥时,将该解密密钥嵌入主机程序中。因为嵌入程序中的密钥可能被诸如伪装器(dissembler)的静态分析发现,所以希望使其难以简单地分析。
因而,在第七示例性实施方式中,执行其中对象提供主机继续处理所必要的一部分数据、程序、处理等的方法。例如,进一步对主机保持的对象的解密密钥进行加密,并且对象920执行解密。这样,如果主机910不借用对象920的援助,则难以继续进行处理。例如,与前述示例性实施方式不同,主机910用作执行主处理的应用程序,对象920用作辅助程序。
下面,对这个示例性实施方式的过程进行说明。利用加密密钥K预先加密了主机910上的数据或程序的一部分。假定主机910仅具有通过用解密密钥Kd对加密密钥K进行加密而获得的EK,所述解密密钥Kd是只有对象920知道的私钥。
在步骤91中,用户启动主机910。
在步骤92中,主机910启动作为调试对象的对象920。
在步骤93中,对象920按挂起状态启动,并且向主机910通知在一侧已经创建了进程的调试事件。
在步骤94中,如果主机910接收到该事件,则主机910在对象的地址A中写入加密的解密密钥EK的数据,继续对象920的处理,并且等待后继事件。
在步骤95中,如果对象920重新开始执行,则对象920从地址A读取加密的密钥信息,利用它本身保持的解密密钥Kd来解密该密钥信息,将所得到的加密密钥K再次写入地址A中,并且执行调试中断。
在步骤96中,如果主机910接收到调试事件,则主机910通过参照对象920的地址A的内容来接收解密结果。此后,通过利用加密密钥K对主机910中的加密数据和加密程序进行解密来继续执行。
在此说明了其中主机910仅在执行初始化处理时请求对象920进行处理的实施例。然而,可以使对象920在步骤96之后在挂起状态下等待,并且如果有必要则主机910可以在步骤94之后执行处理。在这种情况下,将要向对象920请求的处理的内容写入对象920的地址或寄存器中,接着继续对象920的处理,并且对象执行指定处理。接着,对象920将一值返回到主机910。由此,主机910可以在任意定时调用对象侧的必要功能。尽管这里提到的处理是提供加密密钥的实施例,但也可以通过对象920执行任意处理。
此外,这个示例性实施方式可以和上述第二到第六示例性实施方式中的任一个示例性实施方式相组合。例如,假定这个示例性实施方式和第三示例性实施方式组合。在这种情况下,如果利用步骤96中获取的加密密钥K对另一数据进行解密,则获取用于解密对象920中的加密代码的密钥,并将该密钥提供给对象920。
图11示出了第八示例性实施方式(其中主机和对象协作执行加密代码的实施例)的概念性模块框图。
这里,主机1010对应于图3的监视程序1200,对象1020对应于图3的保护对象程序1300。
第八示例性实施方式是通过组合第五示例性实施方式和第七示例性实施方式而获得的。在第五示例性实施方式中,对象在任意定时请求主机进行处理,并且接收作为解密代码的代码。将第五示例性实施方式和其中主机在任意定时请求对象进行处理的第七示例性实施方式相组合。
下面,对这个示例性实施方式的过程进行说明。因为该过程较为复杂,所以分为主机1010侧和对象1020侧来说明该过程。
首先,将说明主机1010上的处理。
在步骤1101中,用户启动主机1010。
在步骤1102中,主机1010启动作为调试对象的对象1020,并且创建执行主机1010的主处理的应用线程1013。在主线程1011中,执行接收调试事件的处理。
在步骤1103-1(应用线程1013中的处理)中,应用线程1013继续主机1010的原始处理。当要调用对象1020的处理时,将针对对象1020的命令写入主机1010的命令变量TGCMD中,然后等待在主机1010的命令结果变量TGRES中写入值的事件。
在步骤1103-2(应用线程1013中的处理)中,如果在命令结果变量TGRES中写入了值,则应用线程1013参照该值来继续进行处理。此后,在必要时重复步骤1103-1到1103-2。
在步骤1104中,接收到调试事件,根据寄存器R1的值,处理对象1020的请求或者向对象1020给出处理请求。具体地说,执行下列步骤1104-1到1104-4的处理。
在步骤1104-1(主线程1011的处理)中,主线程1011等待调试中断事件。当出现这个事件时,参照对象1020的寄存器R1的内容。如果寄存器R1中的值是特定值(例如,0xFFFFFF01),则主线程1011确定该值为来自对象1020的处理请求。接着,主线程1011读取对象1020的存储器状态(例如,存储地址A(其用于指定命令)的内容),并且执行处理。接着,主线程1011将结果写入对象1020中(例如,写入存储地址B(其用于存储结果)中),由此使对象1020继续。
在步骤1104-2(主线程1011的处理)中,当寄存器R1的内容是另一特定值(例如,0xFFFFFF02)时,主线程1011确定寄存器R1的值为来自对象1020的处理接收。接着,参照主机1010的命令变量TGCMD。如果在该变量中写有命令,则主线程1011在对象1020的存储器中写入该命令,由此继续处理。如果TGCMD为空,则主线程1011不做任何事情,并且使对象1020的处理继续。
在步骤1104-3(主线程1011的处理)中,当寄存器R1的内容是再一特定值(例如,0xFFFFFF03)时,主线程1011确定寄存器R1的值为来自对象1020的处理结果通知。接着,主线程1011读取对象1020中的特定存储器的值,并将读取的值写入主机1010的命令结果变量TGRES中,由此使对象1020的处理继续。
在步骤1104-4(主线程1011的处理)中,当所述内容不是上述值中的任一值时,如果没有出现对象1020的结束事件,则继续对象1020的处理,并且,如果出现了结束事件,则主机1010也结束。
下面说明对象1020上的过程。
在步骤1201中,主机1010启动对象1020。
在步骤1202中,对象1020创建用于接收来自主机1010的命令的线程(接收线程1022)。
在步骤1203-1(主线程1021的处理)中,主线程1021继续处理。接着,当接收线程1022想要调用主机1010时,接收线程1022在寄存器R1中写入值0xFFFFFF01,并且还将对主机1010的处理请求的内容写入特定存储器区,由此,产生调试中断事件。
在步骤1203-2中,因为在继续处理时按照推测来自主机1010的处理结果写在存储器区中,所以读取处理结果,由此继续处理。此后,在必要时重复步骤1203-1到1203-2。
在定期产生调试事件时处理主机1010的命令。具体地说,执行下列步骤1204-1到1204-3的处理。
在步骤1204-1(接收线程1022的处理)中,接收线程1022按固定间隔(例如,50msec等)在寄存器R1中写入值0xFFFFFF02,由此,产生调试中断事件。
在步骤1204-2(接收线程1022的处理)中,如果特定存储器区不为空,则接收线程1022确定该存储器区的值为来自主机1010的命令(处理请求内容),由此执行对应处理。接着,接收线程1022将处理结果写入另一存储器区中,并且在寄存器R1中写入0xFFFFFF03,由此产生调试中断事件。如果特定存储器为空,则不做任何事情。
在步骤1204-3(接收线程1022的处理)中,重复从步骤1204-1起的处理。
下面,对第九示例性实施方式(其中对象检测主机的调试状态的实施例)进行说明。
因为在前述示例性实施方式中说明了其中只有对象充当被调试部的情况,所以不能防止调试者分析主机的行为。因而,对象定期地检查主机是否被调试,并且如果检测到主机被调试,则可以迅速停止执行。下面,对处理的实施例进行说明。
(A)下面示出了主机侧的处理。
(1)启动作为被调试部的对象。这时,发送主机自身的进程ID作为参数。
(2)等待来自对象的调试事件。只要没有出现结束事件,就重复这个步骤(2)。
(B)下面示出了对象侧的处理。
(1)创建用于检查具有发送为参数的进程ID的进程是否被调试。该线程执行(2)的处理。主线程继续对象的原始处理(应用程序的功能)。在Windows中,可以检测到使用了API“CheckRemoteDebuggerPresent()”或者启动了主调试器(Visual Studio等)的进程。
(2)定期(例如,每一分钟)检查具有特定线程ID的进程是否被调试。如果检测到该进程被调试,则对象自身的处理结束。否则,重复(2)。
这样,如果主机被调试,则对象可以检测到主机被调试,并且结束程序。
对第十示例性实施方式(多级构造的实施例)进行说明。
多级构造是用于防止通过调试器来分析主机的行为的构造。通过对主机设置父主机,并且进一步对父主机设置祖父主机,将第十示例性实施方式构造为多级。
在这种情况下,在主机与其下级对象之间的依赖关系中,将迄今所述的示例性实施方式的各种构造组合在一起。
对第十一示例性实施方式(其中主机和对象协作充当调试器的实施例)进行说明。
第十一示例性实施方式被设置成使得主机与对象之间的关系是对称的(一个充当另一个的主机和对象,反之亦然)。下面,对步骤进行说明。
(A)主机侧的处理。
(1)启动作为被调试部的对象。这时,发送自身进程ID,作为参数。
(2)创建用于执行原本要由主机执行的处理的线程。
(3)等待来自对象的调试事件。只要没有出现结束事件,就重复这个步骤(3)。
(B)对象侧的处理。
(1)作为调试器附加到作为参数发送来的进程ID。强制地终止具有发送来的进程ID的进程,并且如果附加失败则终止对象本身。
(2)等待来自主机的调试事件。只要没有出现结束事件就重复这个步骤(2)。
这样,两个进程都用作针对彼此的调试器。由此,来自外部的调试完全变得不可能。在这种情况下,主机执行“要由应用程序提供的原始处理”。然而,这个进程可以在对象侧上执行,或者可以在两侧上执行。
此外,在这个示例性实施方式中,主机和对象充当彼此的调试器。然而,如果像前述示例性实施方式那样形成主机与对象之间的依赖关系,则攻击者更难以进行分析。
对第十二示例性实施方式(关于模块的构造的实施例)进行说明。
如果主机和对象为分离的文件并且它们存在于同一文件夹中,则存在可以猜测其间的对应关系的可能性。由此,将文件集成为单个模块,并且通过启动选项来将主机的操作和对象的操作彼此切换。这里,“选项”例如是通过在命令名称之后添加连字符(-)而指定并且使得可以选择由命令执行的处理的选项。
对第十三示例性实施方式(其中按特定间隔切换主机与对象之间的调试器/被调试部关系的实施例)进行说明。
作为与用作后来附加到活动进程的调试器的API配对的API,存在分离调试器的API。还存在利用这个API按每个特定定时切换调试器与被调试部之间的关系的方法。例如,在主机启动对象并且充当对象的调试器的状态下,可以如下所述地进行切换。
(1)在对象侧,通过按固定间隔在寄存器中放入特定值来产生表示调试器切换的调试中断。对象迅速挂起执行。
(2)当主机接收到调试事件并且确定了接收到的事件为调试器切换时,主机从对象分离,同时使对象的操作继续。
(3)当对象重新开始其操作时,对象确认该对象不在被调试(在Windows中,检查是否从IsDebuggerPresent()和DebugActiveProcessStop()返回了FALSE)。接着,对象附加到主机并且等待来自主机的调试事件。
(4)如果主机等待事件达固定时间,则主机产生与(1)中相同的用于调试器切换的调试器中断。主机挂起执行。
(5)当对象接收到调试事件并且确定了该事件为调试器切换时,对象从主机分离,同时使主机的操作继续。
(6)当主机重新开始其操作时,主机确认该主机不在被调试。接着,主机附加到对象并且等待来自对象的调试事件。
(7)重复上述步骤(1)到(6)。
此外,当控制从对象传递到主机时,除了前述中断事件以外,还可能产生多种例外(因错误而造成的调试事件)。
产生(在循环内等产生)只要调试器不存在就不能正常继续执行的多个例外,例如,作为仅在出现错误时在对象的进程内通常产生的例外的除0以及非法存取。
主机知道何处已经出现例外。因而,如果出现了例外,则修正对象进程中出现例外的原因(递增程序计数器,或者重写寄存器或存储器的内容),并且主机继续其处理。这使得不能仅通过对象来执行。
此外,可以如下所述地对启动方法进行多种变型。
在前述示例性实施方式中说明了其中首先启动主机并且通过主机启动对象作为被调试部的情况。然而,还存在另一构造,其中,在正常地启动对象之后,该对象通过利用其自身的进程ID作为参数来启动主机,由此使主机附加到对象。
此外,从对象(被调试部)到主机(调试器)的通知(调试事件)可以例示如下。
例如,可以在创建/结束了进程/线程时、在出现了例外(非法存取等)时、在加载/卸载了DLL(动态链接库)时、以及/或者在输出了调试字符串时产生调试事件。可以使用它们中的任一个来向主机通知来自对象的处理请求。特别的是,调试字符串的输出可以将用于主机的参数发送为字符串。
此外,从主机(调试器)向对象(被调试部)的通知方法可以例示如下。
当主机调用对象时,在前述实施方式中存在下列两种方法。
(1)一种方法是:对象侧定期产生调试中断,并且,如果在该定时存在命令,则主机侧将处理请求的内容写入对象进程中的存储器中。
(2)一种方法是:当如果不存在需要则使对象侧在挂起状态下待机时,并且当主机侧需要时,将处理请求的内容写入对象侧的进程内的存储器中,由此重新开始处理。
除了它们以外,还存在另一方法:其中,主机侧根据OS支持的API的种类而强制地中断对象的处理(在Windows的情况下,通过API“DebugBreakProcess()”发送一信号,在Unix(注册商标)系统的情况下,通过API“kill()”发送一信号)。
下面,对利用这种方法的处理的实施例进行说明。
(1)准备等待针对对象侧的请求处理的线程。
(2)主机强制地中断对象。
(3)主机将请求的内容写入对象内的特定存储器中,以重新开始进程。
(4)如果对象已经结束,则对象产生调试中断。否则,在另一存储区中写入结果。
(5)主机等待调试中断,或者监视对象的结果写入的区域,并且接收结果。
此外,如图12所示,在执行示例性实施方式时通过程序执行的计算机的硬件结构是通用计算机,具体地说,是安装有多种应用软件的个人计算机。在示例性实施方式中,应用软件主要变为保护对象程序1300等。示例性实施方式由以下部件构成:执行程序(例如保护对象程序1300和与保护对象程序1300配对的监视程序1200)的CPU 901;存储程序或数据的RAM 902;存储用于启动计算机的程序的ROM 903;作为辅助存储装置的HD 904;输入键盘、鼠标等的数据的输入单元906;诸如CRT或液晶显示器的输出单元905;用于与通信网络相连接的通信线路接口907;以及用于将上述部件彼此连接并且交换数据的总线908。多台计算机可以通过网络彼此连接。
此外,图12示出的硬件构造是示例性构造,并且示例性实施方式不限于图12所示的构造。可以采用任何构造,只要它们可以执行示例性实施方式所述的模块即可。例如,一部分模块可以由专用硬件(例如ASIC等)构成。特别的是,除了个人计算机以外,还可以将这些模块并入蜂窝电话、游戏机、汽车导航系统、信息家电、复印机、传真机、扫描仪、打印机、复合机(也称为多功能复印机,具有诸如扫描仪、打印机、复印机以及传真机的功能)等。
此外,可以将上述程序存储在记录介质中,或者可以通过通信手段来提供这些程序。在这种情况下,例如,还可以将上述程序理解为“记录有程序的计算机可读记录介质”的发明。
表述“记录有程序的计算机可读记录介质”表示记录有计算机可以读取的程序并且用于安装或执行程序、分发程序等的记录介质。
此外,记录介质例如包括:数字通用盘(DVD),例如作为DVD论坛制定的标准的DVD-R、DVD-RW和DVD-RAM,以及作为DVD+RW方制定的标准的诸如DVD+R和DVD+RW;光盘(CD),例如只读存储器(CD-ROM)、可记录CD(CD-R)以及可重写CD(CD-RW);磁光盘(MO);软盘(FD);磁带;硬盘;只读存储器(ROM);电可擦除可编程只读存储器(EEPROM);闪速存储器;随机存取存储器(RAM)等。
此外,可以将上述程序或其一部分按将它们记录在上述记录介质上的状态下保存或分发。此外,可以通过通信来传送上述程序,例如利用通信介质来传送,所述通信介质例如用于互联网、内联网、外联网等的局域网(LAN)、城域网(MAN)、广域网(WAN)、有线网络和无线通信网络或者其组合网络。此外,还可以通过载波来传递上述程序。
此外,上述程序可以是其他程序的一部分,或者可以和单独的程序一起记录在记录介质上。
Claims (23)
1.一种信息处理方法,其中,仅通过单个程序来执行对特定程序的监视,所述信息处理方法包括以下步骤:
当启动要保护的保护对象程序时,启动监视所述保护对象程序的监视程序;以及
通过所述监视程序来监视所述保护对象程序。
2.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述保护对象程序来检查所述监视程序是否已经启动。
3.根据权利要求1所述的信息处理方法,其中,所述信息处理方法还包括以下步骤:
通过所述保护对象程序存储一秘密值;
通过所述监视程序存储与由所述保护对象程序存储的秘密值相同的另一秘密值;以及
通过所述保护对象程序来确定由所述监视程序存储的秘密值是否与由所述保护对象程序存储的秘密值相同。
4.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述监视程序存储所述保护对象程序继续进行处理所必要的信息,以及
通过所述监视程序将所述信息设置在所述保护对象程序中。
5.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述监视程序存储作为所述保护对象程序的缺失程序代码的程序代码,以及
通过所述监视程序将所述缺失程序代码设置在所述保护对象程序中。
6.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密。
7.根据权利要求1所述的信息处理方法,其中:
所述保护对象程序是通过函数调用目的地来调用函数的程序代码,并且所述信息处理方法还包括以下步骤:
通过所述监视程序存储所述函数调用目的地;以及
通过所述监视程序将所述函数调用目的地设置在所述保护对象程序中。
8.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息,以及
通过所述保护对象程序将所述信息设置在所述监视程序中。
9.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密;
通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息;以及
将所述信息设置在所述监视程序中。
10.根据权利要求1到9中的任一项所述的信息处理方法,其中,所述监视程序被另一监视程序监视。
11.根据权利要求1到9中的任一项所述的信息处理方法,其中:
所述监视程序解除对所述保护对象程序的监视,并且
所述保护对象程序启动对所述监视程序的监视。
12.根据权利要求1到9中的任一项所述的信息处理方法,其中:
所述监视程序和所述保护对象程序集成为一个模块,并且
所述监视程序或所述保护对象程序根据在启动所述一个模块时的参数而启动。
13.根据权利要求1所述的信息处理方法,所述信息处理方法还包括以下步骤:
通过所述保护对象程序来检查所述监视程序是否被另一监视程序监视。
14.一种信息处理系统,其中,仅通过单个程序来执行对特定程序的监视,该信息处理系统包括:
监视程序启动单元,在启动要保护的保护对象程序时,该监视程序启动单元启动监视所述保护对象程序的监视程序;以及
保护对象程序监视单元,该保护对象程序监视单元通过所述监视程序来监视所述保护对象程序。
15.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
检查单元,该检查单元通过所述保护对象程序来检查所述监视程序是否已经启动。
16.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
第一秘密值存储单元,该第一秘密值存储单元通过所述保护对象程序存储一秘密值;
第二秘密值存储单元,该第二秘密值存储单元通过所述监视程序存储与由所述保护对象程序存储的秘密值相同的另一秘密值;以及
确定单元,该确定单元通过所述保护对象程序来确定由所述第二秘密值存储单元存储的秘密值是否与由所述第一秘密值存储单元存储的秘密值相同。
17.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
必要信息存储单元,该必要信息存储单元通过所述监视程序存储所述保护对象程序继续进行处理所必要的信息;以及
设置单元,该设置单元通过所述监视程序将所述信息设置在所述保护对象程序中。
18.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
程序代码存储单元,该程序代码存储单元通过所述监视程序存储作为所述保护对象程序的缺失程序代码的程序代码;以及
设置单元,该设置单元通过所述监视程序将所述缺失程序代码设置在所述保护对象程序中。
19.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
解密单元,该解密单元通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密。
20.根据权利要求14所述的信息处理系统,其中,所述保护对象程序是通过函数调用目的地来调用函数的程序代码,
所述信息处理系统还包括:
函数调用目的地存储单元,该函数调用目的地存储单元通过所述监视程序存储所述函数调用目的地;以及
设置单元,该设置单元通过所述监视程序将所述函数调用目的地设置在所述保护对象程序中。
21.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
必要信息存储单元,该必要信息存储单元通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息,以及
设置单元,该设置单元通过所述保护对象程序将所述信息设置在所述监视程序中。
22.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
解密单元,该解密单元通过所述监视程序对作为所述保护对象程序的一部分并且被加密的程序代码或数据进行解密;
必要信息存储单元,该必要信息存储单元通过所述保护对象程序存储所述监视程序继续进行处理所必要的信息;以及
设置单元,该设置单元将所述信息设置在所述监视程序中。
23.根据权利要求14所述的信息处理系统,所述信息处理系统还包括:
检查单元,该检查单元通过所述保护对象程序来检查所述监视程序是否被另一监视程序监视。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2006237124A JP4048382B1 (ja) | 2006-09-01 | 2006-09-01 | 情報処理システムおよびプログラム |
JP2006-237124 | 2006-09-01 | ||
JP2006237124 | 2006-09-01 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101136049A true CN101136049A (zh) | 2008-03-05 |
CN101136049B CN101136049B (zh) | 2011-12-14 |
Family
ID=38751189
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101478400A Expired - Fee Related CN101136049B (zh) | 2006-09-01 | 2007-08-30 | 信息处理系统和信息处理方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7930743B2 (zh) |
EP (3) | EP1906330B1 (zh) |
JP (1) | JP4048382B1 (zh) |
KR (1) | KR101054318B1 (zh) |
CN (1) | CN101136049B (zh) |
AU (1) | AU2007211962B2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116714A (zh) * | 2013-03-01 | 2013-05-22 | 中标软件有限公司 | 一种Windows平台可执行文件双进程保护方法 |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8600896B2 (en) * | 2008-03-28 | 2013-12-03 | Panasonic Corporation | Software updating apparatus, software updating system, invalidation method, and invalidation program |
US8464347B2 (en) * | 2008-03-28 | 2013-06-11 | Panasonic Corporation | Software updating apparatus, software updating system, alteration verification method and alteration verification program |
US8763125B1 (en) * | 2008-09-26 | 2014-06-24 | Trend Micro, Inc. | Disabling execution of malware having a self-defense mechanism |
WO2010127438A1 (en) * | 2009-05-06 | 2010-11-11 | Irdeto Canada Corporation | Interlocked binary protection using whitebox cryptography |
KR101554326B1 (ko) * | 2009-05-21 | 2015-09-18 | 삼성전자주식회사 | 저장 장치 및 그것의 동작 방법 |
JP5511506B2 (ja) * | 2010-05-25 | 2014-06-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法及び該方法を装置で実行することが可能なコンピュータプログラム |
JP5549810B2 (ja) * | 2010-06-25 | 2014-07-16 | 日本電気株式会社 | プログラム難読化装置、プログラム制御装置、プログラム難読化方法及びプログラム |
CN102768634B (zh) * | 2011-05-06 | 2016-05-04 | 北大方正集团有限公司 | 目标系统的处理方法及监控系统 |
WO2013142947A1 (en) * | 2012-03-30 | 2013-10-03 | Irdeto Canada Corporation | Secured execution of a web application |
EP2979214A4 (en) * | 2013-03-28 | 2016-11-30 | Irdeto Bv | DETECTION OF SOFTWARE APPLICATION FOLDS |
KR101519845B1 (ko) * | 2013-11-14 | 2015-05-13 | (주)잉카엔트웍스 | 안티디버깅 방법 |
CN104008037A (zh) * | 2014-03-13 | 2014-08-27 | 英业达科技有限公司 | 监控模块的监控方法 |
CN104021079B (zh) * | 2014-06-13 | 2017-05-24 | 中国民航信息网络股份有限公司 | 主机系统数据的实时监控与分析系统及方法 |
CN104102570B (zh) * | 2014-07-18 | 2017-12-01 | 广州猎豹网络科技有限公司 | 一种app运行控制的方法及装置 |
CN104268059B (zh) * | 2014-09-30 | 2017-12-22 | 上海斐讯数据通信技术有限公司 | 一种智能移动终端的应用程序查找方法和系统 |
US9483381B2 (en) * | 2014-12-15 | 2016-11-01 | Dell Products L.P. | Obfuscating debugging filenames |
KR101653741B1 (ko) * | 2015-02-11 | 2016-09-05 | (주) 에스에스알 | 실행 프로그램 동작 감시방법, 감시장치 및 이를 위한 컴퓨터 프로그램, 그 기록매체 |
FR3047585B1 (fr) * | 2016-02-09 | 2018-03-09 | Stmicroelectronics (Rousset) Sas | Procede et dispositif de surveillance de l'execution d'un code programme |
EP3330859A1 (en) * | 2016-12-05 | 2018-06-06 | Universiteit Gent | Self-debugging |
CN109324828B (zh) * | 2018-09-21 | 2023-06-02 | 山东华芯半导体有限公司 | 一种在验证平台中实现闪存多命令并行执行的方法 |
KR102327587B1 (ko) * | 2020-02-14 | 2021-11-17 | 엔에이치엔 주식회사 | 모바일 게임 매크로 사용자 감시 방법 및 그 시스템 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62109705A (ja) | 1985-10-28 | 1987-05-20 | 田中 壮吉 | 溶融物の自動充填装置 |
JPH0713780A (ja) | 1993-06-24 | 1995-01-17 | Nikon Corp | グラフィカルユーザインタフェースを備える装置 |
US5699512A (en) | 1994-04-28 | 1997-12-16 | Nippon Telegraph And Telephone Corp. | Software analysis protection method for changing the software pattern on the memory of a user terminal |
JP3463963B2 (ja) | 1994-04-28 | 2003-11-05 | 日本電信電話株式会社 | ソフトウェア解析保護方法 |
CN1123935A (zh) * | 1994-12-03 | 1996-06-05 | 联华电子股份有限公司 | 保护软件的装置及方法 |
US6237137B1 (en) | 1997-10-15 | 2001-05-22 | Dell Usa, L.P. | Method and system for preventing unauthorized access to a computer program |
JP3033562B2 (ja) | 1998-09-02 | 2000-04-17 | 富士ゼロックス株式会社 | 再配置可能な実行プログラムの生成方法及び実行プログラム生成装置 |
US6874087B1 (en) * | 1999-07-13 | 2005-03-29 | International Business Machines Corporation | Integrity checking an executable module and associated protected service provider module |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
WO2001040945A2 (en) | 1999-12-01 | 2001-06-07 | Microsoft Corporation | Method and apparatus for providing secure remote debugging of computer software over a serial bus |
US6874067B2 (en) * | 2002-04-11 | 2005-03-29 | International Business Machines Corporation | Eliminating unnecessary data pre-fetches in a multiprocessor computer system |
JP2003337629A (ja) | 2002-05-18 | 2003-11-28 | Mitsuko Miyaji | プログラム難読化方法及び装置 |
EP1429224A1 (en) * | 2002-12-10 | 2004-06-16 | Texas Instruments Incorporated | Firmware run-time authentication |
JP4475894B2 (ja) | 2002-08-01 | 2010-06-09 | パナソニック株式会社 | 暗号化データを復号して実行用メモリ空間に配置する装置、およびその方法 |
CN100359425C (zh) | 2002-08-01 | 2008-01-02 | 松下电器产业株式会社 | 用于解密已加密数据并在存储器空间中定位用于执行的解密数据的方法和设备 |
US20040040013A1 (en) | 2002-08-26 | 2004-02-26 | Mohit Kalra | Time-based breakpoints in debuggers |
JP2004185064A (ja) | 2002-11-29 | 2004-07-02 | Matsushita Electric Ind Co Ltd | プログラムの難読化装置及び難読化方法 |
WO2004053666A1 (ja) | 2002-12-11 | 2004-06-24 | Interlex Inc. | ソフトウェア実行制御システム及びソフトウェアの実行制御プログラム |
US7149900B2 (en) * | 2002-12-12 | 2006-12-12 | Intel Corporation | Method of defending software from debugger attacks |
US7370319B2 (en) | 2003-02-11 | 2008-05-06 | V.I. Laboratories, Inc. | System and method for regulating execution of computer software |
US7360253B2 (en) * | 2004-12-23 | 2008-04-15 | Microsoft Corporation | System and method to lock TPM always ‘on’ using a monitor |
US20080168562A1 (en) * | 2005-02-25 | 2008-07-10 | Tomoyuki Haga | Secure Processing Device and Secure Processing System |
JP4796050B2 (ja) | 2005-02-25 | 2011-10-19 | パナソニック株式会社 | セキュア処理装置、及びセキュア処理システム |
-
2006
- 2006-09-01 JP JP2006237124A patent/JP4048382B1/ja not_active Expired - Fee Related
-
2007
- 2007-08-28 AU AU2007211962A patent/AU2007211962B2/en not_active Ceased
- 2007-08-29 EP EP07016935A patent/EP1906330B1/en not_active Not-in-force
- 2007-08-29 US US11/846,940 patent/US7930743B2/en not_active Expired - Fee Related
- 2007-08-29 EP EP11189731.0A patent/EP2420949B1/en not_active Not-in-force
- 2007-08-29 EP EP11189732.8A patent/EP2420950B1/en active Active
- 2007-08-30 CN CN2007101478400A patent/CN101136049B/zh not_active Expired - Fee Related
- 2007-08-30 KR KR1020070087564A patent/KR101054318B1/ko not_active IP Right Cessation
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103116714A (zh) * | 2013-03-01 | 2013-05-22 | 中标软件有限公司 | 一种Windows平台可执行文件双进程保护方法 |
Also Published As
Publication number | Publication date |
---|---|
KR101054318B1 (ko) | 2011-08-05 |
EP1906330A3 (en) | 2011-05-11 |
EP1906330B1 (en) | 2013-03-27 |
EP1906330A2 (en) | 2008-04-02 |
AU2007211962B2 (en) | 2009-06-18 |
JP4048382B1 (ja) | 2008-02-20 |
KR20080020952A (ko) | 2008-03-06 |
EP2420949B1 (en) | 2013-12-25 |
EP2420950A1 (en) | 2012-02-22 |
US20080060072A1 (en) | 2008-03-06 |
EP2420949A1 (en) | 2012-02-22 |
EP2420950B1 (en) | 2013-06-19 |
AU2007211962A1 (en) | 2008-03-20 |
CN101136049B (zh) | 2011-12-14 |
US7930743B2 (en) | 2011-04-19 |
JP2008059404A (ja) | 2008-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101136049B (zh) | 信息处理系统和信息处理方法 | |
CN110799941B (zh) | 防盗和防篡改的数据保护 | |
US9794270B2 (en) | Data security and integrity by remote attestation | |
US7631356B2 (en) | System and method for foreign code detection | |
CN112434306B (zh) | 可信度量方法,装置,系统,电子设备及存储介质 | |
US9690598B2 (en) | Remotely establishing device platform integrity | |
RU2723665C1 (ru) | Динамический индикатор репутации для оптимизации операций по обеспечению компьютерной безопасности | |
CN101477612A (zh) | 保护从中央处理器发送的以供处理的安全数据的安全性 | |
JP2007525752A (ja) | コンピュータ保安装置、コンピュータ保安方法、及び記録媒体 | |
US20060288342A1 (en) | Post build process to record stack and call tree information | |
CN110138731B (zh) | 一种基于大数据的网络防攻击方法 | |
JP2019057167A (ja) | コンピュータプログラム、デバイス及び判定方法 | |
EP2130159A1 (en) | Secure data storage and retrieval incorporating human participation | |
CN110765470A (zh) | 安全键盘实现方法、装置、计算机设备及存储介质 | |
CN116260595B (zh) | 一种云密码检测方法及系统 | |
WO2007074992A1 (en) | Method for detecting malicious code changes from hacking of program loaded and executed on memory through network | |
CN115859337B (zh) | 基于内核的防止设备破解方法、设备、服务器及介质 | |
US20230334149A1 (en) | Program processing device and program processing method | |
KR100846123B1 (ko) | 키보드 보안 방법 및 상기 방법을 이용한 키보드 보안드라이버를 기록한 기록 매체 | |
CN116340933A (zh) | 一种程序代码防篡的方法及系统 | |
CN118260767A (zh) | 基于TrustZone技术的安全防护方法 | |
CN115906016A (zh) | 源码保护方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111214 Termination date: 20180830 |