CN113439271A - 受保护操作处理 - Google Patents
受保护操作处理 Download PDFInfo
- Publication number
- CN113439271A CN113439271A CN201980092253.7A CN201980092253A CN113439271A CN 113439271 A CN113439271 A CN 113439271A CN 201980092253 A CN201980092253 A CN 201980092253A CN 113439271 A CN113439271 A CN 113439271A
- Authority
- CN
- China
- Prior art keywords
- code
- updated
- computer program
- translation
- scheduler
- 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
- 238000004590 computer program Methods 0.000 claims abstract description 196
- 238000000034 method Methods 0.000 claims abstract description 49
- 238000000638 solvent extraction Methods 0.000 claims abstract description 12
- 238000013519 translation Methods 0.000 claims description 134
- 230000014616 translation Effects 0.000 claims description 134
- 230000007935 neutral effect Effects 0.000 claims description 52
- 230000011218 segmentation Effects 0.000 claims description 22
- 230000001419 dependent effect Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 17
- 230000000875 corresponding effect Effects 0.000 description 14
- 230000006870 function Effects 0.000 description 14
- 230000007704 transition Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 230000008859 change Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000021615 conjugation Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
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/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种模糊计算机代码的计算机实施的方法,包括:接收(1201)原始计算机程序,其包括具有计算机指令的多个代码块,所述原始计算机程序可在输入空间内的输入数据上操作,所述原始计算机程序能用于在接收所述输入数据时跟随通过所述多个代码块的执行路径,其中,所述输入空间根据分割被分割成至少一个分段,每个分段包括所述输入空间的子集,其包含对应于相同执行路径的输入。多个经更新的代码块被包括(1302)在经更新的计算机程序中。选择代码在所述经更新的计算机程序的执行期间能用于1303根据所述输入数据来选择多个经更新的代码块中的经更新的代码块;所述选择代码被包括(1304)在所述经更新的计算机程序中。
Description
技术领域
本发明涉及防止程序被分析用于发现漏洞。
背景技术
软件可以包括影响系统(诸如医疗保健系统)的安全和安全性的故障和漏洞。存在甚至以自动方式找到故障和发现漏洞的解决方案。模糊是找到程序中的故障的技术。其涉及利用可能触发故障的任意输入馈送程序。这样的模糊可以利用程序的知识或者有效程序输入的语法。已知的模糊器是AFL(American Fuzzy Lop)。在AFL中,要模糊的代码首先插装,使得AFL稍后可以跟踪覆盖并且因此引导模糊过程。Angr是还允许找到代码中的故障的符号执行引擎。钻孔机是Angr中的AFL的混合方法,其中,Angr被用于穿过困难块并且一旦这完成,AFL被用于实现大的代码覆盖。尽管模糊器可以被用于调试程序并且找到和校正错误,但是恶意用户可以使用找到的任何故障来损害程序。
US8918768公开了接收具有代码块的第一源代码以更新具有代码块的多个副本的第一源代码来防止相关攻击。代码块可以基于第一源代码执行一个或多个操作以用于执行。操作可以经由代码块的副本中的随机副本执行。基于经更新的第一源代码的第二源代码可以被生成以由处理器执行以产生与第一源代码相同的结果。
US8918768还公开了通过添加选择代码和两个或更多个经更新的代码块更新第一源代码,该更新导致经更新的第一源代码具有两个或更多个执行路径,每个执行路径等效于特定执行路径,选择代码包括选择变量,选择变量具有多个选择值之一,每个选择值表示执行路径之一,选择代码随机地选择执行路径之一,每个执行路径包括经更新的代码块中的单独一个,每个经更新的代码块具有代码块的副本和中性代码,中性代码引用选择值和选择变量之一,中性代码使用一个选择值和选择变量对变量执行操作以模糊经更新的第一源代码;并且基于经更新的第一源代码来生成第二源代码,其中,从第一源代码编译的第一可执行代码包括从特定可执行路径编译的指令,其中,从第二源代码编译的第二可执行代码包括从两个或更多个执行路径编译的指令,并且其中,第一可执行代码和第二可执行代码当由处理器执行时产生相同结果。
EP 1 410 140 B1公开了用于特定功能的多个执行路径。针对该模糊,多个执行路径中的每个实现相同结果,并且任何路径可以任选地在软件的执行期间随机选择。某些执行路径可以任选地并且优选地绝不到达。因此,任选地并且更优选地,“随机”选择实际上是加权的,以便某些路径更频繁地选择。该加权还模糊软件的功能并且通过增加猜测哪些分支绝不使用(“死亡代码”)的困难使分析更困难。
然而,将意识到,这些解决方案未提供针对由人类或特别地由自动化分析软件造成的外部分析的足够的保护。
发明内容
具有一种模糊计算机代码的经改进的方法将是有利的。
为了更好地解决该问题,提供了一种模糊计算机代码的计算机实施的方法,所述方法包括:
接收原始计算机程序,所述原始计算机程序包括具有计算机指令的多个代码块,所述原始计算机程序能够在输入空间内的输入数据上操作,所述原始计算机程序能用于当接收到所述输入数据时跟随通过所述多个代码块的执行路径,其中,所述输入空间是根据分割被分割成至少一个分段的,每个分段包括所述输入空间的子集,所述子集包含对应于相同执行路径的输入;并且
基于所述原始计算机程序来生成经更新的计算机程序,其中,生成所述经更新的计算机程序包括:
将多个经更新的代码块包括在所述经更新的计算机程序中;
生成选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述输入数据来选择所述多个经更新的代码块中的经更新的代码块;并且
将所述选择代码连同转换代码一起包括在所述经更新的计算机程序中,所述转换代码涉及执行点到由所述选择代码选择的所述经更新的块的转换,
其中,所述选择代码被配置为使得所述经更新的计算机程序根据经更新的分割对所述输入空间进行分割,所述经更新的分割与所述原始计算机程序的所述分割不同,并且
其中,所述原始计算机程序和所述经更新的计算机程序能用于至少生成相同结果,所述相同结果取决于所述输入数据。
通过包括通过根据程序的输入选择下一块使得所述输入空间的分割与所述原始程序不同的选择代码,分析器将发现找到所述计算机程序中的漏洞是更困难的。此外,所述输入空间可以通过根据期望添加尽可能多的这样的选择代码以及转换代码以任意复杂方式来分割。因此,所述程序结构的复杂性增加,使得找到关于所述程序的结构的完整信息更困难、更耗费时间或更内存密集。取决于分割的复杂性,对于分析器而言测试所述经更新的计算机程序的所有块和转换可能是困难的。此外,就程序结构已经被分析而言,解释所述程序结构可能变得更困难。此外,检测具有其中的故障或漏洞的代码块可能是更困难的。
由所述选择代码选择的经更新的代码块可以完全由所述输入数据确定。在这种情况下,分割表现为对于分析器是高度相关的。
所述方法可以包括:通过在所述经更新的计算机程序中包括调度器并且由经更新的转换代码替换多个转换代码来使所述计算机程序扁平化,所述多个转换代码涉及从第一代码块到第二代码块的转换,所述经更新的转换代码涉及从所述第一代码块到所述调度器的转换和从所述调度器到所述第二代码块的转换。所述调度器能够使执行路径的分析更困难。
所述调度器可以包括多个第一调度器代码块,其中,所述第一代码块包括所述选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述经更新的分割和涉及从所述第一代码块到所述第一调度器代码块的所述转换的所述经更新的转换代码根据所述输入数据在所述多个第一调度器代码块中间选择第一调度器代码块。这是将更多块添加到所述程序并且引入关于执行路径的复杂分割同时仍然考虑所述原始计算机程序的结构的适合的方式。
所述调度器可以包括多个第二调度器代码块,并且所述第一调度器代码块可以包括所述选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述经更新的分割和涉及从所述第一调度器代码块到所述第二调度器块的转换的所述经更新的转换代码根据所述输入数据在所述多个第二调度器代码块中间选择第二调度器代码块。两层块允许由所述调度器执行的调度过程包括到许多块之一的两个转换,这向所述分割添加另外的复杂性。
第一调度器块或第二调度器块可以包括涉及从其到所述第二代码块的转换的转换代码。因此,所述原始程序的代码在执行(一个或多个)相关调度器代码块之后恢复。
将多个经更新的代码块包括在所述经更新的计算机程序中的步骤可以包括通过以下操作根据所述原始程序的第一代码块来生成第一经更新的代码块:由根据模式变量的值引用所述第一变量或第二变量中的任一个变量的代码替换引用第一变量的所述第一代码块的代码,使得在所述模式变量的值指示正常模式的情况下,在所述第一经更新的代码块的出口上,所述第一变量的值与所述原始程序的所述第一代码块的出口上的所述第一变量的值相同,并且在所述模式变量的值指示中性模式的情况下,所述经更新的代码块的所述指令不影响所述第一变量。这允许使所述执行路径更复杂,因为有时块在中性模式中并且有时在正常模式中执行,其中,仅在正常模式中所述程序执行对于产生所述程序的结果相关的操作。
在所述模式变量的值指示中性模式的情况下,所述经更新的代码块的指令可以被配置为改变所述第二变量。这允许中性模式中的程序从外部看起来相关,因为其对变量具有影响。
涉及执行点到由所述选择代码选择的经更新的块的转换的转换代码可以被配置为利用具有指示所述中性模式的值的模式变量执行所述转换。以这种方式,无论哪个块由所述选择代码选择,都没有对程序的结果具有影响的变量受影响。
所述第一经更新的代码块可以包括转换代码,所述转换代码当所述模式变量的值指示中性模式时将所述模式变量设置为指示所述正常模式的值并且基于代码块的所存储的指示来执行所述执行点到地址的转换。这允许所述程序在已经执行中性模式中的第一经更新的代码块之后恢复其操作。
所述第一经更新的代码块可以包括所述调度器代码块中的至少一个调度器代码块,并且涉及从所述第一代码块到所述调度器的所述转换的所述经更新的转换代码可以被配置为引起利用具有指示所述中性模式的值的所述模式变量对所述至少一个调度器代码块的执行。以这种方式,所述调度器代码块仅执行调度操作,但是不改变对于程序的结果相关的程序变量。
所述第一经更新的代码块可以包括所述第一调度器代码块中的至少一个第一调度器代码块,并且所述第一调度器代码块中的所述至少一个第一调度器代码块可以被配置为在所述模式变量具有指示所述中性模式的值的情况下执行涉及从所述第一调度器代码块到所述第二调度器块的转换的所述转换代码,并且在所述模式变量具有指示所述正常模式的值的情况下操作对应于所述原始计算机程序的所述执行路径的转换代码。以这种方式,所述第一经更新的代码块可以是原始代码块的增强版本,并且可以根据所述模式变量来执行调度器功能或原始代码块的功能。
涉及从所述调度器到所述第二代码块的转换的经更新的转换代码可以被配置为引起利用具有指示所述正常模式的值的模式变量的第二代码块的执行。因此,正常操作可以在离开所述调度器时恢复。
将所述选择代码连同用于将执行点转移到由所述选择代码选择的所述经更新的块的转换代码一起包括在所述经更新的计算机程序中的步骤可以包括:识别原始转换代码,所述原始转换代码涉及来自所述原始程序的第一原始代码块和所述原始程序的第二原始代码块的所述执行点的转换;并且由涉及所述执行点到由所述选择代码选择的所述经更新的代码块的所述转换的所述转换代码替换所述原始转换代码,其中,所述后者转换代码包括用于存储所述第二原始代码块的标识的代码,以使得所述经更新的代码块中的一个经更新的代码块能够使用所存储的标识来执行到所述第二原始代码块的转换。这允许所述正常操作在所存储的块处恢复。
所述选择代码可以可操作以计算所述输入数据的至少部分的散列。这是取决于所述输入数据做出选择的一个适合的范例。
上文所公开的方法可以是计算机实施的。
根据另一方面,提供了一种包括指令的计算机程序,所述指令用于使得装置执行上文阐述的方法。所述计算机程序可以存储在计算机可读非瞬态存储介质上。
根据另一方面,提供了一种用于模糊计算机代码的系统,所述系统包括:
存储器,其被配置为存储原始计算机程序,所述原始计算机程序包括具有计算机指令的多个代码块,所述原始计算机程序能够在输入空间内的输入数据上操作,所述原始计算机程序能用于当接收到所述输入数据时跟随通过所述多个代码块的执行路径,其中,所述输入空间是根据分割被分割成至少一个分段的,每个分段包括所述输入空间的子集,所述子集包含对应于相同执行路径的输入;以及
控制单元,其被配置为执行以下步骤:
基于所述原始计算机程序来生成经更新的计算机程序,其中,生成所述经更新的计算机程序包括:
将多个经更新的代码块包括在所述经更新的计算机程序中;
生成选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述输入数据来选择所述多个经更新的代码块中的经更新的代码块;
将所述选择代码连同转换代码一起包括在所述经更新的计算机程序中,所述转换代码涉及执行点到由所述选择代码选择的所述经更新的块的转换,
其中,所述选择代码被配置为使得所述经更新的计算机程序根据经更新的分割对所述输入空间进行分割,所述经更新的分割与所述原始计算机程序的所述分割不同,并且
其中,所述原始计算机程序和所述经更新的计算机程序能用于至少生成相同结果,所述相同结果取决于所述输入数据。
本领域技术人员将意识到,本发明的上文所提到的实施例、实施方式和/或方面中的两个或更多个可以以任何被认为有用的方式组合。
附图说明
本发明的这些和其他方面根据在下文中所描述的实施例而显而易见并且将参考下文描述的实施得到阐述。在附图中,
图1示出了范例计算机程序的示图。
图2A示出了列出范例计算机程序中的边缘的表。
图2B示出了范例计算机程序中的边缘的另一表示。
图3示出了第一范例经更新的计算机程序的示图。
图4示出了第一范例经更新的计算机程序中的边缘的表示。
图5示出了第二范例经更新的计算机程序的示图。
图6示出了第二范例经更新的计算机程序中的边缘的表示。
图7示出了包括调度器的第三范例经更新的计算机程序的示图。
图8示出了调度器的第一范例的示图。
图9示出了基于调度器的第一范例的边缘的表示。
图10示出了调度器的第二范例的示图。
图11示出了基于调度器的第二范例的边缘的表示。
图12示出了模糊计算机代码的方法的流程图。
图13示出了基于原始计算机程序生成经更新的计算机程序的方法的流程图。
图14示出了包括经更新的计算机程序中的选择代码以及用于将执行点转移到由选择代码选择的经更新的块的转换代码的流程图。
图15示出了用于模糊计算机代码的系统的框图。
具体实施方式
将理解,用于描述本专利文档中的本公开的原理的各种实施例是仅通过图示的而不应当以任何方式被理解为限制本公开的范围。本领域技术人员可以理解,本公开的原理可以被实施在任何适合地布置的系统或设备中。
图1示出了范例计算机程序100的示图。程序包含多个代码块101,编号1至7。从一个块到另一块的转换借助于箭头指示。一些块总是转换到相同的下一块。例如,块1总是转换到块2。其他块可以转换到若干不同的下一块。例如,块6可以转换到块4或块7。这样的块6可以包括条件,例如借助于如果语句(if-statement),以决定块4和块7中的哪一个将是要执行的下一块。块还可以包含回路,这意指块可以重复若干次。对于块3情况是这样的。块之间的可能转换可以被称为边缘。附图还示出了运行时间存储器110的示图。计算机程序100可以在执行期间从表示程序变量111的存储器地址读取数据和将数据写入到表示程序变量111的存储器地址。
图2A示出了列出范例计算机程序100中的边缘的表。转换从在左列中所指示的块到相同行的右列中所指示的块是可能的。图2B示出了范例计算机程序中的边缘的另一表示。行指示转换来自哪个块,并且列指示转换要到哪个块。某个位置的V指示边缘从由行所指示的块到由列所指示的块存在。如将从这些示图观察到的,简单的范例程序100包含9个边缘。
图3示出了基于第一范例计算机程序100的第一范例经更新的计算机程序的示图。已经保留原始程序100的结构。然而,除编号1至7的块之外,程序300包含额外块A至V。此外,原始代码块303已经更新为除原始代码301之外,包括选择和转换代码302。附图还示出了具有由经更新的原始代码块303和一个或多个哑变量312引用的变量311的运行时间存储器310的示图。在经更新的计算机程序300的执行期间,选择代码取决于提供给计算机程序300的输入数据而选择额外块A至V之一。例如,计算机程序300的块1使用应用到输入数据的特定准则选择要么块A要么块B作为下一块。该准则可以是任意选择的,例如,选择代码可以在输入数据上应用散列,并且如果散列是奇数,则选择块A,或如果散列是偶数,则选择块B。块A和B可以包含未改变程序结果但是模糊程序的操作的一些代码。例如,块A和B可以包含操纵一些哑变量312的代码。此外,这些额外块包含转换代码以将程序的执行点转移到与原始程序100的块1相同的块:到块2。以这种方式,任意数目的额外块可以添加到原始程序,这在不改变结果的情况下使程序的结构复杂。
图4示出了第一范例经更新的计算机程序中的边缘的表示。如可以由图3和图4意识到的,第一范例经更新的计算机程序300中的边缘的数目是44个边缘,其显著地多于原始程序100的9个边缘。
图5示出了基于范例原始程序100的第二范例经更新的计算机程序500的示图。附图还示出了示出在第二范例经更新的计算机程序500的执行期间使用的变量中的一些的运行时间存储器510。运行时间存储器510可以包括变量511、哑变量512、模式变量513和下一块变量514。在第二范例经更新的计算机程序500中,现有块1至7已经修改以形成经更新的代码块501,使得这些块支持正常模式和中性模式。当前模式由模式变量513记忆。在正常模式中,代码块执行与原始程序100的对应代码块相同的功能。在中性模式中,未执行能够影响程序的结果或输出的操作。那可以通过确保例如在中性模式中程序的变量511未被引用来保证。例如,在中性模式中,一些哑变量512被引用用于读取和/或写入。通过使用指针算术,程序变量511或哑变量512可以通过执行涉及模式变量13的计算来引用。以这种方式,程序变量511或哑变量512的选择不需要涉及如果语句。经更新的块501被编程为在某些条件下将模式变量513设置为中性模式。这些条件可以在不同的实施方式中变化。在中性模式中,在经更新的块501中所提供的选择代码根据输入数据来选择多个块之一,并且执行执行点到中性模式中的所选择的块的转换。所选择的块在中性模式中执行而不改变程序变量511,并且任选地将值写入到一些哑变量512。代码块中的指令还决定下一块是否要在中性模式中或在正常模式中执行并且因此设置模式变量513。此外,如果下一块要在中性模式中执行,则选择代码应用于选择要在中性模式中执行的下一块。另一方面,如果下一块要在正常模式中执行,则根据原始程序100的执行路径,确定要在正常模式中执行的下一块应当是什么。在一些实施方式中,该下一块通过在正常模式中执行的先前块存储在运行时间变量514中。
图6示出了第二范例经更新的计算机程序500中的边缘的表示。如所示,在本范例中,任何块可以跳跃到任何下一块。这使边缘的数目等于块的数目的平方。在本范例中,这总计达49个边缘。
图7示出了包括调度器701的第三范例经更新的计算机程序700的示图。经更新的代码块702在范例图中编号1至7,这对应于原始计算机程序100的块1至7。边缘仅存在于调度器701与块702之间。在具有7个原始代码块的范例中,这总计达14个边缘。针对更大的程序,与扁平化之前的程序相比较,边缘703的数目可以在扁平化计算机程序中是更小的。此外,程序的执行路径可能更难以理解,这使分析程序更困难。
图8示出了可以使用在图7所图示的配置中的调度器801的第一范例的示图。调度器801包括多个调度器代码块802,其可以任选地在中性模式中执行一些代码,例如将值写入到哑变量。此外,每个调度器代码块802(在图8中标记A至G)可以被配置为以相同的方式执行执行点到下一代码块702(例如,图7中的1至7之一)的转换。此外,每个代码块702可以包括选择调度器代码块802之一的选择代码,以及执行执行点到所选择的调度器代码块的转换的转换代码。例如,程序代码块702可以将必须在正常模式中执行的下一块存储在临时变量中,使得调度器代码块可以引用临时变量并且执行到存储的下一代码块的转换。确保正确程序流的其他方式在本领域技术人员所能及的范围内。
图9示出了基于调度器801的第一范例的边缘的表示。执行程序的实质功能的代码块1至7具有到所有调度器代码块A至G的边缘,并且调度器代码块A至G具有到代码块1至7的边缘。这在该简化范例中导致98个边缘:实质代码块和调度器代码块的数目的积的两倍。
图10示出了调度器1001的第二范例的示图。第二调度器1001可以用作范例经更新的计算机程序700中的调度器701。调度器1001具有多个第一调度器代码块1002和多个第二调度器代码块1003。起源于节点A的边缘1004已经全部绘出。起源于其他代码块的边缘已经仅在图10中部分绘出,以便不使图模糊。调度器代码块1002和1003可以在中性模式中执行。第一调度器代码块1002包括根据输入数据来选择第二调度器代码块1003之一的选择代码,以及将执行点转换到第二调度器代码块1003中的所选择的一个的转换代码。第二调度器代码块1003包含将执行点转移到要执行的下一代码块702的转换代码。要执行的下一代码块702的标识可以存储在变量中,例如,在调用调度器之前由先前代码块702。
图11示出了基于调度器的第二范例的计算机程序的边缘的表示,其中,第二调度器1001代替计算机程序700中的调度器701。边缘存在于从程序代码块1到7至第一调度器代码块A到G;从第一调度器代码块A到G至第二调度器代码块H到N,和从第二调度器代码块H到N至程序代码块1到7。这提供边缘的总数,其可以被计算为程序代码块的数目和第一调度器代码块的数目的积,加上第一调度器代码块的数目和第二调度器代码块的数目的积,加上第二调度器代码块的数目和程序代码块的数目的积。在本范例中,这总计达7*7+7*7+7*7=343个边缘。
在上文所公开的所有实施例中,浓缩用于在程序流的开始模糊的块和边缘的数目是可能的。例如,这些模糊边缘中的多个可以在计算机代码的执行路径的开始插入。以这种方式,程序的分析器倾向于花费很多时间分析假边缘而甚至不到达对应于真实程序功能的边缘。
将关于图5和图6所公开的方法与关于图7至图11所公开的方法组合是可能的。图5示出了具有可以在正常模式中和在中性模式中操作的代码块的计算机程序500。在正常模式中,执行原始计算机程序100的对应块的功能。在中性模式中,一些备选指令被执行以模糊程序。可能的是,对代码块进行编程,使得在中性模式中,其执行调度器701的功能。原始计算机程序的代码块可以以这样的方式更新:在中性模式中,其执行调度器701、801或1001的代码块802、1002或1003之一的功能。这可能导致代码块的许多对之间的边缘,如图6所图示,而不必增加代码块的数目,但是使执行路径复杂得多。
图12示出了模糊计算机代码的方法的流程图。方法在接收具有计算机指令的原始计算机程序的步骤1201处开始。计算机程序可以具有源代码、汇编代码、二进制代码或任何形式的机器可读指令的形式。原始计算机程序包括具有计算机指令的多个代码块。例如,块可以被识别为子例程。然而,更小的块也可以在计算机代码中识别。机器代码中的任何跳跃指令可以被认为是代码块的结束,并且跳跃指令的目标地址可以被认为是代码块的开始。甚至要连续执行的指令的序列可以分成连续指令的块。因此,for循环(for-loop)可以被认为是代码块。将理解,分成代码块可以以若干不同方式完成。方法可以包括解析步骤以解析原始计算机程序来将原始计算机程序分成多个代码块。备选地,分成代码块可以给出为方法的额外输入。
原始计算机程序可对输入数据进行操作。通常,计算机程序接受某个输入空间内的任何输入数据。例如,计算机程序可以被配置为接收输入文件,或者可以被提供有一个或多个数值或文本字符串作为输入数据。由计算机程序接受的输入数据的类型通常由计算机程序本身定义。
此外,原始计算机程序可操作以在处理输入数据时跟随通过多个代码块的执行路径。该执行路径通常取决于输入路径,例如,由于执行在输入数据的特定值上有条件的跳跃的如果语句。以这种方式,输入空间根据分割被分割成至少一个分段,每个分段包括输入空间的子集,其包含对应于相同执行路径的输入。然而,执行路径不需要完全由输入数据确定。例如,外部参数,诸如时间或GPS位置或者伪随机生成器可以影响执行路径。然而,给定外部参数和随机值的某个集合,执行路径可以通过输入数据确定并且输入数据因此由对应执行路径分割。
在步骤1201中接收原始计算机程序并且任选地解析原始计算机程序以将原始计算机程序分成多个代码块之后,方法前进到步骤1202,并且经更新的计算机程序基于原始计算机程序来生成。原始计算机程序和经更新的计算机程序可操作以至少生成相同结果。该结果通常取决于输入数据。除了相同结果之外,程序还可以生成特定结果。例如,版本指示器可以输出以指示结果是否由原始计算机程序或经更新的计算机程序生成。经更新的计算机程序也可以具有源代码、汇编代码或二进制代码或任何其他形式的机器可读计算机指令的形式。经更新的计算机程序的格式(例如,计算机语言、源代码格式、机器代码格式或其他格式)可以与原始计算机程序的格式相同。例如,如果原始程序以源代码格式接收,则经更新的程序也可以采取源代码。然而,这些格式不需要相同。例如,如果方法由例如编译器执行,则方法可以并入在编译方法中并且经更新的程序可以采取可执行格式,例如,二进制格式。在这样的情况下,原始程序的执行路径将指代当原始程序的源代码将在没有所公开的模糊方法的情况下被编译时将产生的执行路径。
图13示出了基于原始计算机程序生成经更新的计算机程序的方法的流程图,即,图12的步骤1202的范例实施方式。在本公开中其他地方描述了任选的步骤1301。方法可以通过将多个经更新的代码块包括在经更新的计算机程序中在步骤1302处开始。这些经更新的代码块可以除了其他之外包含以下各项中的任何一项或多项:原始代码块的副本、原始代码块的修改版本和新代码块。在上文中已经关于范例计算机程序公开了这样的代码块的范例。
在步骤1303中,生成选择代码。该选择代码可以包括一个或多个计算机指令。选择代码在更新的计算机程序的执行期间能用于根据输入数据来选择多个经更新的代码块的经更新的代码块。在上文中已经公开了可能选择的若干范例。
在步骤1304中,选择代码连同转换代码一起被包括在经更新的计算机程序中,所述转换代码涉及将执行点到由选择代码选择的经更新的块的转换。例如,该转换代码可以包含对由选择代码选择的代码块的地址的跳跃。
选择代码和转换代码一起使得计算机程序跟随通过计算机程序的不同执行路径。即,由经更新的计算机程序执行的块的序列与由原始计算机程序执行的块的序列不同。特别地,在这些程序之间,执行路径取决于输入数据的方式是不同的。经更新的计算机程序根据与原始计算机程序的分割不同的经更新的分割对输入空间进行分割。
在高度简化范例中,考虑具有包括输入值i的输入数据和两个执行路径的原始计算机程序:第一执行路径用于小于5的输入值i,以及第二执行路径用于至少5的输入值i。因此,输入数据分割成两个分段,第一分段i<5并且第二分段i>=5。经更新的计算机程序可以具有例如四个执行路径:第一执行路径用于小于3的输入值i,第二执行路径用于至少3但是小于5的输入值i,第三执行路径用于至少5但是小于7的输入值i,以及第四执行路径用于至少7的输入值i。因此,输入数据分割成四个分段,第一分段i<3,第二分段3<=i<5,第三分段5<=i<7,以及第四分段i>=7。因此,输入空间与由经更新的计算机程序不同地由原始计算机程序分割。
图14示出了包括经更新的计算机程序中的选择代码以及用于将执行点转移到由选择代码选择的经更新的块的转换代码的方法的流程图,即,图13的步骤1304的范例实施方式。首先,在步骤1401中,识别原始转换代码,其涉及来自原始程序的第一原始代码块和原始程序的第二原始代码块的执行点的转换。这样的转换代码可以被检测作为“如果”语句、跳跃、调用的部分。例如,这样的转换代码可以明确地以程序的源代码编写,或者由优化编译器包括。因此,识别步骤1401可以可操作以解析原始程序的源代码或原始程序的机器代码(汇编或二进制代码),无论哪个是可用的。机器代码可以揭示比源代码更详细的块结构,但是可以使用任意一种代码。
接下来,在步骤1402中,原始转换代码可以由涉及执行点到由选择代码所选择的经更新的代码块的转换的转换代码替换。优选地,该替换转换代码包括用于存储第二原始代码块的标识的代码。第二原始代码块实际上是需要执行的下一块,以便保证相同的结果。然而,在经更新的计算机程序中,在执行该下一块之前,至少执行由选择代码选择的块,因为替换转换代码引起由选择代码选择的经更新的代码块的执行。通过存储第二原始代码块的标识,经更新的代码块可以读取存储的标识并且在第二原始代码块处恢复操作。例如,下一代码块可以存储在全局变量中,使得任何经更新的代码块可以访问其。将理解,第二原始代码块的标识通常意指执行第二原始代码块的功能的经更新的计算机程序中的任何代码块的标识。经更新的计算机程序中的该代码块可以具有额外代码,包括额外选择代码或替换转换代码,以模糊程序。
在一些实施方式中,由选择代码选择的经更新的代码块可以完全由输入数据确定。在这种情况下,分割看起来对于分析器是高度相关的。备选地,由选择代码选择的经更新的代码块可以由输入数据部分地确定并且还可以取决于例如随机值或另一外部变量(当前时间、从位置传感器接收的位置信息等)。
参考图12和图13,生成更新的计算机程序的步骤1202可以包括步骤1301:通过在经更新的计算机程序中包括调度器701使计算机程序扁平化。调度器可以包括一个或多个经更新的代码块。此外,扁平化包括由经更新的转换代码替换多个转换代码,所述转换代码涉及从第一代码块到第二代码块的转换,所述经更新的转换代码涉及从第一代码块到调度器的转换和从调度器到第二代码块的转换。实施这一点的一种可能性是通过将涉及从第一代码块到调度器的转换的转换代码配置为存储第二代码块的指示。涉及从调度器到第二代码块的转换的转换代码可以检索第二代码块的指示,使得执行在第二代码块处被恢复。
调度器701可以包括多个代码块,其可以涉及取决于输入数据从调度器代码块到调度器代码块的一个或多个转换,以创建调度器内的复杂执行路径。这些调度器代码块可以在中性模式中操作并且任选地进行计算和/或将数据写入到一些哑变量,以模糊经更新的计算机程序。
例如,其中,调度器801、1001包括多个第一调度器代码块802、1002。这些调度器代码块是被包括在经更新的计算机程序中的经更新的代码块的部分。这些调度器代码块可以在中性模式中操作,如上文所讨论的。包含到第一调度器代码块的转换的第一代码块包括选择代码,其在经更新的计算机程序的执行期间可操作以根据经更新的分割取决于输入数据而在多个第一调度器代码块中间选择第一调度器代码块。第一代码块还包括实施从第一代码块到因此选择的第一调度器代码块的转换的转换代码。
第一调度器代码块可以包括用于实施从第一调度器到第二代码块的转换的转换代码。这可以例如通过引用第二代码块的存储的指示来实施。然而,在第二代码块处恢复执行的其他实施方式是同样可能的。此外,可能的是,第一调度器代码块或通常任何调度器代码块选择并转移对下一调度器代码块的执行。下一调度器代码块可以要么实施到第二代码块的转换要么选择并转移对另一下一调度器代码块的执行等等。
例如,参考图10,调度器1001可以包括如上文所描述的多个第一调度器代码块1002,以及多个第二调度器代码块1003。第一调度器代码块1002可以包括选择代码,其在经更新的计算机程序的执行期间被配置为根据经更新的分割取决于输入数据而在多个第二调度器代码块1003中间选择特定第二调度器代码块。此外,第一调度器代码块可以包括涉及从相应第一调度器代码块到所选择的第二调度器块的转换的转换代码。第二调度器代码块可以包括涉及从相应第二调度器代码块到第二代码块的转换的转换代码。备选地,第二调度器代码块可以包括涉及从第二调度器代码块到多个第三调度器代码块中的所选择的一个的转换的转换代码等等,直到调度器代码块在第二代码块处恢复操作。
参考图13,将多个经更新的代码块包括在经更新的计算机程序1302中的步骤1302可以包括根据原始程序的第一代码块生成第一经更新的代码块。例如,这可以通过用取决于模式变量的值而引用第一变量或第二变量中的任一个的代码替换引用第一变量的第一代码块(101)的代码完成。模式变量可以指示至少两个模式:正常模式和中性模式。正常模式指示对变量的操作要如在原始计算机程序中执行,而中性模式指示模糊操作要被执行,并且无不期望的副作用应当由模糊操作生成。这可以通过代码实施,该代码操作使得在模式变量的值指示正常模式的情况下,在第一经更新的代码块501中,在第一变量的值上执行操作,其与由原始程序的第一代码块101执行的第一变量上的操作相同。此外,在模式变量的值指示中性模式的情况下,经更新的代码块501的指令不影响第一变量。在模式变量的值指示中性模式的情况下,经更新的代码块501的指令可以改变引用的第二变量。备选地,经更新的代码块501可以读取第二变量的值。改变第二变量帮助模糊程序,因为模糊器可以将分析集中在将值写入到变量的代码块上。
涉及执行点到由选择代码选择的第一经更新的代码块501的转换的转换代码可以被配置为利用具有指示中性模式的值的模式变量执行转换。因此,由选择代码所选择的第一经更新的代码块501可以在中性模式中执行。因此,由于选择代码选择多个经更新的代码块之一,因此哪一个由选择代码选择没关系,因为所选择的代码块将无论如何在中性模式中执行,使得其不产生副作用。
第一经更新的代码块501可以包括转换代码,其当模式变量的值指示中性模式时,将模式变量设置为指示正常模式的值并且基于代码块的所存储的指示执行执行点到地址的转换。例如,该存储的指示已经由在正常模式中执行的先前代码块存储。
调度器代码块和执行原始计算机程序的功能的代码块可以部分或完全地是相同块。例如,代码块可以在中性模式中执行调度器代码块的功能,并且在正常模式中执行正常代码的功能。支持正常模式和中性模式的这样的代码块还可以通过在其中包括用于建立调度器代码块802、1002、1003之一的代码修改。该调度器代码可以取决于模式变量而执行,使得调度器代码在中性模式中执行。因此,涉及从上文所提到的第一代码块到调度器801、1001的转换的经更新的转换代码可以被配置为引起有具有指示中性模式的值的模式变量的所选择的调度器代码块802、1002、1003的执行。在中性模式中,调度器代码块执行如由调度器代码块的结构规定的转换,其范例在本文中公开,并且可以任选地将数据写入到哑变量。涉及从调度器代码块到第二(非调度器)代码块的转换的经更新的转换代码被配置为引起有具有指示正常模式的值的模式变量的第二代码块的执行。在正常模式中,相同代码块不执行调度器功能,而是执行原始计算机程序的对应代码块的功能。此外,在正常模式中,相同代码块可以存储下一块以在正常模式中执行并且执行到调度器的转换,将模式变量设置为中性模式。
参考图10,多层调度器可以通过方法插入到经更新的计算机程序中。这样的多层调度器包括第一调度器代码块和第二调度器代码块,如上文所公开的。第一经更新的代码块501和第二调度器代码块1002可以组合成单个代码块,其中,得到的经更新的代码块被配置为如果模式变量具有指示中性模式的值,则执行包括从第一调度器代码块1002到第二调度器代码块1003的转换的转换代码。然而,该得到的经更新的代码块被配置为如果模式变量具有指示正常模式的值,则执行对应于原始计算机程序703的执行路径的转换代码。将理解,对应于原始计算机程序的执行路径的该转换代码可以涉及到调度器的转换,其跟随有根据原始计算机程序的执行路径的从调度器到下一代码块的转换。
图15示出了用于模糊计算机代码的系统1500的框图。系统可以被实施为计算系统,例如,工作站或计算机服务器、或分布式服务器系统。系统1500包括存储器1501,其可以被实现为任何存储设备,诸如RAM、闪存、磁盘、或其他类型的存储器。系统还可以包括通信设备1503,诸如有线或无线网络适配器或到用户输入设备或外部存储介质的接口、或用户输入设备本身。通信设备可以包括触摸屏、显示器、和/或指针设备,诸如鼠标。通信设备1503可以任选地被用于控制系统1500的操作,诸如触发方法的执行,或向系统提供原始计算机程序,或输出所生成的经更新的计算机程序。
系统1500还包括控制单元1502,诸如计算机处理器或多个处理器。控制单元1502控制系统1500的操作,包括存储器1501和任选通信设备1503。
特别地,控制单元1502可以控制以经由通信设备1503接收原始计算机程序并且将原始计算机程序存储在存储器1501中。同样地,存储器1501被配置为存储原始计算机程序,其包括具有计算机指令的多个代码块,原始计算机程序可在输入空间内的输入数据上操作,原始计算机程序可操作以在接收输入数据时跟随通过多个代码块的执行路径,其中,输入空间根据分割被分割成至少一个分段,每个分段包括输入空间的子集,其包含对应于相同执行路径的输入。
控制单元1502还被配置为控制以执行用于模糊计算机程序的方法的任何变型,如上文所描述的。例如,控制单元控制以基于原始计算机程序来生成经更新的计算机程序。控制单元可以被配置为将经更新的计算机程序存储在存储器1501中和/或经由通信设备1503输出经更新的计算机程序。控制单元1502可以被配置为通过以下各项生成经更新的计算机程序:将多个经更新的代码块包括在经更新的计算机程序中;生成选择代码,其可操作以在经更新的计算机程序的执行期间取决于输入数据而选择多个经更新的代码块中的经更新的代码块;并且将选择代码连同转换代码一起包括在经更新的计算机程序中,所述转换代码涉及将执行点转换到由选择代码选择的经更新的块,其中,选择代码被配置为使得经更新的计算机程序根据经更新的分割对输入空间进行分割,经更新的分割与原始计算机程序的分割不同,并且其中,原始计算机程序和经更新的计算机程序可操作以至少生成相同结果,该相同结果取决于输入数据。
尽管已经借助于说明的范例描述了本公开,但是可以向本领域技术人员建议各种改变和修改。应预期,本公开涵盖如落在所附权利要求的范围内的这样的改变和修改。
将意识到,本发明适用于适于使本发明付诸实践的计算机程序,特别是在载体上或载体中的计算机程序。该程序可以采取源代码、目标代码、代码中间源和目标代码的形式,诸如部分编译的形式,或者适于使用在根据本发明的方法的实施方式中的任何其他形式。还将意识到,此类程序可以具有许多不同的架构设计。例如,实施根据本发明的方法或系统的功能的程序代码可以被细分为一个或多个子例程。在这些子例程中间分配功能的许多不同方式对于技术人员而言将是显而易见的。子例程可以一起存储在一个可执行文件中,以形成一个独立的程序。这样的可执行文件可以包括计算机可执行指令,例如,处理器指令和/或解释器指令(例如,Java解释器指令)。备选地,一个或多个或所有子例程可以被存储在至少一个外部库文件中,并且静态地或动态地(例如,在运行时)与主程序链接。主程序包含对子例程中至少一个的至少一个调用。子例程还可以包括彼此的调用。与计算机程序产品有关的实施例包括与本文阐述的方法中的至少一个方法的每个处理步骤相对应的计算机可执行指令。这些指令可以细分为子例程和/或存储在可以静态或动态链接的一个或多个文件中。与计算机程序产品有关的另一实施例包括与本文阐述的系统和/或产品中至少一个的每个模块相对应的计算机可执行指令。这些指令可以细分为子例程和/或存储在可以静态或动态链接的一个或多个文件中。
计算机程序的载体可以是能够承载程序的任何实体或设备。例如,载体可以包括存储介质,诸如ROM或RAM存储器、或数据存储盘或闪盘驱动器。另外,载体可以是可传输的载体,诸如电或光信号,其可以经由电缆或光缆或通过无线电或其他模块来传达。当程序以此类信号实现时,载体可以由此类线缆或其他设备或模块构成。备选地,载体可以是其中嵌入程序的集成电路,该集成电路适于执行相关方法或在相关方法的执行中使用。
应当注意,上文所提到的实施例图示而不是限制本发明,并且本领域的技术人员将能够在不脱离权利要求书的范围的情况下设计许多备选实施例。在权利要求中,被放置在圆括号之间的任何附图标记不应当被解释为对权利要求的限制。动词“包括”和其词形变化的使用不排除除权利要求中陈述的那些外的元件或步骤的存在。在元件前面的词语“一”或“一个”不排除多个这样的元件的存在。本发明可以借助于包括若干不同的元件的硬件并且借助于适合地编程的计算机来实施。在列举了若干模块的设备权利要求中,可以通过硬件的同一个项实现这些模块中的若干。尽管在互不相同的从属权利要求中记载了特定措施,但是这并不指示不能有利地使用这些措施的组合。
Claims (15)
1.一种模糊计算机代码的计算机实施的方法,所述方法包括:
接收(1201)原始计算机程序,所述原始计算机程序包括具有计算机指令的多个代码块,所述原始计算机程序能够在输入空间内的输入数据上操作,所述原始计算机程序能用于当接收到所述输入数据时跟随通过所述多个代码块的执行路径,其中,所述输入空间是根据分割被分割成至少一个分段的,每个分段包括所述输入空间的子集,所述子集包含对应于相同执行路径的输入;并且
基于所述原始计算机程序来生成(1202)经更新的计算机程序,其中,生成所述经更新的计算机程序包括:
将多个经更新的代码块包括(1302)在所述经更新的计算机程序中;
生成(1303)选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述输入数据来选择所述多个经更新的代码块中的经更新的代码块;并且
将所述选择代码连同转换代码一起包括(1304)在所述经更新的计算机程序中,所述转换代码涉及执行点到由所述选择代码选择的所述经更新的块的转换,
其中,所述选择代码被配置为使得所述经更新的计算机程序根据经更新的分割对所述输入空间进行分割,所述经更新的分割与所述原始计算机程序的所述分割不同,并且
其中,所述原始计算机程序和所述经更新的计算机程序能用于至少生成相同结果,所述相同结果取决于所述输入数据。
2.根据权利要求1所述的方法,还包括:
通过在所述经更新的计算机程序中包括调度器(701)并且用经更新的转换代码替换多个转换代码来使所述计算机程序扁平化(1301),所述多个转换代码涉及从第一代码块到第二代码块的转换,所述经更新的转换代码涉及从所述第一代码块到所述调度器的转换和从所述调度器到所述第二代码块的转换。
3.根据权利要求2所述的方法,
其中,所述调度器(801、1001)包括多个第一调度器代码块(802、1002),
其中,所述第一代码块包括所述选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述经更新的分割和涉及从所述第一代码块到所述第一调度器代码块的所述转换的所述经更新的转换代码根据所述输入数据在所述多个第一调度器代码块中间选择第一调度器代码块。
4.根据权利要求3所述的方法,
其中,所述调度器(1001)还包括多个第二调度器代码块(1003),并且
其中,所述第一调度器代码块(1002)包括所述选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述经更新的分割和涉及从所述第一调度器代码块到所述第二调度器块的转换的所述经更新的转换代码根据所述输入数据在所述多个第二调度器代码块(1003)中间选择第二调度器代码块。
5.根据权利要求3或4所述的方法,其中,所述第一调度器块或所述第二调度器代码块包括涉及从其到所述第二代码块的转换的转换代码。
6.根据权利要求1、3或4所述的方法,其中,将多个经更新的代码块包括在所述经更新的计算机程序(1302)中包括通过以下操作根据所述原始程序的第一代码块来生成第一经更新的代码块:
用根据模式变量的值引用所述第一变量或第二变量中的任一个变量的代码替换引用第一变量的所述第一代码块(101)的代码,使得
在所述模式变量的值指示正常模式的情况下,在所述第一经更新的代码块(501)的出口上,所述第一变量的值与所述原始程序的所述第一代码块(101)的出口上的所述第一变量的值相同,并且
在所述模式变量的值指示中性模式的情况下,所述经更新的代码块(501)的所述指令不影响所述第一变量。
7.根据权利要求6所述的方法,其中,在所述模式变量的值指示中性模式的情况下,所述经更新的代码块(501)的所述指令改变所述第二变量。
8.根据权利要求6所述的方法,其中,涉及执行点到由所述选择代码选择的所述第一经更新的代码块(501)的转换的所述转换代码被配置为利用具有指示所述中性模式的值的所述模式变量来执行所述转换。
9.根据权利要求6所述的方法,其中,所述第一经更新的代码块(501)包括转换代码,所述转换代码当所述模式变量的值指示中性模式时将所述模式变量设置为指示所述正常模式的值并且基于代码块的所存储的指示来执行所述执行点到地址的转换。
10.根据从属于权利要求3的权利要求6所述的方法,其中,所述第一经更新的代码块(501)包括所述调度器代码块(802、1002、1003)中的至少一个调度器代码块,并且其中,涉及从所述第一代码块到所述调度器(801、1001)的所述转换的所述经更新的转换代码被配置为引起利用具有指示所述中性模式的值的所述模式变量对所述至少一个调度器代码块(802、1002、1003)的执行。
11.根据从属于权利要求4的权利要求6所述的方法,其中,所述第一经更新的代码块(501)包括所述第一调度器代码块(1002)中的至少一个第一调度器代码块,并且其中,所述第一调度器代码块(1002)中的所述至少一个第一调度器代码块被配置为:在所述模式变量具有指示所述中性模式的值的情况下执行涉及从所述第一调度器代码块(1002)到所述第二调度器代码块(1003)的转换的所述转换代码,并且在所述模式变量具有指示所述正常模式的值的情况下操作对应于所述原始计算机程序(703)的所述执行路径的转换代码。
12.根据从属于权利要求3的权利要求6所述的方法,其中,涉及从所述调度器(801、1001)到所述第二代码块的所述转换的所述经更新的转换代码被配置为引起利用具有指示所述正常模式的值的所述模式变量对所述第二代码块的执行。
13.根据权利要求1所述的方法,其中,将所述选择代码连同用于将执行点转移到由所述选择代码选择的所述经更新的块的转换代码一起包括(1304)在所述经更新的计算机程序中的步骤包括:
识别(1401)原始转换代码,所述原始转换代码涉及所述执行点从所述原始程序的第一原始代码块和所述原始程序的第二原始代码块进行的转换;并且
用涉及所述执行点到由所述选择代码选择的所述经更新的代码块的所述转换的所述转换代码替换(1402)所述原始转换代码,其中,所述转换代码包括用于存储所述第二原始代码块的标识的代码,以使得所述经更新的代码块中的一个经更新的代码块能够使用所存储的标识来执行到所述第二原始代码块的转换。
14.一种包括指令的计算机程序,所述指令用于使装置执行根据权利要求1所述的方法。
15.一种用于模糊计算机代码的系统,所述系统包括:
存储器(1501),其被配置为存储原始计算机程序,所述原始计算机程序包括具有计算机指令的多个代码块,所述原始计算机程序能够在输入空间内的输入数据上操作,所述原始计算机程序能用于当接收到所述输入数据时跟随通过所述多个代码块的执行路径,其中,所述输入空间是根据分割被分割成至少一个分段的,每个分段包括所述输入空间的子集,所述子集包含对应于相同执行路径的输入;以及
控制单元(1502),其被配置为控制执行以下步骤:
基于所述原始计算机程序来生成经更新的计算机程序,其中,生成所述经更新的计算机程序包括:
将多个经更新的代码块包括在所述经更新的计算机程序中;
生成选择代码,所述选择代码能用于在所述经更新的计算机程序的执行期间根据所述输入数据来选择所述多个经更新的代码块中的经更新的代码块;
将所述选择代码连同转换代码一起包括在所述经更新的计算机程序中,所述转换代码涉及执行点到由所述选择代码选择的所述经更新的块的转换,
其中,所述选择代码被配置为使得所述经更新的计算机程序根据经更新的分割对所述输入空间进行分割,所述经更新的分割与所述原始计算机程序的所述分割不同,并且
其中,所述原始计算机程序和所述经更新的计算机程序能用于至少生成相同结果,所述相同结果取决于所述输入数据。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP18213733.1A EP3671497A1 (en) | 2018-12-18 | 2018-12-18 | Protected processing of operations |
EP18213733.1 | 2018-12-18 | ||
PCT/EP2019/084533 WO2020126711A1 (en) | 2018-12-18 | 2019-12-11 | Protected processing of operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113439271A true CN113439271A (zh) | 2021-09-24 |
CN113439271B CN113439271B (zh) | 2024-05-31 |
Family
ID=
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101084478A (zh) * | 2004-12-22 | 2007-12-05 | Lm爱立信电话有限公司 | 为计算机程序代码加水印 |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
US20100107245A1 (en) * | 2008-10-29 | 2010-04-29 | Microsoft Corporation | Tamper-tolerant programs |
US20140165030A1 (en) * | 2012-12-06 | 2014-06-12 | Apple Inc. | Methods and apparatus for correlation protected processing of data operations |
EP3012762A1 (en) * | 2014-10-24 | 2016-04-27 | Thomson Licensing | Control flow graph flattening device and method |
WO2018050335A1 (en) * | 2016-09-15 | 2018-03-22 | Telefonaktiebolaget Lm Ericsson (Publ) | Efficient obfuscation of program control flow |
WO2018219933A1 (en) * | 2017-06-01 | 2018-12-06 | Telefonaktiebolaget Lm Ericsson (Publ) | Lightweight dispatcher for program control flow flattening |
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101084478A (zh) * | 2004-12-22 | 2007-12-05 | Lm爱立信电话有限公司 | 为计算机程序代码加水印 |
CN101689232A (zh) * | 2007-06-29 | 2010-03-31 | 艾利森电话股份有限公司 | 对计算机程序代码的执行轨迹进行模糊化 |
US20100107245A1 (en) * | 2008-10-29 | 2010-04-29 | Microsoft Corporation | Tamper-tolerant programs |
US20140165030A1 (en) * | 2012-12-06 | 2014-06-12 | Apple Inc. | Methods and apparatus for correlation protected processing of data operations |
EP3012762A1 (en) * | 2014-10-24 | 2016-04-27 | Thomson Licensing | Control flow graph flattening device and method |
WO2018050335A1 (en) * | 2016-09-15 | 2018-03-22 | Telefonaktiebolaget Lm Ericsson (Publ) | Efficient obfuscation of program control flow |
WO2018219933A1 (en) * | 2017-06-01 | 2018-12-06 | Telefonaktiebolaget Lm Ericsson (Publ) | Lightweight dispatcher for program control flow flattening |
Also Published As
Publication number | Publication date |
---|---|
US20220058244A1 (en) | 2022-02-24 |
WO2020126711A1 (en) | 2020-06-25 |
EP3671497A1 (en) | 2020-06-24 |
EP3899761A1 (en) | 2021-10-27 |
US11783013B2 (en) | 2023-10-10 |
EP3899761B1 (en) | 2022-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9146715B1 (en) | Suppression of table of contents save actions | |
US8726255B2 (en) | Recompiling with generic to specific replacement | |
US10698668B1 (en) | Custom code transformations during compilation process | |
US9250875B1 (en) | Table of contents pointer value save and restore placeholder positioning | |
US20020013938A1 (en) | Fast runtime scheme for removing dead code across linked fragments | |
US20060294503A1 (en) | Code coverage analysis | |
CN110825386B (zh) | 代码的编译方法和装置、存储介质 | |
EP3264274B1 (en) | Input discovery for unknown program binaries | |
US20100275188A1 (en) | Intermediate Language Representation and Modification | |
AU2016396782A1 (en) | Load module compiler | |
US9104869B2 (en) | Systems and methods for defeating malware with polymorphic software | |
KR101837337B1 (ko) | 네이티브코드에서 기본 블록들 간의 모든 상대주소 점프를 간접 점프로 변환하여 분석도구의 cfg 생성을 방해하는 방법 및 장치 | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
JP2022502723A (ja) | スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 | |
JP2007304726A (ja) | プログラム難読化装置、難読化方法及び難読化プログラム | |
CN113439271B (zh) | 受保护操作处理 | |
CN113439271A (zh) | 受保护操作处理 | |
Nurmukhametov et al. | Application of compiler transformations against software vulnerabilities exploitation | |
CN107506644B (zh) | 动态生成代码中隐式常数威胁的安全保护方法 | |
US20150113251A1 (en) | Systems and Methods for Register Allocation | |
US20200012581A1 (en) | Method for Semantic Preserving Transform Mutation Discovery and Vetting | |
CN110147238B (zh) | 一种程序编译方法、装置及系统 | |
CN113050948A (zh) | 动态库优化方法、装置、设备及存储介质 | |
JP2009258796A (ja) | プログラム開発装置及びプログラム開発方法 | |
Bazhenov et al. | Methodology of software code decomposition analysis |
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 |