CN110574028A - 用于防护软件代码的方法 - Google Patents
用于防护软件代码的方法 Download PDFInfo
- Publication number
- CN110574028A CN110574028A CN201880021089.6A CN201880021089A CN110574028A CN 110574028 A CN110574028 A CN 110574028A CN 201880021089 A CN201880021089 A CN 201880021089A CN 110574028 A CN110574028 A CN 110574028A
- Authority
- CN
- China
- Prior art keywords
- software code
- basic block
- instructions
- integrity check
- array
- 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
- 238000000034 method Methods 0.000 title claims abstract description 67
- 230000006870 function Effects 0.000 claims description 32
- 230000009466 transformation Effects 0.000 claims description 20
- 230000003068 static effect Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000002265 prevention Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005242 forging Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
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
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/121—Restricting unauthorised execution of programs
- G06F21/125—Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/106—Enforcing content protection by specific content processing
- G06F21/1062—Editing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (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)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种用于防护包括被组织在多个基本块中的计算机代码指令的经编译的软件代码(SC)的方法,所述方法生成安全软件代码(SSC)并且包括如下步骤:·由处理器确定(S1)待保护的软件代码的部分,·由处理器在软件代码的所选基本块中插入(S2)第一指令序列,所述第一指令序列当在运行时被执行的时候:在待保护的软件代码的所述部分上计算完整性校验值并且基于所述所计算的完整性校验值来计算索引值,·由处理器在软件代码的所选基本块中插入(S3)存储器地址的索引数组,其中在执行安全软件代码时,将在所选基本块之后执行的随后的基本块的地址由所述索引值索引,·由处理器在软件代码的所选基本块的结束处插入(S4)向由在运行时所计算的所述索引值在数组中索引的地址的跳转指令。
Description
技术领域
本发明涉及软件保护的领域,并且更具体地涉及防篡改技术的领域。它公开了一种基于完整性校验并且抗经编译的代码静态分析的防篡改方法。
背景技术
现今,通过运行软件应用而向用户提供了许多服务。这样的应用可以运行在各种移动或否的设备上,所述设备诸如台式计算机、膝上型电脑、销售终端点、智能电话等等。它们可以在本地运行或跨网络、比如LAN或因特网而被实现。诸如智能卡或银行信用卡之类的一些设备甚至可以专用于运行一个或几个应用。这样的应用通常运行在不安全的环境中,其中攻击者可获得对运行应用的系统的操作的某种控制或甚至全部控制。因此,这些应用中的大多数需要实现某些安全机制以便保护应用所处置的数据免被这样的攻击者读取或修改。
攻击者可尝试通过对系统所执行的经编译的代码的逆向工程来理解软件的操作。他然后可以访问通过软件所处置的安全信息和/或修改软件以便执行恶意操作。例如,攻击者可修改银行软件以便执行恶意金融交易或修改经许可保护的软件以便在不购买许可的情况下免费运行它。这样的逆向工程通常通过使用工具来被执行,所述工具诸如代码分析器和调试器,其从经编译的代码中提取关于代码操作的信息,诸如控制流程图,其描述代码中指令的执行次序。
为了防止对软件代码的任何修改,已经开发了防篡改技术。它们通常依赖于对代码的某个部分执行完整性校验,例如通过在软件代码的特定区之上计算校验和值,然后比较所获得的值与已知参考值。如果值不匹配,则代码已经被篡改,并且应当防止软件执行,要么通过拒绝正常的软件执行要么通过伪造它。虽然如此,这样的保护也可被攻击者进行逆向工程并且被破坏。对于调试器或代码分析器而言,将变量初始化定位(spot)到一恒定值并且在通过防篡改过程执行的比较中使用这样的恒定值是特别容易的。这种信息可被攻击者使用以便标识正在代码中实现的保护的种类,其然后将会使得能够破坏所述保护。例如,攻击者可标识在其上执行完整性校验的软件区的起始和结束,当代码未被修改的时候推断通过完整性校验例程来在该区上计算的校验和值,然后修补完整性校验例程以便总是提供有效的校验和值,而无论对软件代码的任何其他修改,即使在其上计算校验和值的软件的区中。
作为结果,存在对于如下方法的需要:所述方法在软件代码的某个部分上执行完整性校验,使得对于攻击者而言难以通过对经保护的代码的静态分析来理解这样的方法如何运作,并且防止这样的攻击者成功地修改经保护的软件代码。
发明内容
为此目的并且根据第一方面,本发明因此涉及一种用于防护包括被组织在多个基本块中的计算机代码指令的经编译的软件代码的方法,所述方法生成安全软件代码并且包括如下步骤:
·由处理器确定待保护的软件代码的部分,
·由处理器在软件代码的所选基本块中插入第一指令序列,所述第一指令序列当在运行时被执行的时候在待保护的软件代码的所述部分上计算完整性校验值,并且基于所述所计算的完整性校验值来计算索引值,
·由处理器在软件代码的所选基本块中插入存储器地址的索引数组,其中在执行安全软件代码时,将在所选基本块之后被执行的随后的基本块的地址由所述索引值索引,
·由处理器在软件代码的所选基本块的结束处插入向由在运行时所计算的所述索引值在数组中索引的地址的跳转指令。
它使得能够通过如下来保护软件代码免受攻击者篡改:如果待保护的软件代码的部分已经被篡改则中断安全软件代码的执行,而同时将跳转指令的目标隐藏在索引数组中的其他候选目标地址之中。
在实施例中,随机确定待保护的软件代码的部分。它使得能够通过如下来保护代码的大多数:多次应用方法,而不必一个接一个地手动选择待保护的代码的所有部分。
在实施例中,在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。它防止攻击者在其上计算完整性校验的所选基本块的部分中插入执行断点。这样的停止点可以使得他能够获得对于通过完整性校验所输出的值或待执行的随后的基本块的索引值的认知。
在实施例中,第一指令序列包括第二指令序列,所述第二指令序列当在运行时被执行的时候通过如下来计算所述完整性校验值:执行校验和、掩码、散列函数、二进制移位和算术运算之中的一个或多个运算。
在实施例中,在计算完整性校验函数的预定指令序列的集合中随机选择所述第二指令序列。
它使得对于攻击者而言更难以理解如何在运行时计算完整性校验值。它使得对于攻击者而言不可能在没有对代码的进一步分析的情况下预测为了计算完整性校验值而将使用的完整性函数,根据所述完整性校验值将计算正确的随后的基本块在数组中的索引。
在实施例中,第一指令序列包括第三指令序列,所述第三指令序列当在运行时被执行的时候将一变换函数应用到所述所计算的完整性校验值,用于计算所述索引值,所述变换函数包括校验和、掩码、散列函数、二进制移位和算术运算之中的一个或多个运算。
可以在预定变换函数的集合中随机选择所述变换函数。
它使得对于攻击者而言更难以理解如何在运行时检索正确的随后的基本块的索引。它使得对于攻击者而言不可能在没有对代码的进一步分析的情况下预测为了根据所述完整性校验值而计算正确的随后的基本块在数组中的索引而将使用的变换函数。
数组中的地址可以是当安全软件代码被执行的时候安全软件代码的基本块的地址。
它使得对于攻击者而言甚至更难以在数组中在也指向安全软件代码的基本块的所有其他地址之中区分随后的基本块的地址。
可以在起始地址与停止地址之间的安全软件代码的指令上计算所述完整性校验值,并且根据第一方面的所述方法可以包括:
- 第五防护步骤,其在编译并且链接安全软件代码的时候或其之后被执行,并且包括:
· 确定将在其上计算完整性校验值的软件代码的部分的开始和结束在软件代码中的开始和结束地址,
· 计算所述完整性校验值并且基于所述所计算的完整性校验值来计算所述索引值,
- 和第六防护步骤,其在编译并且链接安全软件代码的时候或其之后被执行,并且包括:
·将所述起始和停止地址设置成在第五防护步骤中所确定的所述开始和结束地址,
·以在第五防护步骤中所计算的所述索引值来在数组中设置随后的基本块的地址。
在实施例中,所述数组和第一指令序列被插入在软件代码的所选基本块中的随机位置处。它使得安全软件代码对于潜在攻击者而言甚至更具迷惑性。
在所插入的跳转指令之前,可以将第一指令序列插入在所选基本块的结束处。然后计算随后的基本块的完整性校验值和索引值,这就在为了检索用于跳转的随后的基本块的地址而需要它们之前,因此限制了在其期间攻击者可以通过对代码的动态分析来检索它的时间窗口。
根据第二方面,本发明涉及一种非暂时性机器可读存储介质,其编码有用于由处理器执行的安全软件代码的指令,其中:
·所述安全软件代码是包括被组织在多个基本块中的计算机代码指令的软件代码的经修改的版本,
·安全软件代码的所选基本块包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址,
所述非暂时性机器可读存储介质还被编码有第一指令序列,所述第一指令序列被插入在安全软件代码的所选基本块中,其当在运行时被执行的时候:
·在待保护的软件代码的部分上计算完整性校验值,
·基于所述所计算的完整性校验值来计算在数组中对随后的基本块的地址进行索引的索引值,
并且安全软件代码的所选基本块还在其结束处包括向由在运行时所计算的所述索引值索引的数组地址的跳转指令。
在实施例中,在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。
根据第三方面,本发明涉及一种用于通过处理器来执行安全软件代码的所选基本块的指令的方法,其中:
·所述安全软件代码是包括被组织在多个基本块中的计算机代码指令的软件代码的经修改的版本,
·安全软件代码的所选基本块包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址,
所述方法包括如下步骤:
·在待保护的软件代码的部分上计算完整性校验值,
·基于所述所计算的完整性校验值来计算在数组中对随后的基本块的地址进行索引的索引值,
·在所选基本块的结束处执行向由所述所计算的索引值在数组中索引的地址的跳转指令。
可以在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。
这样的根据第二方面的非暂时性机器可读存储介质和根据第三方面的方法示出了与根据第一方面的方法的优点相同的优点。
为了实现前述和有关目的,一个或多个实施例包括在下文中充分描述并且在权利要求中被特别指出的特征。
附图说明
以下描述和附图详细地阐明了某些说明性方面,并且指示可以以其采用实施例的原理的各种方式中的仅一些。其他优点和新颖特征当结合附图被考虑的时候将从以下详细描述中变得明显,并且所公开的实施例意图包括所有这样的方面及其等同物。
·图1图示了编译软件的过程;
·图2示意性地图示了根据本发明的实施例的防护设备;
·图3示意性地图示了根据本发明的实施例的执行设备;
·图4示意性地图示了根据本发明的实施例的用于防护经编译的软件代码的方法;
·图5图示了根据本发明的实施例的索引数组;
·图6示意性地图示了根据本发明的实施例的用于执行安全软件代码的所选基本块的指令的方法。
具体实施方式
在以下详细描述中,参考了附图,附图通过说明示出了其中可以实践本发明的特定实施例。充分详细地描述了这些实施例以使得本领域技术人员能够实践本发明。要理解的是,本发明的各种实施例,尽管不同,但不一定是互斥的。例如,在本文中结合一个实施例描述的特定特征、结构或特性可以在其他实施例内被实现,而不偏离本发明的精神和范围。另外,要理解的是,在每个所公开的实施例内的单独元件的位置或布置可以被修改,而不偏离本发明的精神和范围。因此,以下详述的描述不要以限制性意义来理解,并且本发明的范围仅仅由所附权利要求连同权利要求被授权给的等同物的完整范围一起来被限定、被适当地解释。
本发明目的在于通过如下来防护经编译的软件代码SC:在该软件代码中包括在待保护的软件代码的部分上的至少一个完整性校验,以及在所述代码中插入向随后的代码指令的跳转指令,以使得跳转指令目标取决于完整性校验的结果这样的方式。它产生经编译的安全软件代码SSC使得对于攻击者而言将难以利用代码分析器或调试器来分析经编译的安全软件代码以得到关于完整性校验和跳转指令目标的足够认知来在不中断代码执行的情况下修改所述待保护的软件代码的部分。
编译把用高级编程语言、诸如C或Fortran所编写的源代码11转化成用低级语言所编写的目标代码,诸如机器代码15,其考虑应在其上执行代码的系统的硬件实现方式,如图1中所描绘的。编译通常执行中间步骤,诸如语法分析12、控制流图形生成13、和汇编代码生成14。为了构建经编译的代码的可执行文件,编译之后通常跟有链接步骤,其将包含目标代码的多个文件一起链接到单个可执行文件中。
经编译的代码包括在基本指令块中所收集的指令。这样的基本块可以被视为最小指令序列。基本块在其开始处具有一个入口点,并且在其结束处具有一个出口点。每当基本块的第一指令被执行的时候,指令的其余部分有必要以指令在基本块中的出现次序被执行一次。基本块可以在其结束处包括朝向将在运行时被执行的下一个基本块的入口点的跳转指令。
本发明的第一方面是一种用于在经编译的软件代码SC的执行之前防护它的防篡改方法。通过如下来执行这样的防护方法:防护设备20处理经编译的软件代码SC,其包括被组织在多个基本块中的计算机代码指令;以及产生安全软件代码SSC。所获得的安全软件代码SSC然后可以由执行设备30安全地执行。
这样的防护设备20可以是包括处理器的任何电子设备。例如,它可以是在其上安装开发环境的个人计算机PC。图2描述了这样的防护设备的示例性实施例,所述防护设备包括第一处理器21、第一RAM存储器22、第一通信单元23、诸如以太网或Wifi网络适配器、第一显示器24、第一大容量存储构件25、诸如硬驱动器、以及第一用户输入构件26。待防护的软件代码SC可以被存储在防护设备的第一大容量存储构件25上。在防护设备20将根据第一方面的方法应用到软件代码SC之后所获得的安全软件代码SSC也可以被存储在第一大容量存储装置25上。
图3描述了执行设备30的示例性实施例。例如,它可以是个人计算机PC、移动设备、诸如智能电话或平板设备,或银行或销售点中的公共终端。它还可以是被包括在智能卡或信用卡中的简单芯片。它可以包括第二处理器31、第二RAM存储器32、第二通信单元33、诸如以太网或Wifi网络适配器、第二显示器34、第二大容量存储构件35、诸如硬驱动器、以及第二用户输入构件36。待由执行设备30的第二处理器31执行的安全软件代码SSC可以被存储在执行设备的第二大容量存储构件35上。电子设备30可以具有与执行设备的类型类似或不同的任何类型。两个设备可共享同一硬件架构、诸如x86、ARM或PowerPC,或具有不同的架构。
防护方法主要步骤
以下段落描述根据本发明的第一方面的方法的步骤:防护软件代码SC以及产生安全软件代码SSC,如图4上所描绘的。这些防护步骤由防护设备20的第一处理器21执行,并且全部利用跟有步骤编号的字母“S”来被标注。
在根据第一方面的方法完成之后,在需要时,参考如下步骤:所述步骤由执行设备30在执行安全软件代码SSC的时候实行。这样的执行步骤利用跟有步骤编号的字母“E”来被标注。
防护方法主要步骤:第一防护步骤
在第一防护步骤S1中,在软件代码SC中确定待保护的软件代码的部分。这是应在其上执行完整性校验以便防止攻击者的任何修改的代码部分。这样的待保护的软件代码的部分可以由人类操作员向第一处理器21指定。可替换地,它可以由第一处理器21本身随机地确定或由第一处理器21所运行的第一分析程序来计算。这样的软件代码的部分可以包括一个或多个基本指令块。
在随后的步骤中,目的是在软件代码中插入指令,所述指令当被执行的时候以能抵抗攻击者的静态分析这样的方式在待保护的软件代码的所确定的部分上执行完整性校验。如果这样的完整性校验仅仅在于在待保护的软件代码的部分上计算校验和值然后将它与参考值相比较,则对于攻击者而言将会非常容易地定位这样的比较,以获得对参考值的认知并且对验证比较结果的指令序列进行修改,以便使得它总是成功,而无论攻击者在待保护的软件代码的部分中可能修改了什么。
代替地,所提出的是在软件代码的基本块的结束处插入跳转指令,其目标定为另一基本块并且其目标基于通过完整性校验所计算的值而在软件代码的现有基本块的列表之中即时(on-the-fly)被选择。由防护设备20执行的防护方法以使得在软件代码中插入指令这样的方式被设计,所述指令当被执行设备30的第二处理器31执行的时候使得安全软件代码的执行流仅仅在待保护的代码的部分尚未被攻击者修改的情况下跳转到正确的下一个基本块;并且如果待保护的代码的部分已经被篡改则使得它跳转到另一不适当的基本块,因此导致代码执行的不可预测的行为。这样的安全软件代码使得对于攻击者而言非常难以猜测当在待保护的软件代码的部分上执行完整性校验的时候将获得的所预期的校验和值,因为所述待获得的值没有被存储在安全软件代码中。它还使得对于攻击者而言难以通过静态分析来确定在基本块的列表之中安全软件代码的哪个基本块是在当前块以跳转指令结束之后将执行的正确的随后的块。因此,攻击者不能通过独立于完整性校验的结果而手动地强制正确的随后的基本块作为跳转目标而被执行来绕过防篡改保护。
防护方法主要步骤:第二防护步骤
更确切地,在第二防护步骤S2中,防护设备20的第一处理器21可以在软件代码的所选基本块中插入第一指令序列。该第一指令序列目的在于使得执行设备30能够在执行安全软件代码的所选基本块的指令的时候检索将刚好在所选基本块之后被执行的恰当的随后的基本块的地址。
该第一指令序列是这样的使得当包括该第一指令序列的安全软件代码SSC被执行设备30的第二处理器31执行的时候,在执行步骤E1、E2和E3中所描述的动作被执行,这些执行步骤在下文中以及在图6中被描述。
这样的所选基本块可以由人类操作员向第一处理器21指定。可替换地,它可以由第一处理器21本身随机地确定或由第一处理器21所运行的第二分析程序来确定,以便最小化当执行安全软件代码SSC的时候的计算时间。
第一指令序列当由执行设备30在SSC运行时执行的时候:
·在待保护的软件代码的所述部分上计算完整性校验值,
·基于所述所计算的完整性校验值来计算索引值。
防护方法主要步骤:第三防护步骤
在第三防护步骤S3中,防护设备20的第一处理器21可以在软件代码的所选基本块中插入图5中所描述的存储器地址的索引数组,其中在执行安全软件代码时,将在所选基本块之后被执行的实际随后的基本块的地址由通过第一指令序列所计算的所述索引值来索引。
第一指令序列和索引数组以如下这样的方式被设计:使得仅仅在待保护的软件代码的部分尚未被篡改的情况下,通过第一指令序列所计算的索引值等于对随后的基本块的地址进行索引的数组的索引值。
使用数组是非限制性实施例,并且代替于使用数组,可以使用使得能够实现对值的索引化存储的任何其他数据结构,即在索引值和对应的存储值之间的匹配,诸如表或矩阵。
防护方法主要步骤:第四防护步骤
在第四防护步骤S4中,防护设备20的第一处理器21在软件代码的所选基本块的结束处插入向由在运行时计算的所述索引值索引的数组的地址的跳转指令。
防护方法示例性实施例
以下段落描述了根据本发明的第一方面的、由防护设备20执行的防护方法的示例性和非限制性实施例。
如先前所描述的,在第一防护步骤S1中,在软件代码SC中确定待保护的软件代码的部分。
然后在第二防护步骤S2中,在所选基本块中插入第一指令序列。如上文中所描述的,该第一指令序列包括如下指令:所述指令当在运行时被执行的时候计算完整性校验值。第一指令序列可以包括第二指令序列,所述第二指令序列当在运行时被执行的时候通过如下来计算所述完整性校验值:执行在校验和、掩码、散列函数、二进制移位和算术运算之中的一个或多个运算。可以在安全软件代码的起始地址与停止地址之间的软件代码的指令上计算该完整性校验值。这样的起始和停止地址被设计成限定软件代码的部分,其至少包括在第一防护步骤中所确定的待保护的软件代码的部分。
完整性校验值可以例如是通过使用MD5或SHA-1所计算的校验和或摘要。
在实施例中,在计算完整性校验函数的预定指令序列的集合中随机选择所述第二指令序列。作为结果,使这样的完整性校验被执行的方式多样化。它还可以是经混淆的,从而防止攻击者在安全软件代码中容易地标识它以及自己在起始和停止地址之间计算相同的完整性校验值。
在可替换的实施例中,在待保护的软件代码的所述部分上以及还在所选基本块的至少一部分上计算完整性校验值。可以在包括第一指令序列和/或索引数组和/或在块的结束处的跳转指令的所选基本块的部分上计算完整性校验。它防止攻击者修改所选基本块的这样的部分以便禁用对软件代码的保护。还可以在刚好位于跳转指令之前的指令上计算完整性校验值。这样做防止攻击者在跳转之前插入执行断点,其将会使得他能够得到对通过完整性校验所输出的值的认知,然后得到对将在所选基本块之后被执行的随后的基本块的地址的认知。
第一指令序列还包括如下指令:所述指令基于所计算的完整性校验值来计算索引值。
为了这样,第一指令序列可以包括第三指令序列,所述第三指令序列当在运行时被执行的时候将一变换函数应用到所述所计算的完整性校验值来计算所述索引值。所述变换函数可以例如是完整性校验值的校验和或散列,或掩码,其选择完整性校验值的仅一些预定位以便输出索引值。它还可以包括对完整性校验值的位的二进制移位或在完整性校验值上执行算术运算。
可以由防护设备的第一处理器在预定变换函数的集合中随机选择所述变换函数。
然后索引数组被插入在所选基本块中,作为第三防护步骤S3的部分。
数组的索引值可以被选择使得数组的所有索引值都被包括在变换函数的目标集合中。通过这样做,数组中的所有索引值都可以是应用变换函数的结果。
索引数组的目的是以特定的索引来存储将在所选基本块之后被执行的实际随后的基本块的地址,使得当执行设备执行所选基本块的指令上的第一序列的时候,如果待保护的软件代码的部分尚未被篡改,则它计算(此处下文所描述的步骤E2)与数组中随后的基本块的地址的索引相等的索引值。
然而,当通过防护设备执行第三防护步骤S3而将索引数组插入在所选的基本块中的时候,将从第一指令序列的执行中产生的完整性校验值,以及基于所述完整性校验值所计算的索引值仍是未知的。
因此,在所述方法的该步骤处,防护设备的第一处理器可以在所选基本块中插入索引数组,其在数组中的预定索引处、例如在数组的第一定位处包括随后的基本块的地址。
然后在第四防护步骤S4中,防护设备的第一处理器在所选基本块的结束处插入向由从第一指令序列的执行中产生的索引值在数组中索引的地址的跳转指令。
如果所选基本块最后的指令已经是跳转指令,则该预先存在的跳转指令可以被删除,并且在第四防护步骤S4处在所选基本块的结束处所插入的跳转指令替换它。
在过程的该步骤处,将在执行第一指令序列时获得的索引值是未知的,并且最有可能可能不是随后的基本块的地址在数组中的索引。它将更有可能是另一基本块的地址在数组中的索引。执行从该过程步骤中产生的软件代码于是将会使得执行流跳转到在正常执行控制流中不应刚好在所选基本块之后被执行的基本块,从而导致不可预期的执行行为。
为了修复该问题,所述方法可以包括第五防护步骤S5,其在编译并且链接安全软件代码的时候或其之后被执行,在其期间,防护设备20的第一处理器21在软件代码已经被汇编以便变得可执行之后执行对软件代码的分析,从而允许在非常接近于最终安全软件代码的状态中分析该软件代码。第五防护步骤S5可以包括:
·确定将在其上计算完整性校验值的软件代码的所述部分的开始和结束在软件代码中的实际开始和结束地址,软件代码的所述部分至少包括待保护的软件代码的部分,
·计算完整性校验值,因为它将会由被插入在所选基本块中的第一指令序列来计算,
·通过将所述变换函数应用到完整性校验值来计算索引值,因为它将会由被插入在所选基本块中的第一指令序列来计算。
在这样的步骤中,应当根据第二指令序列来计算完整性校验值,特别是当已在预定指令序列的集合中随机选择了该第二指令序列的时候。类似地,当已在预定变换函数的集合中随机选择了所述变换函数的时候,应通过应用所选变换函数来计算索引值。
所述方法还可以包括第六防护步骤S6,其在编译并且链接安全软件代码的时候或其之后被执行,在其期间,防护设备20的第一处理器21执行对软件代码的最终修改以便递送安全软件代码。
第六防护步骤S6可以包括:
·将限定在其上计算完整性校验值的软件代码的部分的起始和停止地址设置成在第五防护步骤S5中所确定的开始和结束地址。这样的地址将用于在第一执行步骤E1期间计算完整性校验值。
·以在第五防护步骤S5中所计算的索引值来在数组中设置实际的随后基本块的地址。它是将在执行步骤E2期间被计算的相同索引值。
所述数组可以在它的其他索引处包括当安全软件代码被执行的时候安全软件代码的基本块的许多其他地址。这样的地址可以是潜在的随后的基本块的地址,所述潜在的随后的基本块是在安全软件代码的其他基本块之中随机选择的。在这样的情况中,在第六防护步骤S6期间,当以在第五防护步骤中所计算的索引值来设置实际的随后的基本块的地址的时候,所述实际的随后的基本块的地址可以在数组中与已经由在第五防护步骤中所计算的索引值在数组中索引的另一基本块的地址掉换。
通过这样做,攻击者不能确定数组的地址不能是随后的基本块的地址(其将是可能的,如果这样的地址不是基本块的地址的话或者如果数组中相关联的索引不是变换函数的可能结果的话)。如果攻击者在安全软件代码上执行静态分析,则他将仅仅能够定位在所选基本块结束处的跳转指令,并且他将不能确定被存储在数组中的所述多个地址之中的哪个地址应被指定为跳转的目标以便保持安全软件代码正确地执行。
在实施例中,所述数组和第一指令序列可以被插入在软件代码的所选基本块中的随机位置处,在所插入的跳转指令之前。可替换地,它们可以被插入在所选基本块的结束处,在所插入的跳转指令之前。第一指令序列可以用它不干扰现存指令这样的方式来与所选基本块的这样的现存指令交错。
安全软件代码执行
在上文中所描述的步骤已经由防护设备执行之后,产生安全软件代码,这样的安全软件代码可以由执行设备30的第二处理器31安全地执行。当执行所选基本块的时候,执行设备执行第一指令序列:
·在第一执行步骤E1期间,第二处理器31至少在待保护的软件代码的所述部分上计算完整性校验值。
·在第二执行步骤E2期间,第二处理器21基于所述所计算的完整性校验值来计算索引值。
如果待保护的软件代码的部分尚未被篡改,则:
·所计算的完整性校验值是这样的使得所计算的索引值是将刚好在所选基本块的执行之后被执行的正确的随后的基本块的地址在数组中的索引;
·并且在所选基本块的结束处的跳转指令使得执行流跳转到该正确的随后基本块的开始。
否则,如果待保护的软件代码的部分已被篡改,则:
·所计算的完整性校验值是这样的使得所计算的索引值是与将刚好在所选基本块的执行之后被执行的正确的随后的基本块的地址最有可能不同的地址在数组中的索引;
·并且在所选基本块的结束处的跳转指令使得执行流在该地址处跳转,从而导致不可预测的执行行为。
根据第一方面的方法的多种应用
根据本发明的第一方面的方法可以被多次应用以保护可能地与彼此重叠的软件代码的若干部分。在该情况中,在第一防护步骤S1期间,可以通过第一分析程序来确定将针对所述方法的每一个应用而被保护的代码的部分,使得所有软件代码或软件代码的所有敏感部分都被保护。如果变换函数每次在预定变换函数的集合之中被随机选择,则可以为待保护的软件代码的每个部分选择不同的变换函数。
其他方面
在第二方面中,本发明还涉及一种非暂时性机器可读存储介质,其编码有在防护设备20的第一处理器21已经至少执行了根据上文中所描述的第一方面的方法的步骤S1至S4之后获得的安全软件代码的指令。所述安全软件代码于是为在其上已经应用了根据第一方面的所述方法并且包括被组织在多个基本块中的计算机代码指令的不安全软件代码的经修改的版本。在所述存储介质上所编码的指令中,安全软件代码的所选基本块包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址。
所述非暂时性机器可读存储介质还被编码有第一指令序列,所述第一指令序列被插入在安全软件代码的所选基本块中,其当在运行时被执行的时候实行上文中所描述的执行步骤E1到E2:
·在待保护的软件代码的部分上计算完整性校验值,
·基于所述所计算的完整性校验值来计算在数组中对随后的基本块的地址进行索引的索引值,安全软件代码的所选基本块还在其结束处包括向由在运行时所计算的所述索引值在数组中索引的地址的跳转指令。
在第三方面中,本发明还涉及用于执行安全软件代码的指令的方法,如由执行设备30的第二处理器31执行。所述安全软件代码于是为包括被组织在多个基本块中的计算机代码指令的、在其上已经应用了根据上文中所描述的第一方面的方法的不安全软件代码的经修改的版本。所述安全软件代码的所选基本块还包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址。所述用于执行安全软件代码的指令的方法包括上文中所描述的执行步骤E1到E2:
·在第一执行步骤E1期间,第二处理器31在待保护的软件代码的部分上计算完整性校验值;
·在第二执行步骤E2期间,第二处理器31基于所述所计算的完整性校验值来计算在数组中对随后的基本块的地址进行索引的索引值;
所述方法包括第三执行步骤E3,在其期间,第二处理器31在所选基本块的结束处执行向由所述所计算的索引值索引的数组的地址的跳转指令。
作为结果,所提出的方法使得能够在待保护的软件代码的部分上执行完整性校验,并且如果所保护的部分已经被篡改则通过跳转中断安全软件代码的执行而保护该完整性校验。为了更多保护,所提出的方法在软件代码中隐藏待执行的随后的基本块、跳转指令的目标,因此防止攻击者通过对所保护的代码的静态分析而理解这样的方法如何起作用并且防止修改所保护的代码。
Claims (15)
1.一种用于防护包括被组织在多个基本块中的计算机代码指令的经编译的软件代码(SC)的方法,所述方法生成安全软件代码(SSC)并且包括如下步骤:
·由处理器(21)确定(S1)待保护的软件代码的部分,
·由处理器在软件代码的所选基本块中插入(S2)第一指令序列,所述第一指令序列当在运行时被执行的时候:
在待保护的软件代码的所述部分上计算(E1)完整性校验值,
基于所述所计算的完整性校验值来计算(E2)索引值,
·由处理器在软件代码的所选基本块中插入(S3)存储器地址的索引数组,其中在执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址由所述索引值索引,
·由处理器在软件代码的所选基本块的结束处插入(S4)向由在运行时所计算的所述索引值在数组中索引的地址的跳转指令。
2.根据权利要求1所述的方法,其中随机确定待保护的软件代码的所述部分。
3.根据权利要求1所述的方法,其中在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。
4.根据权利要求1所述的方法,其中第一指令序列包括第二指令序列,所述第二指令序列当在运行时被执行的时候通过如下来计算所述完整性校验值:执行校验和、掩码、散列函数、二进制移位和算术运算之中的一个或多个运算。
5.根据权利要求1所述的方法,其中在计算完整性校验函数的预定指令序列的集合中随机选择所述第二指令序列。
6.根据权利要求1所述的方法,其中第一指令序列包括第三指令序列,所述第三指令序列当在运行时被执行的时候将变换函数应用到所述所计算的完整性校验值以计算所述索引值,所述变换函数包括校验和、掩码、散列函数、二进制移位和算术运算之中的一个或多个运算。
7.根据权利要求6所述的方法,其中在预定变换函数的集合中随机选择所述变换函数。
8.根据权利要求1所述的方法,其中数组中的地址是当安全软件代码被执行的时候安全软件代码的基本块的地址。
9.根据权利要求1所述的方法,其中在起始地址与停止地址之间的安全软件代码的指令上计算所述完整性校验值,
并且包括第五防护步骤(S5),其在编译并且链接安全软件代码的时候或其之后被执行,并且包括:
·确定将在其上计算完整性校验值的软件代码的部分的开始和结束在软件代码中的开始和结束地址,
·计算所述完整性校验值并且基于所述所计算的完整性校验值来计算所述索引值,
并且包括第六防护步骤(S6),其在编译并且链接安全软件代码的时候或其之后被执行,并且包括:
·将所述起始和停止地址设置成在第五防护步骤(S5)中所确定的所述开始和结束地址,
·以在第五防护步骤中所计算的所述索引值来在数组中设置随后的基本块的地址。
10.根据权利要求1所述的方法,其中所述数组和第一指令序列被插入在软件代码的所选基本块中的随机位置处。
11.根据权利要求1所述的方法,其中将第一指令序列插入在所选基本块的结束处,在所插入的跳转指令之前。
12.一种非暂时性机器可读存储介质,其编码有用于由处理器执行的安全软件代码的指令,其中:
·所述安全软件代码是包括被组织在多个基本块中的计算机代码指令的软件代码的经修改的版本,
·安全软件代码的所选基本块包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址,
所述非暂时性机器可读存储介质还被编码有第一指令序列,所述第一指令序列被插入在安全软件代码的所选基本块中,其当在运行时被执行的时候:
·在待保护的软件代码的部分上计算(E1)完整性校验值,
·基于所述所计算的完整性校验值来计算(E2)在数组中对随后的基本块的地址进行索引的索引值,
并且安全软件代码的所选基本块还在其结束处包括向由在运行时所计算的所述索引值索引的数组的地址的跳转指令。
13.根据权利要求12所述的非暂时性机器可读存储介质,其中在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。
14.一种用于由处理器(31)执行安全软件代码的所选基本块的指令的方法,其中:
·所述安全软件代码是包括被组织在多个基本块中的计算机代码指令的软件代码的经修改的版本,
·安全软件代码的所选基本块包括存储器地址的索引数组,所述存储器地址包括当执行安全软件代码的时候将在所选基本块之后被执行的随后的基本块的地址,
所述方法包括如下步骤:
·在待保护的软件代码的部分上计算(E1)完整性校验值,
·基于所述所计算的完整性校验值来计算(E2)在数组中对随后的基本块的地址进行索引的索引值,
·在所选基本块的结束处执行(E3)向由所述所计算的索引值在数组中索引的地址的跳转指令。
15.根据权利要求14所述的方法,其中在待保护的软件代码的所述部分上以及在所选基本块的至少一部分上计算完整性校验值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP17153409.2A EP3355218A1 (en) | 2017-01-26 | 2017-01-26 | Method to secure a software code |
EP17153409.2 | 2017-01-26 | ||
PCT/EP2018/051866 WO2018138212A1 (en) | 2017-01-26 | 2018-01-25 | Method to secure a software code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110574028A true CN110574028A (zh) | 2019-12-13 |
CN110574028B CN110574028B (zh) | 2023-05-23 |
Family
ID=57909507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880021089.6A Active CN110574028B (zh) | 2017-01-26 | 2018-01-25 | 用于防护软件代码的方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11250110B2 (zh) |
EP (2) | EP3355218A1 (zh) |
JP (2) | JP2020505709A (zh) |
CN (1) | CN110574028B (zh) |
ES (1) | ES2873979T3 (zh) |
WO (1) | WO2018138212A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10467390B1 (en) | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
EP3617920A1 (en) * | 2018-08-31 | 2020-03-04 | Nagravision S.A. | Software tamper resistance |
JP7178500B2 (ja) * | 2019-07-23 | 2022-11-25 | 株式会社ソニー・インタラクティブエンタテインメント | アクセス制御装置、アクセス制御方法及びプログラム |
SG11202109561SA (en) | 2020-04-28 | 2021-12-30 | Lock In Company Co Ltd | Method of blocking access of threatening user and program security application method |
US11687440B2 (en) * | 2021-02-02 | 2023-06-27 | Thales Dis Cpl Usa, Inc. | Method and device of protecting a first software application to generate a protected software application |
CN113032737B (zh) * | 2021-03-15 | 2021-11-30 | 清华大学 | 软件的保护方法、装置、电子设备及存储介质 |
CN115906014B (zh) * | 2021-08-13 | 2024-07-23 | 华为技术有限公司 | 一种数据处理方法及相关装置 |
US11799857B2 (en) * | 2021-08-31 | 2023-10-24 | Cisco Technology, Inc. | Software posture for zero trust access |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040123137A1 (en) * | 2002-12-12 | 2004-06-24 | Yodaiken Victor J. | Systems and methods for detecting a security breach in a computer system |
US7054443B1 (en) * | 2000-03-27 | 2006-05-30 | Microsoft Corporation | System and method for protecting digital goods using random and automatic code obfuscation |
US20130160121A1 (en) * | 2011-12-20 | 2013-06-20 | Advanced Micro Devices, Inc. | Method and apparatus for detecting intrusions in a computer system |
EP2937803A1 (en) * | 2014-04-23 | 2015-10-28 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
US20150310193A1 (en) * | 2014-04-23 | 2015-10-29 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
CN105641930A (zh) * | 2015-12-28 | 2016-06-08 | 网易(杭州)网络有限公司 | 游戏数据的校验方法及装置 |
US20160171246A1 (en) * | 2014-12-16 | 2016-06-16 | Nxp B.V. | Code integrity protection by computing target addresses from checksums |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003280754A (ja) | 2002-03-25 | 2003-10-02 | Nec Corp | 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム |
US7664937B2 (en) * | 2007-03-01 | 2010-02-16 | Microsoft Corporation | Self-checking code for tamper-resistance based on code overlapping |
US8874928B2 (en) | 2008-10-31 | 2014-10-28 | Apple Inc. | System and method for obfuscating constants in a computer program |
JP5467271B2 (ja) * | 2009-12-24 | 2014-04-09 | 和臣 大石 | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
US8751823B2 (en) | 2011-08-01 | 2014-06-10 | Apple Inc. | System and method for branch function based obfuscation |
US8661549B2 (en) | 2012-03-02 | 2014-02-25 | Apple Inc. | Method and apparatus for obfuscating program source codes |
US20130347109A1 (en) * | 2012-06-21 | 2013-12-26 | Cisco Technology, Inc. | Techniques for Detecting Program Modifications |
EP3012762A1 (en) * | 2014-10-24 | 2016-04-27 | Thomson Licensing | Control flow graph flattening device and method |
US10467390B1 (en) * | 2016-08-18 | 2019-11-05 | Snap Inc. | Cyclically dependent checks for software tamper-proofing |
-
2017
- 2017-01-26 EP EP17153409.2A patent/EP3355218A1/en not_active Withdrawn
-
2018
- 2018-01-25 US US16/481,377 patent/US11250110B2/en active Active
- 2018-01-25 WO PCT/EP2018/051866 patent/WO2018138212A1/en unknown
- 2018-01-25 ES ES18700785T patent/ES2873979T3/es active Active
- 2018-01-25 CN CN201880021089.6A patent/CN110574028B/zh active Active
- 2018-01-25 JP JP2019541352A patent/JP2020505709A/ja active Pending
- 2018-01-25 EP EP18700785.1A patent/EP3574426B1/en active Active
-
2021
- 2021-10-27 JP JP2021175286A patent/JP7154365B2/ja active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7054443B1 (en) * | 2000-03-27 | 2006-05-30 | Microsoft Corporation | System and method for protecting digital goods using random and automatic code obfuscation |
US20040123137A1 (en) * | 2002-12-12 | 2004-06-24 | Yodaiken Victor J. | Systems and methods for detecting a security breach in a computer system |
US20130160121A1 (en) * | 2011-12-20 | 2013-06-20 | Advanced Micro Devices, Inc. | Method and apparatus for detecting intrusions in a computer system |
EP2937803A1 (en) * | 2014-04-23 | 2015-10-28 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
US20150310193A1 (en) * | 2014-04-23 | 2015-10-29 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
US20160171246A1 (en) * | 2014-12-16 | 2016-06-16 | Nxp B.V. | Code integrity protection by computing target addresses from checksums |
EP3035228A1 (en) * | 2014-12-16 | 2016-06-22 | Nxp B.V. | Code integrity protection by computing target addresses from checksums |
CN105641930A (zh) * | 2015-12-28 | 2016-06-08 | 网易(杭州)网络有限公司 | 游戏数据的校验方法及装置 |
Non-Patent Citations (1)
Title |
---|
ETUTORIALS.ORG: "12.2检测修改", 《HTTP://WEB.ARCHIVE.ORG/WEB/20161026185540/HTTP://ETUTORIALS.ORG:80/PROGRAMMING/SECURE+PROGRAMMING/CHAPTER+12.+ANTI-TAMPERING/12.2+DETECTING+MODIFICATION/》 * |
Also Published As
Publication number | Publication date |
---|---|
ES2873979T3 (es) | 2021-11-04 |
EP3574426B1 (en) | 2021-03-03 |
EP3574426A1 (en) | 2019-12-04 |
US20200004934A1 (en) | 2020-01-02 |
CN110574028B (zh) | 2023-05-23 |
JP7154365B2 (ja) | 2022-10-17 |
JP2022009556A (ja) | 2022-01-14 |
JP2020505709A (ja) | 2020-02-20 |
US11250110B2 (en) | 2022-02-15 |
WO2018138212A1 (en) | 2018-08-02 |
EP3355218A1 (en) | 2018-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110574028B (zh) | 用于防护软件代码的方法 | |
US8843761B2 (en) | Method and apparatus for protection of a program against monitoring flow manipulation and against incorrect program running | |
US8286251B2 (en) | Obfuscating computer program code | |
WO2016135729A1 (en) | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
CN105683990A (zh) | 用于保护动态库的方法和装置 | |
JP2011170836A (ja) | 情報処理装置及びプログラム、情報処理方法、記録媒体 | |
CN106874758A (zh) | 一种识别文档代码的方法和装置 | |
US11269988B2 (en) | Automated software application verification system | |
CN110520860B (zh) | 用于防护软件代码的方法 | |
Oishi et al. | Self destructive tamper response for software protection | |
CN113032737B (zh) | 软件的保护方法、装置、电子设备及存储介质 | |
Lehniger et al. | Combination of ROP Defense Mechanisms for Better Safety and Security in Embedded Systems | |
US12045338B2 (en) | Method to secure a software code | |
Ilahi et al. | Towards Anomaly Detection in Embedded Systems Application Using LLVM Passes | |
Giunta et al. | A redundancy-based attack detection technique for java card bytecode | |
Liu et al. | Static-Dynamic Control Flow Integrity | |
WO2019149630A1 (en) | Method for protecting an executable code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |