混淆技术制造技术

技术编号:3961604 阅读:190 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了在运行程序的计算机中进行条件跳转的方法,包括:提供输入,以该输入为条件进行真实条件分支;提供混淆性不可预见的数据;运行代码以产生以不可预见的数据为条件的混淆性分支;在计算机程序中由混淆性条件分支确定的点处,进行以所述输入为条件的真实分支。本发明专利技术可很好地防止剽窃和反向工程。

【技术实现步骤摘要】

本专利技术涉及阻止、预防或检测计算机代码的反向工程或“剽窃”。技术背景 已知一些人试图在没有计算机程序设计者或所有者的许可的情况下分析或改变计算机程序的功能。计算机程序的改变可用作分析工具,或用于使程序产生程序设计者不想要的真实世界结果的目的。已提出多种措施包括“混淆”来阻止反向工程,其通常涉及包括无功能的、不必要的、或不合逻辑地放置的代码,该代码使分析员在不访问初始程序设计者的文献的情况下更难理解代码怎样运行。在任何反向工程尝试中,大量计算机代码的重要部分是“条件分支”或“条件跳转”,根据一些可变因素或其它事件,在前述点代码的运行可采取不同的路线。基于条件的结果,条件分支可导致跳转到程序的不同部分。更普遍地,条件分支通过如果符合指定条件则跳转的命令形成。之后,有如果不符个条件则继续条件跳转命令后面的命令的隐含命令。 总的来说,在本说明书中,选择在一个分支上跳转还是两个分支上跳转及如果只有一个跳转而选择哪一分支跳转均无关紧要,术语“条件跳转”和“条件分支”在所有三种情况下均可无区别地使用。反向工程师通常能容易地在编译的程序二进制代码中认出条件跳转语句。使用现在广泛可用的调试程序可容易地定位和分析条件语句。之后,反向工程师可使条件跳转无效,使得程序总是沿同一随后的路线而行,因而使其运行更容易理解。恶意的黑客可改变条件跳转,使得随后的运行路线不正确地遵照可变因素或其它事件。例如,其可能撤消安全性或完整性测试,或导致正常输入产生异常输出。传统的混淆不能防止反向工程师识别二进制代码中的条件跳转命令。
技术实现思路
本专利技术公开了在运行程序的计算机中进行条件跳转的方法及其计算机程序,包括在计算机中提供真实条件分支以其为条件的输入。在计算机中提供混淆性不可预见的数据。在计算机程序中,运行代码以产生以不可预见的数据为条件的混淆性分支。在计算机程序中由混淆性条件分支确定的点处,进行以前面提及的输入为条件的真实分支。总的来说,“真实条件分支”为与程序的真实目的有关的任何条件分支。在实施例中,可重复混淆性条件分支,使得程序沿分支树结构工作。在计算机程序中的通过连续混淆性条件分支的累积效应从真实条件分支的几种可用情形中选择的点即树杈处进行真实条件分支。在实施例中,不可预见的数据选择矩阵的一行,及混淆性条件分支由所选行中的项确定。在实施例中,真实条件分支可使程序进行到程序中随进行真实条件分支的情形而定的点,之后,可选地,通过进一步混淆,程序可进行到独立于进行真实条件分支情形的点。 在一例子中,不同的真实条件分支情形可向程序发送不同的目的地序列,之后程序可通过该序列重复,在独立点结束。在另一例子中,在真实条件分支之后,可以有另外的不可预见的选择,例如,程序可将另外的混淆性代码重复不可预见的次数。在实施例中,其它计算机程序代码可包括在混淆性条件分支和真实条件分支之间,或真实条件分支之后的混淆性代码之中。在有两个或两个以上连续混淆性条件分支时, 其它程序代码可在第一混淆性条件分支之后的任何点处。其它程序代码可以是不起作用的混淆。如果其被运行,其可以是无意义的混淆,或者其可以是来自与真实条件分支的主题不紧密相关的程序部分的不调和代码,或者其可以是在混淆性条件分支中复制的相关代码。 尤其在后者情况下,其它代码可能是黑客希望改变的代码。之后,如果黑客未完全理解混淆结构,黑客仅可改变其它代码的一份或一些副本,则其在进一步的剽窃中可被阻止,因为有时运行改变后的代码及有时运行未被改变的代码。在实施例中,前述其它计算机程序代码的运行可在不同的混淆性条件分支选择之后试图检测其它程序代码的运行之间的差异时进行监视。例如,如果黑客试图改变其它程序代码,在没有认识到全部混淆结构的情况下,黑客可改变通过混淆树的一路径上的其它程序代码,但不能改变另一路径上的其它程序代码,使得通过树的相继重复导致明显不同的结果。在实施例中,输入可从同一程序的另一部分提供,例如作为计算的结果。作为备选,输入可从程序外面发送或取回。在实施例中,不可预见的数据可在程序内通过从不可预见的数据源调用而提供。 例如,该源可以是随机或伪随机数发生器。作为备选,不可预见的数据可以是来自同一或另一计算机程序的无关部分的数据或结果。由于目标是进行混淆,不调和的链路有利。附图说明 上述及其它方面、特征和优点从下面结合附图进行的详细描述将更明显看出,其中 图1为计算机网络的示意图。图2为对条件分支进行混淆的过程的流程图。图3A-3D为实现图2的过程的计算机源代码的例子。具体实施例方式参考附图,及初始参考图1,总体上由附图标记10指示的计算机系统的一实施例包括处理器12,通过总线14连接到计算机可读存储介质如RAM16、R0M18、硬盘20和可移动磁盘22。总线14还连接到I/O设备如键盘24、点击设备如鼠标26、及因特网连接28。通过28的外设16仅为例子。如本领域技术人员已知的,可提供其它形式的存储和1/0,及将来可能开放另外的其它形式。处理器12运行多种形式的软件,包括存储在R0M18中或磁盘 20上的操作系统和其它安全软件30,及应用软件32,其可在可移动磁盘20或因特网28上传送及可保存在硬盘20上。RAM16通常用于使用中的程序和数据的临时存储。还参考图2,根据本专利技术的计算机程序40的一实施例可连同计算机系统10—起使用。当不使用时,计算机程序40可保存在ROM18或硬盘20上,及当使用时可保存在RAM16 上。计算机程序40可以是希望进行保护以免遭剽窃或反向工程的任何计算机程序。这样的程序的无数例子为本领域技术人员众所周知,为了简明,不详细描述前述程序的与本专利技术无关的部分。在图2的模块50中,加载计算机程序40并开始运行程序。在模块52中,执行多个命令,直到程序到达要进行混淆的条件分支为止。在模块53中,进行不可预见的选择,及程序进行到模块54或模块56。不可预见的选择可以随机、伪随机、或基于一些与正进行混淆的条件分支不紧密相关的数据或结果。模块54和56为可选模块。在模块54或模块56中,如果存在,程序运行可能没有作用、用于程序40的另一部分中的目的、或用于检测模块54或模块56已运行的代码,在这种情况下两个模块的代码可以相同或不同。模块54或模块56可包括用于这些功能中的两个或两个以上功能的代码。作为备选,或另外,模块54和/或模块56可代表根本不实际运行的代码,而是仅使编译后的程序40更难阅读。模块54和56可以相同或不同。即使模块 54和56用于共同的有用目的,它们也可使用不同的代码,以使它们完全相同的事实不太明 Mo 之后,程序进行到模块58或模块60。在模块58或模块60中,进行不可预见的选择,及程序进行到可选模块62、64、66或68。在模块62、64、66或68中,如果存在,程序运行可能没有作用、用于程序40的另一部分中的目的、或用于检测所涉及模块已运行的代码, 在这种情况下四个模块的代码可以相同或不同。模块62、64、66和68可包括用于这些功能中的两个或两个以上功能的代码。作为备选,或另外,模块62、64、66和/或68可代表根本不实际运行的代码,而是仅使编译后的程序40更难阅读。为使混淆不太明显,即使模块54、 56、62、64、66本文档来自技高网...

【技术保护点】
在运行程序的计算机中进行条件跳转的方法,包括:在计算机中提供真实条件分支以其为条件的输入;在计算机中提供混淆性不可预见的数据;在计算机程序中,运行代码以产生以不可预见的数据为条件的混淆性分支;及在计算机程序中由混淆性条件分支确定的点处,进行以所述输入为条件的真实分支。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:B辛格N萨克塞纳VSS拉维纳德RS肖汉
申请(专利权)人:安全网络公司
类型:发明
国别省市:US[美国]

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

1