CN110520860B - 用于防护软件代码的方法 - Google Patents
用于防护软件代码的方法 Download PDFInfo
- Publication number
- CN110520860B CN110520860B CN201880021094.7A CN201880021094A CN110520860B CN 110520860 B CN110520860 B CN 110520860B CN 201880021094 A CN201880021094 A CN 201880021094A CN 110520860 B CN110520860 B CN 110520860B
- Authority
- CN
- China
- Prior art keywords
- value
- protected
- constant value
- array
- software code
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 230000006870 function Effects 0.000 claims description 56
- 230000009466 transformation Effects 0.000 claims description 39
- 238000006467 substitution reaction Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000001681 protective effect Effects 0.000 description 5
- 239000000284 extract Substances 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003068 static effect 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
- 230000007246 mechanism 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
-
- 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/1066—Hiding content
Abstract
本发明涉及用于防护包括至少一个恒定值的软件代码的方法,所述方法生成安全软件代码并且包括如下步骤:‑由处理器在软件代码中确定(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中,在软件代码中确定待保护的恒定值。这样的待保护的恒定值可以由人类操作员向第一处理器21指定。可替换地,它可以由第一处理器21本身随机地确定或由第一处理器21所运行的分析程序来确定。通过解析从第一大容量存储构件25中所读取的软件代码,第一处理器21可以定位一个或多个恒定值,例如当一变量被初始化到这样的恒定值(变量 = 恒定_值)的时候,或当一恒定值被用作诸如比较之类的操作的参数的时候(如果变量>恒定_值,那么……)。这样的恒定值还可以是存储器地址,当安全代码SC的指令被执行设备30执行的时候,所述存储器地址指定执行设备30的第二RAM存储器中的位置。这样的地址可以例如指定在其上将执行完整性校验的存储器的区段的开始或结束。为了保护软件代码免受攻击者的逆向工程和篡改,应当尽可能多地使攻击者不知道这样的恒定值,并且这样的恒定值不应当在根据第一方面的方法所产生的安全软件代码SSC中“以明文”保持。
在以下步骤中,目的是在软件代码中用变量来替换恒定值,所述变量称为替换变量,并且在代码中插入指令,所述指令当由执行设备30的第二处理器31执行的时候基于另一值来将该替换变量的值设置成等于所保护的恒定值,所述另一值在下文中被称为目标值X。为了使得事情对于将尝试通过对代码的静态分析来检索恒定值的攻击者而言更难,目标值X被存储在包含多个值的数组中,并且指令被插入在经修改的代码中,所述指令当由执行设备30的第二处理器31执行的时候计算根据其能确定恒定值的目标值在数组中的索引。
防护方法主要步骤:第二防护步骤
更确切地,在第二防护步骤S2中,防护设备20的第一处理器21可以在软件代码中插入图5中所描述的值的索引数组,使得可以根据数组的一个值、在下文中被称为目标值X来确定待保护的恒定值。在所述方法的以下步骤中,这样的数组将通过读取数组中的目标值X而使得能够间接确定恒定值。
防护方法主要步骤:第三防护步骤
在第三防护步骤S3中,第一处理器21在软件代码中通过替换变量来替换待保护的恒定值。当执行安全软件代码SSC的时候,正是该替换变量的值,执行设备30的第二处理器31将基于在数组中读取的目标值而将其设置成等于恒定值。
在该第三防护步骤S3期间,第一处理器可以通过相同的替换变量来替换恒定值中的一个、若干、或甚至全部具体值(occurrence)。为了高效对抗攻击者,如果恒定值的所有具体值都被变量替换而不强制所有具体值都被相同的唯一变量替换,则更好。一半具体值可以例如被第一替换变量所替换,并且另一半被第二变量替换。在特定实施例中,根据第一方面的方法的所有步骤可以被分离地应用于恒定值的每次具体值。安全软件代码然后包括专用数组、目标值和用于恒定值的每次具体值的替换变量。
防护方法主要步骤:第四防护步骤
在第四防护步骤S4中,第一处理器21在软件代码中插入第一指令序列。该第一指令序列是这样的使得当包括该第一指令序列的安全软件代码SSC由执行设备30的第二处理器31执行的时候,在执行步骤E1到E4中所描述的动作被执行,这些执行步骤在下文中以及在图6中被描述。该第一指令序列目的在于使得执行设备在执行安全软件代码的时候能够基于数组中的目标值X而检索恒定值。
第一指令序列当由执行设备在SSC运行时执行的时候:
- 计算根据其能确定待保护的恒定值的值X在数组中的索引i,
- 从所述数组中提取位于所述数组中所述所计算的索引i处的值X,
- 根据所述所提取的值X,确定待保护的恒定值,
- 将所述替换变量的值设置成等于所确定的恒定值。
防护方法示例性实施例
以下段落描述了根据本发明的第一方面的、由防护设备20执行的防护方法的示例性和非限制性实施例。
如先前所描述的,在第一防护步骤S1中,在软件代码SC中确定待保护的恒定值。
然后,在第二防护步骤S2中,值的索引数组被插入使得可以根据数组的一个值——被称为目标值X——来确定待保护的恒定值。
第一处理器21可以在数组中包括在随机选择的索引i处的目标值X。
在第一实施例中,目标值X简单地等于待保护的对应恒定值。在该实施例中,如果待保护的恒定值是存储器地址,则当安全软件代码由第二处理器31执行的时候,数组中的值、优选地它们中的全部可以由第一处理器21在有效存储器地址之中选择。通过这样做,攻击者不能通过分析数组中的值并且丢弃不是有效存储器地址的那些而定位与恒定值对应的数组中的值。更一般地,无论恒定值的类型是什么,数组中的值可以具有与恒定值相同的类型,并且可以被选择使得恒定值与它们融合。
然后在第三防护步骤S3中,在软件代码中通过替换变量来替换待保护的恒定值。
然后在第四防护步骤S4中,在软件代码中插入第一指令序列。该第一指令序列当在运行时被执行的时候计算目标值X在数组中的索引i。为了这样做,第一指令序列可以包括:
· 第二指令序列,其当在运行时被执行的时候返回第一中间值v,
· 以及第三指令序列,其当在运行时被执行的时候将第一变换函数f应用到所述第一中间值v,用于计算所述索引i,其可以被标注为i = f(v)。
可故意使得由第二指令序列对第一中间值v的计算比所需要的更复杂。这使得能够对于攻击者而言使得逆向工程和理解这样的计算更难。这样的计算被称为不透明的计算。第二指令序列可以是软件代码中具有与仅仅计算第一中间值相比另一目的的序列。例如,它可以是对于另一防篡改保护而言所需要的完整性校验。或者它可以是各种指令的大型序列,其除了以不可被攻击者容易地理解的方式计算第一中间值之外没有其他目的,所述方式诸如其值被指派在软件代码的另一部分中的变量上的循环(for、while等等)或操作的组合。
在第三指令序列中所应用的第一变换函数f可以是如下任何函数:其当被应用到第一中间值v的时候输出在数组的索引值的范围中的值并且输出数组中目标值X的索引。例如,它可以是第一中间值的经掩码化的散列,或一掩码,其选择第一中间值的仅一些预定位以便输出索引值。
第一变换函数f可以由防护设备20的第一处理器21在验证关系i = f(v)的预定变换函数的第一集合之中随机选择。
当根据本发明的第一方面的方法被分离地应用到恒定值的若干具体值的时候,并且当每次在预定变换函数的第一集合之中随机选择第一变换函数的时候,每个第三指令序列可应用不同的变换函数。
然后该第一指令序列当在运行时被执行的时候从所述数组中提取位于所述数组中所述所计算的索引i处的值X,然后根据所述所提取的值X而确定待保护的恒定值,并且最终将所述替换变量的值设置成等于所确定的恒定值。
在第一实施例中,目标值简单地等于待保护的对应恒定值。在该实施例中,当执行安全软件代码SSC的时候,通过如下来获得恒定值:简单地以第一变换函数所输出的索引i来在数组中读取它。在该实施例中,尝试发现待保护的恒定值的攻击者可以在数组中读取它,但是他没有用于发现数组中哪个值是恒定值的简单方式。
在第二实施例中,第一指令序列包括第四指令序列,所述第四指令序列当在运行时被执行的时候通过向所述第一中间值v应用第二变换函数g而确定第二中间值m。它可以被标注为m = g(v)。
在该第二实施例中,第一指令序列还包括第五指令序列,所述第五指令序列当在运行时被执行的时候基于所提取的目标值X和第二中间值m来确定待保护的恒定值。这样的实施例使得对于攻击者而言甚至更难以检索恒定值,因为它不再被存储在安全软件代码中,甚至不在数组内部。为了检索恒定值,攻击者将必须在数组中的所有值之中确定目标值X,检索第二中间值m,并且最终他将需要发现如何基于目标值和第二中间值来确定恒定值。
作为示例,在该第二实施例中,可以在已经从数组中提取了目标值X并且确定了所述第二中间值m之后、在执行安全软件代码SSC的时候通过将第三变换函数h应用到所提取的目标值X和第二中间值m来确定待保护的恒定值。它可以被标注为恒定_值=h(X,m)。
以上描述了可以选择第一变换函数的方式,包括在预定函数的第一集合之中随机选择第一变换函数。类似地,可以在预定变换函数的第二集合中随机选择第二变换函数,并且可以在预定变换函数的第三集合中随机选择第三变换函数,所述集合包括散列和掩码函数。它使得能够将不同的第二和第三变换函数用于通过本发明的方法所保护的每个恒定值或恒定值的具体值,并且使得对于攻击者而言更难以对安全软件代码进行逆向工程。
在该第二实施例中,如果待保护的恒定值是存储器地址,则很可能的是:当安全软件代码SSC将由第二处理器执行的时候,根据其能确定恒定值的目标值X将不是执行设备30的第二RAM存储器32中的任何对象的有效存储器地址。当安全软件代码将由第一处理器执行的时候,为了保持将目标值隐藏在数组中的所有值之中,数组中的其他值可以被选为无效存储器地址。通过这样做,由攻击者对被视为存储器地址的数组中的值的有效性的分析将不揭露数组中的哪个值是目标值X。
安全软件代码执行
在上文中所描述的步骤已经由防护设备执行之后,产生安全软件代码,这样的安全软件代码可以由执行设备30的第二处理器31安全地执行。当执行安全软件代码的时候,执行设备执行第一指令序列:
- 在第一执行步骤E1期间,第二处理器31计算根据其能确定待保护的恒定值的目标值X在数组中的索引i。
- 在第二执行步骤E2期间,第二处理器31从所述数组中提取位于所述数组中所述所计算的索引i处的值,其是目标值X。
- 在第三执行步骤E3期间,第二处理器31根据所述所提取的值来确定待保护的恒定值。
- 在第四执行步骤E4期间,第二处理器31将所述替换变量的值设置成等于所确定的恒定值。
在实施例中,第一执行步骤E1可以包括:
· 返回第一中间值v的第一计算步骤E11,
· 第二计算步骤E12,其将第一变换函数f应用到所述第一中间值v,以计算所述索引i,其可以被标注为 i = f(v)。
在以上描述的第二实施例中,第一指令序列包括通过将第二变换函数g应用到所述第一中间值v来确定第二中间值m,其可以被标注为m = g(v)。然后,在执行设备30的第二处理器31已经从数组中提取了目标值X并且确定了所述第二中间值m之后,由第二处理器31基于所提取的目标值X和第二中间值m来确定待保护的恒定值。
可以在从数组中提取了目标值X并且确定了所述第二中间值m之后、在执行安全软件代码SSC的时候通过将函数h应用到所提取的目标值X和第二中间值m来确定待保护的恒定值。
其他方面
在第二方面中,本发明还涉及一种非暂时性机器可读存储介质,其编码有在防护设备20的第一处理器21已经至少执行了根据上文中所描述的第一方面的方法的防护步骤S1至S4之后获得的安全软件代码的指令。所述安全软件代码于是为在其上已经应用了根据第一方面的所述方法并且包括待保护的恒定值的不安全软件代码的经修改的版本。在所述存储介质上所编码的指令中,所述待保护的恒定值在安全代码中被替换变量所替换。
所述非暂时性机器可读存储介质还编码有值的索引数组,使得能够根据数组的一个值以及第一指令序列来确定所述待保护的恒定值,所述第一指令序列当在运行时被执行的时候实行上文中所描述的执行步骤E1到E4:
- 计算值在数组中的索引,根据其能确定所述待保护的恒定值,
- 从所述数组中提取位于所述数组中所述所计算的索引处的值,
- 根据所述所提取的值,确定所述待保护的恒定值,
- 以及将所述替换变量的值设置成等于所述所确定的恒定值。
在第三方面中,本发明还涉及用于执行如由执行设备30的第二处理器31执行的安全软件代码的指令的方法。所述安全软件代码于是为在其上已经应用了根据上文中所描述的第一方面的所述方法并且包括待保护的恒定值的不安全软件代码的经修改的版本。所述待保护的恒定值已经在安全代码中被替换变量所替换,并且所述安全软件代码还包括值的索引数组,使得所述待保护的恒定值可以根据数组的一个值而被确定。所述用于执行安全软件代码的指令的方法包括上文中所描述的执行步骤E1到E4:
- 在第一执行步骤E1期间,第二处理器31计算根据其能确定待保护的恒定值的目标值X在数组中的索引i;
- 在第二执行步骤E2期间,第二处理器31从所述数组中提取位于所述数组中所述所计算的索引i处的值,其是目标值X;
- 在第三执行步骤E3期间,第二处理器31根据所述所提取的值来确定待保护的恒定值;
- 在第四执行步骤E4期间,第二处理器31将所述替换变量的值设置成等于所确定的恒定值。
Claims (10)
1.一种用于防护包括至少一个恒定值的软件代码的方法,所述方法生成安全软件代码并且包括如下步骤:
-由处理器在软件代码中确定待保护的恒定值,
-由处理器在软件代码中插入值的索引数组,使得待保护的恒定值可以根据数组的一个值X而被确定,
-由处理器在软件代码中通过替换变量来替换待保护的恒定值,
-由处理器在软件代码中插入第一指令序列,其当在运行时被执行的时候:
ο计算根据其能确定待保护的恒定值的值X在数组中的索引i,
ο从所述数组中提取位于所述数组中所述所计算的索引i处的值X,
ο根据所述所提取的值X,确定待保护的恒定值,
ο将所述替换变量的值设置成等于所确定的恒定值,其中所述第一指令序列包括第二指令序列和第三指令序列,所述第二指令序列当在运行时被执行的时候返回第一中间值v,所述第三指令序列当在运行时被执行的时候将第一变换函数f应用到所述第一中间值v以计算所述索引i,以及其中在预定变换函数的第一集合中在每次执行所述安全软件代码时随机选择所述第一变换函数f,以便能够使用不同的变换函数来用于保护不同变量。
2.根据权利要求1所述的方法,其中根据其能确定待保护的恒定值的数组中的所述值X等于待保护的恒定值。
3.根据权利要求1所述的方法,其中待保护的恒定值是存储器地址,并且当软件代码由处理器执行的时候,所述数组中的值是有效存储器地址。
4.根据权利要求1所述的方法,其中所述第一指令序列包括:
-第四指令序列,其当在运行时被执行的时候通过向所述第一中间值v应用第二变换函数g而确定第二中间值m,
-第五指令序列,其当在运行时被执行的时候基于所提取的值X和第二中间值m来确定待保护的恒定值。
5.根据权利要求4所述的方法,其中在预定变换函数的第二集合中随机选择第二变换函数g。
6.根据权利要求1所述的方法,其中待保护的恒定值是存储器地址,并且当软件代码由处理器执行的时候,所述数组中的值是无效存储器地址。
7.根据权利要求4所述的方法,其中通过向所提取的值和第二中间值应用第三变换函数来确定待保护的恒定值。
8.根据权利要求4所述的方法,其中在预定变换函数的第三集合中随机选择第三变换函数h。
9.一种非暂时性机器可读存储介质,其编码有用于由处理器执行的安全软件代码的指令,其中:
·所述安全软件代码是包括待保护的恒定值的不安全软件代码的经修改的版本,
·所述待保护的恒定值在安全代码中被替换变量所替换,
·所述非暂时性机器可读存储介质还编码有:
值的索引数组,使得所述待保护的恒定值可以根据数组的一个值X而被确定,
第一指令序列,其当在运行时被执行的时候:
√计算根据其能确定待保护的所述恒定值的值X在数组中的索引i,
√从所述数组中提取位于所述数组中所述所计算的索引i处的值X,
√根据所述所提取的值X,确定所述待保护的恒定值,
√将所述替换变量的值设置成等于所述所确定的恒定值,
所述第一指令序列包括第二指令序列和第三指令序列,所述第二指令序列当在运行时被执行的时候返回第一中间值v,所述第三指令序列当在运行时被执行的时候将第一变换函数f应用到所述第一中间值v以计算所述索引i,在预定变换函数的第一集合中在每次执行所述安全软件代码时随机选择所述第一变换函数f,以便能够使用不同的变换函数来用于保护不同变量。
10.一种用于执行用于由处理器执行的安全软件代码的指令的方法,其中:
·所述安全软件代码是包括待保护的恒定值的不安全软件代码的经修改的版本,
·所述待保护的恒定值在安全代码中被替换变量所替换,
·所述安全软件代码还包括值的索引数组,使得所述待保护的恒定值可以根据数组的一个值X而被确定,
所述方法包括如下步骤:
·通过将第一变换函数f应用到第一中间值v来计算根据其能确定待保护的所述恒定值的值X在数组中的索引i,在预定变换函数的第一集合中在每次执行所述安全软件代码时随机选择所述第一变换函数f,以便能够使用不同的变换函数来用于保护不同变量,
·从所述数组中提取位于所述数组中所述所计算的索引i处的值X,
·根据所述所提取的值X,确定所述待保护的恒定值,
·将所述替换变量的值设置成等于所述所确定的恒定值。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP17153413.4 | 2017-01-26 | ||
EP17153413.4A EP3355219A1 (en) | 2017-01-26 | 2017-01-26 | Method to secure a software code |
PCT/EP2018/051865 WO2018138211A1 (en) | 2017-01-26 | 2018-01-25 | Method to secure a software code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110520860A CN110520860A (zh) | 2019-11-29 |
CN110520860B true CN110520860B (zh) | 2023-08-08 |
Family
ID=57909508
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880021094.7A Active CN110520860B (zh) | 2017-01-26 | 2018-01-25 | 用于防护软件代码的方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11256786B2 (zh) |
EP (2) | EP3355219A1 (zh) |
JP (1) | JP6906057B2 (zh) |
CN (1) | CN110520860B (zh) |
WO (1) | WO2018138211A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3876119A1 (en) * | 2020-03-06 | 2021-09-08 | Thales Dis France Sa | Method for protecting a data in a software application |
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 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2405742A1 (en) * | 2000-04-12 | 2001-10-25 | Cloakware Corporation | Tamper resistant software - mass data encoding |
EP1349036A2 (en) * | 2002-03-25 | 2003-10-01 | Nec Corporation | Obfuscated source program, source program conversion method and apparatus, and source conversion program |
US6779114B1 (en) * | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
EP2388730A1 (en) * | 2010-05-17 | 2011-11-23 | Nagravision S.A. | Method for generating software code |
CN104866740A (zh) * | 2014-02-25 | 2015-08-26 | 北京娜迦信息科技发展有限公司 | 一种防静态分析文件的方法及装置 |
CN105641930A (zh) * | 2015-12-28 | 2016-06-08 | 网易(杭州)网络有限公司 | 游戏数据的校验方法及装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
JP2006053406A (ja) * | 2004-08-13 | 2006-02-23 | Fujitsu Ltd | オブジェクトファイル配信方法、オブジェクトファイル配信システム、および電子機器 |
US8589897B2 (en) * | 2008-08-26 | 2013-11-19 | Apple Inc. | System and method for branch extraction obfuscation |
GB0810695D0 (en) * | 2008-06-12 | 2008-07-16 | Metaforic Ltd | Anti-tampering MMU defence |
US8874928B2 (en) * | 2008-10-31 | 2014-10-28 | Apple Inc. | System and method for obfuscating constants in a computer program |
US8386803B2 (en) * | 2009-11-18 | 2013-02-26 | Apple Inc. | System and method for data obfuscation based on discrete logarithm properties |
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 |
EP2937803B1 (en) | 2014-04-23 | 2019-02-20 | Nxp B.V. | Control flow flattening for code obfuscation where the next block calculation needs run-time information |
US9405936B2 (en) | 2014-12-16 | 2016-08-02 | Nxp B.V. | Code integrity protection by computing target addresses from checksums |
US20160344753A1 (en) * | 2015-05-20 | 2016-11-24 | Government Of The United States As Represetned By The Secretary Of The Air Force | Method for instruction set morphing to inhibit malicious code injection |
-
2017
- 2017-01-26 EP EP17153413.4A patent/EP3355219A1/en not_active Withdrawn
-
2018
- 2018-01-25 JP JP2019541324A patent/JP6906057B2/ja active Active
- 2018-01-25 WO PCT/EP2018/051865 patent/WO2018138211A1/en unknown
- 2018-01-25 EP EP18700784.4A patent/EP3574425B1/en active Active
- 2018-01-25 US US16/481,428 patent/US11256786B2/en active Active
- 2018-01-25 CN CN201880021094.7A patent/CN110520860B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6779114B1 (en) * | 1999-08-19 | 2004-08-17 | Cloakware Corporation | Tamper resistant software-control flow encoding |
CA2405742A1 (en) * | 2000-04-12 | 2001-10-25 | Cloakware Corporation | Tamper resistant software - mass data encoding |
EP1349036A2 (en) * | 2002-03-25 | 2003-10-01 | Nec Corporation | Obfuscated source program, source program conversion method and apparatus, and source conversion program |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
CN102222196A (zh) * | 2010-04-16 | 2011-10-19 | 汤姆森特许公司 | 验证自修改的计算机代码校验和的方法、装置及程序载体 |
EP2388730A1 (en) * | 2010-05-17 | 2011-11-23 | Nagravision S.A. | Method for generating software code |
CN104866740A (zh) * | 2014-02-25 | 2015-08-26 | 北京娜迦信息科技发展有限公司 | 一种防静态分析文件的方法及装置 |
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/》.2016, * |
Also Published As
Publication number | Publication date |
---|---|
CN110520860A (zh) | 2019-11-29 |
JP2020505708A (ja) | 2020-02-20 |
EP3574425B1 (en) | 2022-03-02 |
US20210133299A1 (en) | 2021-05-06 |
JP6906057B2 (ja) | 2021-07-21 |
EP3355219A1 (en) | 2018-08-01 |
US11256786B2 (en) | 2022-02-22 |
WO2018138211A1 (en) | 2018-08-02 |
EP3574425A1 (en) | 2019-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110574028B (zh) | 用于防护软件代码的方法 | |
Liao et al. | Soliaudit: Smart contract vulnerability assessment based on machine learning and fuzz testing | |
CN109478217B (zh) | 使用基于偏移的虚拟地址映射对目标应用功能的基于内核的检测 | |
US8286251B2 (en) | Obfuscating computer program code | |
EP3262557A1 (en) | A method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
Weber et al. | A toolkit for detecting and analyzing malicious software | |
CN105683990A (zh) | 用于保护动态库的方法和装置 | |
CN101477610B (zh) | 源码和目标码联合嵌入的软件水印方法 | |
US20190205528A1 (en) | Automated software application verification system | |
CN110520860B (zh) | 用于防护软件代码的方法 | |
CN109241706B (zh) | 基于静态胎记的软件抄袭检测方法 | |
JP2009104589A (ja) | 情報処理装置及びその方法、プログラム、記録媒体 | |
Lee et al. | VODKA: Virtualization obfuscation using dynamic key approach | |
US20220156365A1 (en) | Method to Secure a Software Code | |
Bouffard et al. | Heap Hop! Heap Is Also Vulnerable | |
Yoo et al. | Automatic string deobfuscation scheme for mobile applications based on platform-level code extraction | |
Giunta et al. | A redundancy-based attack detection technique for java card bytecode | |
CN111310184A (zh) | 基于rich头部标识的pe文件特征码生成方法、系统、电子设备及存储介质 | |
WO2019149630A1 (en) | Method for protecting an executable code | |
CN112513841A (zh) | 用于为软件加水印的系统和方法 |
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 |