用于通过将计算机程序的控制流表示为数据来混淆计算机程序的系统、方法和存储介质技术方案

技术编号:29956514 阅读:21 留言:0更新日期:2021-09-08 09:04
公开了用于通过将计算机程序的控制流表示为不是源代码的数据来混淆计算机程序的系统、方法和存储介质。示例性实施方式可以:接收计算机程序的源代码;解析源代码;提取源代码的控制流;使用数学建模语言将控制流的至少一部分表示为控制流模型;将控制流模型存储为表示程序的控制流并且是不可执行代码的控制流数据;以及从源代码中移除控制流的至少一部分,以由此混淆源代码的控制流并且致使源代码更能抵抗篡改。更能抵抗篡改。更能抵抗篡改。

【技术实现步骤摘要】
【国外来华专利技术】用于通过将计算机程序的控制流表示为数据来混淆计算机程序的系统、方法和存储介质


[0001]本公开涉及用于通过将计算机程序的控制流表示为不是可执行代码的数据来混淆计算机程序的系统、方法和存储介质。

技术介绍

[0002]计算机软件通常以高级语言编写,所述高级语言必须编译成低级目标代码以便在计算机或其他处理器上执行。高级计算机语言使用与简明语言紧密相似的命令用词,因此其可以被开发人员容易地理解。目标代码通常是指机器可执行代码,其是软件编译器的输出,其将源代码从人类可读的代码转化为机器可执行代码。
[0003]软件程序的低级结构通常根据其数据流和控制流来描述。数据流是对变量连同对变量执行的操作的描述。控制流是在执行期间控制如何在程序中从块跳到块的描述。例如,If

Then

Else语句包括要对输入和控制流执行的两个操作,其基于条件变量将执行引导到一个操作或另一个操作。
[0004]篡改是指以违背原作者意愿的方式改变计算机软件。常规上,计算机软件程序已经具有编码在其中的限制,诸如需要密码访问、防止复制或仅允许软件执行预定次数或达某持续时间。然而,因为用户经常可以访问软件代码,所以已经找到了识别管理这些限制的代码的方法。一旦已经识别出这种编码,经验丰富的用户就能够通过修改软件代码来克服这些程序限制。此外,难以防止用户使用诸如调试器之类的工具来在计算机软件执行时监控该计算机软件。这允许用户获得完整的数据流和控制流。
[0005]已经进行了许多尝试来通过“混淆”代码防止攻击,例如使软件代码的组织更加混乱,并因此更难以理解和修改。软件是商业上可得的,以便以诸如以下方式“混淆”代码中的源:

利用随机字符串全局替换变量名。例如,变量名“SecurityCode(安全代码)”的每次出现可以利用字符串“1xcd385mxc”来替换,使得攻击者更难以识别他正在寻找的变量;

删除评论和其他文档;以及

移除源级结构缩进,诸如循环体的缩进,以使循环更难以阅读。
[0006]此外,已知混淆计算机程序的控制流。例如,美国专利No. 5,748,741描述了一种通过人为构建“复杂墙”来混淆计算机软件的方法。该“复杂墙”优选地是“级联(cascade)”结构,其中每个输出取决于所有输入。原始程序通过与此级联合并、通过将两者交织在一起而受到保护。意图是使攻击者很难再次将原始程序与复杂墙分开,其是对原始程序进行更改所必要的。这种方法具有限制,诸如大的代码扩展。程序的控制流是用于理解程序正在做什么的最重要和容易获得的资产(asset)之一。
[0007]虽然常规的混淆技术可能试图隐藏程序的控制流,但控制流语句仍然存在于源代码中,其中其可以是未覆盖的。此外,程序的控制流是一种固定资产,其在程序已经部署后无法改变。因此,用于混淆控制流的已知机制并不总是有效的。
[0008]如上所述,期望防止用户对计算机程序进行小的、有目的的改变,诸如覆盖演示软件中的复制保护和超时。还必要的是保护计算机软件免受逆向工程的影响,该逆向工程可以用于识别软件算法或模型内包含的有价值的知识产权。例如,在硬件设计中,专用集成电路(ASIC)单元库的供应商通常提供与硬件对应的精确软件模型,使得用户可以执行准确的系统仿真。因为这样的公开通常提供足够的细节来揭示实际的单元设计,所以期望保护软件模型的内容。
[0009]因此,存在对于一种方法和系统的需要,该方法和系统通过从可执行代码中移除控制流而不引入不切实际的开销,使计算机软件更能抵抗篡改和逆向工程。

