用于防护软件代码的方法技术

技术编号:22693704 阅读:21 留言:0更新日期:2019-11-30 06:18
本发明专利技术涉及用于防护包括至少一个恒定值的软件代码的方法,所述方法生成安全软件代码并且包括如下步骤:‑由处理器在软件代码中确定(S1)待保护的恒定值,‑由处理器在软件代码中插入(S2)值的索引数组,使得待保护的恒定值可以根据数组的一个值而被确定,‑由处理器在软件代码中通过替换变量来替换(S3)待保护的恒定值,‑由处理器在软件代码中插入(S4)第一指令序列,其当在运行时被执行的时候:计算值在数组中的索引,根据其能确定待保护的恒定值,从所述数组中提取位于所述数组中所述所计算的索引处的值,根据所述所提取的值,确定待保护的恒定值,将所述替换变量的值设置成等于所确定的恒定值。

Methods used to protect software code

The invention relates to a method for protecting a software code including at least one constant value, which generates a secure software code and comprises the following steps: \u2011 a constant value to be protected is determined in the software code by the processor, \u2011 an index array of (S2) values is inserted in the software code by the processor, so that the constant value to be protected can be determined according to one value of the array The processor inserts the first instruction sequence of (S4) into the software code. When it is executed at runtime, it calculates the index of the value in the array, and extracts the calculated index in the array from the array according to the constant value to be protected According to the extracted value, a constant value to be protected is determined, and the value of the replacement variable is set equal to the determined constant value.

