首页 / 专利库 / 钟表 / 指针 / 通过根据校验和计算目标地址的代码完整性保护

通过根据校验和计算目标地址的代码完整性保护

阅读:298发布:2021-06-07

专利汇可以提供通过根据校验和计算目标地址的代码完整性保护专利检索,专利查询,专利分析的服务。并且一种混淆包括多个基本 块 的 软件 代码的方法,包括:由处理器计算当前基本块的校验和值以及指向当前基本块的结尾的 指针 ;确定当前基本块的在先基本块;将当前基本块的校验和值插入到在先基本块中;以及将用来基于当前基本块的校验和值确定指向当前基本块的开始的指针的指令插入到在先基本块中。,下面是通过根据校验和计算目标地址的代码完整性保护专利的具体信息内容。

1.一种混淆包括多个基本软件代码的方法,包括:
由处理器计算当前基本块的校验和值以及指向当前基本块的结尾的指针
确定当前基本块的在先基本块;
将当前基本块的校验和值插入到在先基本块中;以及
将用来基于当前基本块的校验和值确定指向当前基本块的开始的指针的指令插入到在先基本块中。
2.根据权利要求1所述的方法,还包括:
将用于确定最后一个基本块的指令插入到在先基本块中;以及
将用于将当前基本块设置为最后一个基本块的指令插入到在先基本块中。
3.根据权利要求1所述的方法,还包括:插入用于将当前块设置到在先块的指令。
4.根据权利要求3所述的方法,还包括:在达到第一个基本块前,重复以下步骤:计算当前基本块的校验和值,确定在先基本块,插入校验和值,将指令插入到在先基本块中,以及将当前块设置到在先块。
5.根据权利要求4所述的方法,还包括:计算当前基本块的校验和值和指向第一个基本块的结尾的指针,以及向调用第一个基本块的应用提供第一个块的校验和值和指向第一个块的结尾的指针。
6.根据权利要求1所述的方法,还包括:在当前基本块和在先基本块之间插入垃圾代码。
7.根据权利要求1所述的方法,其中,用于确定指向当前基本块的开始的指针的指令还包括:重复地计算当前基本块的校验和并使指向当前基本块的指针递减,直到所计算的校验和值等于当前基本块的之前计算的校验和值为止,其中指针的初始值指向当前基本块的结尾。
8.根据权利要求7所述的方法,还包括:确定所计算的校验和值过早地等于当前基本块的之前计算的校验和值。
9.根据权利要求8所述的方法,还包括:当所计算的校验和值过早地等于之前计算的校验和值时,修改当前基本块的代码以防止所计算的校验和值过早地等于之前计算的校验和。
10.根据权利要求7所述的方法,其中,基于指针的值来计算当前基本块的校验和。
11.一种校验用于由处理器执行的软件代码的完整性的方法,包括:
初始化下一个基本块的校验和值;
设置指向下一个基本块的结尾的指针;
确定下一个基本块的开始。
12.根据权利要求11所述的方法,其中,确定下一个基本块的开始包括:基于对下一个基本块的校验和的迭代确认来使指针递减,以确定下一个基本块的开始。
13.根据权利要求12所述的方法,其中,校验和的迭代确认基于指针的值。
14.根据权利要求12所述的方法,其中,初始化下一个基本块的校验和值包括:针对下一个基本块使用嵌入校验和值。
15.根据权利要求11所述的方法,还包括:
针对在当前基本块之前的在先基本块,包括:
初始化当前基本块的校验和值;
设置指向当前基本块的结尾的指针;以及
确定当前基本块的开始。
16.根据权利要求11所述的方法,还包括:将当前块设置到在先块。
17.根据权利要求11所述的方法,还包括:基于条件确定下一个基本块,其中初始化下一个基本块的校验和值取决于所述条件;以及
设置指向下一个基本块的结尾的指针取决于所述条件。

说明书全文

通过根据校验和计算目标地址的代码完整性保护

[0001] 相关申请的交叉引用
[0002] 本申请涉及发明人是“Hoogerbrugge等”、题为“CONTROL FLOW FLATTENING FOR CODE OBFUSCATION WHERE THE NEXT BLOCK CALCULATION NEEDS RUN-TIME INFORMATION”的美国专利申请No.14/259,395(以下称为“Hoogerbrugge”),通过引用将其并入本文并且完全等同于在本文中阐述。

技术领域

[0003] 本文公开的各示例性实施例一般地涉及针对下一个计算需要运行时间信息的代码混淆的控制流平展。

背景技术

