CN101156157A - 软件保护方法 - Google Patents

软件保护方法 Download PDF

Info

Publication number
CN101156157A
CN101156157A CNA2006800118346A CN200680011834A CN101156157A CN 101156157 A CN101156157 A CN 101156157A CN A2006800118346 A CNA2006800118346 A CN A2006800118346A CN 200680011834 A CN200680011834 A CN 200680011834A CN 101156157 A CN101156157 A CN 101156157A
Authority
CN
China
Prior art keywords
instruction
executable program
functional block
call
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
Application number
CNA2006800118346A
Other languages
English (en)
Other versions
CN100594509C (zh
Inventor
J·A·萨法
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
From Patent Co
Original Assignee
Simplex Major Sdn Bhd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Simplex Major Sdn Bhd filed Critical Simplex Major Sdn Bhd
Publication of CN101156157A publication Critical patent/CN101156157A/zh
Application granted granted Critical
Publication of CN100594509C publication Critical patent/CN100594509C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (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

软件保护方法
本发明涉及一种软件保护方法,并且特别涉及一种保护可执行程序的方法,它禁止对所述程序施行逆向工程和/或窜改所述程序。
软件保护的方法通常被定位在禁止软件的非法复制和分发。软件保护的一种形式涉及在软件应用程序程序中嵌入保护码。一执行所述软件应用程序程序,所述保护码就确定试图执行所述应用程序的计算机是否被授权这样做。不幸地,这种软件保护形式容易受到排错程序和反汇编程序的攻击。例如,所述软件应用程序可以被反汇编并且保护码的位置从汇编码中被识别。一旦所述保护码的位置被知道,附加码可以被插入到所述软件应用程序程序来作废所述保护码或者欺骗所述保护码使它相信所述计算机被授权执行所述软件应用程序。
保护软件应用程序程序防止逆向工程的方法包括加密所述应用程序的一个或多个片段。然而,这需要所述应用程序的源代码的知识,因为,不是所述应用程序的全部片段都适合于加密。例如,指向被加密的代码内的一个位置的任何直接转移或调用指令在执行期间将必然导致致命的错误。另外,如果没有考虑正被加密代码的位置,则紧靠在被加密代码前面的指令可能被错误地执行。而且,在解密期间,寄存器的内容很可能被重写。因此,任何被部分加密的例行程序不太可能被正确地执行。因此,这种保护方法不适合于不知道资源码的软件应用程序。除了软件的非法复制和分发以外,特别是考虑到日益增加的通过通信网络的数据交换,另外要关注的是软件被诸如病毒和phishing码的恶意的代码感染。虽然有检查软件中存在的病毒码的防病毒应用程序,但是新的病毒在不断地被释放。因此,防病毒应用程序需要频繁地更新以便于任何实际使用。
第一方面,本发明提供了一种保护可执行的程序的方法,所述方法包括:接收所述可执行的程序的拷贝,所述可执行的程序包括被安排成多个功能块的可执行的指令;接收一个与所述可执行的程序有关的排错数据库,所述排错数据库存储所述可执行程序内的功能块的位置;从所述排错数据库识别所述可执行的程序内的功能块的位置;以及将保护码插入到所述可执行的程序中,所述保护码重写所述功能块的至少一部分,其中,所述功能块的执行导致所述保护码将被执行,并且所述保护码的执行完成一个操作并且执行被所述保护码重写的功能块的至少一部分的拷贝。
优选地,插入保护码包括:编码所述功能块的至少一部分来产生被编码的指令;将一个解码例行程序插入到所述可执行的程序中;用一个对所述解码例行程序的调用指令和用所述被编码的指令来替换所述可执行的程序的功能块的至少一部分,其中,所述解码例行程序包括用于解码所述被编码的指令并且用于执行所述被解码的指令的可执行的指令。
有利地,编码包括使用一个加密密钥加密所述功能块的至少一部分,并且解码包括使用一个解密密钥解密所述被编码的指令。
方便地,所述加密密钥从所述可执行程序的代码片段得出,所述解码例行程序从所述代码片段得出所述解密密钥,并且所述被编码的指令在所述代码片段没有出现恶化的情况下被成功地解密。
优选地,所述加密密钥从一个另外的功能块的指令中被得出,所述另外的功能块正被编码,并且所述解码例行程序解码所述另外的功能块,并且从所述另外的功能块的指令中得出所述解密密钥,以及所述被编码的指令在所述另外的功能块被成功地解密的情况下被成功地解密。
有利地,至少一个功能块包括到一个一个另外的功能块内的位置的调用或转移指令,并且所述排错数据库存储所述可执行程序点的每个调用或转移指令指向的位置,以及编码一个功能块的步骤包括:选择一个功能块的至少一部分以用于编码;从所述排错数据库的内容中识别指向所述功能块中被选择的至少一部分内的位置的转移和调用指令;和在没有转移和调用指令被识别的情况下编码所述功能块被选择的至少一部分。
方便地,插入保护码包括:编码多个功能块中的每一个的至少一部分以便产生被编码的多个指令片段,每个片段对应于一个相应的功能块;将解码例行程序插入到所述可执行的程序中;以及用一个对所述解码例行程序的调用指令并且用被编码的指令的一个相应的片段替换所述多个功能块的每一个的至少一部分,其中,所述解码例行程序包括用于解码和执行被编码的指令的可执行的指令。
优选地,插入保护码包括:用第一种编码算法编码第一功能块的至少一部分以便产生第一被编码的指令;用第二种编码算法编码第二功能块的至少一部分以便产生第二被编码的指令;将第一解码例行程序插入到所述可执行的程序中;将第二解码例行程序插入到所述可执行的程序中;用对所述第一解码例行程序的调用指令并且用所述第一被编码的指令替换所述第一功能块的至少一部分;并且用对所述第二解码例行程序的调用指令以及用所述第二被编码的指令替换所述可执行程序的第二功能块的至少一部分,其中,所述第一解码例行程序包括用于解码所述第一被编码的指令和用于执行所述第一被解码的指令的可执行的指令,并且所述第二解码例行程序包括用于解码所述第二被编码的指令和用于执行所述第二被解码的指令的可执行的指令。
有利地,所述第一编码例行程序和第二编码例行程序是不同的。
方便地,所述方法还包括分解所述功能块并且从被分解的代码选择一个或多个指令,其中,编码所述功能块的至少一部分包括编码对应于所选择的指令的所述功能块的一个或多个片段。
优选地,在被多余的指令占用的位置所述解码例行程序被插入到所述可执行的程序中。
有利地,所述排错数据库存储每个功能块的起始地址和关于每个功能块的结束地址的信息,并且所述方法包括比较一个功能块的结束地址和一个邻近的功能块的起始地址以便识别在所述两个功能块之间的多余指令。
方便地,所述方法包括分解一个功能块,并且分析被分解的代码以便识别所述功能块内的多余指令。
优选地,所述功能块包括至少一个具有一个调用地址的调用指令,并且所述方法还包括:将一个检验例行程序插入到所述可执行的程序中;修改所述调用指令的调用地址,从而使所述检验例行程序先于调用所述调用地址而被执行。
有利地,所述排错数据库存储所述可执行的程序内的调用指令的位置,并且插入保护码包括:将一个检验例行程序插入到所述可执行的程序中;从所述排错数据库识别在所述可执行的程序内的调用指令的位置,所述调用指令具有一个调用地址;以及修改所述调用指令的调用地址,从而使所述检验例行程序先于调用所述调用地址而被执行。
方便地,所述检验例行程序包括用于检测所述可执行的程序的恶化的指令。
优选地,所述检验例行程序包括用于在没有恶化被检测的情况下调用所述调用地址的指令。
有利地,所述可执行的程序的至少一个片段在执行期间被存储在一个存储器设备中,并且所述检验例行程序检测被存储在存储器中的片段的恶化。
方便地,所述检验例行程序包括在恶化被检测的情况下用于恶化或删除被存储在所述存储器设备中的可执行程序的片段的指令。
优选地,所述检验例行程序包括在该恶化被检测的情况中用于终止可执行程序的执行的指令。
有利地,所述检验例行程序使用一种CRC算法。
方便地,所述检验例行程序包括在排错过程被检测的情况下用于检测排错过程是否在执行并且用于终止可执行程序的执行的指令。
优选地,所述方法还包括将中间代码插入到所述可执行的程序中,所述中间代码包括对所述检验例行程序的第一调用指令和对所述调用地址的第二调用指令,所述调用地址被修改以便调用所述中间代码。
有利地,所述方法包括从所述排错数据库识别在所述可执行的程序内的多个调用指令的位置,所述多个调用指令的每一个具有一个调用地址;为所述多个调用指令的每一个插入中间代码的一个相应的片段,中间代码的每个片段包括对所述检验例行程序的第一调用指令和对所述可执行的程序的一个相应的调用指令的调用地址的第二调用指令;并且修改所述可执行的程序的多个调用指令的每一个的调用地址以便调用中间代码的一个相应的片段。
在第二个方面中,本发明提供了一种保护可执行的程序的方法,所述方法包括:接收所述可执行的程序的拷贝,所述可执行的程序包括被安排成多个功能块的可执行的指令;接收与所述可执行的程序有关的排错数据库,所述排错数据库存储在所述可执行的程序内的功能块的位置;从所述排错数据库中识别在所述可执行的程序内的功能块的位置;编码所述功能块的至少一部分以便产生被编码的指令;将一个解码例行程序插入到所述可执行的程序中;以及用对所述解码例行程序的调用指令和用所述被编码的指令替换所述可执行的程序的功能块的至少一部分,其中,所述解码例行程序包括用于解码所述被编码的指令和执行所述被解码的指令的可执行的指令。
在第三个方面中,本发明提供了一种保护可执行的程序的方法,所述方法包括:接收所述可执行的程序的拷贝;接收与所述可执行的程序有关的排错数据库,所述排错数据库存储在所述可执行的程序内的调用指令的位置;将一个检验例行程序插入到所述可执行的程序中;从所述排错数据库识别在所述可执行的程序内的调用指令的位置,所述调用指令具有一个调用地址;修改所述调用指令的调用地址,从而使所述检验例行程序先于调用所述调用地址而被执行。
在第四个方面中,本发明提供了一种用于保护可执行的程序的设备,所述设备包括:用于接收所述可执行的程序的拷贝的装置,所述可执行的程序包括被安排成多个功能块的可执行的指令;用于接收与所述可执行的程序有关的排错数据库的装置,所述排错数据库存储在所述可执行的程序内的功能块的位置;用于从所述排错数据库中识别在所述可执行的程序内的功能块的位置的装置;用于将保护码插入到所述可执行的程序中的装置,所述保护码重写所述功能块的至少一部分,其中,所述功能块的执行导致所述保护码将被执行,所述保护码的执行完成一种操作并且执行被所述保护码重写的功能块的至少一部分的拷贝。
在第五个方面中,本发明提供了一种用于保护可执行的程序的设备,所述设备包括:用于接收所述可执行的程序的拷贝的装置,所述可执行的程序包括被安排成多个功能块的可执行的指令;用于接收与所述可执行的程序有关的排错数据库的装置,所述排错数据库存储在所述可执行的程序内的功能块的位置;用于从所述排错数据库中识别在所述可执行的程序内的功能块的位置的装置;用于编码所述功能块的至少一部分以便产生被编码的指令的装置;用于将一个解码例行程序插入到所述可执行的程序中的装置;以及用于用对所述解码例行程序的调用指令和用所述被编码的指令替换所述可执行的程序的功能块的至少一部分的装置,其中,所述解码例行程序包括用于解码所述被编码的指令和用于执行所述被解码的指令的可执行的指令。
在第六个方面中,本发明提供了一种用于保护可执行的程序的设备,所述设备包括:用于接收所述可执行的程序的拷贝的装置;用于接收与所述可执行的程序有关的排错数据库的装置,所述排错数据库存储在所述可执行的程序内的调用指令的位置;用于将一个检验例行程序插入到所述可执行的程序中的装置;用于从所述排错数据库中识别在所述可执行的程序内的调用指令的位置的装置,所述调用指令具有一个调用地址;以及用于修改所述调用指令的调用地址从而使所述检验例行程序先于调用所述调用地址而被执行的装置。
在第七个方面中,本发明提供了一种包括用于执行上述方法的指令的计算机。
在第八个方面中,本发明提供了一种可由计算机执行以便完成上述方法的计算机程序或计算机程序组。
在第九个方面中,本发明提供了一种存储可由计算机执行以便完成上述方法的计算机程序代码的计算机程序产品。
为了更容易地理解本发明,将通过例子参考附图来描述本发明的实施方案,其中:
图1表示体现本发明的保护可执行的程序的方法的流程图;
图2表示根据本发明的第一个实施方案将保护码插入到可执行的程序中的方法的流程图;
图3表示一种在通过图2的方法插入保护码之前和之后的可执行的程序;
图4表示根据本发明的第二个实施方案将保护码插入到可执行的程序中的方法的流程图;
图5表示一种在通过图4的方法插入保护码之前和之后的可执行的程序。
图1表示本发明的一个实施方案,其中,保护码被插入到一个可执行的程序中以便提供所述可执行的程序的被保护的拷贝。
所述方法包括接收1要被保护的可执行程序的拷贝,接收2与所述可执行的程序有关的排错数据库,从所述排错数据库的内容中识别3在所述可执行的程序内的功能块的位置,选择4所述可执行的程序的一个或多个功能块,以及插入5保护码到所述可执行的程序中,从而使所选择的功能块的每一个的至少一部分被重写。
功能块被认为是一个或多个当被执行时完成一个特定功能的可执行的指令块。
对于一种简单的可执行的程序(即,具有几个功能块和/或相对简单的指令的程序),通过分解所述可执行的程序并且分析所述汇编码来识别在所述可执行的程序内的功能块是可能的。然而,分解不恢复任何符号信息,诸如用于诸如直接编译成机器代码的C++的面向目标的语言的原函数或类别名(相反,当被编译成它们的中间或字节代码形式时,诸如Java&C#的较新的语言保留符号信息)。这种符号信息的缺乏对识别在更为复杂的可执行的程序内的功能块的起始和结束位置以及使它们返回到与源代码有联系将造成很大困难。对具有一个使用可变长度指令(例如,x86指令组)的指令组的平台上被执行的程序尤其是这样。通过提供与所述可执行的程序有关的排错数据库并且从所述排错数据库的内容中识别3所述功能块的位置解决了这种识别功能块的困难。
当分解目标以便产生所述可执行的程序时,所述排错数据库通过一个连接程序,典型地通过选择一个用于核对排错信息的选项而被生成。其中,所述排错数据库尤其包括在所述可执行的程序内的每个功能块的有关地址(即,位置)。另外,所述排错数据库包括在所述可执行的程序内的每个直接调用和转移指令的地址,以及所述调用或转移指令指向的地址。
仅仅作为例子,微软视觉工作室可以被配置成输出被称为程序数据库(PDB)文件的排错数据库文件。其中,所述PDB文件尤其存储所述功能块的地址、直接调用和转移指令的地址、以及所述调用和转移指令指向的地址。
现在将描述两个用于将保护码插入到所述可执行的程序中的实施方案。
如在图2中被表示的,在第一个实施方案中,一个检验例行程序被插入6到所述可执行的程序中。如下面更详细被描述的,所述检验例行程序包括用于检验所述可执行的程序的完整性的可执行的指令。通过将所述例行程序附加到所述可执行的程序末端或者通过在所述可执行的程序内在由冗余码组成的一个或多个位置上嵌入所述例行程序,所述检验例行程序被插入6到所述可执行的程序中。下面描述识别在所述可执行的程序内的冗余码的方法。
在所选择的功能块内的直接调用指令(与间接调用指令相对照)的位置随后通过回顾所述排错数据库的内容而被识别7,所述排错数据库存储直接调用指令的位置和所述调用指令指向的地址。
对于每个被识别的调用指令,相应的中间代码被插入到8所述可执行的程序中。如所述检验例行程序那样,所述中间代码可以被附加到所述可执行的程序的末端或者在由冗余码组成的位置被嵌入。
中间代码的每个片段包括两个调用指令。第一个调用指令指向所述检验例行程序的起始地址。第二个调用指令指向的地址和所述中间代码对应的调用指令所指向的地址相同。
在一个相应的调用指令的中间代码被插入8之后,所述功能块的调用指令被修改9,从而使所述调用指令指向所述中间代码的起始地址。
图3(a)表示一个无保护的可执行的程序10并且图3(b)表示一个跟随在插入保护码12之后的被保护的可执行的程序11。可执行的程序10包括四个功能块13。第二个功能块13b包括一个指向第四个功能块13d的调用指令。在插入保护码12之后,第二个功能块13b的调用指令指向相应的中间代码14。中间代码14包括两个调用指令15、16,第一个调用指令15指向检验例行程序17并且第二个调用指令16指向第四个功能块13d。
当被保护的可执行的程序11被执行,并且随后调用第二个功能块13b时,所述执行线索调用中间代码14。所述执行线索随后执行中间代码14的第一个指令15并且调用检验例行程序17,它检验所述被保护的可执行程序11的完整性。在检验例行程序17执行之后,所述执行线程返回到中间代码14、执行第二个调用指令16并且调用第四个功能块13d。在第四个功能块13d执行之后,所述执行线程立即返回到在第二个功能块13b的调用指令之后的地址,因此,第二个功能块13b剩余的指令被执行。最后,第二个功能块13b的返回指令被执行,导致所述执行线程返回到始发调用指令。
检验例行程序17通过执行一个或多个冗余校验来检验被保护的可执行程序11的完整性。两种不同类型的冗余校验可以被检验例行程序17执行。在第一种中,静态冗余校验在被存储在磁盘上的被保护的可执行程序11上被执行。在第二种中,在执行期间,动态冗余校验在被保留在存储器中的被保护的可执行的程序上执行。
在插入4保护码12到可执行的程序10的步骤期间,从所述可执行的程序得出一个或多个CRC值或者其它冗余校验数据。从所述被保护的可执行的程序的完整代码得出一个单独的CRC值以用于静态冗余检查。从所述可执行的程序的代码片段得出每个CRC值以用于动态冗余检查。所述一个或多个CRC值随后被存储在被保护的可执行的程序11内(例如,在检验例行程序17内的位置上)以供检验例行程序17随后使用。
在随后的被保护可执行程序11的执行期间,检验例行程序17重新计算可执行程序11的一个或多个CRC值并且将这些值和以前被存储的值比较,以便检验可执行程序11的恶化是否已经出现。被插入到可执行程序11中的任何恶意代码(例如,排错代码、病毒代码和phishing代码)因此将被立即识别。
如果检验例行程序17检测到被保护的可执行程序11的恶化,则检验例行程序17终止可执行的程序11的执行。可选地,检验例行程序17恶化或删除被存储在存储器中的可执行程序11的任何代码,以便防止指令从存储器被转储到磁盘。
有利地,检验例行程序17包括用于执行静态冗余校验和动态冗余校验的指令。可替代地,用于执行静态冗余校验和动态冗余校验的分开的检验例行程序可以被插入到所述可执行的程序中。位于或接近所述可执行程序的开始的功能块的调用指令于是优选地被修改,从而使静态冗余校验在执行所述可执行程序的早期被执行。因此,驻留在被保护的可执行程序中的任何恶意代码在被执行之前可以被识别。
在上面被描述的实施方案中,中间代码被插入用于所选择的功能块的每个调用指令,并且每个调用指令被修改以便指向相应的中间代码。然而,以这种方式保护所述功能块的每个调用指令不是必需的。作为替代,该功能块的一个或多个调用指令可以不被所述保护过程改变地被留下。
中间代码的每个片段包括两个调用指令。两个邻近的调用指令的位置可以为黑客提供一个目标。因此,所述中间代码可以在所述两个调用指令之间包括额外的死码。例如,所述中间代码可以包括一个转移指令和夹在所述两个调用指令之间的无意义代码,所述转移指令指向所述第二个调用指令。
在上面被描述的实施方案中,中间代码14的每个片段包括一个对检验例行程序17的调用指令15。然而,可替代地,中间代码的一个或多个片段的调用指令15可以被一个相应的检验例行程序替换。对于中间代码的每个片段,所述检验例行程序的指令可以是不同的。因此,如果一个黑客设法识别一个检验例行程序的位置,则他将必然不能识别其它的检验例行程序。
在上面被描述的实施方案中,检验例行程序17执行CRC校验以便检测所述被保护的可执行程序可能的恶化。另外或可替代地,检验例行程序17可以包括用于确定排错过程是否正在执行和/或排错或逆向工程工具是否被安装的指令。
应该理解,在这个实施方案中,被插入到所述可执行程序中的保护码12包括至少一个检验例行程序15和两个调用指令。第一个调用指令(借助于一个中间调用指令直接或间接地)指向所述检验例行程序并且被插入到所述可执行的程序中,以致重写现有的调用指令。第二个调用指令对应于所述被重写的调用指令并且被插入到所述可执行的程序中,从而使它在所述第一个调用指令之后被执行。
如在图4中被表示的,在第二个实施方案中,插入4保护码到所述可执行程序中的步骤包括:以一种编码算法来编码20一个被选择的功能块的指令以便产生被编码的指令,插入21一个解码例行程序到所述可执行程序中,以及用一个被保护的功能块替换22所述功能块,所述被保护的功能块包括对所述解码例行程序的调用指令和所述被编码的指令。被选择的功能块的每一个以类似的方式被编码,并且被一个相应的被保护的功能块替换。
所述‘编码算法’包括能够将所述功能块的指令可逆地变换成不可执行形式的任何算法。特别地,其中,术语‘编码’和‘解码’旨在包括加密和解密以及压缩和解压缩。
所述解码例行程序包括用于解码所述被编码的指令和执行所述被解码的指令的指令。所述解码例行程序所述调用指令的返回地址来识别在所述被保护块内被编码的指令的位置。
如上面被描述的,所述解码例行程序可以另外包括用于检验所述可执行程序完整性的检验例行程序。所述检验例行程序可选地领先于任何用于解码的指令,这样,解码只在没有检测到所述可执行程序的恶化的情况中出现。
一个可执行程序的功能块可以包括一个到另外的功能块内的地址的转移或调用指令。如果这个另外的功能块包括被编码的指令,则一个致命的错误将出现。因此,不是所述可执行程序的全部功能块都必定适合于被编码保护。因此,所述方法另外包括回顾所述排错数据库的内容以便确定在此列出的任何一个直接调用和转移指令是否指向在一个被选择的功能块内的位置。如果一个调用或转移指令指向在一个被选择的功能块内的位置,则阻止通过编码来保护所述功能块保护。然而,如果一个调用或转移指令指向所述功能块的起始地址,则允许通过编码来保护所述功能块。
被保护的功能块(即,所述调用指令和被编码的指令)的大小可以大于原始的无保护的功能块的大小。因此,如果所述原始的功能块被所述被保护的块替换,则所述被编码的指令将重写随后的功能块的指令。几种方法可以被用于避免重写随后的功能块。
在第一种方法中,使用下面描述的方法对所述被选择的功能块进行冗余码检查。随后,任何冗余码被从所述编码过程中省略,这样,只有有用的指令被编码。通过从所述编码过程中省略冗余码,所述被保护的功能块的大小被减小。
在第二种方法中,所述被保护的功能块被分成两个或多个片段。所述原始功能块被所述被保护的功能块的第一个片段重写,它至少包括所述调用指令。所述被保护功能块剩余的片段随后在其它位置被插入(即,被附加或嵌入)到所述可执行的程序中。所述被保护的功能块的每个片段可以根据一个到下一个片段的地址的指示符终止,从而使所述解码例行程序能够检索被保护的功能块的全部片段。可替代地,被保护功能块的第一个片段可以包括所述被保护功能块的全部剩余的片段的地址列表。
第三,在相应的被保护的功能块较大的情况中下,功能块的保护可以被禁止。
图5(a)表示一个无保护的可执行程序10并且图5(b)表示一个跟随在插入保护码12之后的被保护的可执行程序11。可执行程序10包括四个功能块13,它的第二个功能块13b被选择用于保护。被保护的可执行程序11的第二个功能块13b已经被一个被保护的功能块23所替换,并且一个解码例行程序24已经被插入到可执行程序11。被保护的功能块23包括一个对解码例行程序24的调用指令25,和被编码的指令26。
当被保护的可执行程序11被执行,并且随后调用被保护的功能块23时,所述执行线程调用解码例行程序24,后者解码被保护功能块23的被编码的指令26并且执行所述被解码的指令。所述被解码指令的最终指令包括一个返回指令,导致所述执行线程返回到所述始发调用指令。
在上面被描述的实施方案中,被选择的功能块中的每一个使用相同的编码算法被编码。可替代地,不同的编码算法可以被用于编码不同的功能块,并把用于每个编码算法的一个相应的解码例行程序插入到所述可执行程序中。根据被编码的功能块的重要性,于是可以使用不同的编码强度。例如,一种简单的XOR功能可以被用于有一点重要的功能块,同时,一种强大的加密算法(例如,DES、AES)可以被用于编码更重要的功能块。
编码20一个功能块的指令可以包括以一种使个加密密钥的加密算法来加密所述指令。所述加密密钥可以从所述可执行程序的代码片段得出。例如,可以为所述可执行程序的片段计算一个CRC值并且将其用于构成一个加密密钥。所述解码例行程序因而包括用于为所述可执行程序的同一个片段计算一个CRC值以便构成所述解密密钥的指令。因此,只在一个已经从其中得出所述解密密钥的可执行程序的片段未被恶化的情况下,所述被保护的功能块的被编码的指令才被成功地解密。
在另一种替代中,被用于加密一个特定的功能块的加密密钥可以从另外的(例如,紧靠前面的)功能块的指令被得出,随后,所述另外的功能块本身也被加密。因此,只在所述另外的功能块也被成功地解密的情况下,一个被保护的功能块被成功地解密。
应该理解,在这个实施方案中,被插入到可执行程序10中的保护码12包括至少一个解码例行程序24和至少一个被保护的功能块23,该被保护的功能块23被插入到可执行程序10,从而去重写现有的功能块13b。被保护的功能块23包括对解码例行程序24的调用指令25和被编码的指令26,被编码的指令26对应于功能块13b的被重写的那些指令。
到此为止,已经涉及到编码被选择的功能块的全部指令。然而,只编码在功能块内的指令的一个选择可能是优选的。特别地,与未被编码的指令相交替的被编码指令的几个小片段可以提供比加密所述功能块的全部指令更稳固的保护形式。另外,编码功能块的特定的指令可能是不适合或者不实际的。因此,在一个可替代的实施方案中,只有所述功能块的被选择的指令被编码。于是这提供粗糙(编码全部指令)和精细(只编码被选择的指令)的编码控制。
为了选择用于编码的指令,所述功能块首先被分解。因为从所述排错数据库知道所述功能块的起始地址,所以所述功能块的分解比在一另一种情况下具有未被知道的起始地址的功能块的分解更可靠。根据所得到的汇编代码,所述功能块的指令被选择用于编码。对应于所选择的指令的可执行程序的代码于是以上面被描述的方式被编码。
上面被描述的用于插入保护码的两个实施方案不必被排他地使用,而是可以被结合使用。例如,相同的功能块可以受两个被描述的实施方案支配。
上面已经提到了在被冗余码占据的位置把代码插入到可执行的程序中。有至少两种方法,其中,冗余码可以在所述可执行的程序内被识别。
在第一种方法中,使用与所述可执行程序有关的排错数据库。除了存储所述可执行程序的每个功能块的起始地址外,所述排错数据库另外存储每个功能块的结束地址和/或每个功能块的大小。因此可以通过比较一个功能块的结束地址和相邻功能块的起始地址来识别功能块之间的冗余码。
在第二种方法中,每个功能块被分解。冗余码随后从汇编代码中被识别为一系列重复的指令,例如no-op指令、或已知的编译程序的模式/连接程序填充指令。
体现本发明的方法可以按照一个或多个计算机程序组被实现。所述程序组读取与要被保护的可执行程序有关的排错数据库的内容,并且显示(或者另外输出)可执行程序的功能块的分级列表。根据这个列表,用户可以浏览和选择要被保护的一个或多个功能块。优选地提供了一种选项以便使用户能够选择一个功能块用于分解。如果一个功能块被选择用于分解,则所述程序组分解所选择的功能块并且显示(或者另外输出)所述汇编代码的列表或表达。根据所述汇编代码的列表或表达,用户选择需要保护的功能块的指令。另外,所述程序组可选地使用户能够为所选择的功能块(或者功能块的一部分)选择一种或多种保护方法,并且如果合适,还选择编码的类型和强度。一旦用户已经选择了要被保护的功能块(或者功能块的一部分),则所述程序组将保护码插入可执行程序的相应的位置以便产生被保护的可执行程序。
根据体现本发明的该方法,可以通过将保护码插入到所述程序运行的工作方式中来保护一个可执行的程序。于是,这禁止所述程序的逆向工程和/或窜改。通过使用排错数据库来识别功能块的位置以及调用和转移指令的地址,其资源码未知的可执行程序可以被保护。而且,所述可执行程序的特定区域可以被作为保护目标。特别地,可执行程序的代码的一些部分可以被可靠地分解并且特定的指令被识别和保护。
在本说明书和权利要求书中被使用时,术语“包括”和“包含”和它的各种变化意味着包括特定的特征、步骤或整体。所述术语不应该被解释为排除其它特征、步骤或部件的存在。
在上述说明书、或所附的权利要求书、或附图中公开以它们的特定形式或者根据用于执行所公开的功能的装置,或用于达到所公开的结果的方法或过程所表示的特征,如果合适,这些特征可以用于单独地或者以其任何组合地以不同的形式实现本发明。

Claims (34)

1.一种保护可执行程序的方法,所述方法包括:
接收所述可执行程序的拷贝,所述可执行程序包括被安排成多个功能块的可执行的指令;
接收一个与所述可执行程序有关的排错数据库,所述排错数据库存储所述可执行程序内的功能块的位置;
从所述排错数据库识别所述可执行程序内的功能块的位置;以及
将保护码插入到所述可执行程序中,所述保护码重写所述功能块的至少一部分,
其中,所述功能块的执行导致所述保护码将被执行,并且所述保护码的执行完成一种操作以及执行所述被保护码重写的所述功能块的至少一部分的拷贝。
2.根据权利要求1中所述的方法,其中,插入保护码包括:
编码功能块的至少一部分以便产生被编码的指令;
将一个解码例行程序插入到所述可执行的程序中;以及
用对所述解码例行程序的调用指令并且用所述被编码的指令来替换所述可执行程序的功能块的至少一部分,
其中,所述解码例行程序包括用于解码所述被编码的指令和用于执行所述被解码的指令的可执行的指令。
3.根据权利要求2中所述的方法,其中,编码包括使用一种加密密钥来加密所述功能块的至少一部分,并且解码包括使用一种解密密钥来解密所述被编码的指令。
4.根据权利要求3中所述的方法,其中,所述加密密钥从所述可执行程序的代码片段得出,所述解码例行程序从所述代码片段得出所述解密密钥,并且在没有所述代码片段的恶化出现的情况下,所述被编码的指令被成功地解密。
5.根据权利要求4中所述的方法,其中,所述加密密钥从一个另外的功能块的指令得出,所述另外的功能块正被编码,并且所述解码例行程序解码所述另外的功能块并且从所述另外的功能块的指令得出所述解密钥,以及在所述另外的功能块被成功地解密的情况下,所述被编码的指令被成功地解密。
6.根据权利要求2-5任何一个中所述的方法,其中,至少一个功能块包括一个到一个另外的功能块内的位置的调用或转移指令,所述排错数据库存储所述可执行程序的每个调用或转移指令指向的位置,并且编码一个功能块的步骤包括:
选择一个功能块的至少一部分以用于编码;
从所述排错数据库的内容识别指向所选择的至少一部分功能块内的位置的转移和调用指令;以及
在没有转移和调用指令被识别的情况下,编码所述被选择的功能块的至少一部分。
7.根据前述任何一个权利要求中所述的方法,其中,插入保护码包括:
编码多个功能块的每一个的至少一部分以便产生多个被编码的指令的片段,每个片段对应于一个相应的功能块;
将一个解码例行程序插入到所述可执行程序中;以及
用对所述解码例行程序的调用指令并且用一个相应的被编码指令的片段替换所述多个功能块中的每一个的至少一部分,
其中,所述解码例行程序包括用于解码和执行被编码的指令的可执行的指令。
8.根据前述任何一个权利要求中所述的方法,其中,插入保护码包括:
用第一编码算法编码第一功能块的至少一部分以便产生第一被编码的指令;
用第二编码算法编码第二功能块的至少一部分以便产生第二被编码的指令;
将第一解码例行程序插入到所述可执行的程序中;
将第二解码例行程序插入到所述可执行的程序中;
用对所述第一解码例行程序的调用指令并且用所述第一被编码的指令来替换所述第一功能块的至少一部分;以及
用对所述第二解码例行程序的调用指令并且用所述第二被编码的指令来替换所述可执行程序的第二功能块的至少一部分,
其中,所述第一解码例行程序包括用于解码所述第一被编码的指令和用于执行所述第一被解码的指令的可执行的指令,并且所述第二解码例行程序包括用于解码所述第二被编码的指令和用于执行所述第二被解码的指令的可执行的指令。
9.根据权利要求8中所述的方法,其中,所述第一编码例行程序和第二编码例行程序是不同的。
10.根据权利要求2到9任何一个中所述的方法,其中,所述方法还包括分解所述功能块并且从被分解的代码选择一个或多个指令,并且其中编码所述功能块的至少一部分包括编码与被选择的指令对应的功能块的一个或多个片段。
11.根据权利要求2到10任何一个中所述的方法,其中,在被冗余指令占据的位置所述解码例行程序被插入到所述可执行的程序中。
12.根据权利要求11中所述的方法,其中,所述排错数据库存储每个功能块的起始地址和关于每个功能块的结束地址的信息,并且所述方法包括比较一个功能块的结束地址和一个邻近数据库的起始地址以便识别在所述两个功能块之间的冗余指令。
13.根据权利要求11中所述的方法,其中,所述方法包括分解一个功能块,并且分析被分解的代码以便识别所述功能块内的冗余指令。
14.根据前述任何一个权利要求中所述的方法,其中,所述功能块包括至少一个具有一个调用地址的调用指令,并且所述方法还包括:
将一个检验例行程序插入到所述可执行的程序中;以及
修改所述调用指令的调用地址,从而使在调用所述调用地址之前所述检验例行程序被执行。
15.根据权利要求1中所述的方法,其中所述排错数据库存储所述可执行程序内的调用指令的位置,并且插入保护码包括:
将一个检验例行程序插入到所述可执行的程序中;
从所述排错数据库识别所述可执行程序内的调用指令的位置,所述调用指令具有一个调用地址;以及
修改所述调用指令的调用地址,从而使在调用所述调用地址之前所述检验例行程序被执行。
16.根据权利要求14或15中所述的方法,其中,所述检验例行程序包括用于检测所述可执行程序的恶化的指令。
17.根据权利要求16中所述的方法,其中,所述检验例行程序包括用于在没有检测到恶化的情况下调用所述调用地址的指令。
18.根据权利要求14到17任何一个中所述的方法,其中,所述可执行程序的至少一个片段在执行期间被存储在一个存储设备中,并且所述检验例行程序检测被存储在存储器中的片段的恶化。
19.根据如权利要求18中所述的方法,其中,所述检验例行程序包括在检测到恶化的情况下用于恶化或删除被存储在所述存储器设备中的可执行程序的片段的指令。
20.根据权利要求14到19任何一个中所述的方法,其中,所述检验例行程序包括在检测到所述恶化的情况下用于终止所述可执行程序的执行的指令。
21.根据权利要求14到20任何一个中所述的方法,其中,所述检验例行程序使用一种CRC算法。
22.根据权利要求14到21任何一个中所述的方法,其中,所述检验例行程序包括用于检测一个排错过程是否在执行和用于在一个排错过程被检测到的情况下终止所述可执行程序的执行的指令。
23.根据权利要求14到22任何一个中所述方法,其中,所述方法还包括将中间代码插入到所述可执行的程序中,所述中间代码包括对所述检验例行程序的第一调用指令和对所述调用地址的第二调用指令,并且所述调用地址被修改以便调用所述中间代码。
24.根据权利要求14到23任何一个中所述方法,其中,所述方法包括从所述排错数据库识别所述可执行程序内的多个调用指令的位置,所述多个调用指令的每一个具有一个调用地址;
为所述多个调用指令中的每一个插入中间代码的一个相应的片段,每个中间代码片段包括对所述检验例行程序的第一调用指令和对所述可执行程序的一个相应的调用指令的调用地址的第二调用指令;以及
修改所述可执行程序的多个调用指令中的每一个的调用地址以便调用中间代码的一个相应的片段。
25.一种保护可执行程序的方法,该方法包括:
接收所述可执行程序的拷贝,所述可执行程序包括被排列成多个功能块的可执行的指令;
接收一个与所述可执行程序有关的排错数据库,所述排错数据库存储所述可执行程序内的功能块的位置;
从所述排错数据库识别所述可执行程序内的功能块的位置;
编码所述功能块的至少一部分以便产生被编码的指令;
将一个解码例行程序插入到所述可执行程序中;以及
用一个对所述解码例行程序的调用指令并且用所述被编码的指令来替换所述可执行程序的功能块的至少一部分,
其中,所述解码例行程序包括用于解码所述被编码的指令和用于执行所述被解码的指令的可执行的指令。
26.一种保护可执行程序的方法,所述方法包括:
接收所述可执行程序的拷贝;
接收一个与所述可执行程序有关的排错数据库,所述排错数据库存储所述可执行程序内的调用指令的位置;
将一个检验例行程序插入到所述可执行程序中;
从所述排错数据库识别所述可执行程序内的调用指令的位置,所述调用指令具有一个调用地址;
修改所述调用指令的调用地址,从而使在调用所述调用地址之前所述检验例行程序被执行。
27.一种用于保护可执行程序的设备,该设备包括:
用于接收所述可执行程序的拷贝的装置,所述可执行程序包括被安排成多个功能块的可执行的指令;
用于接收一个与所述可执行程序有关的排错数据库的装置,所述排错数据库存储所述可执行程序内的功能块的位置;
用于从所述排错数据库识别所述可执行程序内的功能块的位置的装置;以及
用于将保护码插入到所述可执行程序中的装置,所述保护码重写所述功能块的至少一部分,
其中,所述功能块的执行导致所述保护码将被执行,并且所述保护码的执行完成一个操作并且执行所述被保护码重写的功能块的至少一部分的拷贝。
28.一种用于保护可执行程序的设备,所述设备包括:
用于接收所述可执行程序的拷贝的装置,所述可执行程序包括被安排成多个功能块的可执行的指令;
用于接收一个与所述可执行程序有关的排错数据库的装置,所述排错数据库存储所述可执行程序内的功能块的位置;
用于从所述排错数据库识别所述可执行程序内的功能块的位置的装置;
用于编码所述功能块的至少一部分以便产生被编码的指令的装置;
用于将一个解码例行程序插入到所述可执行程序中的装置;以及
用一个对所述解码例行程序的调用指令并且用所述被编码的指令来替换所述可执行程序的功能块的至少一部分的装置,
其中,所述解码例行程序包括用于解码所述被编码的指令和用于执行所述被解码的指令的可执行的指令。
29.一种用于保护可执行程序的设备,所述设备包括:
用于接收所述可执行程序的拷贝的装置;
用于接收一个与所述可执行程序有关的排错数据库的装置,所述排错数据库存储所述可执行程序内的调用指令的位置;
用于将一个检验例行程序插入到所述可执行程序中的装置;
用于从所述排错数据库识别所述可执行程序内的调用指令的位置的装置,所述调用指令具有一个调用地址;和
用于修改所述调用指令的调用地址从而使在调用所述调用地址之前所述检验例行程序被执行的装置。
30.一种包括用于执行根据权利要求1到26任何一个中所述的方法的指令的计算机。
31.一种可由计算机执行以便完成根据权利要求1到26任何一个中所述的方法的计算机程序或计算机程序组。
32.一种存储可由计算机执行以便完成根据权利要求1到26任何一个中所述的方法的计算机程序代码的计算机程序产品。
33.一种基本上如在上文中参考附图被描述并且如在附图中所示的方法。
34.一种用于执行基本上如在上文中参考附图被描述并且如在附图中所示的方法的设备。
CN200680011834A 2005-02-11 2006-02-13 软件保护方法 Expired - Fee Related CN100594509C (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US65201905P 2005-02-11 2005-02-11
US60/652,019 2005-02-11
PCT/GB2006/000483 WO2006085103A1 (en) 2005-02-11 2006-02-13 Software protection method

Publications (2)

Publication Number Publication Date
CN101156157A true CN101156157A (zh) 2008-04-02
CN100594509C CN100594509C (zh) 2010-03-17

Family

ID=36263721

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680011834A Expired - Fee Related CN100594509C (zh) 2005-02-11 2006-02-13 软件保护方法

Country Status (5)

Country Link
US (1) US8161294B2 (zh)
EP (1) EP1851670B1 (zh)
JP (1) JP4922951B2 (zh)
CN (1) CN100594509C (zh)
WO (1) WO2006085103A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101853357A (zh) * 2010-04-28 2010-10-06 北京飞天诚信科技有限公司 软件保护方法
CN104820593A (zh) * 2015-04-27 2015-08-05 柳州市一呼百应科技有限公司 一种开发客户端软件的通用方法
WO2015192637A1 (zh) * 2014-06-17 2015-12-23 北京奇虎科技有限公司 软件安装包的加固保护方法和装置
US11120130B2 (en) * 2015-11-12 2021-09-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8271803B2 (en) 2003-10-08 2012-09-18 Microsoft Corporation Anti-debugging protection of binaries with proxy code execution
US7788496B2 (en) 2003-10-08 2010-08-31 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf thereof
US8103592B2 (en) 2003-10-08 2012-01-24 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf of first process
US7979911B2 (en) 2003-10-08 2011-07-12 Microsoft Corporation First computer process and second computer process proxy-executing code from third computer process on behalf of first process
EP1798653B1 (de) * 2005-12-16 2011-08-03 Aladdin Europe GmbH Verfahren, Computerprogrammprodukt und Vorrichtung zum Schützen eines einen Funktionsblock aufweisenden Programms
WO2008023307A2 (en) * 2006-08-21 2008-02-28 Koninklijke Philips Electronics N.V. Controlling distribution of digital content
US8201244B2 (en) * 2006-09-19 2012-06-12 Microsoft Corporation Automated malware signature generation
EP3522050A1 (en) * 2007-05-18 2019-08-07 Verimatrix, Inc. System and method for defining programmable processing steps applied when protecting the data
JP5411414B2 (ja) * 2007-07-31 2014-02-12 株式会社ユニバーサルエンターテインメント 遊技機
KR101412465B1 (ko) * 2009-07-30 2014-06-30 에스케이플래닛 주식회사 분리 실행 기반의 컨텐츠용 코드 블록의 검증 시스템 및 방법
EP2362314A1 (en) * 2010-02-18 2011-08-31 Thomson Licensing Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code
EP2828783B1 (en) * 2012-03-19 2019-01-09 Intel Corporation Anti-malware protection operation with instruction included in an operand
KR101477050B1 (ko) * 2014-05-28 2015-01-08 충남대학교산학협력단 메모리 덤프 기법을 이용한 어플리케이션의 실행코드 추출 방법
CN105975816B (zh) * 2015-12-25 2019-06-07 武汉安天信息技术有限责任公司 移动终端下基于虚拟技术的代码保护方法及系统
US10503931B2 (en) * 2016-05-09 2019-12-10 Arris Enterprises Llc Method and apparatus for dynamic executable verification
US10467390B1 (en) * 2016-08-18 2019-11-05 Snap Inc. Cyclically dependent checks for software tamper-proofing
WO2019240485A1 (ko) * 2018-06-14 2019-12-19 삼성전자 주식회사 이상 환경으로부터 어플리케이션을 보호하는 전자 장치 및 그 동작 방법
US20230034530A1 (en) * 2021-07-28 2023-02-02 EMC IP Holding Company LLC Data Protection Using Encryption and Inserted Execution Code

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6006328A (en) * 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
US5757914A (en) * 1995-10-26 1998-05-26 Sun Microsystems, Inc. System and method for protecting use of dynamically linked executable modules
US6868495B1 (en) * 1996-09-12 2005-03-15 Open Security Solutions, Llc One-time pad Encryption key Distribution
US6141698A (en) * 1997-01-29 2000-10-31 Network Commerce Inc. Method and system for injecting new code into existing application code
US6684198B1 (en) * 1997-09-03 2004-01-27 Sega Enterprises, Ltd. Program data distribution via open network
US6237137B1 (en) * 1997-10-15 2001-05-22 Dell Usa, L.P. Method and system for preventing unauthorized access to a computer program
US6128735A (en) * 1997-11-25 2000-10-03 Motorola, Inc. Method and system for securely transferring a data set in a data communications system
US7503072B2 (en) * 1998-04-29 2009-03-10 Microsoft Corporation Hardware ID to prevent software piracy
EP1237323A4 (en) * 1999-12-07 2005-09-07 Sanyo Electric Co DATA PLAYBACK DEVICE
JP3281920B2 (ja) * 2000-03-14 2002-05-13 東北大学長 アリルフラン化合物の製造方法
JP4892167B2 (ja) * 2000-07-18 2012-03-07 シンプレックス メジャー センドリアン ベルハッド ディジタル・データ保護構成
US7350204B2 (en) * 2000-07-24 2008-03-25 Microsoft Corporation Policies for secure software execution
GB2368061B (en) 2000-10-20 2005-05-11 Gw Pharmaceuticals Ltd Dose dispensing apparatus
DE10115124C2 (de) * 2001-03-27 2003-02-20 Porsche Ag Sicherungseinrichtung für eine Türscheibe eines Kraftfahrzeugs
US7111285B2 (en) * 2001-07-17 2006-09-19 Liquid Machines, Inc. Method and system for protecting software applications against static and dynamic software piracy techniques
US20030079158A1 (en) * 2001-10-23 2003-04-24 Tower James Brian Secured digital systems and a method and software for operating the same
US7243340B2 (en) * 2001-11-15 2007-07-10 Pace Anti-Piracy Method and system for obfuscation of computer program execution flow to increase computer program security
US7400729B2 (en) * 2001-12-28 2008-07-15 Intel Corporation Secure delivery of encrypted digital content
US7383443B2 (en) 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7370319B2 (en) * 2003-02-11 2008-05-06 V.I. Laboratories, Inc. System and method for regulating execution of computer software

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101853357A (zh) * 2010-04-28 2010-10-06 北京飞天诚信科技有限公司 软件保护方法
WO2015192637A1 (zh) * 2014-06-17 2015-12-23 北京奇虎科技有限公司 软件安装包的加固保护方法和装置
CN104820593A (zh) * 2015-04-27 2015-08-05 柳州市一呼百应科技有限公司 一种开发客户端软件的通用方法
US11120130B2 (en) * 2015-11-12 2021-09-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation

Also Published As

Publication number Publication date
US20100275034A1 (en) 2010-10-28
EP1851670B1 (en) 2016-08-10
US8161294B2 (en) 2012-04-17
WO2006085103A1 (en) 2006-08-17
JP4922951B2 (ja) 2012-04-25
JP2008532113A (ja) 2008-08-14
EP1851670A1 (en) 2007-11-07
CN100594509C (zh) 2010-03-17

Similar Documents

Publication Publication Date Title
CN100594509C (zh) 软件保护方法
KR101256149B1 (ko) 프로그램 카운터 인코딩을 이용한 간접 함수 호출 보호 방법 및 보호 장치
CN106778103B (zh) 一种安卓应用程序防逆向破解的加固方法、系统及解密方法
US9350547B2 (en) Systems and methods for watermarking software and other media
US7644441B2 (en) Methods for identifying malicious software
EP2958044B1 (en) A computer implemented method and a system for controlling dynamically the execution of a code
KR101216995B1 (ko) 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
JP4892167B2 (ja) ディジタル・データ保護構成
CN111052115A (zh) 取决于调用路径的认证
CN110232262A (zh) 一种安卓应用的加固方法和系统
CN108829396A (zh) 脚本编译的方法、脚本执行的方法、相关装置及系统
Zhang et al. Protecting function pointers in binary
CN110147653A (zh) 应用程序安全加固方法及装置
CN111475168A (zh) 一种代码编译方法及装置
US20040111717A1 (en) Software modification
CN115632776B (zh) 密钥烧录方法、装置、电子设备及可读存储介质
CN117828595A (zh) 一种攻击程序通过杀毒软件检测的方法和装置
CN111967014A (zh) 一种防御StarBleed漏洞的方法及装置

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20170913

Address after: Vaduz

Patentee after: From the patent company

Address before: Malaysia in Selangor Province

Patentee before: Simplex Major SDN BHD

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: 20100317

Termination date: 20200213