【技术实现步骤摘要】
【国外来华专利技术】用于防护软件代码的方法
本专利技术涉及软件保护的领域,并且更具体地涉及防篡改技术的领域。它公开了一种混淆方法,其尤其使得能够在软件中安全地使用恒定值。
技术介绍
现今,通过运行软件应用而向用户提供了许多服务。这样的应用可以运行在各种移动或否的设备上,所述设备诸如台式计算机、膝上型电脑、销售终端点、智能电话等等。它们可以在本地运行或跨网络、比如LAN或因特网而被实现。诸如智能卡或银行信用卡之类的一些设备甚至可以专用于运行一个或几个应用。这样的应用通常运行在不安全的环境中,其中攻击者可获得对运行应用的系统的操作的某种控制或甚至全部控制。因此,这些应用中的大多数需要实现某些安全机制以便保护应用所处置的数据免被这样的攻击者读取或修改。攻击者可尝试通过对系统所执行的经编译的代码的逆向工程来理解软件的操作。他然后可以访问通过软件所处置的安全信息和/或修改软件以便执行恶意操作。例如,攻击者可修改银行软件以便执行恶意金融交易或修改经许可保护的软件以便在不购买许可的情况下免费运行它。这样的逆向工程通常通过使用工具来被执行,所述工具诸如代码分析器和调试器,其从经编译的代码中提取关于代码操作的信息,诸如控制流程图,其描述代码中指令的执行次序。为了防止对软件代码的任何修改,已经开发了防篡改技术。它们通常依赖于对代码的某个部分执行完整性校验,例如通过在软件代码的特定区之上计算校验和值,然后比较所获得的值与已知参考值。如果值不匹配,则代码已经被篡改,并且应当防止软件执行,要么通过拒绝正常的软件执行要么通过伪造它。虽然如此,这样的保护也可被攻击者进行逆向工程并且被破坏。对于调试器或代码分析器而言,将变量初始化定位(spot)到一恒定值并且在通过防篡改过程执行的比较中使用这样的恒定值是特别容易的。这种信息可被攻击者使用以便标识正在代码中实现的保护的种类,其然后将会使得能够破坏所述保护。例如,攻击者可标识在其上执行完整性校验的软件区的起始和结束,当代码未被修改的时候推断通过完整性校验例程来在该区上计算的校验和值,然后修补完整性校验例程以便总是提供有效的校验和值,而无论对软件代码的任何其他修改,即使在其上计算校验和值的软件的区中。作为结果,存在对于如下方法的需要:所述方法允许在软件中处置恒定值,而不向分析经编译的代码的攻击者提供关于软件操作的信息。
技术实现思路
为此目的并且根据第一方面,本专利技术因此涉及一种用于防护包括至少一个恒定值的软件代码的方法,所述方法生成安全软件代码并且包括如下步骤:-由处理器在软件代码中确定待保护的恒定值,-由处理器在软件代码中插入值的索引数组,使得待保护的恒定值可以根据数组的一个值而被确定,-由处理器在软件代码中通过替换变量来替换待保护的恒定值,-由处理器在软件代码中插入第一指令序列,其当在运行时被执行的时候:·计算值在数组中的索引,根据其能确定待保护的恒定值,·从所述数组中提取位于所述数组中所述所计算的索引处的值,·根据所述所提取的值,确定待保护的恒定值,·将所述替换变量的值设置成等于所确定的恒定值。它使得能够使攻击者不知道恒定值,因为所述恒定值不再同样出现在软件代码中,而同时使得能够在运行时以不能被攻击者容易地理解和再现的方式来检索恒定值。因此,安全软件代码更加很有可能至少抵抗对代码的静态分析。在实施例中,所述第一指令序列包括第二指令序列和第三指令序列,所述第二指令序列当在运行时被执行的时候返回第一中间值,所述第三指令序列当在运行时被执行的时候将第一变换函数应用到所述第一中间值以计算所述索引。这样的对根据其能确定待保护的恒定值的值在数组中的索引的两步确定使得对于攻击者而言更难以通过他自己来确定所述索引并且因此增强所述方法的安全性。在实施例中,在预定变换函数的第一集合中随机选择第一变换函数。随机选择变换函数使得能够使用不同的变换函数来用于保护不同变量。它还使得对于攻击者而言不可能预测变换函数,将使用所述变换函数以便检索根据其能确定待保护的恒定值的值在数组中索引。在实施例中,根据其能确定待保护的恒定值的在数组中的所述值等于待保护的恒定值。它使得能够通过以第一变换函数所返回的索引来读取在数组中的值而快速并且直接地确定恒定值。待保护的恒定值可以是存储器地址,并且当软件代码由处理器执行的时候,在所述数组中的值可以是有效存储器地址。通过这样做,攻击者不能基于数组中的地址的有效性来识别数组中的恒定值。在实施例中,第一指令序列包括:-第四指令序列,其当在运行时被执行的时候通过向所述第一中间值应用第二变换函数而确定第二中间值,-第五指令序列,其当在运行时被执行的时候基于所提取的值和第二中间值来确定待保护的恒定值。这样的实施例使得能够根据数组中的值来执行对恒定值的间接确定。通过这样做,恒定值不再出现在安全软件代码中的任何地方,甚至不出现在数组中。这样的对恒定值的两步确定使得对于攻击者而言更难以理解过程并且更难以通过他自己来检索恒定值。在实施例中,在预定变换函数的第二集合中随机选择第二变换函数。这样的对第二变换函数的随机选择具有与上文中对第一变换函数的随机选择相同的优点。它使如下过程多样化:所述过程使得能够确定根据其能检索恒定值的值的索引,并且因此它使得逆向工程更困难。在实施例中,待保护的恒定值是存储器地址,并且当软件代码由处理器执行的时候,所述数组中的值是无效存储器地址。仅仅通过使用数组中的无效存储器地址,攻击者不能猜测到哪一个将使得他能够检索恒定值。可以通过向所提取的值和第二中间值应用第三变换函数来确定待保护的恒定值。在实施例中,在预定变换函数的第三集合中随机选择第三变换函数。它使得对于攻击者而言不可能在没有对待使用的函数的认知的情况下确定恒定值。根据第二方面,本专利技术涉及一种非暂时性机器可读存储介质,其编码有用于由处理器执行的安全软件代码的指令,其中:所述安全软件代码是包括待保护的恒定值的不安全软件代码的经修改的版本,所述待保护的恒定值在安全代码中被替换变量所替换,所述非暂时性机器可读存储介质还编码有:值的索引数组,使得所述待保护的恒定值可以根据数组的一个值而被确定,第一指令序列,其当在运行时被执行的时候:○计算值在数组中的索引,根据其能确定所述待保护的恒定值,○从所述数组中提取位于所述数组中所述所计算的索引处的值,○根据所述所提取的值,确定所述待保护的恒定值,○将所述替换变量的值设置成等于所述所确定的恒定值。根据第三方面,本专利技术涉及一种执行用于由处理器执行的安全软件代码的指令的方法,其中:所述安全软件代码是包括待保护的恒定值的不安全软件代码的经修改的版本,所述待保护的恒定值在安全代码中被替换变量所替换,所述安全软件代码还包括值的索引数组,使得所述待保护的恒定值可以根据数组的一个值而被确定,所述方法包本文档来自技高网
...