[0004] 如今,软件应用广泛用于向用户提供各种服务。这些软件应用可以容宿在各种不同的设备上,例如,移动电话、个人计算机、膝上型计算机、平板、机顶盒等。消费者或工业系统使用的很多系统中都能见到软件应用。软件应用还出现于智能卡和信用卡中。此外,软件应用可以在诸如互联网的网络(其中软件应用在服务器上运行)上实现并且可以通过使用各种用户设备来访问。其中很多软件应用需要使用安全协议来保护内容、信息、交易以及隐私。很多软件应用运行在如下环境中:攻击者可以完全控制软件应用的操作,并且攻击者可以试图对软件应用的代码进行反向工程以获得对安全信息的访问权,甚至理解软件的操作以再现或修改软件应用的功能。攻击者可以使用各种反向工程工具,例如代码分析器和调试器,以获得与软件应用相关的信息。因此,已开发使攻击者难以对软件进行反向工程的技术。一种增加代码反向工程的难度的方法是代码混淆。代码混淆图创建人类难以理解的混淆式代码。代码混淆可用于隐藏软件应用的目的或者其逻辑,从而保护软件应用不被篡改或反向工程。

发明内容

[0005] 以下将提出各示例性实施例的概述。以下概述有一些简化和省略,其旨在突出和介绍各示例性实施例的一些方面,但不限制本发明。之后的部分对示例性实施例的进行描述,其足以使本领域技术人员能够制造和使用本发明构思。
[0006] 各示例性实施例涉及一种混淆包括多个基本块的软件代码的方法,包括:由处理器计算当前基本块的校验和值以及指向当前基本块的结尾的指针;确定当前基本块的在先基本块;将当前基本块的校验和值插入到在先基本块中;以及基于当前基本块的校验和值,将指令插入到在先基本块中以确定指向当前基本块的开始的指针。
[0007] 描述各实施例,其中一种非瞬态机器可读存储介质,其编码有用于由处理器执行的软件代码的当前基本块的指令,所述非瞬态机器可读存储介质包括:用于初始化下一个基本块的校验和值的指令;用于设置指向下一个基本块的结尾的指针的指令;以及用于确定下一个基本块的开始的指令。
[0008] 描述各实施例,还包括一种校验用于由处理器执行的软件代码的完整性的方法,包括:初始化下一个基本块的校验和值;设置指向下一个基本块的结尾的指针;确定下一个基本块的开始。附图说明
[0009] 为更好地理解各示例性实施例,参考以下附图,其中:
[0010] 图1示出了混淆软件代码的方法;以及
[0011] 图2示出了用于向用户设备提供安全内容和对该安全内容进行处理的软件应用的系统。
[0012] 为帮助理解,使用相同的附图标记来表示具有实质相同或相似结构和/或实质相同或相似功能的元件。

具体实施方式