技术实现思路

[0010]本文中描述的实施方式移除或隐藏与控制流相关的源代码并将控制流表达为不是源代码的数据。例如在运行时间,可以由执行引擎使用该数据来确定程序的控制流。因为源代码中的控制流语句被移除或隐藏,所以攻击者从源代码中确定控制流变得非常困难、几乎不可能,并因此软件更安全地防御攻击。
[0011]一些实施方式将程序的控制流编码为修改的佩特里(Petri)网,然后将其表示为可在运行时间应用以执行程序的数据。佩特里网是众所周知的用于描述各种系统的模型,以及下面将对其进行更详细的描述。本文中描述的实施方式包括用于将计算机程序的过程流编码为数学模型(诸如佩特里网)的新颖过程,以及用于将模型转变为不是源代码的控制流数据的新颖过程。由于控制流数据表示实际的控制流,因此可以移除源代码中的控制流语句,使得程序本身的源代码不再具有嵌入在其中的任何控制流。
[0012]当程序的控制流变换为控制流数据时,执行一种混淆形式,从而有效地从程序中移除控制流语句。这使得攻击者对代码进行逆向工程更加困难。由于控制流被变换为数据,因此许多附加的混淆可能性可以应用于控制流数据,诸如使用现有编码技术(例如AES)对控制流数据进行变换或编码,或远离实际程序存储控制流数据。
[0013]当从程序中提取控制流时,可以接着对其进行动态修改。其不再是在程序已经部署后无法改变的固定资产。该修改可以发生在本地(自修改代码)或在服务器上。可以在没有控制流语句的情况下分发程序,并且可以稍后接收控制流数据,例如在运行时间或刚好在运行时间之前,和或在需要时通过不同的通道接收控制流数据。根据下面的描述,这对本领域技术人员来说将变得显而易见。
[0014]本公开的一个方面涉及一种被配置用于通过将计算机程序的控制流表示为不是源代码的数据来混淆计算机程序的系统。该系统可以包括由机器可读指令配置的一个或多个硬件处理器。(一个或多个)处理器可以被配置为接收计算机程序的源代码。源代码可以包括程序的多个计算功能和程序的控制流,该程序的控制流定义顺序,计算功能以该顺序执行。(一个或多个)处理器可以被配置为解析源代码。(一个或多个)处理器可以被配置为提取源代码的控制流。(一个或多个)处理器可以被配置为使用数学建模语言将控制流的至少一部分表示为控制流模型。建模语言可以包括用于表示在计算机程序的执行期间发生的事件的事件元素、表示在计算机程序的执行期间发生的条件的条件元素以及链接到用于执行功能的源代码的部分的执行元素的构成。弧可用于将事件元素与条件元素和执行元素链接在一起。令牌与条件元素和执行元素相关联以表示计算机程序的执行的状态。(一个或多
个)处理器可以被配置为将控制流模型存储为表示程序的控制流并且不是可执行代码的控制流数据。(一个或多个)处理器可以被配置为从源代码中移除控制流的至少一部分,以由此混淆源代码的控制流并致使源代码更能抵抗篡改。
[0015]本公开的另一方面涉及一种用于通过将计算机程序的控制流表示为不是源代码的数据来混淆计算机程序的方法。该方法可以包括接收计算机程序的源代码。源代码可以包括程序的多个计算功能和程序的控制流,该程序的控制流定义顺序,计算功能以该顺序执行。该方法可以包括解析源代码。该方法可以包括提取源代码的控制流。该方法可以包括使用数学建模语言将控制流的至少一部分表示为控制流模型。建模语言可以包括用于表示在计算机程本文档来自技高网
...

【技术保护点】