【技术保护点】
1.一种用于防护包括至少一个恒定值的软件代码(SC)的方法,所述方法生成安全软件代码(SSC)并且包括如下步骤:/n- 由处理器(21)在软件代码中确定(S1)待保护的恒定值,/n- 由处理器在软件代码中插入(S2)值的索引数组,使得待保护的恒定值可以根据数组的一个值(X)而被确定,/n- 由处理器在软件代码中通过替换变量来替换(S3)待保护的恒定值,/n- 由处理器在软件代码中插入(S4)第一指令序列,其当在运行时被执行的时候:/n○ 计算(E1)根据其能确定待保护的恒定值的值(X)在数组中的索引(i),/n○ 从所述数组中提取(E2)位于所述数组中所述所计算的索引(i)处的值(X),/n○ 根据所述所提取的值(X),确定(E3)待保护的恒定值,/n○ 将所述替换变量的值设置(E4)成等于所确定的恒定值。/n

【技术特征摘要】
【国外来华专利技术】20170126 EP 17153413.41.一种用于防护包括至少一个恒定值的软件代码(SC)的方法,所述方法生成安全软件代码(SSC)并且包括如下步骤:
-由处理器(21)在软件代码中确定(S1)待保护的恒定值,
-由处理器在软件代码中插入(S2)值的索引数组,使得待保护的恒定值可以根据数组的一个值(X)而被确定,
-由处理器在软件代码中通过替换变量来替换(S3)待保护的恒定值,
-由处理器在软件代码中插入(S4)第一指令序列,其当在运行时被执行的时候:
○计算(E1)根据其能确定待保护的恒定值的值(X)在数组中的索引(i),
○从所述数组中提取(E2)位于所述数组中所述所计算的索引(i)处的值(X),
○根据所述所提取的值(X),确定(E3)待保护的恒定值,
○将所述替换变量的值设置(E4)成等于所确定的恒定值。


2.根据权利要求1所述的方法,其中所述第一指令序列包括第二指令序列和第三指令序列,所述第二指令序列当在运行时被执行的时候返回第一中间值(v),所述第三指令序列当在运行时被执行的时候将第一变换函数(f)应用到所述第一中间值(v)以计算所述索引(i)。


3.根据权利要求2所述的方法,其中在预定变换函数的第一集合中随机选择第一变换函数(f)。


4.根据权利要求1所述的方法,其中根据其能确定待保护的恒定值的数组中的所述值(X)等于待保护的恒定值。


5.根据权利要求1所述的方法,其中待保护的恒定值是存储器地址,并且当软件代码由处理器执行的时候,所述数组中的值是有效存储器地址。


6.根据权利要求2所述的方法,其中所述第一指令序列包括:
-第四指令序列,其当在运行时被执行的时候通过向所述第一中间值(v)应用第二变换函数(g)而确定第二中间值(m),
-第五指令序列,其当在运行时被执行的时候基于所提取的值(X)和第二中间值(m)来确定待保护的恒定值。


7.根据权利要求6所述的方法,其中在预定变换函数的第二...

【专利技术属性】
技术研发人员:E加罗S福尔佩P加尔巴
申请(专利权)人:泰雷兹数字安全法国股份有限公司德国斯芬特有限责任公司
类型:发明
国别省市:法国;FR

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利