[0013] 说明书和附图示出了本发明的原理。因此,可以理解,本领域技术人员将能够设计本文中未明确描述或示出、但体现本发明的原理并包括在本发明范围内的各种装置。此外,本文所述的全部示例主要旨在明确地用于示范目的,以帮助读者来理解发明人为推进技术所贡献的本发明的原理和构思,并且应被理解为不对具体陈述的示例和条件进行限制。此外,除非另有指示(例如,“否则”或“备选地”),本文使用的术语“或”指代非排除性的或(即,和/或)。此外,本文描述的各实施例不必相互排斥,因为一些实施例可以与一个或多个其他实施例相组合以形成新的实施例。
[0014] 软件应用可以使用多个基本块来实现。多个基本块采用如下方式互连:一些块构建在一个或多个在先块的已处理数据之上。例如,基本块可以使用包括算术指令的多个计算机指令,多个计算机指令一同来实现基本块的功能。基本块是软件应用内只有一个入口点且只有一个出口点的的部分代码。基本块具有第一指令,并且当第一指令被执行时,基本块中的其余指令必须按顺序执行恰好一次。代码混淆可用于实现软件应用。在达到基本块的结尾处后控制可转移至的基本块称为该基本块的在后块。当进入基本块时控制所来自的基本块称为该基本块的在先块。此外,代码混淆可以与实现软件应用(例如,查找表或有限状态机)的其他方法一起使用,以防止对软件应用的攻击。
[0015] 基本块网络被布置为执行软件应用的功能。软件应用可以接收由软件应用操作的输入信息。软件应用将使得第一个基本块启动软件应用,然后前进到下一个基本块。接下来,还可以执行多个基本块。基本块的执行可以包括将数据从一个基本块传到另一个基本块。通过这种方式,展现出基本块网络,其共同执行软件应用的功能。
[0016] 在很多情形中,例如在上述示例中,必须保护软件应用不受攻击者对其尝试代码反向工程。攻击者可能使用精密工具来分析二进制形式的软件,以理解软件做什么以及软件是如何工作的。一种进行这种分析的已知有效技术是控制流平展,其中功能控制流图中的所有结构都被移除。每个基本块在结尾时进行少量计算,以确定要执行的下一个基本块。该技术记载于“Surreptitious Software---Obfuscation,Watermarking,and 
Tamperproofing for Software Protection”,Christian Collberg,Jasvir Nagra,Addison-Wesley Software Security Series,Editor:Gary McGraw,,第792页,ISBN:0-
321-54925-2,2009年8月。因此,希望进行这一计算,使得反向工程工具无法根据基本块中的代码来确定该基本块可能具有的在后基本块。已知其他技术,其中对在后基本块的计算需要当前基本块中不可用的信息。该技术记载于以下文献中:“An overview of control flow graph flattening”,Jan Cappaert and Bart Preneel,K.U.Leuven/ESAT/SCD-COSIC,re-trust.dit.unitn.it/files/20081015Doc/session2-1Cappaert.pdf.[0017] 另一种公知的防止篡改的方法是在应用执行期间计算应用的二进制代码的校验和。如果代码已被改变,则所计算的校验和值将不同,并且应用可以基于不正确的校验和来停止或改变其行为。校验和方法所存在的问题是可以在代码中检测到校验和计算,并且可以移除随后对结果的校验。其可以自动进行,从而从应用中移除数以千计的校验和的校验是可行的。
[0018] 为解决这一问题,描述了将代码完整性保护和控制流平展相组合的实施例。在控制流平展后,每个基本块结束时进行少量计算,以确定将要执行的下一个基本块的起始地址。下文描述的实施例包括对代码执行校验和计算以校验下一个基本块的完整性。如果由于代码篡改导致校验和计算错误,则下一个基本块的计算出的起始地址将不正确。其结果是,程序不能如所期望的那样执行,并且将计算不正确的结果,很可能崩溃。校验和计算开始于初始值,如果一方想要篡改下一个基本块,则需要调整该初始值。该初始值可以嵌入在当前基本块的代码中。如果攻击者试图调整它,则当前基本块的校验和将变得不同。因此,为了调整这一点,攻击者还将需要调整前一个基本块,以此类推。
[0019] 通过在执行下一个基本块前校验下一个基本块的完整性,校验和执行代码之间的时间非常短,从而减少了攻击者在该短时间窗口中修改代码的机会。
[0020] Hoogerbrugge描述了用于混淆二进制代码的结构的控制流平展。该变换得到如下基本块:
[0021] I1
[0022] …
[0023] In
[0024] next_bb=...
[0025] next_addr=start[next_bb]
[0026] jump next_addr
[0027] 其中I1...In是指令,start是带有基本块的起始地址的表。该代码执行来自原始应用代码的执行指令I1...In,其后是确定或计算要执行的下一个基本块next_bb的代码。值next_bb可以是到表start的索
[0028] 引,以确定要执行的下一个基本块的地址next_addr。然后,应用代码
[0029] 执行到地址next_addr的跳转。
[0030] 接下来将描述在跳转到下一个基本块前校验其完整性的实施例。
[0031] I1
[0032] …
[0033] In
[0034] next_bb=...
[0035] ptr=end[next_bb]//ptr=下一个基本块的结尾地址
[0036] cs=0x5314de67//当前校验和=初始校验和
[0037] do
[0038] ptr=ptr–4//递减指针
[0039] cs=cs xor*ptr//更新当前校验和值
[0040] while cs!=0//循环,指导当前校验和为零
[0041] jump ptr//跳转到下一基本块
[0042] 在该实施例中,表end不包含基本块的起始地址,但是包含基本块的结尾地址或者靠近基本块的结尾的地址。该表中的值可用于初始化被称为ptr的指针,其可用于校验和计算。因此,在计算next_bb后,使用表end中对应于next_bb的值来初始化指针ptr。接下来,可以使用例如初始值0x5314de67来初始化校验和值cs。接下来循环开始。进入循环后,ptr递减,并且使用存储器中ptr所指向的值来更新校验和cs。该循环重复,直到校验和值cs变为0,这时ptr应指向将要执行的下一个基本块的起始地址。
[0043] 在该示例中,校验和计算包括对基本块中所有四字节字进行异或(XOR)。计算校验和的其他方法同样适用。例如,可以通过将ptr并入校验和计算中,使校验和依赖于地址。这样可以防止当校验和仅包括对指令的异或时攻击者将指令重新排序也不会被检测的修改。
[0044] 初始校验和应当与目标基本块上的校验和相一致。如果成立,则在cs在正确时刻变为0,即指针ptr指向目标基本块的开始。因为初始校验和嵌入在当前基本块的代码中,所以当嵌入的初始校验和被修改时,对当前基本块进行校验的校验和计算将失败。通过在被校验过的代码中嵌入校验和值,创建校验链,该校验链在对代码做出单次修改时需要全部被移除。
[0045] 在某些情况中,即使没有攻击者篡改代码,在ptr达到下一个基本块的起始地址前,cs的值也有可能变为0。实现上述保护方法的编译器可以对此进行检查并修改基本块的代码以防止这一情况发生。
[0046] 在上文讨论的示例性基本块中,假设该基本块具有单个在后基本块。在两个在后基本块的情况中(来自条件跳转的基本块),在基本块中嵌入两个初始校验和,并且必须基于条件跳转的条件选择正确的一个。此外,基于该条件来选择指向下一个基本块的结尾的正确指针。然后,如上所述,所选择的校验和值与指针可用于确定指向下一个块的开始的指针值。
[0047] 一种规避保护的方法是,用在指针指向间接分支前递减ptr然后跳转到下一个指令的循环替代校验和循环,这是因为控制流平展使每个基本块都以间接跳转结束。一种简单的对抗措施是在内存中连续基本块之间插入“垃圾代码”(junk code)。这时,如果攻击者试图通过向后搜索间接跳转来查找下一个基本块的开始,则攻击者将跳转到垃圾代码,而不是基本块的开始。这将使代码发生错误,从而击败攻击者。
[0048] 在上述实施例中,功能的第一个基本块没有被校验。然后,直观地将该实施例扩展,从而功能的第一个基本块可以由功能的调用方来校验。通过该扩展,校验链在整个应用中扩展。
[0049] 本文描述的实施例可以实现在将高级语言编译为在处理器上执行的机器代码的编译器中。并且,实施例可以应用于已有的机器代码以混淆该机器代码的操作。
[0050] 图1示出了混淆软件代码的方法。在105处,方法100可以开始。接下来,在110处,该方法可以接收高级语言源代码。然后,在115处,方法100可以编译高级语言源代码。接下来,在120处,方法100可以识别经过编译的代码中的基本块。然后,在125处,方法100可以确定最后一个基本块,并将当前块设置到最后一个块。接下来,在130处,方法100可以确定当前基本块的在先基本块。然后,在135处,方法100计算当前块的校验和以及指向当前块的结尾的指针。接下来,在140处,方法100将当前块的计算校验和值插入到在先块中。然后,在145处,方法100将指令插入到在先块中,以确定指向当前基本块的开始处的指针。然后在150处,方法100结束。
[0051] 图2示出了用于向用户设备提供安全内容和对该安全内容进行处理的软件应用的系统。所述系统包括内容服务器200、应用服务器220、用户设备250和252、以及数据网络240。用户设备250和252可以经由数据网络240请求对内容服务器200提供的安全内容的访问权。数据网络可以是提供用户设备250和252、内容服务器200以及应用服务器之间的连接的任何数据网络。用户设备250和252可以多个设备中的一个,例如机顶盒、媒体流传输器、数字视频记录器、平板计算机、移动电话、膝上型计算机、便携式媒体设备、智能手表、桌面计算机、媒体服务器等。
[0052] 针对访问权的用户请求可以先获取可用于处理内容服务器200提供的安全内容的软件应用的下载。可从应用服务器220下载软件应用。使用上文描述的技术并且如上文操作,可以混淆软件应用。一旦用户设备250、252安装软件应用,则用户设备可以从内容服务器200下载安全内容,并使用下载的软件应用来访问安全内容。例如,下载的软件应用可以对从内容服务器接收的加密内容进行解密。在其他实施例中,软件应用可以执行其他安全操作,例如,加密、数字签名生成和验证等。
[0053] 内容服务器200可以控制向用户设备250、252提供的安全内容的访问权。因此,当内容服务器200接收针对安全内容的请求时,内容服务器200可以向请求用户设备发送安全内容。类似地,应用服务器220可以控制向用户设备250、252提供的软件应用的访问权。因,当应用服务器220接收针对软件应用的请求时,应用服务器220可以向请求用户设备发送软件应用。在向用户设备提供软件应用或安全内容前,各服务器还可以认证请求软件应用或安全内容的用户设备。
[0054] 内容服务器200可以包括经由一个或多个系统总线208互连的处理器202、存储器204、用户接口206、网络接口210、以及内容存储模块212。将要理解的是,图2包括一定程度的抽象并且设备200的组件的实际组织可以比所示出的更为复杂。
[0055] 处理器202可以是能够执行存储在存储器204或存储模块212中的指令的任何硬件设备。因此,处理器可以包括微处理器、现场可编程阵列(FPGA)、应用专用集成电路(ASIC)、或者其他类似设备。
[0056] 存储器204可以包括各种内容,例如L1、L2、L3缓存或系统存储器。因此,存储器202可以包括静态随机访问存储器(SRAM)、动态RAM(DRAM)、闪存、只读存储器(ROM)、或者其他类似存储设备。
[0057] 用户接口206可以包括用于使得能够与诸如管理员的用户进行通信的一个或多个设备。例如,用户接口206可以包括显示器、鼠标、以及用于接收用户命令的键盘
[0058] 网络接口210可以包括用于使得能够与其他硬件设备进行通信的一个或多个设备。例如,网络接口210可以包括配置成根据以太网协议进行通信的网络接口卡(NIC)。此外,网络接口210可以实现用于根据TCP/IP协议的通信的TCP/IP栈。网络接口210的各种备选或附加的硬件或配置将是显而易见的。
[0059] 内容储存212可以包括一个或多个机器可读内容存储介质,例如,只读存储器(ROM)、随机访问存储器(RAM)、磁盘存储介质、光存储介质、闪存设备、或类似存储介质。在各实施例中,内容存储器212可以存储要提供给用户的内容。
[0060] 应用服务器220包括与内容服务器200中的元件相似的元件,并且对内容服务器200中的相似元件的描述适用于应用服务器220。此外,应该注意的是,内容服务器和应用服务器可以在单个服务器上实现。而且,这样的服务器可以实现在分布式计算机系统以及的计算机系统上。
[0061] 根据本发明的实施例的方法可以实现为计算机系统上的计算机实现方法。根据本发明的方法的可执行代码可以存储在计算机程序介质上。计算机程序介质的示例包括存储装置、光存储设备、集成电路、服务器、在线软件等。该计算机系统还可以包括其他硬件元件,包括存储模块、用于与外部系统进行数据传输的网络接口、以及计算机系统的其他元件等。
[0062] 在本发明的实施例中,计算机程序可以包括适配为当计算机程序在计算机上运行时间,执行根据本发明的方法的所有步骤的计算机程序代码。优选地,该计算机程序包含在非瞬态计算机可读介质上。
[0063] 根据本发明的创建白盒实现的混淆代码的方法可以在计算机上实现作为计算机实现方法。根据实施例的方法的可执行代码可以存储在计算机程序介质上。在该方法中,计算机程序可以包括适配为在计算机程序在计算机上运行时间,执行方法的所有步骤的计算机程序。该计算机程序包含在非瞬态计算机可读介质上。
[0064] 在处理器上运行的用于实现本发明的实施例的特定软件的任何组合构成特定专用机器。
[0065] 本文中,术语“非瞬态计算机可读存储介质”应被理解为排除瞬态的传播信号,但包括所有形式的易失性和非易失性存储器。此外,本文中的术语“处理器”应被理解为包括各种设备,例如微处理器、现场可编程门阵列(FPGA)、应用专用集成电路(ASIC)以及其他类似处理设备。当软件在处理器上实现时,该组合成为单个专用机器。
[0066] 虽然对本发明的某些示例性方面进行具体参考,以详细描述各示例性实施例,但是应当理解,本发明能够具有其它实施例并且能够在各种明显的方面对其细节进行修改。由于是对本领域技术人员来说显而易见,可以在本发明的精神和范围之内实现各种变化和修改。因此,前述公开内容、描述和附图仅用于说明性目的,不以任何方式限制由权利要求来界定的本发明。
相关专利内容
标题 发布/更新时间 阅读量
一种新型指针 2020-05-11 875
一种指针铆接用模具 2020-05-12 254
一种汽车仪表指针组件 2020-05-11 988
一种仪表指针半自动热铆机 2020-05-12 494
一种车用仪表指针 2020-05-11 525
一种盘状指针 2020-05-11 457
一种全自动指针装配机 2020-05-11 697
汽车仪表指针 2020-05-12 472
汽车仪表指针 2020-05-12 367
一种异形指针 2020-05-12 967
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