【技术特征摘要】
【国外来华专利技术】1.一种被配置用于通过将计算机程序的控制流表示为不是源代码的控制流数据来混淆所述计算机程序的系统,所述系统包括:一个或多个硬件处理器,所述一个或多个硬件处理器由机器可读指令配置为:接收计算机程序的源代码,所述源代码包括所述程序的多个计算功能和所述程序的控制流,所述程序的控制流定义顺序,所述计算功能以所述顺序执行;解析所述源代码;提取所述源代码的所述控制流的至少一部分;使用数学建模语言将所述控制流的至少一部分表示为控制流模型,所述建模语言包括用于表示在所述计算机程序的执行期间发生的事件的事件元素、表示在所述计算机程序的所述执行期间发生的条件的条件元素以及链接到用于执行功能的所述源代码的部分的执行元素的构成,其中弧用于将事件元素与条件元素和执行元素链接在一起,以及其中令牌与条件元素和执行元素相关联以表示所述计算机程序的执行的状态;将所述控制流模型存储为表示所述程序的所述控制流的控制流数据,其中所述控制流数据不是可执行代码;以及从所述源代码中移除所述控制流的所述至少一部分,以由此混淆所述源代码的所述控制流并致使所述源代码更能抵抗篡改。2.根据权利要求1所述的系统,其中所述控制流数据被存储为一个或多个矩阵。3.根据权利要求2所述的系统,其中所述一个或多个矩阵包括至少一个矩阵,所述至少一个矩阵指示到跃迁元素、事件元素和条件元素的输入和所述跃迁元素、所述事件元素和所述条件元素的输出,以由此表示所述控制流模型的结构。4.根据权利要求2所述的系统,其中所述一个或多个矩阵包括矩阵,所述矩阵指示在所述计算机程序的执行期间的一个或多个时间处令牌与所述条件元素和所述执行元素的关联。5.根据权利要求2所述的系统,其中所述数学建模语言是修改的佩特里网。6.根据权利要求5所述的系统,其中所述一个或多个硬件处理器还由机器可读指令配置为:由执行引擎接收所述一个或多个矩阵;由所述执行引擎基于所述矩阵执行所述控制流模型的仿真;由所述执行引擎基于所述令牌与执行元素的所述关联检测特定执行元素的触发;引起链接到所述特定执行元素的所述源代码的部分的执行。7.根据权利要求6所述的系统,其中基于所述矩阵执行所述控制流模型的仿真包括基于所述矩阵在所述一个或多个时间中的每个时间处确定令牌与条件元素和执行元素的所述关联。8.一种通过将计算机程序的控制流表示为不是源代码的数据来混淆所述计算机程序的方法,所述方法包括:接收计算机程序的源代码,所述源代码包括所述程序的多个计算功能和所述程序的控制流,所述程序的控制流定义顺序,所述计算功能以所述顺序执行;解析所述源代码;提取所述源代码的所述控制流的至少一部分;
使用数学建模语言将所述控制流的至少一部分表示为控制流模型,所述建模语言包括用于表示在所述计算机程序的执行期间发生的事件的事件元素、表示在所述计算机程序的所述执行期间发生的条件的条件元素以及链接到用于执行功能的所述源代码的部分的执行元素的构成,其中弧用于将事件元素与条件元素和执行元素链接在一起,以及其中令牌与条件元素和执行元素相关联以表示所述计算机程序的执行的状态;将所述控制流模型存储为表示所述程序的所述控制流的控制流数据,其中所述控制流数据不是可执行代码;以及从所述源代码中移除所述控制流的所述至少一部分,以由此混淆所述源代码的所述控制流并致使所述源代码更能抵抗篡改。9.根据权利要求8所述的方法,其中所述控制流数据被存储为一个或多个矩阵。10.根据权利要求9所述的方法,其中所述一个或多个矩阵包括矩阵,所述矩阵指示到跃迁元素、事件元素和条件元素的输入,以由此表示所述控制流模型的结构。11.根据权利要求9所述的方法,其中所述一个或多个矩阵包括矩阵,所述矩阵指示在所述计算机程...

【专利技术属性】
技术研发人员:R
申请(专利权)人:爱迪德技术有限公司
类型:发明
国别省市:

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

1