CN1260055A - 用于提高软件安全性的模糊技术 - Google Patents

用于提高软件安全性的模糊技术 Download PDF

Info

Publication number
CN1260055A
CN1260055A CN98806038.8A CN98806038A CN1260055A CN 1260055 A CN1260055 A CN 1260055A CN 98806038 A CN98806038 A CN 98806038A CN 1260055 A CN1260055 A CN 1260055A
Authority
CN
China
Prior art keywords
fuzzy
code
conversion
program
reverse
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.)
Pending
Application number
CN98806038.8A
Other languages
English (en)
Inventor
克里斯琴·司温·科尔伯格
克拉克·戴维·汤伯森
道格拉斯·崴·科克·卢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
INTERTRUST Inc
Original Assignee
INTERTRUST Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=19926287&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=CN1260055(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by INTERTRUST Inc filed Critical INTERTRUST Inc
Publication of CN1260055A publication Critical patent/CN1260055A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Abstract

本发明提供用于提高软件安全性的模糊技术。在一个实施例中,一种用于提高软件安全性的模糊技术的方法包括选择代码的一个子集(例如,应用程序的编译后的源码)来实施模糊,以及对代码的选中子集进行模糊。模糊包括对选中代码的子集进行模糊转换。转换后的代码与未转换前的代码有很少的相同之处。应用转换可以基于要求的安全等级(例如防止反向工程)进行。应用转换还可以包括一种能使用模糊构架产生的控制转换,后者可以通过使用别名和并发技术构建。因此,代码可以基于要求的安全等级(例如,基于要求的有效性、弹性和费用),为提高软件的安全性而进行模糊。

Description

用于提高软件安全性的模糊技术
本发明所属技术领域
本发明涉及能防止,或至少能够阻碍对软件的翻译、解码或反向工程的方法和设备。特别地,本发明尽管并非唯一,但涉及通过插入、删除或重组软件的可识别结构或信息,来提高软件的结构和逻辑复杂性,从而增加反编译或反向工程的难度。本发明背景技术
软件的性质决定了它易被第三方分析和拷贝。人们已经付出了诸多努力来提高软件的安全性,也获得许多成功。这些安全性方面的考虑涉及对防止软件未授权拷贝的需要和隐藏编程技巧的要求,这些技巧本来是可以通过反向工程来发现的。
确立的合法收入,例如版权,提供了一种法律上的保护方式。然而,依法维持在这些体制下建立的合法权益可能是昂贵而费时的。进一步,版权中对软件的保护并没有包括编程技巧。这些技巧(例如,与软件形式相对的功能),很难在法律上予以保护。反向工程就可以通过基于有争议软件的功能的细节知识,从头开始重新编写相关软件,来避开侵犯版权的问题。这些知识可以通过分析数据结构、对代码进行抽象和组织来获得。
软件专利提供了更全面的保护。然而,将软件的法律保护和技术保护结合起来,将会更加有利。
以往保护私有软件的方法或是使用基于加密的硬件解决方案,或是基于源码结构的简单重组。基于硬件的技术是不理想的,因为它们通常很昂贵,并受限于特定的平台或硬件条件。软件解决方案典型地包括细节代码模糊软件,例如用于JavaTM的Crema模糊软件。一些模糊软件定位于应用程序的词汇结构,典型地删除源码格式和注释,以及对变量重命名。然而,这样的一种模糊技巧并不能提供对恶意反向工程的足够保护:反向工程是一种于软件分发形式无关的问题。进一步说,当软件以独立于硬件的格式分发时,该问题会变得越来越严重,因为这些格式保留了源代码中的许多或全部信息。这些格式的例子有JavaTM字节码和体系结构中立分发格式(ANDF)。
软件开发代表着投入的巨大时间和精力,以及编程者的技巧。在商业的环境中,防止竞争对手照搬私有技巧的能力可能是至关重要的。本发明概要
本发明提供了用于提高软件安全性的模糊技巧的方法和设备,例如计算机执行的降低软件受反向工程的影响程度的方法(或是为公众提供实用的选择)。在一个实施例中,计算机执行的模糊代码的方法,包括测试对代码提供一次或多次模糊转换的过程是否完成,选择代码的子集进行模糊,选择要应用的模糊转换,应用转换,以及返回完成测试步骤。
在可选实施例中,本发明涉及控制计算机的方法,使得该计算机上运行和存储或者控制的软件显示出防反向工程的预定和控制的程度,包括将选定的模糊转换应用到软件的选定部分。其中某一等级的模糊的获得要通过使用选定的模糊转换来提供要求的防反向工程程度,软件运行的有效性,以及转换后软件的大小,并更新软件以反映出模糊转换。
在优选实施例中,本发明提供了计算机执行的提高软件安全性的方法,包括确定一个或多个对应于待处理应用程序的源软件的源码输入文件,选择要求的模糊等级(例如有效性),选择最大的执行时间或空间限制(例如费用),读取并分析输入文件,是否带有可以被源码直接或间接读取的任何库或补充文件是可选的,提供用于确定被待处理应用程序使用的数据类型、数据结构以及控制结构的信息,构建存储信息的适当的表,预处理应用程序的信息,对应于预处理的步骤,对源码对象选择和应用模糊代码转换,重复模糊代码转换步骤,直到获得要求的有效性或者超过最大开销,然后输出转换后的软件。
优选地,应用程序的信息是通过使用多种静态分析技术和动态分析技术获得的。静态分析技术包括过程间的数据流分析和数据依存分析。动态分析技术包括建立配置文件,可选的是通过用户获取信息。配置文件可以用来确定模糊的等级,后者被用于某一具体的源码对象。转换可以包括使用模糊构架建立的控制转换,其中模糊构架可以是任何的数学对象,该对象被执行时并不费力,用模糊软件建立起来也很简单,而反模糊工具要破解则很困难。优选地,可以使用别名和并发技术构建模糊构架。源程序的信息也可以通过实际的分析获得,后者确定了应用程序包含的语言构架和编程惯用语法的自然属性。
模糊转换的有效性可以通过软件复杂度的标准来估价。模糊代码转换可以应用在任何语言构架:例如模块、类或是被分割或合并的子例程;可以产生新的控制和数据结构;可以修改源控制和数据结构。优选地,加在转换后应用程序的新构架被选择与源应用程序中的那些尽量相似,基于预处理时收集到的实用信息。这种方法可以产生附加文件,后者包含与使用了哪种模糊转换有关的信息,以及将转换后应用程序的模糊代码与源软件联系起来的信息。
优选地,选择模糊转换是为了保存软件的可观察行为,使得如果P是未转换的软件,而P’是转换后的软件的话,P和P’有同样的可观察行为。特别地,如果P不能终止运行或者不能在错误发生时终止运行,那么P’可以终止也可以不终止,否则P’终止并产生与P相同的输出。可观察行为包括用户可以看到的效果,但是P和P’在运行的时候,用户不能观察到它们的不同细节行为。例如,P和P’的不同细节行为包括文件创建、内存使用和网络通信。
在一个实施例中,本发明还提供反模糊工具,可以通过使用分片、部分估价、数据流分析或统计分析,从模糊后的应用程序中删除模糊。附图的简要介绍
下面将仅根据实例和介绍下列附图,对本发明进行描述:
图1显示了一种依据本发明的教学的数据处理系统;
图2显示了一种包括模糊转换的类别的软件保护分类;
图3a和图3b显示了通过服务器端执行(a)和部分服务器端执行(b),来提供软件安全性的技术;
图4a和图4b显示了通过使用加密(a)和使用带符号本地码(b)来提供软件安全性的技术;
图5显示的是通过模糊来提供软件安全性的技术;
图6显示的是适于和JavaTM应用程序一起使用的模糊工具的例子的结构;
图7显示的是列出已知软件复杂性度量的表;
图8a和图8b显示的是模糊转换的弹性;
图9显示的是不同类型的模糊谓词;
图10a和图10b提供的是琐碎模糊构架(a)和弱模糊构架(b)的实例;
图11显示的是计算转换的一个实例(分支插入转换);
图12a到图12d显示的是一种循环条件插入转换;
图13显示的是将可缩减流图转换成非缩减流图的转换过程;
图14显示的是如果一段代码不包含数据依靠,它可以被并行处理;
图15显示的是通过插入适当的同步原型,一段不包含数据从属的代码可以被分裂为并发的线程;
图16显示的是过程P和Q如何在它们的调用站点嵌入,并从代码中删除;
图17显示的是嵌入方法的调用;
图18显示的是使同一类中声明的两种方法进行交互的技术;
图19显示的是通过对源代码应用不同的模糊转换集,从而产生一个方法的多个不同版本的技术;
图20a到图20c提供的是循环转换的例子,包括(a)循环阻塞,(b)循环反卷和(c)循环分裂;
图21显示的是变量分裂的实例;
图22提供了一种被构建用来模糊串“AAA”、“BAAAA”和“CCB”的函数;
图23显示的是将32位变量x和y合并成一个64位变量z的实例;
图24显示的是用于数组重构造的数据转换实例;
图25显示了对一个继承分层结构的修正;
图26显示了从对象和别名构建而成的模糊谓词;
图27提供了一个使用线程的模糊构架;
图28a到28d显示的是模糊与反模糊的对比,其中(a)显示的是包含三个被模糊的语句的源程序S1-3,(b)显示的是确定“常量”模糊谓词的反模糊工具;(c)显示的是确定语句中公用代码的反模糊工具,(d)显示的是应用某些最终简化和将程序返回为原始形式的反模糊工具;
图29显示的是JavaTM反模糊工具的体系结构;
图30显示的是用于评估的统计分析实例;
图31a和31b提供了多种模糊转换的概述表;
图32提供了对多种模糊构架的概述。本发明的详细描述
下列描述在JavaTM模糊工具的环境中给出,这些工具目前正由申请人在开发。然而,对于本技术领域内的普通技术人员来说,很明显地,本技术也适用于其它编程工具,而且本发明并不能被解释成只适用于JavaTM应用程序。本发明在其它编程语言中的实施被认为在有一般技术人员的技能范围之内。为进行清晰的说明,下文的实施例特别针对JavaTM的模糊工具。
在下文的描述中,将使用下列指代术语。P指代模糊的输入应用程序;P’指转换后的应用程序;T指转换过程,即T将P转换为P’。如果P和P’有相同的可观察行为,则P(T)P’是一种模糊转换。一般将可观察行为定义为用户所经历的行为。那么,P’也可能会有一些例如创建文件之类的附加效果,这些是P所不具备的,条件是这些附加效果不会被用户所经历。P和P’不必有完全的效率。示例硬件
图1显示的是一个依据本发明教学的数据处理系统。图1显示的计算机100,它包括3个主要元件。计算机100包括一个输入输出(I/O)电路120,用于以适当结构化的形式与计算机100的其它部分来回交换信息。计算机100包括一个与输入输出电路120通信的控制处理器(CPU)130以及一个内存140(例如挥发性或者非挥发性内存)。这些元件是在最普通的计算机中典型能发现的那些,而且事实上计算机100被用于代表数据处理设备的一个大的分类。显示的光栅显示器160与输入输出电路120通信,并用于显示CPU130产生的图像。任何广为人知的阴极射线管(CRT)显示器或其它形式的显示器都可以被用作显示器160。显示与输入输出端口120的通信中的是传统键盘150。计算机100是较大系统中的一部分,这也会被任何本行业内普通技术人员所赞赏。例如,计算机100也能与一个网络进行通信(例如,与局域网(LAN)相连接)。
特别地,计算机100可以包括根据本发明教学所示能提高软件安全性的模糊电路,或者会被任何本行业内普通技术人员所赞赏的是,本发明能够在计算机100所执行的软件中实施(例如,软件可以存储在内存140中并在CPU130上执行)。例如,依据本发明的实施例,一个存储在内存140中的被反模糊了的程序P(例如一个应用程序),能够被在CPU130上执行的模糊软件模糊,以提供模糊后的程序P’,并储存在内存140中。细节描述
图6显示的是JavaTM糊软件的体系结构。依据发明方法,JavaTM应用程序类文件与任何库文件一起传递。构建继承树的同时也构建符号表,为所有的符号提供类型信息,为所有的方法提供控制流图表。用户可以有选择地提供JavaTM概要工具所产生的概要数据文件。这个信息可以用于指导模糊软件,以确保应用程序经常执行的部分不会被非常昂贵的转换所模糊。使用标准编译器技术,例如过程间数据流分析和数据附加分析,来收集信息。某些信息可以由用户提供,有些由专门的技术提供。这些信息用于选择和应用适当的代码转换。
选择适当的转换。选择最合适转换的首要标准包括要求选中的转换与代码剩余部分能自然地融和。这可以通过赋予转换以较高的合适值来实现。进一步的要求在于,应该优先选择以较少的执行时间代价产生高级别的模糊的转换。后一点可以通过选择使有效性和弹性最大化,而使开销最小的转换来实现。
模糊的优先级被分配给源代码对象。这会反映出对源代码对象的内容进行模糊是多么重要。例如,如果某个源代码对象包含高敏感性的私有资料,则它的模糊优先级会较高。执行时间的级别由方法决定,如果执行该方法的时间比执行其它方法需要的长,则等于1。
然后,可以通过建立合适的内部数据结构、从每一个源代码对象映射到合适的转换、模糊优先级和执行时间级别上来进行应用程序的模糊。模糊转换被应用,直到达到要求的模糊级别或者超过允许最大的执行时间开销。然后写出转换后的应用程序。
模糊工具的输出是一个新的应用程序,其功能与原来的相同。该工具还可以产生JavaTM源文件,带有的注释信息涉及应用了哪种转换以及模糊后的代码如何与源应用程序联系。
下面将要描述一些模糊转换的实例,它们也是在JavaTM模糊软件下工作。
模糊转换可以被评估,并根据其质量进行分类。转换的质量根据其有效性、弹性以及开销来表达。转换的有效性与P’与P之间的模糊关系相关。任何一种尺度都会相对模糊,因为它必然依赖于人的认知能力。对本发明来说,将转换的有效性考虑成一种转换可用性的标准就足够了。转换的弹性衡量的是一种转换对抗来自自动反模糊软件的攻击的能力。这是两个因素的组合:程序员的努力和反模糊软件的努力。对弹性进行测量时其比例可以从琐碎到单向。单向转换是极端的,因为它们不能被逆转。第三个组件是转换的执行开销。这是作为使用转换后应用程序P’的结果而导致的执行时间和空间开销。转换评估的进一步细节在下文对优选实施例的具体描述中讨论。模糊转换的主要分类在图2c中显示,其细节在图2e到2g中给出。
模糊转换的例子如下所示:模糊转换可以分为以下类别:控制模糊,数据模糊,布局模糊和预防性模糊。下文将讨论这些类别的一些实例。
控制模糊包括聚集转换、排序转换以及计算转换。
计算转换包括:将实际的控制流隐藏在不相关的非功能性语句中;在对象代码级别引入代码序列,因此不会存在相应的高级别语言构架;以及删去实际的控制流抽象或是引入虚假的控制流抽象。
考虑第一个分类(控制流),Cyclomatic和Nesing复杂性量度表示,在一段代码的可见复杂度和它包含的谓词数目之间有很强的联系。模糊谓词使得转换的构建成为可能,后者向程序里引入了新的谓词。
参见图11a,一个模糊谓词PT词被插入基本块S中,其中S=S1…Sn。这将S平分为两半。谓词PT是无关代码,因为它一直都估计为真。在图11b中,S而被平分为两半,然后被转换到两个不同的模糊后的版本Sa和Sb中。因此对于反向工程师来说,Sa和Sb都执行相同的功能就不明显了。图11c与图11b类似,然而,在Sb中引入了一个缺陷。PT谓词一直选择正确的代码版本Sa
另一种类型的模糊转换是数据转换。数据转换的一个例子是对数组进行反构建,以提高代码的复杂性。一个数组可以被分裂为多个子数组,两个或多个子数组被组合成一个数组,或是增加(展平)和减少(折叠)一个数组的维数。图24显示的是多个数据转换的例子。在语句(1-2)中,数组A被分为两个子数组A1和A2。A1包括带有偶数索引的元件,A2包括带有奇数索引的元件。声明(3-4)显示的是两个整数数组B和C是如何被交叉以产生数组BC的。来自B和C的元件可以被均匀扩展到转换后的数组中去。声明(6-7)显示的是将数组D折叠成数组D1。这样的转换引入了以前没有的数据结构或者删除现存的数据结构。这就可以极大地增加程序的模糊性,因为例如在声明一个2维数组的时候,一个程序员通常这样做以达到某一目的,而选中的数据结构被映射到相应的数据上去。如果该数组被折叠成为一个1维结构,反向工程师就失去了有价值的实用信息。
模糊转换的另一个例子是预防性的转换。与控制转换或者数据转换相对的是,预防性转换的主要目的并非使程序对人类阅读者显得模糊,而是使已知的反模糊技术变得更加困难或者利用现存反模糊软件或反编译器中的已知问题。这些转换分别被人们认为为内在的和要达到的。一个内在预防性转换的例子是对for-loop循环重排序以反向运行。如果循环中没有循环携带的数据附件,则这样的重排序是可能的。一个反模糊软件可以执行相同的分析并重新为循环排序,使其向前执行。然而,如果一个向反向的循环中加入假数据附件,就可以阻止对循环的识别和重排序。
下文中将在优选实施例的细节描述中进一步讨论模糊转换的特定实例。优选实施例的详细描述
以带有原始源文件中存在的多数或全部信息来发布软件的方式已变得越来越普遍。一个重要的例子是Java的字节码。因为这些代码很容易被反编译,所以它们增加了恶意反向工程攻击的危险。
因此,依据本发明的一个实施例,提供了多种对软件秘密进行技术保护的技巧。在优选实施例的详细介绍中,我们认为,目前自动代码模糊是防止反向工程的最有生命力的方法。下面我们描述代码模糊器的设计,这是一种将程序转变成为另一种等同代码的工具,后者会更加难以理解和进行反向工程。模糊软件是基于对代码转换的应用,在许多实例中与那些编译优化器所使用的很相似。我们描述许多这样的转换,对它们分类,并用它们的有效性(例如,人类阅读者被迷惑到何种程度)、弹性(例如,抵制自动反模糊攻击的效果如何)和开销(对应用程序会增加多少性能上的负担)来评价它们。
最后,我们描述多种反模糊技巧(例如程序分片)和模糊工具可能用来对前者进行对抗的措施。1.介绍
只要有足够的时间、努力和决心,一个能干的程序员肯定能对任何程序实施反向工程。只要对应用程序能进行物理上的访问,一个反向工程师就可以反编译(使用反汇编或反编译器),然后分析其数据结构和控制流。这可以通过手工来实现或者是借助反向工程的工具,例如程序分片器。然而,反向工程直到最近才成为一个问题,这个问题没有被软件的开发者所重视,因为大多数程序很大、集成、发布时是拆卸后的本地码,从而使其对反向工程师来说很困难(尽管从来都不是不可能)。
然而,随着软件的发布形式使反编译和方向工程变得越来越容易,这种情况正在改变。重要的例子包括Java字节代码和体系结构中立分发格式(ANDF)。特别是Java应用程序对软件开发人员提出了这个问题。它们是通过Internet以Java类文件的方式来发布的,是一种与硬件无关的虚拟机代码,虚拟地携带有原Java源的所有信息。这样,这些类文件很容易被反编译。进一步说,因为多数计算发生在标准库中,Java程序通常很小,因此对反向工程师来说更加相对容易一些。
Java开发人员主要关心的问题并非对整个应用程序进行直接的重新应用。这种行动带来的价值相对较小,因为这显然违反了版权法[29],也很容易通过法律手段解决。反而,开发人员最害怕的是竞争对手能够从它们的程序中获取私有算法和数据结构,从而将它们集成到自己的程序中去。这不仅会为竞争对手带来商业上的优势(减少了开发时间和费用),而且这在法律上也是难以发现和追踪的。最后一点对小的开发者最有意义,因为他们承担不起与法律预算没有限制的大公司[22]之间旷日持久的法律诉讼。
图2中显示的是为软件提供法律保护或安全性的多种形式保护的概述。图2提供了(a)防止恶意反向工程的方法的分类,(b)模糊转换的性质,(c)模糊转换针对的信息,(d)布局模糊,(e)数据模糊,(f)控制模糊,以及(g)预防性模糊。
下文讨论的是软件开发人员可以使用的,对知识产权进行技术保护的多种形式。尽管我们的大多数结论可以应用于其它语言和体系结构中立的格式上,我们将讨论的范围限制于在Internet上以Java类文件的形式发布的Java程序。这对熟悉普通技术的人来说是非常明了的。我们认为,活动代码保护的唯一合理方法是代码模糊。我们将进一步提出多种模糊转换,并根据有效性和效率对其进行分类,然后显示如何在自动的模糊工具中使用它们。
优选实施例的其它详细描述在下文中结构化给出。在第2部分,我们给出了防止软件偷窃行为的多种形式的技术保护概述,我们认为,现在的代码模糊可以起到最经济的预防作用。在第3部分,我们给出了对Kava设计的简要概述,这是一种目前正在构建中的Java代码模糊软件。第4和第5部分描述了我们用来分类和评估不同类型模糊转换的标准。第6,7,8,9部分给出了模糊转换的目录。在第10部分,我们给出了更加详细的模糊算法。在第11部分,我们对我们的结果进行总结,对代码模糊的未来发展方向进行讨论来作出结论。2.保护知识产权
考虑下列场景。爱丽丝是一个小软件的开发商,她想通过Internet以一定的收费向用户发布应用程序。鲍勃是其竞争对手,他知道如果自己了解了爱丽丝的程序中的关键算法和数据结构,就会比爱丽丝更加具有商业上的优势。
这可以被看作是两个对手之间的双人游戏:软件开发商(爱丽丝)试图保护自己的代码免受攻击,而反向工程师(鲍勃)则要分析该程序并将其转化为易读和易懂的形式。注意对鲍勃来说,并非一定要将该程序转化为与爱丽丝的源代码相近的形式;必须完成的是反向工程得出的代码必须能被鲍勃和他的程序员读懂。还需要注意的是,爱丽丝并非要保护整个应用程序免受鲍勃的攻击;该程序中的大部分内容可能都是竞争者毫无兴趣的“面包-—黄油代码”。
爱丽丝能使用法律或者技术的手段来保护代码免受鲍勃的攻击,如图2a所示,这些在上文中已经讨论过。尽管版权法确实涵盖了软件制品,经济的现实使得爱丽丝拥有的这类小公司很难与强大的竞争对手对簿公堂。对爱丽丝来说,更加有吸引力的解决方案是,通过使方向工程在技术上变得困难,几乎达到不可能或在经济上不划算的程度,从而保护她的代码。Gosler描述了许多早期技术上的保护尝试。(James R Gosler.软件保护:神化还是现实?在CRYPTO’85——加密学的进展,140-157页,1985年8月)。
对爱丽丝来说,最安全的方法是根本不销售软件,而是销售其服务。换句话说,用户并不能获得该应用程序本身,而是连接到爱丽丝的站点,如图3a远程运行该程序,每次付少量的电子货币。爱丽丝获得的好处在于鲍勃永远不能从物理上获得该应用程序,从而也不能对其进行反向工程。当然,其缺点在于由于网络带宽和其它潜在因素,应用程序执行时比在用户本地站点上执行的效果要差得多。部分的解决方案是将程序分为两个部分:在用户本地站点上执行的公共部分,以及远程运行的私有部分(包含爱丽丝希望保护的算法),例如图3b中所示。
爱丽丝可以采取的另一种方法是在将代码发送到用户之前对其进行加密,如图4a所示。不幸的是,这只有在整个加密/执行过程在硬件中进行的情况下才有效。Herzberg(Amir herzberg和Shlomit S.Pinter.软件的公共保护。计算机系统上ACM交易,5(4):371-393,1987年11月)和Wilhelm(Uwe G.Wilhelm.密码学上的保护对象。http://lsewww.epfl.ch/~wilhelm/CryPO.html,1997年)描述了这样的系统。如果代码在软件中由虚拟机解释器执行(用Java字节码时情况经常是这样),那么鲍勃就一直有可能拦截和反编译加密过的代码。
JavaTM编程语言已经非常流行,主要是因为它的体系结构中立字节码。虽然这明显地简化了移动代码,但与本地代码相比它确实降低了数量级的性能。可以预测,这会导致对即时编译器的开发,后者能自由地将Java字节码翻译成本地代码。爱丽丝可以使用这样的翻译器来为所有流行的平台产生其应用程序的本地代码版本。下载这些应用程序时,用户的站点将需要确认自己正在运行的体系结构/操作系统的组合,然后相应的版本将会被传输,例如图4b所示。只能获得本地代码会使鲍勃的工作变得更加困难,尽管该工作并非完全不可能。传输本地代码还会带来进一步的复杂化。问题在于——与在执行前能进行字节代码验证的Java字节代码不同,本地代码在用户的机器上运行时不能保证其完全的安全性。如果爱丽丝是社区中的一个信任成员,用户可以接受她的保证,即应用程序绝不会在用户端做任何坏事。为了确保没有人会试图破坏该应用程序,爱丽丝将不得不在代码传输的时候,以数字方式为代码加上符号,从而向用户证明该代码是她所写的原始代码。
我们最后要考虑的方法是代码模糊,如图5中所示。对爱丽丝来说,最基本的观点是通过模糊软件来运行她的应用程序,该模糊软件是一种能将应用程序转换成功能上与原程序等同,但对鲍勃来说更难读懂的程序的软件。我们相信,模糊是一种保护软件交易秘密的有生命力的技术,还有待于应受的重视。
与服务器端执行不同,代码模糊永远不能完全保护一个应用程序免受恶意的反向工程。只要有足够的时间和决心,鲍勃肯定能将爱丽丝的程序分解,从而找出其中的重要算法和数据结构。为帮助这项任务,鲍勃会试图让模糊后的代码通过试图破解模糊转换的自动反模糊软件。
那么,模糊软件为应用程序增加的防范反向工程的安全等级依赖于,例如(a)模糊软件采用的转换的复杂程度,(b)可用的反模糊算法的能力,(c)反模糊软件可用的资源量(时间和空间)。理想状态下,我们希望能模仿现行公钥加密系统中的情况,其中加密(发现大的子素非常容易)和解密(将大的数字分解质因数则非常困难)所花的费用差别很大。我们看到,事实上如下文谈论,模糊转换可以在多项式的时间内进行,但是反模糊则需要指数级的时间。3.Java模糊软件的设计
图6显示的是Java模糊软件Kava的体系结构。该工具的主要输入是一套Java类文件,以及用户要求的模糊等级。用户可以选择是否提供由Java概要工具产生的概要数据的文件。这些信息能被用于指导模糊软件确保应用程序经常被执行的部分不会被昂贵的转换所模糊。工具的输入是Java应用程序,作为一套Java类文件给出。用户还可以选择要求的模糊等级(例如,有效性)和模糊软件最大允许为应用程序增加的执行时间/空间的代价(开销)。Kava读取和分析类文件和直接或间接参照的任何库文件。这样就构建了一个完整的继承树,同时还给出了提供所有符号的类型信息的符号表,以及所有方法的控制流图表。
Kava包含大量的代码转换池,在下文有描述。然而,在这些被应用之前,一个预处理通道会收集依据实施例的应用程序的信息类型。使用标准的编译器技术,例如过程间数据流分析和数据附加分析,可以收集多种信息,有些可以由用户提供,有些通过专业技术来收集。例如,实用分析对应用程序进行分析,来了解是它包含何种语言构架和编程习语。
在预处理通道中收集到的信息被用于选择和应用合适的代码转换。应用程序终端所有语言构架都可以作为模糊的对象:例如,类可以被分解或合并,方法可以被更改和创建,新的控制和数据结构可以被创建,源控制和数据结构可以被修正。基于预处理通道中收集到的使用信息,可以选择与源应用程序中尽可能类似的那些构架作为应用程序中新增加的构架。
转换过程被重复,直到获得要求的有效性或者超过最大开销。工具的输出是一个新的应用程序——功能上与原来的相同——通常以一组Java类文件的形式给出。该工具还可以产生带有注解信息的Java源文件,这些信息涉及应用了哪些转换,模糊代码与源码的关系如何。带有注解的源码可用于调试。4.模糊转换的分类
在优选实施例的详细描述的剩下部分,我们将介绍、分类和评估不同的模糊转换。首先我们正式给出模糊转换的概念:定义1(模糊转换)令P-T->P’为一种合法的模糊转换,其中必须遵守下列条件:
--如果P不能终止运行或在发生错误时终止运行,则P’可能
  或不可能终止。
--否则,P’必须终止运行,并产生与P相同的输出。
可观察行为可被松散地定义为“用户经历的行为”。这意味着,P’可能会有P不具备的其它行为(例如创建文件或通过Internet发送信息),条件是这些附加行为不会被用户经历。注意,我们并不要求P和P’完全等效。事实上,我们的许多转换会使P’比P更慢或使用更多的内存。
不同模糊技术之间的主要分界线如图2c所示。我们主要依据模糊转换针对的信息种类不同对其进行分类。一些简单的转换是为了改变应用程序的词汇结构(布局),例如源码格式和变量名称。在实施例中,我们感兴趣的更复杂转换针对的是应用程序使用的数据结构或者控制流。
第二,我们根据目标信息上执行的运算不同来划分转换。如图2d到2g所示,有多种转换来操纵控制或数据的增加。这些转换典型地分解了程序员产生的抽象,和通过将无关数据或控制打包来构建新的假抽象。
类似地,一些转换影响着数据或控制的排序。在许多情况下,声明两个项目或进行两次计算的执行顺序对程序的可观察结果没有任何影响。然而,对写程序的程序员和反向工程师来说,在选择的顺序中可能嵌入了许多有用的信息。两个项目或事件在空间或时间上越接近,它们彼此联系的可能性就越高。对转换排序试图通过使声明或计算的顺序随机化来进行探索。5.评估模糊转换
在我们试图设计任何模糊转换之前,应该评估转换的质量如何。在本部分,我们将试图根据下列标准对信息进行分类:它们对程序增加了多少模糊度(例如,有效性),它们多么难以被反模糊工具破解(例如,弹性),以及它们在模糊后的程序中加入了多少计算负担(例如,开销)。5.1有效性的测量
首先,我们定义程序P比程序P’更模糊(或称复杂和不可读)意味着什么。定义认为,任何这种量度都是相对模糊的,因为它必须基于(或部分基于)人类的认知能力。
幸运的是,我们可以在软件工程的软件复杂度量度分支中粗略画出该工作的巨大实体。在此领域中,度量被设计用于帮助构建可读、可靠和可维护的软件。量度通常是基于计算源码有多少种文本属性,并将该计数与复杂度结合起来。虽然这些提出的公式是由对实际程序的实际研究中得出的,其它的纯粹是猜测出的。
在量度文学中发现的详细复杂度公式可被用于得出普遍的陈述,例如:“如果程序P和P’唯一的区别在于P’包含的属性q比P要多,那么P’比P更复杂。”有了这样的论断,我们就能够试图构建一个转换,为a程序增加更多的q属性,因为我们知道这样可以增加它的模糊性。
图7是列出了更理性的复杂度量度的表,其中E(x)是软件组件x的复杂度,F是功能或方法,C是类,P是程序。在软件构建计划中使用的话,典型目标是使这些量度最小化。与之相对的是,当对程序进行模糊的时候,我们一般都想使量度最大化。
复杂性量度允许我们将有效性的概念正式化,并在下文作为转换可用性的量度。非正式的情况下,如果转换确实通过隐藏爱丽丝的源码的意图,成功地迷惑了鲍勃,则转换是有效的。换句话说,转换的有效性衡量了模糊后代码(对人来说)比源码难理解的程度。在下列定义中对此正式化:定义2(转换有效性)令T是保持行为的转换,使得P-T->P’将源程序P转换为目标程序P’。令E(P)是P的复杂度,由图7中的量度所定义。
Tpot(P)是与程序P相关的有效性T,是T改变P的复杂性的程度的度量。它被定义为
Tpot(P)def=E(P’)/E(P)-1
如果Tpot(P>0,则T是有效的模糊转换。
为了达到本处讨论的目的,我们将以三点标准(低,中,高)来衡量有效性。
通过表1中的观察,我们可以列出转换T所需要的性质。为了使T成为一个有效的模糊转换,它应该
--提高整体的程序大小(u1)并引入新的类和方法(ua 7)。
--引入新的谓词(u2),并且增加条件和循环构架(u3)的嵌套等级。
--增加方法自变量(u5)和类间实例变量附件(ud 7)的数目。
--增加继承树(ub,c 7)的高度。
--增大远程变量附件(u4)。5.2弹性的测量
首先,增加的Tpot(P)似乎是无关紧要的。例如,为了增加u2的值,我们需要做的就是对P增加一些判断的if语句:
    main(){                     main(){

    S1;                        S1;

    S2;         =T=>        if(5==2)S1;

                                     S2;}

                                     If(1>2)S2;

                                }
不幸的是,这样的转换事实上是无用的,因为它们可以被简单的自动技术反转换。因此必须引入弹性的概念,来衡量转换对抗自动反模糊工具的能力如何。例如,转换T的弹性可以看作是两种量度的组合:
程序员努力:构建能有效降低T的有效性的自动反模糊工具
需要的时间量;以及
反模糊工具努力:这样一个自动反模糊工具有效地降低T的
有效性所要求的执行时间和空间。
区分弹性和有效性是非常重要的。如果转换能迷惑人类阅读者,它就是有效的,但是如果它能够迷惑自动反模糊工具,它就是有弹性的。
我们从琐碎到单向的规模上衡量弹性,如图8a所示。单向转换是特殊的,因为它们不可能被反向进行。这非常典型,因为它们删除了对人类程序员有用,但在正确执行程序时并非必要的信息。例子中还包括删除格式化和使变量名混乱的转换。
其它的转换典型地向程序中增加无用的信息,它们不会增加程序的可观察行为,但是会增加人类阅读者的“信息负担”。这些转换被反向进行时的难度各异。
图8b显示的是反模糊工具的努力被分为多项式时间或指数级时间。程序员的努力,即使转换T的反模糊化自动进行的工作,作为范围T的函数被测量。这是基于一种直觉,即构建对抗仅影响小部分程序的模糊转换的措施,比构建可能影响整个程序的措施更容易一些。
使用代码优化理论中借用的术语来定义转换的范围:如果T只影响控制流图表(CFG)的一个基本块,则T是局部转换;如果T影响整个CFG,则它是全局性的,如果T影响过程之间的信息流动,则它是过程间的转换,如果T影响独立执行的控制线程间的相互作用,则它是进程间的转换。定义3(转换的弹性)令T是保持行为的转换,使得P=T=>P’将源程序P转换为目标程序P’。Tres(P)是与程序P相关的弹性T。
如果从P中删除信息,使得不能从P’中重新构建P,则Tres(P)是单向转换。否则
Tres def=弹性(T反模糊工具努力,T程序员努力),
其中弹性是图8b中定义矩阵中的函数。5.3执行开销的测量
在图2b中,我们看到,有效性和弹性是三个描述转换质量的成分中的两个。第三个成分是转换的开销,即转换为模糊后应用程序带来的执行时间或空间的增加量。我们用4点的形式划分开销(免费,便宜,贵,昂贵),下文对对此给出定义:定义5(转换的开销)令T是保持行为的转换,使得Tcost(P)∈{昂贵,贵,便宜,免费},如果执行P’时要求的资源比P要求的多O(1),则Tcost(P)=免费;否则如果执行P’时要求的资源比P要求的多O(n),则Tcost(P)=便宜;否则如果执行P’时要求资源比P要求的多O(np),其中P>1,则Tcost(P)=贵;否则Tcost(P)=昂贵(即,执行P’需要的资源比P需要多得成指数级别)。
需要指出的是,与转换相关的实际开销依赖于其应用的环境。例如,将一个简单的赋值语句a=5插入程序的顶级,只会多出一个常量。在内部循环中插入的同样语句会有高得多的开销。除非特意指出,我们提出的转换开销都是指它处于源程序的最外层嵌套级别。5.4质量的测量
我们现在给出模糊转换的质量的正式定义:定义6(转换的质量)转换的质量Tqual(P)被定义为T的有效性、弹性和开销的组合:Tqual(P)=(Tpot(P),Tres(P),Tcost(P))。5.5布局转换
在我们探索新的转换之前,我们简单考虑一下琐碎的布局转换,例如,它应用于流行的Java模糊工具Crema。(Hans Peter VanVliet,Crema--Java模糊工具。http://web.inter.nl.net/users/H.P.van.Vliet/crema.html,1996年1月)。第一个转换删除了Java类文件中有时可用的源码格式化信息。这是一种单向的转换,因为一旦源格式化丢失,它就不能被恢复;这是一种有效性很低的转换,因为格式化中的语义内容很少,所以删除格式化时没有引入多大的混乱;最后,因为这是一种免费转换,因为它不影响应用程序的空间和时间复杂度。
搞乱标识符名也是一种单向而且免费的转换。然而,它比删除格式化的有效性要高,因为标识符包含了大量的实用信息。6.控制信息
在本部分和以下几个部分,我们将提出模糊转换的目录。有些是从其它领域,例如编译器优化和软件工程的著名转换中借用的,其它是依据本发明的实施例,为模糊的目的而开发的。
在本部分,我们将讨论试图使源应用程序的控制流模糊的转换。如图2f所示,我们将这些转换分为控制流的聚集、排序或计算。控制聚集转换可以分离逻辑上组合的计算或合并逻辑上分离的计算。控制排序转换对计算执行的顺序进行随机化。计算转换则插入新的(冗余的或无用的)代码,或者对源应用程序作出算法上的改变。
对于改变控制流的转换来说,不可避免的会产生一定量的计算花费。对于爱丽丝来说,这意味着她可以在高效的程序和高度模糊的程序之间作出抉择。一个模糊工具可以通过让她在便宜和昂贵的转换之间进行选择,来帮助她进行平衡。6.2模糊谓词
设计改变控制的转换时真正的挑战在于使它们不仅便宜,而且能抵抗反模糊工具的攻击。为达此目的,许多转换依赖于模糊变量和模糊谓词的存在。非正式情况下,如果预先知道变量V有一个模糊工具,但反模糊工具很难推断出的属性q,则V就是模糊的。类似的,如果谓词P(一个布尔表达式)的结果被模糊工具知道,但反模糊工具却很难推断出来,则谓词P也是模糊的。
是否能产生反模糊工具难以破解的模糊变量和谓词,是模糊工具创造者面临的主要挑战,也是高弹性控制转换的关键。我们对模糊变量或谓词的衡量(即它对于反模糊攻击的抵抗能力)也借用转换弹性同样的标准(即极弱的,弱的,强的,完全的,单向的)。类似地,我们也借用转换开销的衡量标准(免费,便宜,贵,昂贵)来衡量模糊构架的附加开销。定义7(模糊构架)如果一个V在程序的p点有属性q,则变量V在p点是模糊的,此点被称为模糊时刻。如果p从上下文来看很清楚,则我们将这记做Vq p或者Vq。如果谓词P的结果在模糊时刻就已知了,则谓词P在P点模糊。如果P在p点一直被赋值为假(或真),则我们记做PF p(PT p),如果P有时估价为真,有时为假,则记做P p。再次,如果p可以从上下文看出,则可以将其略去。图9显示了不同类型的模糊谓词。实线表示的是有时会采取的路线,而虚线表示从来不被采用的路线。
下面我们给出几个简单模糊构架的例子。这些都很容易被模糊工具构建,也很易被反模糊工具破解。第8部分提供的模糊构架带有的弹性要高得多。6.1.1极弱和弱的模糊构架
如果反模糊功能能通过静态局部分析来破解(即推知它的值)一个模糊构架,则该构架为极弱的。如果分析局限于控制流图表的单个基本块,则该分析是局部的。图10a和10b提供了极弱模糊构架(a)和弱模糊构架(b)的例子。
如果一个模糊变量可以通过对带有简单易懂语义的库函数进行调用来计算出来,我们认为该模糊变量为极弱的。对于JavaTM之类的语言来说,这些语言要求所有的执行过程都支持标准的库类,这些模糊变量很容易构建。一个简单的例子是int V5[1,5]=random(1,5),其中random(a,b)是返回a到b的范围之中的整数的库函数。这些模糊变量同样易于反模糊。反模糊工具设计者所需要做的仅仅是列出所有简单库函数的语义,然后对模糊后代码的函数调用进行模式匹配。
如果反模糊工具能够通过静态全局分析破解一个模糊构架,则该构架是弱构架。如果一个分析仅限于对单个控制流图表进行,则该分析是全局的。6.2计算转换
计算转换分为三类:将真正的控制流隐藏在对实际计算没有作用的无关语句后,引入对象代码级别的代码序列,后者没有对应的高级语言构架,或者删除真正的或引入假的控制流抽象。6.2.1插入死代码或无关代码
u2和u3量度表示一段代码的可觉察复杂性和它带有的谓词数目之间有很强的联系。使用模糊谓词时,我们可以建立能向程序中引入新谓词的转换。
考虑图11中的基本块S=S1...Sn。在图11a中,我们向S中插入一个模糊谓词PT,将其完全分为两半。谓词PT是无关代码,因为它的值一直为真。在图11b中,我们再次将S分为两半,并继续产生后一半的两个不同的模糊版本Sa和Sb。Sa和Sb是通过向S的后半部分应用不同的模糊转换集来产生的。因此,对于一个反向工程师并不明显的是,Sa和Sb事实上执行了同样的功能。
图11c与图11b类似,但是这次我们向Sb引入了错误。PT谓词经常选择代码的正确版本Sa。6.2.2扩展循环条件
图12显示的是我们如何通过使终止条件更复杂来对循环进行模糊。基本的观点是用一个PT或PF谓词来扩展循环条件,该谓词不会影响循环执行的次数。例如我们在图12d中添加的谓词一直都为真,因为x2(x+1)2=0(mod4)。6.2.3将可推知的流图表转化为不能推知的流图表
编程语言一般被编译为本地或虚拟机代码,后者比语言本身表达得更清楚。如果情况是这样,它允许我们创建破解语言的转换。如果转换引入了和源语言构架没有直接关系的虚拟机(本地代码)指令序列,则该转换是语言破解型的。如果遇到这样的指令序列,反模糊工具将不得不试图去合成一个等效的(但是复杂的)源语言程序或完全放弃。
例如,JavaTM字节码有一个goto指令,但是JavaTM语言没有对应的goto语句。这意味着JavaTM字节码能够表示判断控制流,而JavaTM语言仅仅(容易地)能表达结构化的控制流。在技术上我们认为,JavaTM程序产生的控制流图表一直是可以推导的,但是JavaTM字节码可以表示不能推导的流图表。
因为用不带有goto语句的语言来表示不能被推导的流图表会非常蹩脚,我们构建了一个能够将可推导的流图表转换成不能推导的流图表的转换。这可以通过将结构化的循环变成带有多个头的循环来实现。例如在图13a中我们对一个while循环增加一个模糊谓词PF,使得看起来在循环的中间有一个跳转。事实上这个分支永远不会被执行。
JavaTM反编译器必须将一个不能推导的流图表变成一个能复制的代码或包含外部布尔变量的流图表。另一种方法是反模糊工具能够猜测所有不能推导的流图表都是由模糊工具产生的,而且能简单地删除该模糊谓词。对此,我们经常使用图13b中显示的另一种转换。如果反模糊工具盲目地删除PF,得出的会是不正确的代码。
特别地,图13a和13b中显示的是一种将可推导的流图表转换成不可推导的流图表的转换。在图13a中,我们将循环体S2分成两部分(Sa 2和Sb 2),然后将一个假跳转插入Sb 2的开始部分。在图13b中,我们也将S1分成两部分,Sa 1和Sb 1。Sb 1被移动到循环中,模糊谓词PT可以确保Sb 1在循环体之前执行。另一个谓词QF确保Sb 1只被执行一次。6.2.4删除库调用和编程习语
大多数用Java编写的程序主要依赖对标准库的调用。因为库函数的语法是众所周知的,这样的调用会为反向工程师提供有用的线索。如果经常通过名称对Java库函数进行引用,而这些名称不能被模糊,这个问题就会变得越来越严重。
在许多实例中,模糊工具能通过单独提供自己的标准库版本来解决这个问题。例如,对Java字典库(使用杂表来实现)的调用可以被转化为对带有相同行为的类的调用,但是作为一棵红黑树来执行。这种转换的开销对执行时间影响不大,但增大了程序的大小。
同样的问题也发生在习语(或称模式),即在许多应用程序中常见的公共编程习语上。经验丰富的反向工程师会搜索这些模式,以跳跃式地进行对不熟悉的程序的理解。作为一个例子,请考虑一下JavaTM中的链接列表。JavaTM库没有标准的类来提供常见的操作,例如插入、删除和列举。所以许多JavaTM的程序员通过将它们在下一个字段中链接起来,以一种特别的方式构建了对象列表。在JavaTM程序中,重复使用这些列表是一种常见的模式。在自动程序识别的领域中发明的技术(参见Linda Mary Wills,自动程序识别:一个可行性演示。人工智能,45(1-2):113-172,1990,此处引用作为参考),可以被用于辨别常见模式并用不太明显的模式替换它们。例如在链接列表的实例中,我们可以用不太常见的数据结构来表示标准的列表数据结构,例如将光标换成以数组表示数组的元素。6.2.5表解释
一种最有效(也最昂贵)的转换方式是表解释。这种观点是将一段代码(本例中是Java的字节码)转变成不同的虚拟机代码。然后这些新代码被模糊后的应用程序所包括的虚拟机解释器执行。显然,某一应用程序可以包括多种解释器,每一种能接受不同的语言并执行模糊后应用程序的不同部分。
因为每一级的解释都有一个数量级的降低过程,这种转换应该对那些组成全部运行时的一小部分代码,及需要非常高级别保护的代码段进行反向。6.2.6增加冗余运算符
一旦我们已经构建了一些模糊变量,我们就可以使用代数法则向算术表达式中添加冗余运算符。这将提高u1量度。显然,这种技术对数字精确程度不存在问题的整数表达式效果最好。在下面的模糊后语句(1’)中,我们将使用值为1的模糊变量P。在语句(2’)中,我们构建了一个值为2的模糊表达式P/Q。显然。我们能让P和Q在程序执行过程中取不同的值,只要在任何需要执行语句(2’)的时候它们的商为2即可。
(1)X=X+V;     =T=>               (1’)X=X+V*P=1
(2)Z=L+1;                            (2’)Z=L+(P=2Q/Q=P/2)/2.6.2.7并行代码
自动并行是一个在多处理器机器上运行的应用程序性能的重要编译器优化法。我们希望使程序并行的原因当然是不同的。我们希望提高并行程度,并非为了提高性能,而是为了对实际的控制流进行模糊。我们有两个可能的操作方法:
1.我们可以产生不执行任何实际工作的假进程,以及
2.我们可以将一段顺序的应用程序代码分为多个并行执行的段。
如果应用程序在多处理器的机器上运行,我们可以预期这些转换会有明显的执行时间上的浪费。在许多情况下,这是可以接受的,因为这些转换的弹性很高:对并行程序的静态分析是非常困难的,因为程序的可能执行路径数随着执行进程的数目而呈指数级增长。并行处理还提供了高级别的有效性:反向工程师会发现并行程序比顺序执行的程序要难懂得多。
如图14所示,如果一段代码不包含数据附件,可以很容易地使其并行。例如,如果语句S1和S2的数据是独立的,它们就可以并行运行。在Java类没有明显并行结构的编程语言中,可以通过对线程(轻重量级的进程)库的调用来使程序并行化。
如图15所示,通过插入适当的同步原语,可以将包含数据附件的一段代码分成并发的线程,例如等待和前进(参见MichaelWolfe。用于并行计算的高性能编译器。Addison-Wesley,1996.ISBN0-8053-2730-4,此处引用作为参考)。这样的程序本质上是顺序运行的,但是控制流会从一个线程转到下一个线程。6.3聚集转换
程序员通过引入抽象来克服编程的内在复杂性。一个程序的多个级别上都有抽象,但是过程抽象是最重要的。因此,对模糊工具来说,对过程和方法的调用进行模糊是非常重要的。下面,我们将考虑几种对方法和方法实施进行模糊的方法:内联,外联,交织,和复制。这些之后的基本想法是相同的:(1)程序员加入方法中的代码(想来是因为在逻辑上它们属于同类),应该分解并散开到整个程序中,(2)看起来并不属于同类的代码应该被聚集成一种方法。6.3.1内联和外联方法
当然,内联是一种重要的编译器优化。它也是一种特别有用的模糊转换,因为它删除了程序中的过程抽象。内联是一种弹性很高的转换(它在本质上是单向的),因为一旦程序调用为被调用程序中的主体所替换,程序本身就被删除了,代码中不会留下抽象的痕迹。图16显示的是过程P和Q在它们的调用站点被内联,然后从代码中删除。
外联(将语句序列变为子例程)是内联的一种非常有用的伴随转换。我们通过将Q代码的开始部分和P代码的尾部提取到过程R中,从而创建假的过程抽象。
在JavaTM语言等面向对象的语言中,内联事实上并不都是完全单向的转换。考虑一种方法援引m.P()。实际被调用的程序依赖于m的运行时类型。在某一调用站点援引一种以上方法的例子中,我们将所有可能的方法内联起来。(参见Jeffrey Dean面向对象语言的全程序优化.博士论文,华盛顿大学,1996年,此处引用作为参考),并根据m的类型进行分支来选择合适的代码。因此,即使在使用内联和删除方法之后,模糊后的代码还是包括源抽象的一些痕迹。例如,图17显示的是内联方法调用。除非我们能够静态地确定m的类型,否则所有能引用m.P()的方法都必须在调用地点进行内联。6.3.2插入方法
对插入代码的检测是一个重要而复杂的反向工程任务。
图18显示的是我们如何插入同一类中声明的两种方法。这种想法在于将方法的主体和参数列表合并,并且增加多余的参数(或全局变量)来区分对单个方法的调用。理想情况是,方法应该在本质上类似,以允许将公用代码和参数进行合并。这就是图18中的实例,M1和M2的第一个参数的类型相同。6.3.3复制方法
当反向工程师试图理解子例程的目的时,他自然会检查它的签名和主体。然而,与理解例程的行为同样重要的是,它被调用时的环境是不同的。我们使过程变得困难的方法是,对方法调用的地点进行模糊,使得似乎是在调用不同的例程,而事实上,情况并非如此。
图19显示的是我们如何创建一个方法的多个不同版本,方法是将不同的模糊转换集应用到源码上。我们使用方法分发在运行时的不同版本间作出选择。
方法复制与图11中的谓词插入转换类似,只是我们使用的是方法分发,而不是模糊谓词,在不同的代码版本之间作出选择。6.3.4循环转换
大量的循环转换被设计用于改善(特别是)数值应用程序的性能。参见Bacon[2]以取得全面的了解。这些转换中的某些对我们是有用的,因为它们也增加复杂性量度,上文中已结合图7作了讨论。图20a中所示的循环单元化被用于通过分解其重复空间,使得内层的循环正好位于缓存中,来改善循环的高速缓存性能。如图20b所示的循环展开,可以一次或多次复制循环的主体。如果循环的边界在编译时已知,则该循环可以完全展开。如图20c所示的循环空隙带有复合体的循环转化为多个带有相同重复空间的循环。
所有这三种转换都提高了u1和u2的量度,因为它们增加了原应用程序的总代码大小和条件的数量。循环的单元化转换还引入了多余的嵌套,因此也提高了u3的量度。
单独使用时,这些转换的弹性相当低。反模糊工具要将展开的循环重新卷起,并不需要大量的静态分析。然而,当综合运用这些转换时,弹性就会迅速增加。例如,在图20b所示的简单循环中,首先我们可以进行展开,然后应用空隙,最后单元化。将最终的循环恢复到原始形式需要反模糊工具作出大量的分析。6.4排序转换
程序员试图组织他们的源代码,使其位置关系最大化。这种想法就是,如果逻辑上相互关连的两个项目在物理上也和源文本相近,则程序易于阅读和理解。这种位置关系在源程序的每一级都起作用:例如,在表达式中的术语,基础模块中的语句,方法中的基础模块,类中的方法以及文件中的类之间都有位置关系。所有种类的空间位置关系都能为反向工程师提供有用的线索。因此,一旦有可能性,我们就将源应用程序中任何项目的位置随机化。对于某些种类的项目(例如类中的方法)来说,这是微乎其微的。在另外一些实例(例如基础模块总的语句)中,执行一个数据附件分析(参见David F. Bacon,Susan L. Graham和Oliver J.Sharp的《用于高性能计算的编译器转换》。ACM计算概述,26(4):345-420,1994年12月。http://www.acm.org/pubs/toc/Abstracts/0360-0300/197406.html。以及Michael Wolfe的《用于并行计算的高性能编译器)》。Addison-Wesley,1996.ISBN 0-8053-2730-4,此处引用作为参考)以确定哪一种重排序在技术上是有效的。
这些转换的有效性都很低(它们并未为程序增加多少模糊性),但是它们的弹性很高,在许多实例中是单向的。例如,当基础模块中语句的位置已经随机化,在结果代码中将不会留下源代码的痕迹。
排序转换与6.3.1节中的“内联-外联”转换一起使用时,会特别有用。提高转换的有效性能够通过(1)在程序P中内联几个程序调用,(2)对P中对语句的顺序随机化,(3)对P中语句的邻接部分进行外联化。这样,原来作为多个不同程序的部分的不相关语句可以合并成假的程序抽象。
在某些实例中,也有可能重新排列循环,例如通过反向运行它们。这样的循环反向转换在高性能编译器(参见David F.Bacon,Susan L. Graham和Oliver J.Sharp的《用于高性能计算的编译器转换》,ACM计算概述,26(4):345-420,1994年12月。http://www.acm.org/pubs/toc/Abstracts/0360-0300/197406.html)中非常普遍。7.数据转换
在本节我们将讨论使源应用程序中使用的数据结构变得模糊的转换。如图2e中所示,我们将这些转换分为:对存储,编码,聚集或数据排序的影响。7.1存储和编码转换
在许多情况下,有一种以“原有”方式来存储程序中的特定数据项。例如,通过重复数组的元素,我们可能将一个适当大小的局部整型变量分配为重复变量。其它的变量类型也有可能,但是它们不是原有的,很可能会降低效率。
进一步,经常会存在对某一变量拥有的位模式的“原有的”解释方式,该方式基于变量的类型。例如,我们通常假定存储位模式0000000000001100的16位整型变量表示整数值12。当然,这些仅仅是惯例,而其它解释也是可能的。
模糊存储转换试图为动态和静态数据选择非原有的存储类。类似地,编码转换试图为通常的数据类型选择非原有的编码。存储和编码转换常常一起进行,但是有时它们也可以单独使用。7.1.1改变编码
作为一个编码简单例子,我们将用i0=c1 *i+c2替换整型变量i,其中c1和c2是常数。为提高效率,我们选择c1作为两个中的幂。在下面的例子中。我们令c1=8,c2=3:
    {             =T=>             {

    inti=1;                          inti=11;

    while(i<1000)                     while(i<8003)

        ...A[i]...;                     ..A[(i-3)/8]...;

        i++;                              i+=8;

    }                                  }
显然,还需要考虑溢出(而且,在浮点变量中还有精确性)问题。我们可以确定,因为被讨论变量有一个范围(该范围可以使用静态分析技术或询问用户来决定),所以不会发生溢出,或者我们可以将其变为较大的变量类型。
在弹性与有效性的组合和开销之间会有一个平衡。上例中使用例如i0=c1+i+c2的简单编码函数,增加的额外执行时间很少,但是可能因使用常见的编译器分析技术(参见Michael Wolfe的《用于并行计算的高性能编译器》。Addison-Wesley,1996.ISBN 0-8053-2730-4,以及David F. Bacon,Susan L. Graham和Oliver J.Sharp的《用于高性能计算的编译器转换》,ACM计算概述,26(4):345-420,1994年12月。http://www.acm.org/pubs/toc/Abstracts/0360-0300/197406.html)反模糊化。7.1.2提升变量
有多个简单的存储转换,可以将专门化的存储类中的变量提升为更加普遍的类。它们的有效性和弹性通常很低,但是在与其它的转换结合运用时会相当有效。例如,在Java中,一个整型变量会被提升为一个整型对象。对于其它拥有对应“打包”类的标准类型也是这样。因为JavaTM支持垃圾收集,所以一旦对象不被引用,就会被自动删除。以下是一例:
    {                               {

    int i=1;                      int i=new int(1);

    while(i<9)     =T=>         while(i.value<9)

    ...A[i]...;                     ..A[i.value]...;

    i++;                           i.value++;

    }                               }
还可以改变一个变量的生存时间。最简单的这类转换将局部变量转化为独立的程序调用之间共享的全局变量。例如,如果程序P和Q都参考一个局部整型变量,则P和Q不能同时活动(除非程序包括线程,这可以通过检查静态调用表来决定),然后变量被全局化,并在它们之间共享:
    void P(){                          intC;

    inti;...I...                      void P(){

    }                                  ...C...

                                       }

    void Q(){         =T=>          while{ivalue<9}

    int k;...k...                     ...C...

    }                                  }
这种转换提高了u5量度,因为被P和Q参考的全局数据结构的数量增加了。7.1.3分离变量
布尔变量和其它有限定范围的变量可以被分离为2个或多个变量。我们将被分离为k个变量p1,...pk的变量V写作V=[p1,...,pk]。典型地,这种转换的有效性会随着k增加而增加。不幸的是,转换的开销也会增加,所以我们通常将k限定为2或3。
要让T类型的变量V被分离成U类型的两个变量p和q,就要求我们提供三种信息:(1)将p和q的值映射为相应的V的值的函数f(p;q),(2)将V的值映射为相应的p和q的值的函数g(V),以及(3)通过p和q的运算符产生的新运算符(对应于根据T类型的值的原运算)。在本节的剩余部分我们将假定V的类型为布尔,p和q是小的整型变量。
图21a显示的是表示分离布尔变量的可能选择。表中显示,如果V被分离为p和q,并且在程序的某一点,p=q=0或者p=q=1,则V对应的为假。类似地,p=0,q=1或者p=1,q=0对应的是真。
有了这种新的表示方法,我们就必须为多个内置的布尔运算符(例如&,or)创建代替的方法。一种方法是为每个运算符提供一个运行时查询表。“AND”和“OR”的表分别在图21c和21d中显示。如果给出两个布尔变量V1=[p,q]和V2=[r,s],则可以用AND[2p+q,2r+s]来计算V1&V2
在图21e中,我们显示分离的结果,即三个布尔变量A=[a1,a2],B=[b1,b2],和c=[c1,c2]。我们选择的表达方式有一个有趣的方面,即同一个布尔表达式有多种可能的计算方法。例如图21e中的语句(3,)和(4’),尽管它们为变量赋的值都为假,但看起来是不同的。类似的,虽然语句(5’)和(6’)完全不同,但它们都计算A&B的值。
转换的有效性、弹性和开销都随原变量被分为的变量数增多而增加。还可以通过选择运行时编码来提高弹性。换句话说,图21b到21d中的运行时查询表并不是在编译时构建的(这样它们不能对抗静态分析),而是通过包含在模糊应用程序中的算法构建的。当然,这会阻止我们使用内联代码来计算原始的运算符,如图21e中所示的(6’)语句。7.1.4将静态数据转化为程序数据
静态数据,特别是字符串,包含有对反向工程师特别有用的众多实用信息。对静态串进行模糊的技术是将它转化为能生成串的程序。该程序--可能是DFA或Trie横贯程序--可能生成别的串。
作为一例,请考虑图22中的函数G,它就是被构建用于对串”AAA”、”BAAAA”和”CCB”进行模糊的。G产生的值为G(1)=”AAA”;G(2)=”BAAAA”,G(3)=G(5)=”CCB”和G(4)=”XCB”(程序中实际上并不常用)。对于其它的自变量值,G可能会终止运行也可能不会。
将所有静态数据的计算聚集到一个函数中去,当然是绝不受欢迎的。如果G函数被分解成能嵌入到源应用程序的“普通”控制流中的较小部件,则可以获得更高的有效性和弹性。
值得指出的是,我们能将这项技术和6.2.5中的表解释转换结合起来实用,模糊的目的在于将一段Java字节码转化为另一种虚拟机的代码。新代码典型地在模糊后的程序中作为静态串数据存储。然而,要达到更高等级的有效性和弹性,可以将这些串转换为能生成它们的程序,如上文所述。7.2聚集转换
与命令式的和功能的语言相比,面向对象的语言比面向控制的语言对数据的针对性更强。换句话说,在面向对象的程序中,是根据数据结构组织控制,反之而不然。这意味着,对面向对象的程序进行反向工程时,一个重要的部分是试图恢复程序的数据结构。反过来,对模糊工具来说,试图隐藏这些数据结构是非常重要的。
在大多数面向对象的语言中,有两种方法聚集数据:数组和对象。在以下三节中,我们将考察模糊数据结构的方式。7.2.1合并等级变量
两个或多个等级变量V1...Vk可以被合并为一个变量VM,条件是V1...Vk的组合范围在VM的精确度之内。例如,两个32位的整型变量可以被合并成一个64位的变量。单个变量上的算术知识将被转换为VM上的算术知识。作为一个简单的例子,请考虑将两个32位的整型变量X和Y合并成一个64位的变量Z。实用以下合并公式:
Z(X,Y)=232*Y+X
我们在图23a中可得算术衡等式。图23b中也给出了一些简单的例子。
特别地,图23显示将两个32位的变量X和Y合并成一个64位的变量Z。Y占据Z的高32位,X占据低32位。如果X或Y的实际范围可以从程序推出就可以实用直觉性更弱的合并。图23a给出了X和Y的加法和乘法的规则。图23b显示了一些简单的例子。例子还可以进一步被模糊,例如通过将(2’)和(3’)合并成Z+=47244640261。
合并变量的弹性非常低。反模糊工具只需考察应用到特定变量上的算术运算符集,就可以猜出它实际上包含了两个合并的变量。我们可以通过引入假运算符来增加弹性,该运算符并不对应于单个变量的任何一个合理运算符。在图23b中的例子中,我们可以插入看起来是将Z的两半合并起来的运算符,例如,通过移位:如果(PF)则Z=rotate(Z,5)。
该转换的一个变体是将V1...Vk合并成有合适类型的数组:
VA=            1...k
                 V1...Vk例如,如果V1...Vk是对象参照的变量,则VA的元素类型可以是在继承等级上比V1...Vk中的任何类型都要高的类。7.2.2重新构建数组
可以有多种方法对数组要运行的运算符进行模糊,例如,我们可以将数组分离为多个子数组,将两个或多个数组合并成一个数组,折叠一个数组(提高维的数目),或展平一个数组(减少维的数目)。
图24显示的是数组重构建的一些例子。在语句(1-2)中,数组A被分离为两个子数组A1和A2。A1包含A中带有偶索引的元素,而A2包含A中带有奇索引的元素。
图24的语句(3-4)中,显示的是两个整型数组B和C是怎样被交叉成为结果数组BC的。B和C中的元素均匀分布到结果数组中。
语句(6-7)中显示的是一维数组D是怎样被折叠成为二维数组D1的。最后,语句(8-9)中显示的是反向转换:二维数组E被展平成为一维数组E1。
数组分裂和折叠提高了u6的数据复杂性度量。另一方面,数组合并和展平似乎降低了这个量度。尽管这似乎表明这些转换只有最低限度的或甚至负面的有效性,事实上,这是具有欺骗性的。问题在于图7的复杂性量度没有抓住数据结构转换的一个重要方面:它们引入了原来没有的结构或是从源程序中删除了结构。这可以极大地提高程序的模糊性。例如,程序员声明一个二维数组的目的是:选中的结构清晰地映射到要操纵的数据上。如果数组被折叠成一维的结构,反向工程师就不能获得许多有用的实用信息。7.2.3修改继承关系
在JavaTM语言等流行的面向对象的语言中,主要的模块化和抽象的概念是类。类在本质上是将数据(实例变量)和控制(方法)进行封装的抽象数据类型。我们将类记做C=(V,M),其中V是C的实例变量集,M是C的方法。
与传统的抽象数据类型的概念相比,两个类C1和C2可以通过聚集(C2有一个C1类型的实例变量)或继承(C2通过增加新的方法和实例变量对C1进行扩展)获得。我们将继承记为:C2=C1UC2。我们说,C2是从其上类或父类C1继承得到的。U运算符的功能是将父类与C’2定义的新属性结合起来。U的确切语义依赖于特定的编程语言。在例如Java的语言中,U被应用到实例变量时经常被解释成结合,而被应用到方法上时被解释成覆盖。
依据度量u7,类C1的复杂度随其在继承级别中的深度(与根的距离)和直接继承类的数目增加而增加。例如,我们可以利用两种基本方法来提高复杂度:我们能如图25a所示分离(分解)一个类,或者如图25b所示插入一个新的假类。
分解类时存在的问题是它的弹性较低;没有什么能够阻止反模糊工具简单地合并分解后的类。为防止这类情况,通常如图25d所示综合运用分解和插入。另一种增加这种类型转换的弹性的方法是,确保新类是由所有的引入的类产生的。
图25c显示的是类插入的一个变体,称为假重分解。重分解是重新构建结构已被破坏的面向对象程序的(有时是自动的)一种技术(参见William F.Opdyke和Ralph E.Johnson的《利用重分解创建抽象上类》。Stan C.Kwasny和JohnF.Buck编写的《计算机科学21届年会进展》,66-73,纽约,纽约州,美国,1993年2月。ACM出版社。ftp://st.cs.uiuc.edu/pub/papers/refactoring/refactoring-superclasses.ps,此处引用作为参考)。重分解分两步进行。首先,检测到两个表面上独立的类事实上实施同样的行为。其次,两个类共有的特征被转移到一个新的(可能是抽象的)父类中。假重分解的过程非常类似,它是在没有共有行为的两个类C1和C2上执行的。如果两个类都有同样类型的实例变量,则它们可以被转移到新的父类C3中。C3的方法可以是来自C1和C2的某些方法的带缺陷版本。7.3排序转换
在6.4节中,我们显示了对计算执行的顺序进行随机化是一种有用的模糊手段。类似地,对源应用程序中声明的顺序进行随机化也很有用。
特别地,我们打乱类中的方法和实例变量以及方法内的正式变量的顺序。在后一种情况中,相应的实际值当然会被重排序。这些转化的有效性很低,而弹性是单向的。
在许多实例中,数组内的元素重排序也是可能的。简而言之,我们提供一个模糊编码函数f(i),将源数组中的i:th元素映射到它在排序后数组中的新位置:
    {                                         {

    int i=1,A[1000];                       int i=1,A[1000];

    while(i<1000)        =T=>             while(i<1000)

    ...A[i]...;                              ..A[f(i)]...;

    i++;                                     i++;

    }                                         }
8.模糊值和谓词
正如我们所看到的,模糊谓词在能模糊控制流的转换的设计过程中是重要构造的模块。事实上,大部分控制转换的质量直接依赖于这些谓词的质量。
在节6.1中,我们给出的例子是带有极弱和弱的弹性的简单谓词。这意味着可以用局部或全局静态分析来破解(一个自动反模糊工具可以确定它的值)模糊谓词。显然,我们通常要求的抗攻击能力要高得多。理想情况是,我们希望构建的模糊谓词需要指数级的时间(对程序的大小而言)来破解,而只需多项式级别的时间来构建。在本节中,我们将提出两种这样的技术。第一个基于别名,第二个基于轻量级的处理。8.1使用对象和别名的模糊构架
只要存在别名的可能性,程序间具体分析就是非常复杂的。事实上,精确的、对流敏感的别名分析在带有动态分配、循环和if语句的语言中是不能确定的。
在本节中,我们将利用别名分析的复杂性来构建对于自动反模糊攻击开销小且有弹性的模糊谓词。8.2使用线程的模糊构架
并行程序比顺序程序更难以静态分析。原因在于它们相互交叉的语义:如果并行区PAR中有n个语句S1,S2,...,Sn,则ENDPAR可以以n!种不同的方法被执行。尽管这样,并行程序上的一些静态分析可能以多项式级别的时间来执行[18],而其它的分析则需要考虑所有的n!个交叉。
在Java中,使用被称为线程的轻量级进程来构建并行区。Java的线程有两个非常实用的属性(从我们的观点来看):(1)它们的调度策略没有被语言规则所严格指定,所以依赖于执行,(2)线程的实际调度依赖于例如由用户交互和网络流量产生的异步事件。与并行区域内部的价值语义结合起来,就意味着对线程很难进行静态分析。
我们将利用这些分析来创建破解时需要指数级时间的模糊谓词(参见图32)。基本的观点与8.2节中用到的相似:创建全局数据结构V,并不时对其进行更新,但保持其状态,使得可以进行模糊查询。不同点在于由并发执行的线程来对V进行更新。
显然,V可以是如图26中创建的动态数据结构。这些线程通过异步执行调用来实现移动和插入,从而使全局指针g和h在它们各自的组件中随机移动。这么做的优势在于能将数据类与交织和别名效果相结合,从而达到高水平的弹性。
在图27中,我们用简单得多的例子展示了这些观点,其中V是两个全局整型变量X和Y。这是基于基础数论中的著名事实:对于任何整数x和y,7y2-1不会等于x2。9.反模糊和预防性转换
我们的许多反模糊转换(特别是节6.2中的控制转换)可以说就是在真实程序中嵌入假程序。换句话说,一个模糊后的应用程序事实上包含了合为一体的两个程序:执行有用任务的真程序和计算无用信息的假程序。假程序的唯一用途是,通过将真程序藏在无关代码后,来迷惑反向工程师。
模糊谓词是模糊工具的主要工具,可以用来防止假程序被轻易地识别和删除。例如,在图28a中,一个模糊工具在真程序的三个语句中嵌入被模糊谓词保护的假代码。反模糊工具的任务是检测模糊后的应用程序,并自动识别和删除内部假程序。为完成此任务,反模糊工具首先必须识别并评估模糊构架。该过程在图28b到图28d中描述。
图29显示了半自动反模糊工具的结构。它集成了多种在反向工程界众所周知的技术。在本节的剩余部分,我们将简单介绍这样一些技术,并讨论多种对抗措施,它们被模糊工具用来使反模糊过程变得更困难(即所谓的预防性转换)。9.1预防性转换
上文讨论的与图2g相关的预防性转换,与控制或数据转换在风格上是完全不同的。与这些转换相比,它们的主要目的不是使程序对人类阅读者更模糊。它们被设计用于使已知的自动反模糊技术更加困难(内在的预防性转换),或者用于探索当前反模糊工具和反编译器中的已知问题(预期的预防性转换)。9.1.1内在的预防性转换
内在的预防性转换一般有效性很低而弹性较高。最重要的是,它们能迅速提高其它转换的弹性。例如,假定我们如6.4节中所提到的那样,对一个向后运行的for循环重新排序。只要因为我们能确定循环中没有循环携带的数据附件,我们就能够应用这种转换。当然,以上工作并不能阻止反模糊工具执行相同的分析并且将循环转向为向前执行。为防止这类事情的发生,我们可以在反向循环加一个假数据附件。
    {                                                {

    for(i=1;i<=10;i++)=T=>                   int B[50];

    A[i]=i;                                        for(i=10;i<=1;i--)

    }                                                A[i]=i;

                                                     B[i]+=B[i*i/2]

                                                     }
内在预防性转换为循环重排序转换增加的弹性,取决于假附件的复杂性和附件分析[36]中的技术状态。9.1.2预期的预防性转换
作为预期预防性转换的一个例子,考虑HoseMocha程序(MarkD.LaDue.HoseMocha.http://www.xynyx.demon.nl/java/HoseMocha.java,1997年1月)。它被特别设计用于探索Mocha编译器(Hans Peter Van Vliet.Mocha---《Java编译器》,http://web.inter.nl.net/users/H.P.van.Vliet/mocha.html,1996年1月)的弱点。HoseMocha在源程序每种方法中的每一个返回语句后插入额外的指令。这种转换对应用程序的行为没有影响,但是它足以使Mocha崩溃。9.2识别和评估模糊构架
反模糊工作中最困难部分是识别和评估模糊构架。注意,识别和评估是不同的行为。一个模糊构架可以是局部的(包含在一个基础模块中),全局的(包含在一个程序中),或者程序间(分布在整个程序中)。例如,if(x*x==(7F*y*y-1))是一个局部模糊谓词,而R=X*X;...;S=7*y*y-1;...;if(R==SF)...都是全局变量。如果在不同的程序中执行R和S的运算,构架就是程序间的。显然,识别局部模糊谓词比确定程序间的模糊谓词要容易。9.3通过模式匹配进行识别
反模糊工具可以利用对已知模糊工具使用的策略的知识来识别模糊谓词。一个反模糊工具的设计者可以研究模糊工具(通过反编译或是简单地研究它生成的模糊后代码),和构建可以识别广泛使用的模糊谓词的模式匹配规则。这种方法对简单的局部谓词效果很好,例如x*x==(7*y*y-1))和random(1F,5)<0。
为了挫败模式匹配的企图,模糊工具应该避免使用千篇一律的模糊构架。同样重要的是,选择在句法上与实际应用程序中使用的构架类似的模糊构架。9.4程序分片识别
程序员通常会发现程序被模糊后,比源程序会更难理解和进行反向工程。主要原因在于在模糊后的程序中,(a)活动的“真”程序中散布着死的假代码,(b)逻辑上关连的代码段被分解并散布到程序中。反向工程师可以使用程序分片工具来对抗模糊。这些工具可以交互式地帮助工程师将程序分解为被称为片的可管理块。程序P中与点p和变量v有关的片包括在p点能得出v值所有P中的语句。因此,即使模糊工具将计算模糊变量v的算法的语句分散在整个程序中,程序分片器也可以从模糊后的程序中分离出这些语句。
模糊工具有多种策略来破坏分片这种识别工具的效果:增加参数别名。一个参数别名是两个指向同一内存区域的正式参数(或一个正式的参数和一个全局变量)。精确程序间分片的开销会随着程序中潜在别名的数量增加而增长,而别名的数量随正式参数的数量增加呈指数级增长。因此,如果模糊工具在程序中加入了有别名的假参数,它会明显降低分片器的速度(如果要求进行精确分片的话),或是强迫分片器产生不精确的片(如果要求快速分片)。
如果增加变量附件,例如Unravel(James R.Lyle,Dolorres R.Wallace,James R.Graham,Keith B.Gallagher,Joseph P.Poole和David W Binkley的《Unravel:一种有助于评估高集成软件的软件工程工具》,卷1:要求和设计。技术报告NIS-TIR 5691,美国商业部,1995年8月)的流行分片工具运用在小片上效果还可以,但是计算大片时有时会要求额外的时间。例如,对4000行的C程序进行分析时,某些实例中的Unravel计算1个片需要30分钟以上。为了强化这种行为,模糊工具应该试图通过增加假变量附件,来增加片的大小。在下面的例子中,我们通过增加两个似乎对计算x的值有用而实际无用的语句,使片变大。
    main(){        =T=>            main(){

    intx=1;                         intx=1;

    x=x*3;                          if(PF)x++;

                                      }x=x+V0;

                                      x=x*3;

                                      }
9.5统计分析
反模糊工具能利用模糊后的程序,来分析出所有谓词的结果。我们可以使用任何用这种方法,即统计分析,来检查模糊后程序的运行时特征的反模糊方法。反模糊工具会提醒反向工程师注意任何在多次运行过程中一直返回“真”值的谓词,因为它们很可能就是模糊PT(PF)谓词。反模糊工具不能盲目地用“真”或“假”来替换这些谓词,因为这样太危险了。许多应用程序会包含对例外环境中发生的条件进行检验的“真实”谓词,对反模糊工具来说,它们看起来和模糊谓词是一样的。作为一例,请考虑if(LeapYear)....
统计分析还可以用于赋值。一旦识别出程序M中的潜在模糊谓词(例如PT),我们就可以猜测其值(为真),然后产生模糊后程序的版本M’,其中模糊谓词被猜测出的值所代替。然后我们对同一个输入并行运行M和M’,并比较它们的输出是否相同。如果输出相同,我们可以确定该谓词是假程序的一部分,而不是真程序部分,如图30。
我们必须确信,我们选中的输入完全涵盖了程序中的所有路径。然而,如果程序包括很少采用的路径(if(Leap Year)),这就会很困难。进一步,产生大量的正确输入数据是非常困难的,特别是当应用程序的内部结构未知,或者输入是通过复杂的图形用户界面进行的时候。
为了避免被统计分析所识别,模糊工具可以优先选择插入P谓词的转换(如图11b所示),而不是插入PT或PF谓词的转换。
另一个对抗统计分析的可能措施是设计模糊谓词时,使得必须同时破解多个谓词。这样做的一种方法是,让模糊谓词有附加效果。在下例中,模糊工具(通过某种静态流分析)确定,S1和S2语句必须执行相同的次数。通过引入调用函数Q1和Q2的模糊谓词,对语句进行模糊。Q1和Q2增加和减少了全局变量k:
    {              =T=>                   {

    S1;                                     int k=0;

    S2;                                     bool Q1(x){

    }                                        k+=231;return(PT1)}
				
				<dp n="d52"/>
                                 bool Q2(x){

                                 k-=231;return(PT2)}

                                 {

                                 if(Q1(j)T)S1;

                                 …

                                 if(Q2(k)T)S2;

                                 }
如果反模糊工具试图用真来替换一个(而不是两个)谓词,则k会溢出。结果是,反模糊后的程序会在出错的条件下终止。9.6使用数据流分析的评估
反模糊与许多种代码优化是类似的。删除if(False)就是除去死亡代码,从if语句的分支移动相同的代码就是代码提升,这两者都是常见的代码优化技术。
一旦模糊构架被识别,我们可以试图对其进行评估。在简单的例子中,使用到达定义的数据流分析的常数传播可能是足够的:x=5;...;y=7;...;if(x*x==(7*y*y-1))....9.7使用定理证明的评估
如果数据流分析不足以强大到破解模糊谓词,反模糊工具可以试图使用定理证明器。这是否可行完全取决于现有的定理证明器的威力(这是很难确定的),以及需要证明的定理的复杂程度。当然,能被推导(例如x2(x+1)2=0(mod=4))来证明的定理都完全在目前的定理证明器的能力范围之内。
为了使任务变得困难,我们可以使用被知道是很难证明的定理,或者没有任何已知证据存在的定理。在下面的例子中,反模糊工具必须证明,假循环经常终止,目的是为了确定S2是活代码:
    {            =T=>                    {

    S1;                                    S1;

    S2;                                    n=randon(1,232);

    }                                       do

                                                  n=((n%2)!=0)?3*n+1:n/2

                                            S2;

                                            }
这被称为Collatz问题。一种猜测说,循环一直都可以终止。尽管这种猜测没有任何证据,但对于比7*1011这样大的数下的所有数,我们知道代码会终止。因此,这种模糊是安全的(源代码和模糊后代码的表现相同),但是很难被反模糊。9.8反模糊的部分评估
反模糊也模仿部分评估。部分评估器将程序分为两部分:能被部分评估器预先计算的静态部分,和在运行时执行的动态部分。动态部分与我们原来的模糊前的程序对应。而静态部分与我们的假内部程序对应,如果它被识别,则可以在反模糊时被评估和删除。
和所有其它的静态程序间分析方法一样,部分评估对别名很敏感。因此,与分片结合讨论的同样的预防性转换,也可以应用到部分评估上。10.模糊算法
在第3节的模糊工具体系结构,第5节中的模糊质量的定义以及第6到第9节中对不同模糊转换的讨论的基础上,我们现在依据本发明的实施例,提出更详细的算法。
模糊工具的顶级循环可能有这种常见的结构:
    WHILE NOT Done(A)DO

        S:=SelectCode(A);

        T:=SelectTransform(S);

        A:=Appy(T,S);

    End;
SelectCode返回待模糊的下一个源代码对象。SelectTransform返回应该用于对特定的源代码对象进行模糊的转换。Apply将转换应用到源代码对象上并据此更新应用程序。Done确定何时获得需要的模糊等级。这些函数的复杂性依赖于模糊工具的复杂性。如果模糊工具最简单,则SelectCode和SelectTransform简单地返回随机源代码对象/转换,而Done可以在应用程序的大小超过一定的限制时终止循环。通常,这种行为是不够的。
算法1给出了带有更复杂选择和终止行为的代码模糊工具的描述。在一个实施例中,算法使用了算法5,6,7构建的多种数据结构。
每一种源代码对象S的PS,PS(S)是程序员在S中使用的语言
构架集。PS(S)被用于为S找出合适的模糊转换。
每一种源代码对象S的A,A(S)={Ti-->V1;...;Tn-->Vn}是转换
T与值Vi之间的映射,描述的是将Ti应用到S上的合适程度
如何。想法是某些转换对于特定源代码对象S可能是不合适
的,因为它们引入了对于S来说“不自然”的新代码。新代
码在S中显得不合适,因此很容易被反向工程师定位。合适
值Vi越大,则转换Ti引入的代码就越适合。
每一种源代码对象S的I,I(S)是S的模糊优先级。I(S)描述的
是它对于模糊S从内容是多么重要。如果S包含重要的商业
秘密,I(S)会很高,如果它包含的只是“面包—黄油”代码,
则I(S)会很低。
每个例程M的R,R(M)是M的执行时间级别。如果执行M
花费的时间比执行其它例程的时间要长,则R(M)=1。
算法1的主要输入是应用程序A和一套模糊转换{T1;T2;...}。算法还要求与每种转换相关的信息,特别是三个质量函数Tres(S),Tpot(S),Tcost(S)(名称与第5节中相同,但返回数字值)和一个函数Pt
Tres(S)返回的是转换T被应用到源码对象S上时的弹性量度(即
T对抗自动反模糊工具的效果如何)。
Tpot(S)返回的是转换T被应用到源码对象S上时的有效性量度
(即T被T模糊后,对人来说理解的难度增加了多少)。
Tres(S)返回的是T在S上增加的执行时间和空间花费的量度。
Pt将每一个转换T映射到T为应用程序增加的语言构架集上。
算法1的点1到点3载入待模糊的应用程序,并建立适当的内部数据结构。点4建立PS(S),A(S),I(S)和R(M)。点5应用模糊转换,直到达到要求的模糊级别或超过了最大时间花费。最后,点6重新写出新的应用程序A’。算法1(代码模糊)
输入:
a)由源代码或对象代码文件C1;C2...组成的应用程序A。
b)有语言定义的标准库L1;L2;...
c)模糊转换集{L1;L2;...}。
d)映射Pt,对每一个转换T给出T将会在应用程序加入的一
  套语言构架。
e)三个表示与源码对象S有关的转换T的质量的函数Tres(S),
  Tpot(S),Tcost(S)。
f)A的一组输入数据I={I1;I2;...}
g)两个数字值AceptCost>0且ReqObf>0。AceptCost是用户
  可以接受的最大额外执行时间/空间花费的量度。ReqObf
  是用户要求达到的模糊程度的量度。
输出:由源代码或对象代码文件组成的模糊后应用程序A’。
1.载入待模糊的应用程序C1;C2;...。模糊工具可以:(a)载入源码文件,其中模糊工具必须包含完整的前端,可以执行语义、句法和语法分析(仅限于单纯句法转换的威力较小的模糊工具,也可以在不进行语义分析的情况下工作),或者
b)载入对象代码文件。如果对象代码中保存着源代码中的
大部分或全部信息,则优先选择这种方法。
2.载入应用程序直接或间接引用的库代码文件L1;L2;...
3.建立应用程序的一个内部表达。对内部表达的选择取决于源文件的结构和模糊工具所实施转换的复杂度。典型的数据结构组可能包括:
a)A中每一个例程的控制流图表。
b)A中例程的调用图表。
c)A中类的集成图表。
4.构建映射R(M)和PS(S)(使用算法5),I(S)(使用算法6)和A(S)(使用算法7)。
5.将模糊转换应用到应用程序中。每一步,我们选择一个源码对象S进行模糊,以及一个合适的转换来应用到S上。一旦获得要求的模糊级别或者超过可接受的执行时间花费,进程终止。REPEAT
S:=SelectCode(I);
I:=SelectTransform(S,A);
对S应用T,并从点3更新相关数据结构;UNTIL Done(ReqObf,AcceptCost,S,T,I)
6.将模糊后源代码对象重建到新的模糊后程序A’中。算法2(SelectCode)
输入:算法6计算的模糊优先级映射I
输出:源码对象S
I将每个源码对象S映射到I(S),后者是I对S的重要程度的量度。为了选择下一个要模糊的源码对象,我们将I作为优先级队列处理。换句话说,我们选择S的原则是使I(S)最大。算法3(SelectTransform)
输入:
a)源码对象S。
b)算法7计算的合适度映射A
输出:T转换
可以尝试多次,以选择最合适的转换应用到特定源码对象S上。然而,还需要考虑两个重要的问题。首先,选中的转换必须与S中的其它代码自然融和。这可以通过在A(S)中给转换提供高的合适度值来实现。第二,我们希望优先选择那些产生较高的’性价比’(即模糊等级较高而执行时间花费较少)的转换。这可以通过选择那些有效性和弹性最大而开销最小的转换来实现。这些探试可以由下列代码捕获,其中w1,w2,w3是执行时定义的常量:
返回一个转换T,使得T-->V在A(S)的范围内,而且(w1*Tpot(S)+w2*Tres(S)+W3*V)/Tcost(S)最大化。算法4(Done)
输入:
a)ReqObf,模糊的剩余等级。
b)AcceptCost,剩余的可接受执行时间花费。
c)源代码对象S。
d)T转换。
e)模糊优先级映射(I)。
输出:
a)更新后的ReqObf。
b)更新后的AcceptCost。
c)更新后的模糊优先级映射(I)。
d)布尔返回值,当满足终止条件时为真。
Done函数有两个作用。它对优先级队列I进行更新,以反映出源码对象S已被模糊化,且应该接受一个减小的优先级值的事实。该减小过程在将转换的弹性和有效性结合起来的基础上进行。Done还更新ReqObf和AcceptCost,并确定终止条件是否满足。w1,w2,w3,w4是执行时定义的常量:
I(S):=I(S)-(W2Tpos(S)+W2Tres(S));
ReqObf:=ReqObf-(W2Tpos(S)+W2Tres(S));
AcceptCost:=AcceptCost-Tcost(S));
RETURN AcceptCost<=0 OR ReqObf<=0.算法5(实用信息)
输入:
a)应用程序A。
b)输入A的一组数据I={I1;I2;...}。
输出:
a)映射R(M),对于A中的每一个例程M,给出M的执行时间等级。
b)映射PS(S),对于A中的每一个源代码对象S,给出S中使用的一组语言构架。
计算实用信息。该信息将被用来为每个特定的源代码对象选择合适的转换类型。
1.计算动态实用信息(例如,在用户提供的输入数据组I上
  的概要文件下运行应用程序)。为每一个例行/基础模块计
  算R(M)(M的执行时间等级),指出应用程序的大部分时
  间花费在哪里。
2.计算静态实用信息PS(S)。PS(S)提供的是程序员在S中使用
  的多种语言构架的统计数字。FOR S:=A中的每一个源代码对象DO
O:=S使用的一组运算符;
C:=S使用的一组高级语言构架(WHILE语句,例外,线程等);
L:=S参考的一组库类/例程;
Ps(S):=OUCULEND FOR算法6(模糊优先级)
输入:
a)应用程序A。
b)R(M),M的等级。
输出:映射I(S),对于A中的每一个源代码对象S,给出S的模糊优先级。
I(S)可以由用户明确给出,或利用基于算法5中收集的统计数据的探试法来计算得出。可能的探试法为:
1.对于A中任何例程M,令I(M)与M的等级R(M)成反比。
  即,观点是,“如果执行例程M花费了许多时间,那么M
  可能是需要着重模糊的重要程序”。
2.令I(S)为S的复杂度,如表1中的一个软件度量所定义的
  那样。然后,(可能有缺陷的)直觉是,复杂的代码比简
  单代码更可能包含重要的商业机密。算法7(模糊适合度)
输入:
a)应用程序A。
b)映射Pt,对每一个转换T,给出T为应用程序增加的一组语言构架。
c)映射Ps(S),对于A中的每一个源代码对象S,给出S中使用的一组语言构架。
输出:映射A(S),对于A中的每一个源代码对象S和每个转换T,给出与S相关的T的适合度。
计算每一个源代码对象S的合适度组A(S)。映射主要基于算法5中计算的静态实用信息。FOR S:=A中的每一个源代码对象DO
FORT:=每个转换DO
   V:=Pt(T)和Ps(S)之间的类似程度;
   A(S):=A(S)U{T-->V};
END FOREND FOR11.总结和讨论
我们已经观察到,在许多情况下,模糊后的程序和源程序表现不同是可以接受的。特别是,我们的大多数模糊转换使目标程序与源程序相比较慢或者较大。在特殊的实例中,我们甚至允许目标程序有与源程序不同的附加效果,或者即使源程序在错误条件下终止,目标程序也可以不终止。我们唯一要求是两个程序的可观察行为(用户所经历的行为)应该相同。
允许源程序和模糊后程序的相同点如此不明显,是一个新奇而令人兴奋的想法。尽管上文提供和描述了多种转换,了解一般技术的人员可以清楚地知道有其它的转换,而且这些转换可以提供依据本发明的模糊,以提高软件的安全性。
在未来的研究中,识别未知的转换还大有可为。特别地,我们希望看到下列领域被大家研究:
1.应该识别新的模糊转换。
2.应该研究不同转换间的相互作用和排序。这和代码优化中进行的工作是一样的,对优化转换序列的排序在代码优化中也经常是一个困难的问题。
3.应该研究有效性和开销之间的关系。对于特定类型的代码,我们希望知道哪一种转化将给出最好的“性价比”(即以最低的执行花费取得最高的有效性)。
欲获得对以上讨论中所有转换的整体看法,请参见图31。欲获得对以上讨论中模糊构架的整体看法,请参见图32。然而,本发明不应局限于上文讨论的示例转换和模糊构架。11.1模糊的效果
加密和程序模糊有很大的相似性。两者不仅都试图隐藏信息以避开那些探索的眼睛,而且使用它们也只是为了使信息隐藏有限的时间。加密后文档的保存期限是有限的:只要加密算法本身能对抗攻击,而且硬件发展的速度并不允许选中代码长度的信息被机械地解密,它就是安全的。对于模糊后的应用程序也是这样;只要没有建立足够强大的反模糊工具,它就是安全的。
对于发展中的应用程序来说,只要发布需要的时间比反模糊工具跟上模糊工具所花费的时间短,这就不会成为问题。如果这是事实,那么到应用程序可以被自动反模糊的时候,它就已经过时了并且竞争者对它也失去了兴趣。
然而,如果一个应用程序包含了在多个发布版本中都存在的商业秘密,那么可以采用模糊以外的其它方法来进行保护。似乎应该选择部分服务器端执行(如图2(b)所示),但是它的缺陷在于:应用程序会执行得较慢或(当网络连接中断时)完全不执行。11.2模糊的其它用途
说起来很有趣,模糊除了上文讨论的应用之外,还有很多其它的潜在应用。一种可能性是利用模糊跟踪软件盗版。例如,厂商为每一个新用户产生一个应用程序的新模糊版本(我们可以通过将随机因素引入SelectTransform算法(算法3)中,为同一个程序产生不同的模糊版本。随机数生成器的不同种子可以产生不同的版本。),并且记录下每个版本的购买者。很可能只有当软件在网上销售和发布的时候,这才是合理的。如果厂商发现他的应用程序被盗版了,他所需要的做的是获得一份盗版的拷贝,将它与数据库中的记录进行比较,看出谁购买了原始程序。事实上储存每一个卖出的模糊版本的拷贝并非必要。只要保存售出的随机数的种子就可以了。
软件盗版自身也可以(非法)利用模糊。因为我们上文描述的Java模糊器在字节码的级别进行起作用,所以不能阻止盗版者对合法购买的Java程序进行模糊。模糊版本可以被转售。面对诉讼的时候,盗版者辩驳说,实际上他并没有转售最初购买的应用程序(毕竟,代码是完全不同的!),而是在销售合法的重新编写的版本。结论
总之,本发明提供了计算机实施的方法和设备,用于防止或至少阻碍对软件的反向工程。尽管这是以执行需要的时间或程序的大小为代价来实现的,同时生成的转换后程序在细节上表现有所不同,但我们相信,本技术在适当的环境中可以产生巨大的效果。在实施例中,转换后的程序与未转换的程序有相同的可观察行为。因此,本发明允许原始程序和模糊后程序之间有较小的相同点。
尽管本讨论主要是涉及阻碍对软件的反向工程,但是可以想到它还有其他用途,例如为软件对象(包括应用程序)打上标记。这就利用了任何单个模糊过程潜在的不同性质。厂商可以为每一个用户生成应用程序的不同模糊版本。如果发现盗版拷贝,厂商只需对比原始的模糊信息数据库,就能跟踪原始程序。
文中介绍的特定模糊转换并未穷尽。进一步的模糊体制可以被识别,并在目前的新模糊工具体系结构中使用。
在前述的介绍中,参照了带有已知同等性质的元素和整数,然后可以包括这些等价性质,就象它们被单独提出一样。
尽管本发明是通过实例和参照特定的实施例来描述的。需要理解的是,只要不脱离本发明的范围,还可以进行修正和改进。

Claims (20)

1.一种用于对代码进行模糊的计算机执行方法,其特征包括:
      选择待模糊代码的子集;
      选择应用的模糊转换;以及
      应用转换,其中转换后代码与转换前代码有较弱的相似性。
2.根据权利要求1所述的计算机执行方法,其特征还包括:
      识别与源代码对应的一个或多个源代码输入文件,作为
  待处理的应用程序代码;
      选择要求的模糊等级(有效性);
      选择最大执行时间或空间花费(开销);
      阅读并分析输入文件;
      提供信息用于识别待处理程序使用的数据类型,数据结
  构和控制结构;
      为源代码对象选择和应用模糊转换,直到获得要求的有
  效性或超过最大开销;以及
      输出应用程序的转换后代码。
3.根据权利要求1所述的方法,其中所述转换包括一个模糊构架,所述模糊构架由别名和并发技术构建。
4.根据权利要求1所述的方法,其特征还包括:
      输出应用到模糊后代码上的模糊转换的信息,以及将转
  换后程序的模糊代码与应用程序的源码联系起来的信息。
5.根据权利要求1所述的方法,其中所述转换被选择用于保存应用程序代码的可观察行为。
6.根据权利要求1所述的方法,其特征还包括:
      对代码进行反模糊,代码的反模糊包括,通过使用分片、
  部分评估、数据流分析或统计分析,从应用程序的模糊后代
  码中删除所有模糊。
7.一种在计算机可读媒体中体现,用于对代码进行模糊的计算机程序,其特征在于包括:
      选择待模糊代码的子集的逻辑;
      选择要应用的模糊转换的逻辑;以及
      应用转换的逻辑,其中转换后代码与转换前代码有较弱
  的相似性。
8.根据权利要求7所述的计算机程序,其特征还包括:
      识别与源代码对应的一个或多个源代码输入文件,作为
  待处理的应用程序代码的逻辑;
      选择要求的模糊等级(有效性)的逻辑;
      选择最大执行时间或空间花费(开销)的逻辑;
      阅读并分析输入文件的链接;
      提供信息用于识别待处理程序使用的数据类型、数据结
  构和控制结构的逻辑;
      为源代码对象选择和应用模糊转换,直到获得要求的有
  效性或超过最大开销的逻辑;及
      输出应用程序的转换后代码的逻辑。
9.根据权利要求7所述的计算机程序,其中所述转换包括一个模糊构架,所述模糊构架由别名和并发技术构建。
10.根据权利要求7所述的计算机程序,其特征还包括:
       输出应用到模糊后代码上的模糊转换的信息,以及将转
   换后程序的模糊代码与应用程序的源码联系起来的信息的逻
   辑。
11.根据权利要求7所述的计算机程序,其中所述转换被选择用于保存应用程序代码的可观察行为。
12.根据权利要求7所述的计算机程序,其特征还包括:
       对代码进行反模糊的逻辑,代码的反模糊包括,通过使
   用分片、部分评估、数据流分析或统计分析,从应用程序的
   模糊后代码中删除所有模糊。
13.一种用于对代码进行模糊的设备,其特征在于包括:
       选择待模糊代码的子集的设备;
       选择要应用的模糊转换的设备;及
       应用转换的设备,其中转换后代码与转换前代码有较弱
   的相似性。
14.根据权利要求13所述的设备,其特征还包括:
       识别与源代码对应的一个或多个源代码输入文件,作为
   待处理的应用程序代码的设备;
       选择要求的模糊等级(有效性)的设备;
       选择最大执行时间或空间花费(开销)的设备;
       阅读并分析输入文件的设备;
       提供信息用于识别待处理程序使用的数据类型,数据结
   构和控制结构的设备;
       为源代码对象选择和应用模糊转换,直到获得要求的有
   效性或超过最大开销的设备;及
       输出应用程序的转换后代码的设备。
15.根据权利要求13所述的设备,其中所述转换包括一个模糊构架,所述模糊构架由别名和并发技术构建。
16.根据权利要求13所述的设备,其特征还包括:
       输出应用到模糊后代码上的模糊转换的信息,以及将转
   换后程序的模糊代码与应用程序的源码联系起来的信息的设
   备。
17.根据权利要求13所述的设备,其中所述转换被选择用于保存应用程序代码的可观察行为。
18.根据权利要求13所述的设备,其特征还包括:
       对代码进行反模糊的设备,代码的反模糊包括,通过使
   用分片、部分评估、数据流分析或统计分析,从应用程序的
   模糊后代码中删除所有模糊。
19.根据权利要求13所述的设备,其中所述代码由JavaTM字节码组成。
20.根据权利要求13所述的设备,其中所述转换提供了一种数据模糊,一种控制模糊,或一种预防性模糊。
CN98806038.8A 1997-06-09 1998-06-09 用于提高软件安全性的模糊技术 Pending CN1260055A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
NZ328057 1997-06-09
NZ32805797 1997-06-09

Publications (1)

Publication Number Publication Date
CN1260055A true CN1260055A (zh) 2000-07-12

Family

ID=19926287

Family Applications (1)

Application Number Title Priority Date Filing Date
CN98806038.8A Pending CN1260055A (zh) 1997-06-09 1998-06-09 用于提高软件安全性的模糊技术

Country Status (7)

Country Link
US (1) US6668325B1 (zh)
EP (1) EP0988591A1 (zh)
JP (1) JP4739465B2 (zh)
CN (1) CN1260055A (zh)
AU (1) AU7957998A (zh)
CA (1) CA2293650C (zh)
WO (1) WO1999001815A1 (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100350343C (zh) * 2002-03-13 2007-11-21 松下电器产业株式会社 安全设备
CN100382483C (zh) * 2003-05-20 2008-04-16 三星电子株式会社 防止程序篡改的方法、升级混淆程序的方法及装置
CN104318134A (zh) * 2014-11-05 2015-01-28 北京深思数盾科技有限公司 一种数据保护方法
CN105404794A (zh) * 2014-09-04 2016-03-16 腾讯科技(深圳)有限公司 Java应用软件的保护方法和装置
WO2017016087A1 (zh) * 2015-07-30 2017-02-02 中兴通讯股份有限公司 一种生成随机布局程序的方法及装置
CN106415566A (zh) * 2014-03-31 2017-02-15 爱迪德技术有限公司 保护软件项目
CN107506651A (zh) * 2017-07-04 2017-12-22 上海斐讯数据通信技术有限公司 一种代码加密方法及系统
CN104335219B (zh) * 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统
CN108475303A (zh) * 2015-12-31 2018-08-31 计算机2.0(2015)有限公司 应用递增多项式代码增强抵抗反向工程的计算机实现方法
CN110659200A (zh) * 2018-06-29 2020-01-07 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统

Families Citing this family (465)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7362775B1 (en) 1996-07-02 2008-04-22 Wistaria Trading, Inc. Exchange mechanisms for digital information packages with bandwidth securitization, multichannel digital watermarks, and key management
US6948070B1 (en) 1995-02-13 2005-09-20 Intertrust Technologies Corporation Systems and methods for secure transaction management and electronic rights protection
US5943422A (en) 1996-08-12 1999-08-24 Intertrust Technologies Corp. Steganographic techniques for securely delivering electronic digital rights management control information over insecure communication channels
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
DE69637733D1 (de) 1995-02-13 2008-12-11 Intertrust Tech Corp Systeme und verfahren für ein sicheres übertragung
US7133846B1 (en) 1995-02-13 2006-11-07 Intertrust Technologies Corp. Digital certificate support system, methods and techniques for secure electronic commerce transaction and rights management
US6157721A (en) 1996-08-12 2000-12-05 Intertrust Technologies Corp. Systems and methods using cryptography to protect secure computing environments
US6658568B1 (en) 1995-02-13 2003-12-02 Intertrust Technologies Corporation Trusted infrastructure support system, methods and techniques for secure electronic commerce transaction and rights management
US5613004A (en) 1995-06-07 1997-03-18 The Dice Company Steganographic method and device
US7664263B2 (en) 1998-03-24 2010-02-16 Moskowitz Scott A Method for combining transfer functions with predetermined key creation
US6205249B1 (en) 1998-04-02 2001-03-20 Scott A. Moskowitz Multiple transform utilization and applications for secure digital watermarking
US7457962B2 (en) 1996-07-02 2008-11-25 Wistaria Trading, Inc Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US7095874B2 (en) 1996-07-02 2006-08-22 Wistaria Trading, Inc. Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US7159116B2 (en) 1999-12-07 2007-01-02 Blue Spike, Inc. Systems, methods and devices for trusted transactions
US5889868A (en) 1996-07-02 1999-03-30 The Dice Company Optimization methods for the insertion, protection, and detection of digital watermarks in digitized data
US7346472B1 (en) 2000-09-07 2008-03-18 Blue Spike, Inc. Method and device for monitoring and analyzing signals
US7177429B2 (en) 2000-12-07 2007-02-13 Blue Spike, Inc. System and methods for permitting open access to data objects and for securing data within the data objects
US6052780A (en) * 1996-09-12 2000-04-18 Open Security Solutions, Llc Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
US8079086B1 (en) 1997-11-06 2011-12-13 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US7058822B2 (en) 2000-03-30 2006-06-06 Finjan Software, Ltd. Malicious mobile code runtime monitoring system and methods
US9219755B2 (en) 1996-11-08 2015-12-22 Finjan, Inc. Malicious mobile code runtime monitoring system and methods
US7730317B2 (en) 1996-12-20 2010-06-01 Wistaria Trading, Inc. Linear predictive coding implementation of digital watermarks
US6092147A (en) * 1997-04-15 2000-07-18 Sun Microsystems, Inc. Virtual machine with securely distributed bytecode verification
US6643775B1 (en) 1997-12-05 2003-11-04 Jamama, Llc Use of code obfuscation to inhibit generation of non-use-restricted versions of copy protected software applications
US6480959B1 (en) 1997-12-05 2002-11-12 Jamama, Llc Software system and associated methods for controlling the use of computer programs
US7809138B2 (en) * 1999-03-16 2010-10-05 Intertrust Technologies Corporation Methods and apparatus for persistent control and protection of content
US6957341B2 (en) * 1998-05-14 2005-10-18 Purdue Research Foundation Method and system for secure computational outsourcing and disguise
AU4535699A (en) * 1998-06-10 1999-12-30 Auckland Uniservices Limited Software watermarking techniques
US6763370B1 (en) 1998-11-16 2004-07-13 Softricity, Inc. Method and apparatus for content protection in a secure content delivery system
US7017188B1 (en) * 1998-11-16 2006-03-21 Softricity, Inc. Method and apparatus for secure content delivery over broadband access networks
US7653870B1 (en) * 1998-12-08 2010-01-26 Idearc Media Corp. System and method of dynamically generating index information
US7526468B2 (en) * 1999-01-08 2009-04-28 Computer Associates Think, Inc. System and method for recursive path analysis of DBMS procedures
FR2790844B1 (fr) * 1999-03-09 2001-05-25 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
US7664264B2 (en) 1999-03-24 2010-02-16 Blue Spike, Inc. Utilizing data reduction in steganographic and cryptographic systems
US7730169B1 (en) 1999-04-12 2010-06-01 Softricity, Inc. Business method and system for serving third party software applications
US7370071B2 (en) 2000-03-17 2008-05-06 Microsoft Corporation Method for serving third party software applications from servers to client computers
US8099758B2 (en) 1999-05-12 2012-01-17 Microsoft Corporation Policy based composite file system and method
US7421586B2 (en) 1999-05-12 2008-09-02 Fraunhofer Gesselschaft Protecting mobile code against malicious hosts
US7263722B1 (en) * 1999-05-12 2007-08-28 Fraunhofer Crcg, Inc. Obfuscation of executable code
WO2000072112A2 (en) * 1999-05-12 2000-11-30 Fraunhofer Crcg, Inc. Obfuscation of executable code
US6959384B1 (en) 1999-12-14 2005-10-25 Intertrust Technologies Corporation Systems and methods for authenticating and protecting the integrity of data streams and other data
CA2384360A1 (en) * 1999-06-09 2000-12-21 Harold J. Johnson Tamper resistant software encoding
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
AU6104800A (en) 1999-07-16 2001-02-05 Intertrust Technologies Corp. Trusted storage systems and methods
US7152165B1 (en) 1999-07-16 2006-12-19 Intertrust Technologies Corp. Trusted storage systems and methods
US7243236B1 (en) 1999-07-29 2007-07-10 Intertrust Technologies Corp. Systems and methods for using cryptography to protect secure and insecure computing environments
US7430670B1 (en) 1999-07-29 2008-09-30 Intertrust Technologies Corp. Software self-defense systems and methods
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
ATE306098T1 (de) 1999-07-30 2005-10-15 Intertrust Tech Corp Verfahren und systeme zur transaktionsaufzeichnungsübertragung unter anwendung von schwellen und einem mehrstufigen protokoll
US7475246B1 (en) 1999-08-04 2009-01-06 Blue Spike, Inc. Secure personal content server
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
US7406603B1 (en) 1999-08-31 2008-07-29 Intertrust Technologies Corp. Data protection systems and methods
US7757097B2 (en) 1999-09-03 2010-07-13 Purdue Research Foundation Method and system for tamperproofing software
US7287166B1 (en) * 1999-09-03 2007-10-23 Purdue Research Foundation Guards for application in software tamperproofing
US6985885B1 (en) 1999-09-21 2006-01-10 Intertrust Technologies Corp. Systems and methods for pricing and selling digital goods
US6449719B1 (en) * 1999-11-09 2002-09-10 Widevine Technologies, Inc. Process and streaming server for encrypting a data stream
US8055894B2 (en) 1999-11-09 2011-11-08 Google Inc. Process and streaming server for encrypting a data stream with bandwidth based variation
US6996720B1 (en) 1999-12-17 2006-02-07 Microsoft Corporation System and method for accessing protected content in a rights-management architecture
US6970849B1 (en) 1999-12-17 2005-11-29 Microsoft Corporation Inter-server communication using request with encrypted parameter
US7047411B1 (en) 1999-12-17 2006-05-16 Microsoft Corporation Server for an electronic distribution system and method of operating same
US6832316B1 (en) * 1999-12-22 2004-12-14 Intertrust Technologies, Corp. Systems and methods for protecting data secrecy and integrity
AUPQ486599A0 (en) * 1999-12-23 2000-02-03 Zentronix Pty Ltd A method of storing and retrieving miniaturised data
AU2001298116A1 (en) * 2000-01-18 2009-07-29 Telcordia Technologies, Inc. Method and systems for identifying the existence of one or more unknown programs in a system
JP3888823B2 (ja) * 2000-02-14 2007-03-07 松下電器産業株式会社 半導体集積回路
US6829710B1 (en) * 2000-03-14 2004-12-07 Microsoft Corporation Technique for producing, through watermarking, highly tamper-resistant executable code and resulting “watermarked” code so formed
US7080257B1 (en) * 2000-03-27 2006-07-18 Microsoft Corporation Protecting digital goods using oblivious checking
US7054443B1 (en) * 2000-03-27 2006-05-30 Microsoft Corporation System and method for protecting digital goods using random and automatic code obfuscation
US7085839B1 (en) 2000-04-07 2006-08-01 Intertrust Technologies Corporation Network content management
US7266681B1 (en) 2000-04-07 2007-09-04 Intertrust Technologies Corp. Network communications security agent
CA2305078A1 (en) 2000-04-12 2001-10-12 Cloakware Corporation Tamper resistant software - mass data encoding
US7000119B1 (en) 2000-04-20 2006-02-14 Realnetworks, Inc. Instruction/data protection employing derived obscuring instruction/data
AU2001269354A1 (en) * 2000-05-12 2001-11-20 Xtreamlok Pty. Ltd. Information security method and system
US7313692B2 (en) 2000-05-19 2007-12-25 Intertrust Technologies Corp. Trust management systems and methods
US7107448B1 (en) * 2000-06-04 2006-09-12 Intertrust Technologies Corporation Systems and methods for governing content rendering, protection, and management applications
US7213266B1 (en) 2000-06-09 2007-05-01 Intertrust Technologies Corp. Systems and methods for managing and protecting electronic content and applications
US7050586B1 (en) 2000-06-19 2006-05-23 Intertrust Technologies Corporation Systems and methods for retrofitting electronic appliances to accept different content formats
US7065652B1 (en) 2000-06-21 2006-06-20 Aladdin Knowledge Systems, Ltd. System for obfuscating computer code upon disassembly
US7017189B1 (en) 2000-06-27 2006-03-21 Microsoft Corporation System and method for activating a rendering device in a multi-level rights-management architecture
US6891953B1 (en) 2000-06-27 2005-05-10 Microsoft Corporation Method and system for binding enhanced software features to a persona
US7171692B1 (en) 2000-06-27 2007-01-30 Microsoft Corporation Asynchronous communication within a server arrangement
US7158953B1 (en) 2000-06-27 2007-01-02 Microsoft Corporation Method and system for limiting the use of user-specific software features
US7051200B1 (en) 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US6981262B1 (en) 2000-06-27 2005-12-27 Microsoft Corporation System and method for client interaction in a multi-level rights-management architecture
US7539875B1 (en) 2000-06-27 2009-05-26 Microsoft Corporation Secure repository with layers of tamper resistance and system and method for providing same
WO2002001333A2 (en) * 2000-06-27 2002-01-03 Microsoft Corporation System and method for providing an individualized secure repository
US7036011B2 (en) * 2000-06-29 2006-04-25 Cachestream Corporation Digital rights management
US7225159B2 (en) 2000-06-30 2007-05-29 Microsoft Corporation Method for authenticating and securing integrated bookstore entries
US6938170B1 (en) * 2000-07-17 2005-08-30 International Business Machines Corporation System and method for preventing automated crawler access to web-based data sources using a dynamic data transcoding scheme
WO2002019097A1 (en) * 2000-09-01 2002-03-07 International Interactive Commerce, Ltd. System and method for collaboration using web browsers
US7165175B1 (en) * 2000-09-06 2007-01-16 Widevine Technologies, Inc. Apparatus, system and method for selectively encrypting different portions of data sent over a network
US7127615B2 (en) 2000-09-20 2006-10-24 Blue Spike, Inc. Security based on subliminal and supraliminal channels for data objects
US7043473B1 (en) 2000-11-22 2006-05-09 Widevine Technologies, Inc. Media tracking system and method
CA2327911A1 (en) * 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
US7150045B2 (en) 2000-12-14 2006-12-12 Widevine Technologies, Inc. Method and apparatus for protection of electronic media
FR2818772A1 (fr) * 2000-12-21 2002-06-28 Bull Cp8 Procede de securisation d'un operateur logique ou mathematique implante dans un module electronique a microprocesseur, ainsi que le module electronique et le systeme embarque associes
JP4252229B2 (ja) 2001-03-28 2009-04-08 ユミルリンク株式会社 情報交換システム、情報通信端末、情報交換方法、プログラム、および、記録媒体
US7580988B2 (en) * 2001-04-05 2009-08-25 Intertrust Technologies Corporation System and methods for managing the distribution of electronic content
US7136840B2 (en) 2001-04-20 2006-11-14 Intertrust Technologies Corp. Systems and methods for conducting transactions and communications using a trusted third party
US7188342B2 (en) 2001-04-20 2007-03-06 Microsoft Corporation Server controlled branding of client software deployed over computer networks
FR2824401A1 (fr) * 2001-05-04 2002-11-08 Thomson Csf Dispositif et procede pour la signature, le marquage et l'authentification de programmes d'ordinateur
FR2824402A1 (fr) * 2001-05-04 2002-11-08 Thales Sa Dispositif et procede pour la signature, le marquage et l'authenticification de programmes d'ordinateur
CA2348355A1 (en) * 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
US7581103B2 (en) 2001-06-13 2009-08-25 Intertrust Technologies Corporation Software self-checking systems and methods
WO2003003169A2 (en) * 2001-06-28 2003-01-09 Cloakware Corporation Secure method and system for biometric verification
US7313824B1 (en) * 2001-07-13 2007-12-25 Liquid Machines, Inc. Method for protecting digital content from unauthorized use by automatically and dynamically integrating a content-protection agent
US7111285B2 (en) 2001-07-17 2006-09-19 Liquid Machines, Inc. Method and system for protecting software applications against static and dynamic software piracy techniques
US6694435B2 (en) * 2001-07-25 2004-02-17 Apple Computer, Inc. Method of obfuscating computer instruction streams
EP1280148A3 (en) * 2001-07-26 2003-09-17 Irdeto Access B.V. Compilation technique and data distribution system using the same
FR2828305B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "variable" contre son utilisation non autorisee
FR2828303B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "renommage" contre son utilisation non autorisee
FR2828300B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "fonctions elementaires" contre son utilisation non autorisee
FR2828302B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "branchement conditionnel" contre son utilisation non autorisee
FR2828304B1 (fr) * 2001-07-31 2010-09-03 Validy Procede pour proteger un logiciel a l'aide d'un principe dit de "dissociation temporelle" contre son utilisation non autorisee
US7343494B2 (en) * 2001-08-01 2008-03-11 Sas Validy Method to protect software against unwanted use with a “renaming” principle
US7434064B2 (en) * 2001-08-01 2008-10-07 Sas Validy Method to protect software against unwanted use with a “elementary functions” principle
US7269740B2 (en) * 2001-08-01 2007-09-11 Sas Validy Method to protect software against unwanted use with a “variable principle”
US7502940B2 (en) * 2001-08-01 2009-03-10 Sas Validy Method to protect software against unwanted use with a “conditional branch” principle
GB0121064D0 (en) * 2001-08-31 2001-10-24 Transitive Technologies Ltd Obtaining translation of generic code representation
US20070277037A1 (en) * 2001-09-06 2007-11-29 Randy Langer Software component authentication via encrypted embedded self-signatures
US7210134B1 (en) * 2001-09-06 2007-04-24 Sonic Solutions Deterring reverse-engineering of software systems by randomizing the siting of stack-based data
EP1308838A3 (en) * 2001-10-31 2007-12-19 Aplix Corporation Intermediate code preprocessing apparatus, intermediate code execution apparatus, intermediate code execution system, and computer program product for preprocessing or executing intermediate code
DE60223990T2 (de) * 2001-10-31 2008-12-04 Aplix Corp. System zum Ausführen von Zwischenkode, Methode zum Ausführen von Zwischenkode, und Computerprogrammprodukt zum Ausführen von Zwischenkode
CA2363795A1 (en) 2001-11-26 2003-05-26 Cloakware Corporation Computer system protection by communication diversity
US7328345B2 (en) 2002-01-29 2008-02-05 Widevine Technologies, Inc. Method and system for end to end securing of content for video on demand
CA2369304A1 (en) * 2002-01-30 2003-07-30 Cloakware Corporation A protocol to hide cryptographic private keys
JP2003280754A (ja) * 2002-03-25 2003-10-02 Nec Corp 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム
JP2003280755A (ja) * 2002-03-25 2003-10-02 Nec Corp 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム
US7299292B2 (en) * 2002-03-29 2007-11-20 Widevine Technologies, Inc. Process and streaming server for encrypting a data stream to a virtual smart card client system
US7287275B2 (en) 2002-04-17 2007-10-23 Moskowitz Scott A Methods, systems and devices for packet watermarking and efficient provisioning of bandwidth
US20030200449A1 (en) * 2002-04-17 2003-10-23 International Business Machines Corporation Method of accessing a shared subroutine of computer system
US7383570B2 (en) 2002-04-25 2008-06-03 Intertrust Technologies, Corp. Secure authentication systems and methods
US7149899B2 (en) * 2002-04-25 2006-12-12 Intertrust Technologies Corp. Establishing a secure channel with a human user
US20030217280A1 (en) * 2002-05-17 2003-11-20 Keaton Thomas S. Software watermarking for anti-tamper protection
US7272725B2 (en) * 2002-06-25 2007-09-18 Sas Validy Method to protect software against unwanted use with a “temporal dissociation” principle
US7383443B2 (en) * 2002-06-27 2008-06-03 Microsoft Corporation System and method for obfuscating code using instruction replacement scheme
US7254586B2 (en) * 2002-06-28 2007-08-07 Microsoft Corporation Secure and opaque type library providing secure data protection of variables
EP1546892B1 (en) * 2002-09-04 2017-03-29 Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. Protecting mobile code against malicious hosts cross references to related applications
US7594271B2 (en) * 2002-09-20 2009-09-22 Widevine Technologies, Inc. Method and system for real-time tamper evidence gathering for software
US7603662B2 (en) * 2002-10-09 2009-10-13 Microsoft Corporation System and method for sensing types of local variables
JP2004362532A (ja) * 2002-10-25 2004-12-24 Matsushita Electric Ind Co Ltd 透かし挿入装置および透かし取出装置
US20040083177A1 (en) * 2002-10-29 2004-04-29 General Instrument Corporation Method and apparatus for pre-encrypting VOD material with a changing cryptographic key
US7150003B2 (en) * 2002-11-25 2006-12-12 Matsushita Electric Industrial Co., Ltd. Class coalescence for obfuscation of object-oriented software
US7051322B2 (en) 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7149900B2 (en) * 2002-12-12 2006-12-12 Intel Corporation Method of defending software from debugger attacks
US7797064B2 (en) 2002-12-13 2010-09-14 Stephen Loomis Apparatus and method for skipping songs without delay
US7912920B2 (en) 2002-12-13 2011-03-22 Stephen Loomis Stream sourcing content delivery system
US7412532B2 (en) 2002-12-13 2008-08-12 Aol Llc, A Deleware Limited Liability Company Multimedia scheduler
FR2849232B1 (fr) * 2002-12-24 2005-02-25 Trusted Logic Procede pour la securisation des systemes informatiques incorporant un module d'interpretation de code
US7584354B2 (en) * 2003-01-31 2009-09-01 Intel Corporation Implementing portable content protection to secure secrets
US9818136B1 (en) 2003-02-05 2017-11-14 Steven M. Hoffberg System and method for determining contingent relevance
US20060130016A1 (en) * 2003-03-17 2006-06-15 Wagner John R Method of kernal-mode instruction interception and apparatus therefor
US7356143B2 (en) 2003-03-18 2008-04-08 Widevine Technologies, Inc System, method, and apparatus for securely providing content viewable on a secure device
US7007170B2 (en) 2003-03-18 2006-02-28 Widevine Technologies, Inc. System, method, and apparatus for securely providing content viewable on a secure device
US8510571B1 (en) 2003-03-24 2013-08-13 Hoi Chang System and method for inserting security mechanisms into a software program
US20040199771A1 (en) * 2003-04-04 2004-10-07 Widevine Technologies, Inc. Method for tracing a security breach in highly distributed content
DE10319435B4 (de) * 2003-04-25 2018-07-26 Whitecryption Corporation Verfahren zur Verarbeitung von Daten zum Schutz eines Softwareprogramms vor Rekonstruktion
JP4759513B2 (ja) 2003-06-02 2011-08-31 リキッド・マシンズ・インコーポレーテッド 動的、分散的および協働的な環境におけるデータオブジェクトの管理
AP2005003476A0 (en) 2003-06-05 2005-12-31 Intertrust Tech Corp Interoperable systems and methods for peer-to-peerservice orchestration.
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses
US7519668B2 (en) * 2003-06-20 2009-04-14 Microsoft Corporation Obfuscation of spam filter
US20050021756A1 (en) * 2003-07-26 2005-01-27 Grant Bruce K. Method of developing, delivering and rendering network applications
US20050028010A1 (en) * 2003-07-29 2005-02-03 International Business Machines Corporation System and method for addressing denial of service virus attacks
GB2405958A (en) 2003-08-20 2005-03-16 Macrovision Europ Ltd Code obfuscation and controlling a processor by emulation
US7454323B1 (en) * 2003-08-22 2008-11-18 Altera Corporation Method for creation of secure simulation models
US7340734B1 (en) * 2003-08-27 2008-03-04 Nvidia Corporation Method and apparatus to make code more difficult to reverse engineer
US7591021B2 (en) * 2003-09-05 2009-09-15 Microsoft Corporation Object model document for obfuscating object model therein
JP4568489B2 (ja) * 2003-09-11 2010-10-27 富士通株式会社 プログラム保護方法、プログラム保護プログラムおよびプログラム保護装置
US20050069138A1 (en) * 2003-09-25 2005-03-31 Sun Microsystems, Inc., A Delaware Corporation Application program obfuscation
US7424620B2 (en) * 2003-09-25 2008-09-09 Sun Microsystems, Inc. Interleaved data and instruction streams for application program obfuscation
US7353499B2 (en) * 2003-09-25 2008-04-01 Sun Microsystems, Inc. Multiple instruction dispatch tables for application program obfuscation
US8220058B2 (en) * 2003-09-25 2012-07-10 Oracle America, Inc. Rendering and encryption engine for application program obfuscation
US7363620B2 (en) * 2003-09-25 2008-04-22 Sun Microsystems, Inc. Non-linear execution of application program instructions for application program obfuscation
US20050071656A1 (en) * 2003-09-25 2005-03-31 Klein Dean A. Secure processor-based system and method
US7415618B2 (en) * 2003-09-25 2008-08-19 Sun Microsystems, Inc. Permutation of opcode values for application program obfuscation
JP3873047B2 (ja) * 2003-09-30 2007-01-24 株式会社東芝 識別情報埋込装置、識別情報解析装置、識別情報埋込方法、識別情報解析方法及びプログラム
US7979911B2 (en) * 2003-10-08 2011-07-12 Microsoft Corporation First computer process and second computer process proxy-executing code from third computer process on behalf of first process
US8103592B2 (en) * 2003-10-08 2012-01-24 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf of first process
US7788496B2 (en) 2003-10-08 2010-08-31 Microsoft Corporation First computer process and second computer process proxy-executing code on behalf thereof
US7631292B2 (en) * 2003-11-05 2009-12-08 Microsoft Corporation Code individualism and execution protection
JP4884976B2 (ja) * 2003-12-11 2012-02-29 イルデト・コーポレート・ビー・ヴイ 各暗号化ラウンドのコア暗号化関数を隠蔽するために置換を用いたブロック暗号化システム
US7966499B2 (en) * 2004-01-28 2011-06-21 Irdeto Canada Corporation System and method for obscuring bit-wise and two's complement integer computations in software
FR2866451B1 (fr) * 2004-02-18 2008-02-29 Cit Alcatel Procede et dispositif de transformation d'un systeme d'exploitation en vue de la protection d'un programme informatique contre des intrusions exterieures
JP4514473B2 (ja) 2004-02-23 2010-07-28 富士通株式会社 コンピュータシステム、中央装置及びプログラム実行方法
US7383583B2 (en) * 2004-03-05 2008-06-03 Microsoft Corporation Static and run-time anti-disassembly and anti-debugging
DE602005025615D1 (de) 2004-03-31 2011-02-10 Panasonic Corp Computersystem, computerprogramm und verfahren zur addition
US8694802B2 (en) * 2004-04-30 2014-04-08 Apple Inc. System and method for creating tamper-resistant code
NZ533028A (en) * 2004-05-19 2005-09-30 Auckland Uniservices Ltd Method of introducing digital signature into software
FR2871255B1 (fr) * 2004-06-04 2006-08-04 Gemplus Sa Procede d'obfuscation de code compile, terminal et logiciel associes
US7631360B2 (en) 2004-06-12 2009-12-08 Microsoft Corporation Hardware protection
US7721340B2 (en) 2004-06-12 2010-05-18 Microsoft Corporation Registry protection
US20050289037A1 (en) * 2004-06-15 2005-12-29 Smith Joseph B Financial asset product and method for implementing same
US8307354B2 (en) 2004-06-28 2012-11-06 Panasonic Corporation Program creation device, program test device, program execution device, information processing system
US7694121B2 (en) * 2004-06-30 2010-04-06 Microsoft Corporation System and method for protected operating system boot using state validation
US7841009B1 (en) * 2004-07-09 2010-11-23 Angel Secure Networks System and method for defending against reverse engineering of software, firmware and hardware
WO2006009081A1 (ja) * 2004-07-16 2006-01-26 Matsushita Electric Industrial Co., Ltd. アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
US8631077B2 (en) 2004-07-22 2014-01-14 International Business Machines Corporation Duplicate e-mail content detection and automatic doclink conversion
US20060037005A1 (en) * 2004-08-15 2006-02-16 Russell Paul F Method and apparatus for increasing computer security
US7890593B2 (en) * 2008-07-17 2011-02-15 International Business Machines Corporation Sectional E-mail Transmission
US20060041625A1 (en) * 2004-08-19 2006-02-23 International Business Machines Corporation System and method for sectional e-mail transmission
US20060041940A1 (en) * 2004-08-21 2006-02-23 Ko-Cheng Fang Computer data protecting method
US7590589B2 (en) 2004-09-10 2009-09-15 Hoffberg Steven M Game theoretic prioritization scheme for mobile ad hoc networks permitting hierarchal deference
US9609279B2 (en) 2004-09-24 2017-03-28 Google Inc. Method and system for providing secure CODECS
KR101226167B1 (ko) * 2004-10-28 2013-01-24 이르데토 코포레이트 비.브이. 암호 함수 모호화 방법 및 시스템
CN101057245A (zh) * 2004-11-09 2007-10-17 皇家飞利浦电子股份有限公司 保护dsp算法
DE102004058882A1 (de) 2004-12-06 2006-06-08 Giesecke & Devrient Gmbh Erzeugen von Programmcode in einem Ladeformat und Bereitstellen von ausführbarem Programmcode
ATE425503T1 (de) * 2004-12-22 2009-03-15 Ericsson Telefon Ab L M Wasserzeichenmarkierung eines computerprogrammcodes
DE602005018736D1 (de) * 2004-12-22 2010-02-25 Ericsson Telefon Ab L M Wasserzeichenmarkierung eines Computerprogrammcodes mittels äquivalenter mathematischer Ausdrücke
US20060168044A1 (en) * 2005-01-11 2006-07-27 Yen-Fu Chen System and method for display of chained messages in a single email in different orders
US7689969B1 (en) * 2005-01-18 2010-03-30 The Mathworks, Inc. Obfuscation of automatically generated code
US20080015999A1 (en) * 2005-02-04 2008-01-17 Widevine Technologies, Inc. Securely ingesting encrypted content into content servers
WO2006085595A1 (ja) * 2005-02-10 2006-08-17 Matsushita Electric Industrial Co., Ltd. プログラム変換装置及びプログラム実行装置
JP4675642B2 (ja) * 2005-02-22 2011-04-27 Kddi株式会社 プログラム難読化装置およびその方法ならびにプログラム
US8020152B2 (en) * 2005-02-24 2011-09-13 Microsoft Corporation Code morphing
US7587616B2 (en) * 2005-02-25 2009-09-08 Microsoft Corporation System and method of iterative code obfuscation
US7370190B2 (en) * 2005-03-03 2008-05-06 Digimarc Corporation Data processing systems and methods with enhanced bios functionality
US7810142B2 (en) * 2005-03-21 2010-10-05 International Business Machines Corporation Auditing compliance with a hippocratic database
CN100555300C (zh) * 2005-03-25 2009-10-28 松下电器产业株式会社 程序变换装置、安全处理装置、计算机程序及记录媒体
US8719786B2 (en) * 2005-03-30 2014-05-06 Alcatel Lucent Method for performing conditionalized N-way merging of source code
US7805714B2 (en) * 2005-03-30 2010-09-28 Alcatel-Lucent Usa Inc. Technique for constructing syntax-directed search and modifications in program transformation systems
US7624385B2 (en) * 2005-03-30 2009-11-24 Alcatel-Lucent Usa Inc. Method for handling preprocessing in source code transformation
JP4235243B2 (ja) * 2005-04-21 2009-03-11 パナソニック株式会社 プログラム変換装置及び秘密保持プログラム
US8312297B2 (en) * 2005-04-21 2012-11-13 Panasonic Corporation Program illegiblizing device and method
US20060259900A1 (en) * 2005-05-12 2006-11-16 Xerox Corporation Method for creating unique identification for copies of executable code and management thereof
US20060259903A1 (en) * 2005-05-12 2006-11-16 Xerox Corporation Method for creating unique identification for copies of executable code and management thereof
WO2007055729A2 (en) * 2005-05-19 2007-05-18 Reifer Consultants, Inc. Protecting applications software against unauthorized access, reverse engineering or tampering
US20070266434A1 (en) * 2006-05-11 2007-11-15 Reifer Consultants, Inc. Protecting Applications Software Against Unauthorized Access, Reverse Engineering or Tampering
JP4669934B2 (ja) * 2005-06-10 2011-04-13 国立大学法人 奈良先端科学技術大学院大学 プログラム変換装置、実行支援装置、それらの方法およびそれらのコンピュータ・プログラム
US8838974B2 (en) * 2005-07-15 2014-09-16 The Mathworks, Inc. System and method for verifying the integrity of read-only components in deployed mixed-mode applications
US7620987B2 (en) * 2005-08-12 2009-11-17 Microsoft Corporation Obfuscating computer code to prevent an attack
US20070078775A1 (en) * 2005-09-14 2007-04-05 Huapaya Luis M System and method for preventing unauthorized use of digital works
US8719716B2 (en) * 2005-09-15 2014-05-06 The Mathworks, Inc. Locked element for use in a graphical modeling environment
JP2007086845A (ja) * 2005-09-20 2007-04-05 Kddi Corp クライアントサーバシステムおよび同システムにおけるサーバサイドプログラムの実現方法ならびにそのサーバ装置、サーバサイドプログラム
US8065733B2 (en) 2005-09-23 2011-11-22 Google, Inc. Method for evolving detectors to detect malign behavior in an artificial immune system
US7817608B2 (en) * 2005-09-23 2010-10-19 Widevine Technologies, Inc. Transitioning to secure IP communications for encoding, encapsulating, and encrypting data
WO2007038245A2 (en) 2005-09-23 2007-04-05 Widevine Technologies, Inc. Method for evolving detectors to detect malign behavior in an artificial immune system
DE102005045852A1 (de) * 2005-09-26 2007-04-05 Siemens Ag Verfahren und System zum Schutz von Quellcode
US8874477B2 (en) 2005-10-04 2014-10-28 Steven Mark Hoffberg Multifactorial optimization system and method
US9626667B2 (en) 2005-10-18 2017-04-18 Intertrust Technologies Corporation Digital rights management engine systems and methods
AU2006304655B2 (en) 2005-10-18 2012-08-16 Intertrust Technologies Corporation Methods for digital rights management
US8108689B2 (en) * 2005-10-28 2012-01-31 Panasonic Corporation Obfuscation evaluation method and obfuscation method
WO2007052491A1 (ja) * 2005-10-31 2007-05-10 Matsushita Electric Industrial Co., Ltd. セキュア処理装置、セキュア処理方法、難読化秘密情報埋め込み方法、プログラム、記憶媒体および集積回路
US8141149B1 (en) * 2005-11-08 2012-03-20 Raytheon Oakley Systems, Inc. Keyword obfuscation
US8122122B1 (en) 2005-11-08 2012-02-21 Raytheon Oakley Systems, Inc. Event monitoring and collection
US8463612B1 (en) 2005-11-08 2013-06-11 Raytheon Company Monitoring and collection of audio events
JP4770425B2 (ja) 2005-11-24 2011-09-14 富士ゼロックス株式会社 保護済み実行プログラムの作成のためのプログラム、方法及び装置
US8689016B2 (en) 2005-12-02 2014-04-01 Google Inc. Tamper prevention and detection for video provided over a network to a client
EP1959370A1 (en) * 2005-12-07 2008-08-20 Matsushita Electric Industrial Co., Ltd. Secure device, information processing terminal, server, and authentication method
NL1030639C2 (nl) * 2005-12-09 2007-06-12 Antonius Theodorus Ceci Hauzer Ventilatiesysteem voor tunneltraject of overdekte weg.
US8701091B1 (en) 2005-12-15 2014-04-15 Nvidia Corporation Method and system for providing a generic console interface for a graphics application
US20070156420A1 (en) * 2005-12-29 2007-07-05 Microsoft Corporation Performance modeling and the application life cycle
US20070157311A1 (en) * 2005-12-29 2007-07-05 Microsoft Corporation Security modeling and the application life cycle
US20070162890A1 (en) * 2005-12-29 2007-07-12 Microsoft Corporation Security engineering and the application life cycle
US7890315B2 (en) 2005-12-29 2011-02-15 Microsoft Corporation Performance engineering and the application life cycle
US20070192344A1 (en) * 2005-12-29 2007-08-16 Microsoft Corporation Threats and countermeasures schema
US8526612B2 (en) * 2006-01-06 2013-09-03 Google Inc. Selective and persistent application level encryption for video provided to a client
US20070180231A1 (en) * 2006-01-31 2007-08-02 Widevine Technologies, Inc. Preventing entitlement management message (EMM) filter attacks
JP4971200B2 (ja) * 2006-02-06 2012-07-11 パナソニック株式会社 プログラム難読化装置
US7818788B2 (en) * 2006-02-14 2010-10-19 Microsoft Corporation Web application security frame
US7712137B2 (en) 2006-02-27 2010-05-04 Microsoft Corporation Configuring and organizing server security information
US7891012B1 (en) 2006-03-01 2011-02-15 Nvidia Corporation Method and computer-usable medium for determining the authorization status of software
US8452981B1 (en) * 2006-03-01 2013-05-28 Nvidia Corporation Method for author verification and software authorization
US7987514B2 (en) * 2006-04-04 2011-07-26 Intertrust Technologies Corp. Systems and methods for retrofitting electronic appliances to accept different content formats
EP1850260A1 (en) * 2006-04-26 2007-10-31 Macrovision Corporation A computer-implemented method and system for binding digital rights management executable code to a software application
US8458673B2 (en) 2006-04-26 2013-06-04 Flexera Software Llc Computer-implemented method and system for binding digital rights management executable code to a software application
US20070261124A1 (en) * 2006-05-03 2007-11-08 International Business Machines Corporation Method and system for run-time dynamic and interactive identification of software authorization requirements and privileged code locations, and for validation of other software program analysis results
FR2903508B1 (fr) * 2006-07-10 2008-10-17 Sagem Defense Securite Protection d'un programme interprete par une machine virtuelle
BRPI0714242A2 (pt) * 2006-07-12 2013-01-29 Koninkl Philips Electronics Nv sistema e mÉtodo para aumentar a resistÊncia Á adulteraÇço de uma unidade de processamento de dados digitais, e, produto de programa de computador
US7778800B2 (en) * 2006-08-01 2010-08-17 Nvidia Corporation Method and system for calculating performance parameters for a processor
US8963932B1 (en) 2006-08-01 2015-02-24 Nvidia Corporation Method and apparatus for visualizing component workloads in a unified shader GPU architecture
US8436870B1 (en) 2006-08-01 2013-05-07 Nvidia Corporation User interface and method for graphical processing analysis
US8436864B2 (en) * 2006-08-01 2013-05-07 Nvidia Corporation Method and user interface for enhanced graphical operation organization
US8607151B2 (en) * 2006-08-01 2013-12-10 Nvidia Corporation Method and system for debugging a graphics pipeline subunit
US8301890B2 (en) 2006-08-10 2012-10-30 Inside Secure Software execution randomization
US7613907B2 (en) 2006-08-11 2009-11-03 Atmel Corporation Embedded software camouflage against code reverse engineering
US8191131B2 (en) * 2006-08-23 2012-05-29 International Business Machines Corporation Obscuring authentication data of remote user
US20080271001A1 (en) * 2006-09-11 2008-10-30 Yo Nonomura Method of generating program, information processing device and microcomputer
US7554865B2 (en) 2006-09-21 2009-06-30 Atmel Corporation Randomizing current consumption in memory devices
WO2008034900A1 (en) * 2006-09-21 2008-03-27 Boesgaard Soerensen Hans Marti Fabrication of computer executable program files from source code
US20090249492A1 (en) * 2006-09-21 2009-10-01 Hans Martin Boesgaard Sorensen Fabrication of computer executable program files from source code
US8001607B2 (en) * 2006-09-27 2011-08-16 Direct Computer Resources, Inc. System and method for obfuscation of data across an enterprise
JP4917860B2 (ja) * 2006-10-03 2012-04-18 Kddi株式会社 プログラム難読化方法およびプログラム
JP4917861B2 (ja) * 2006-10-17 2012-04-18 Kddi株式会社 プログラム解析方法およびプログラム
US8689193B2 (en) * 2006-11-01 2014-04-01 At&T Intellectual Property Ii, L.P. Method and apparatus for protecting a software application against a virus
FR2909467A1 (fr) * 2006-12-05 2008-06-06 Logiways France Sa Procede et dispositif de protection d'un systeme de traitement de l'information
EP2122530A2 (en) 2006-12-15 2009-11-25 Hans Martin Boesgaard Sørensen Digital data authentication
ATE432507T1 (de) * 2006-12-21 2009-06-15 Ericsson Telefon Ab L M Verschleierung von computerprogrammcodes
EP2107489A3 (en) 2006-12-21 2009-11-04 Telefonaktiebolaget L M Ericsson (PUBL) Obfuscating computer program code
US8146102B2 (en) * 2006-12-22 2012-03-27 Sap Ag Development environment for groupware integration with enterprise applications
EP2104987A2 (en) * 2007-01-11 2009-09-30 Koninklijke Philips Electronics N.V. Tracing copies of an implementation
WO2008088073A1 (en) * 2007-01-18 2008-07-24 Panasonic Corporation Obfuscation assisting apparatus
US8613080B2 (en) 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
US20080209401A1 (en) * 2007-02-22 2008-08-28 Microsoft Corporation Techniques for integrating debugging with decompilation
US8752032B2 (en) * 2007-02-23 2014-06-10 Irdeto Canada Corporation System and method of interlocking to protect software-mediated program and device behaviours
WO2008101340A1 (en) * 2007-02-23 2008-08-28 Cloakware Corporation System and method for interlocking to protect software-mediated program and device behaviours
US20080229115A1 (en) * 2007-03-16 2008-09-18 Microsoft Corporation Provision of functionality via obfuscated software
US8370606B2 (en) 2007-03-16 2013-02-05 Atmel Corporation Switching data pointers based on context
US7797516B2 (en) 2007-03-16 2010-09-14 Atmel Corporation Microcontroller with low-cost digital signal processing extensions
US8788848B2 (en) * 2007-03-22 2014-07-22 Microsoft Corporation Optical DNA
US8837721B2 (en) * 2007-03-22 2014-09-16 Microsoft Corporation Optical DNA based on non-deterministic errors
US7987380B2 (en) 2007-03-27 2011-07-26 Atmel Rousset S.A.S. Methods and apparatus to detect voltage class of a circuit
US8181039B2 (en) * 2007-04-13 2012-05-15 Microsoft Corporation Disc drive counterfeiting countermeasure
JP4924177B2 (ja) * 2007-04-23 2012-04-25 富士ゼロックス株式会社 プログラム難読化装置及びプログラム
US7912894B2 (en) * 2007-05-15 2011-03-22 Adams Phillip M Computerized, copy-detection and discrimination apparatus and method
US8621093B2 (en) 2007-05-21 2013-12-31 Google Inc. Non-blocking of head end initiated revocation and delivery of entitlements non-addressable digital media network
US7984288B2 (en) 2007-05-21 2011-07-19 Sercomm Corporation Software protection apparatus and protection method thereof
EP1998267A1 (en) * 2007-05-29 2008-12-03 Sercomm Corporation Software protection apparatus and protection method thereof
US8243924B2 (en) 2007-06-29 2012-08-14 Google Inc. Progressive download or streaming of digital media securely through a localized container and communication protocol proxy
ES2340086T3 (es) * 2007-06-29 2010-05-28 Telefonaktiebolaget Lm Ericsson (Publ) Ofuscacion de los rastros de ejecucion de un codigo de programa de ordenador.
US8130956B2 (en) * 2007-08-02 2012-03-06 International Business Machines Corporation Efficient and low power encrypting and decrypting of data
MX2010001549A (es) * 2007-08-06 2010-09-07 Bernard De Monseignat Sistema y metodo para autenticacion, transferencia de datos y proteccion contra suplantacion de identidad.
US8026930B2 (en) * 2007-08-06 2011-09-27 International Business Machines Corporation Preventing viewing by bystanders of information on a display screen
US8296738B1 (en) 2007-08-13 2012-10-23 Nvidia Corporation Methods and systems for in-place shader debugging and performance tuning
US20090049425A1 (en) * 2007-08-14 2009-02-19 Aladdin Knowledge Systems Ltd. Code Obfuscation By Reference Linking
US9035957B1 (en) 2007-08-15 2015-05-19 Nvidia Corporation Pipeline debug statistics system and method
US8112636B1 (en) * 2007-11-06 2012-02-07 Lockheed Martin Corporation Protection of code or data from exposure by use of code injection service
US7765500B2 (en) * 2007-11-08 2010-07-27 Nvidia Corporation Automated generation of theoretical performance analysis based upon workload and design configuration
CN100474253C (zh) * 2007-11-22 2009-04-01 北京飞天诚信科技有限公司 .Net程序保护方法及装置
EP2071483A1 (fr) * 2007-12-07 2009-06-17 Gemplus Procédé de sécurisation de l'éxécution d'un code par masquage itératifs
US20110035601A1 (en) 2007-12-21 2011-02-10 University Of Virginia Patent Foundation System, method and computer program product for protecting software via continuous anti-tampering and obfuscation transforms
US8868464B2 (en) 2008-02-07 2014-10-21 Google Inc. Preventing unauthorized modification or skipping of viewing of advertisements within content
US8055668B2 (en) 2008-02-13 2011-11-08 Camouflage Software, Inc. Method and system for masking data in a consistent manner across multiple data sources
US8176337B2 (en) * 2008-03-12 2012-05-08 Apple Inc. Computer object code obfuscation using boot installation
GB0806284D0 (en) * 2008-04-07 2008-05-14 Metaforic Ltd Profile-guided tamper-proofing
US8448002B2 (en) * 2008-04-10 2013-05-21 Nvidia Corporation Clock-gated series-coupled data processing modules
US9305180B2 (en) * 2008-05-12 2016-04-05 New BIS Luxco S.à r.l Data obfuscation system, method, and computer implementation of data obfuscation for secret databases
US8800048B2 (en) * 2008-05-20 2014-08-05 Microsoft Corporation Software protection through interdependent parameter cloud constrained software execution
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
US8434061B2 (en) * 2008-06-06 2013-04-30 Apple Inc. System and method for array obfuscation
US8522015B2 (en) * 2008-06-27 2013-08-27 Microsoft Corporation Authentication of binaries in memory with proxy code execution
US8069053B2 (en) * 2008-08-13 2011-11-29 Hartford Fire Insurance Company Systems and methods for de-identification of personal data
US8914351B2 (en) 2008-12-16 2014-12-16 Clinton A. Krislov Method and system for secure automated document registration from social media networks
US8341141B2 (en) 2008-12-16 2012-12-25 Krislov Clinton A Method and system for automated document registration
US8589372B2 (en) 2008-12-16 2013-11-19 Clinton A. Krislov Method and system for automated document registration with cloud computing
US20100214894A1 (en) * 2009-02-20 2010-08-26 Microsoft Corporation Optical Medium with Added Descriptor to Reduce Counterfeiting
US9135948B2 (en) * 2009-07-03 2015-09-15 Microsoft Technology Licensing, Llc Optical medium with added descriptor to reduce counterfeiting
JP4905480B2 (ja) * 2009-02-20 2012-03-28 富士ゼロックス株式会社 プログラム難読化プログラム及びプログラム難読化装置
FR2942559B1 (fr) * 2009-02-24 2016-05-20 European Aeronautic Defence And Space Company - Eads France Procede de protection du code source d'un programme d'ordinateur.
FR2942558B1 (fr) * 2009-02-24 2014-05-30 Eads Europ Aeronautic Defence Procede d'obscurcissement d'un programme d'ordinateur.
EP2234031A1 (en) * 2009-03-24 2010-09-29 SafeNet, Inc. Obfuscation
US8929303B2 (en) * 2009-04-06 2015-01-06 Samsung Electronics Co., Ltd. Control and data channels for advanced relay operation
CN101859330B (zh) * 2009-04-09 2012-11-21 辉达公司 验证集成电路效能模型的方法
CN102483790B (zh) 2009-05-06 2016-01-20 爱迪德技术有限公司 利用白盒密码术的联锁二进制保护
US8914903B1 (en) 2009-06-03 2014-12-16 Amdocs Software System Limited System, method, and computer program for validating receipt of digital content by a client device
US9027143B1 (en) 2009-08-26 2015-05-05 Adobe Systems Incorporated System and method for multipronged authentication
US9524345B1 (en) 2009-08-31 2016-12-20 Richard VanderDrift Enhancing content using linked context
CA2774728C (en) 2009-11-13 2019-02-12 Irdeto Canada Corporation System and method to protect java bytecode code against static and dynamic attacks within hostile execution environments
EP2343663A1 (fr) * 2009-12-17 2011-07-13 Gemalto SA Procédé de protection polymorphe d'un code exécutable
US8645930B2 (en) * 2010-01-04 2014-02-04 Apple Inc. System and method for obfuscation by common function and common function prototype
US9639707B1 (en) 2010-01-14 2017-05-02 Richard W. VanderDrift Secure data storage and communication for network computing
US8887140B2 (en) * 2010-01-15 2014-11-11 Apple Inc. System and method for annotation-driven function inlining
JP2011150560A (ja) * 2010-01-22 2011-08-04 Kddi Corp ソフトウェア保護システム、ソフトウェア保護方法、ソフトウェア変換方法およびプログラム
US11301592B2 (en) * 2010-01-28 2022-04-12 Pure Storage, Inc. Distributed storage with data obfuscation and method for use therewith
WO2011116446A1 (en) * 2010-03-24 2011-09-29 Irdeto Canada Corporation System and method for random algorithm selection to dynamically conceal the operation of software
CN102939608A (zh) * 2010-03-25 2013-02-20 埃德图加拿大公司 抗边通道和重复调用攻击的动态、可变定时操作路径的系统和方法
JP2011209801A (ja) * 2010-03-29 2011-10-20 Kddi Corp ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
KR101712850B1 (ko) * 2010-03-31 2017-03-07 이르데토 비.브이. 화이트 박스로부터 암호화설비를 보호하는 시스템 및 그 방법
US9152411B2 (en) * 2010-05-12 2015-10-06 Microsoft Technology Licensing, Llc Edge computing platform for delivery of rich internet applications
EP2402880A1 (en) * 2010-07-01 2012-01-04 Aladdin Europe GmbH Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
JP2013536535A (ja) * 2010-08-26 2013-09-19 マッシブリー パラレル テクノロジーズ, インコーポレイテッド 並列処理開発環境および関連する方法
KR101216995B1 (ko) * 2010-12-03 2012-12-31 충남대학교산학협력단 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법
JP5627444B2 (ja) * 2010-12-24 2014-11-19 Kddi株式会社 ソフトウェアの難読化装置、ソフトウェアの難読化方法およびプログラム
US9195810B2 (en) 2010-12-28 2015-11-24 Microsoft Technology Licensing, Llc Identifying factorable code
EP2482184A1 (en) * 2011-02-01 2012-08-01 Irdeto B.V. Adaptive obfuscated virtual machine
US8707053B2 (en) * 2011-02-09 2014-04-22 Apple Inc. Performing boolean logic operations using arithmetic operations by code obfuscation
US9058482B2 (en) 2011-03-01 2015-06-16 Angel Secure Networks, Inc. Controlling user access to electronic resources without password
US8930717B2 (en) 2011-03-01 2015-01-06 Angel Secure Networks, Inc. Secure processing module and method for making the same
KR20140058419A (ko) * 2011-03-24 2014-05-14 이르데토 비.브이. 공격 저항을 위하여 어플리케이션 전체에 걸쳐 종속성 네트워크들을 제공하는 방법 및 시스템
WO2012142178A2 (en) 2011-04-11 2012-10-18 Intertrust Technologies Corporation Information security systems and methods
US20120266249A1 (en) * 2011-04-13 2012-10-18 Safenet, Inc. Automatic Selection of Routines for Protection
FR2974207B1 (fr) * 2011-04-14 2013-05-24 In Webo Technologies Procede et systeme de securisation d'un logiciel
US8621237B1 (en) * 2011-06-30 2013-12-31 Emc Corporation Protecting against cryptographic key exposure in source code
US20130014267A1 (en) * 2011-07-07 2013-01-10 Farrugia Augustin J Computer protocol generation and obfuscation
WO2013059367A1 (en) * 2011-10-18 2013-04-25 Paul Marion Hriljac Systems and methods of source software code modification
US9116765B2 (en) 2011-10-20 2015-08-25 Apple Inc. System and method for obfuscating data using instructions as a source of pseudorandom values
US9054865B2 (en) * 2011-11-16 2015-06-09 V-Key, Inc. Cryptographic system and methodology for securing software cryptography
US8751800B1 (en) 2011-12-12 2014-06-10 Google Inc. DRM provider interoperability
WO2013091709A1 (en) * 2011-12-22 2013-06-27 Fundació Privada Barcelona Digital Centre Tecnologic Method and apparatus for real-time dynamic transformation of the code of a web document
US8539601B2 (en) 2012-01-17 2013-09-17 Lockheed Martin Corporation Secure data storage and retrieval
EP2813029B1 (en) * 2012-02-09 2020-12-02 Irdeto B.V. System and method for generating and protecting cryptographic keys
US9286063B2 (en) 2012-02-22 2016-03-15 Veracode, Inc. Methods and systems for providing feedback and suggested programming methods
US8661549B2 (en) * 2012-03-02 2014-02-25 Apple Inc. Method and apparatus for obfuscating program source codes
JP2013186647A (ja) * 2012-03-07 2013-09-19 Yokohama National Univ 難読化装置、難読化方法、及び難読化プログラム、並びに難読化されたソースコード
US20150121073A1 (en) * 2012-03-23 2015-04-30 Irdeto B.V. Software fingerprinting
KR101657191B1 (ko) * 2012-06-06 2016-09-19 엠파이어 테크놀로지 디벨롭먼트 엘엘씨 소프트웨어 보호 메커니즘
EP2682865B1 (de) * 2012-07-05 2018-05-30 Vector Informatik GmbH Verfahren zur Kommunikation mit einem Steuerprogramm eines Steuergeräts sowie Applikationsmodule dazu
DE102012015899A1 (de) * 2012-08-10 2014-02-13 Giesecke & Devrient Gmbh Verfahren zum Erzeugen von ausführbarem Programmcode
US9323315B2 (en) 2012-08-15 2016-04-26 Nvidia Corporation Method and system for automatic clock-gating of a clock grid at a clock source
US8850371B2 (en) 2012-09-14 2014-09-30 Nvidia Corporation Enhanced clock gating in retimed modules
US9270660B2 (en) 2012-11-25 2016-02-23 Angel Secure Networks, Inc. System and method for using a separate device to facilitate authentication
US8918768B2 (en) * 2012-12-06 2014-12-23 Apple Inc. Methods and apparatus for correlation protected processing of data operations
KR101429229B1 (ko) * 2012-12-27 2014-08-12 한라대학교산학협력단 명령문 병합을 이용한 자바 난독화방법
US9519568B2 (en) 2012-12-31 2016-12-13 Nvidia Corporation System and method for debugging an executing general-purpose computing on graphics processing units (GPGPU) application
US10152591B2 (en) * 2013-02-10 2018-12-11 Paypal, Inc. Protecting against malware variants using reconstructed code of malware
IL224743A0 (en) * 2013-02-14 2013-06-27 Harel Cain A system for automatic obfuscation of computer programs
US9116712B2 (en) 2013-02-28 2015-08-25 Microsoft Technology Licensing, Llc Compile based obfuscation
US9411708B2 (en) 2013-04-12 2016-08-09 Wipro Limited Systems and methods for log generation and log obfuscation using SDKs
US9430534B2 (en) 2013-05-09 2016-08-30 Wipro Limited Systems and methods for improved security and precision in executing analytics using SDKS
US9471456B2 (en) 2013-05-15 2016-10-18 Nvidia Corporation Interleaved instruction debugger
CN104166822B (zh) * 2013-05-20 2017-10-13 阿里巴巴集团控股有限公司 一种数据保护的方法和装置
EP3005207B1 (en) * 2013-05-30 2020-09-30 JScrambler S.A. Digital content execution control mechanism
US10095846B2 (en) * 2013-05-30 2018-10-09 Jscrambler S.A. Web application protection
US8738931B1 (en) * 2013-10-21 2014-05-27 Conley Jack Funk Method for determining and protecting proprietary source code using mnemonic identifiers
US9419993B2 (en) * 2013-12-12 2016-08-16 Empire Technology Development Llc Randomization of processor subunit timing to enhance security
US8954583B1 (en) 2014-01-20 2015-02-10 Shape Security, Inc. Intercepting and supervising calls to transformed operations and objects
TW201530344A (zh) * 2014-01-21 2015-08-01 hong-jian Zhou 應用程式存取保護方法及應用程式存取保護裝置
EP2913772A1 (de) 2014-02-28 2015-09-02 Wibu-Systems AG Verfahren und Computersystem zum Schutz eines Computerprogramms gegen Beeinflussung
US9497252B2 (en) 2014-03-31 2016-11-15 International Business Machines Corporation On-demand code version switching
US8997256B1 (en) 2014-03-31 2015-03-31 Terbium Labs LLC Systems and methods for detecting copied computer code using fingerprints
US9459861B1 (en) 2014-03-31 2016-10-04 Terbium Labs, Inc. Systems and methods for detecting copied computer code using fingerprints
GB201405754D0 (en) * 2014-03-31 2014-05-14 Irdeto Bv Protecting an item of software comprising conditional code
US9378001B2 (en) 2014-05-02 2016-06-28 Microsoft Technology Licensing, Llc Matching program sections through feature extraction
US9411597B2 (en) * 2014-05-06 2016-08-09 Nxp B.V. Return-oriented programming as an obfuscation technique
US9858440B1 (en) * 2014-05-23 2018-01-02 Shape Security, Inc. Encoding of sensitive data
US9003511B1 (en) 2014-07-22 2015-04-07 Shape Security, Inc. Polymorphic security policy action
US9602543B2 (en) 2014-09-09 2017-03-21 Shape Security, Inc. Client/server polymorphism using polymorphic hooks
US10657262B1 (en) * 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
WO2016118216A2 (en) 2014-11-06 2016-07-28 Intertrust Technologies Corporation Secure application distribution systems and methods
US11269621B2 (en) * 2015-01-27 2022-03-08 Arris Enterprises Llc Obfuscation for protection of streaming media and other data flows
CA2975528C (en) 2015-02-09 2024-01-30 T0.Com, Inc. Crypto integration platform
US9779239B2 (en) * 2015-03-15 2017-10-03 Fujitsu Limited Detection of malicious software behavior using signature-based static analysis
CN104766166B (zh) * 2015-03-27 2018-06-19 杭州安恒信息技术有限公司 一种面向等级保护的信息系统安全合规性检查方法
US9805203B2 (en) * 2015-04-21 2017-10-31 Sap Se Cooperative static and dynamic analysis of web application code for finding security vulnerabilities
US11704733B2 (en) 2015-05-01 2023-07-18 Tzero Ip, Llc Crypto multiple security asset creation and redemption platform
US10068070B2 (en) * 2015-05-05 2018-09-04 Nxp B.V. White-box elliptic curve point multiplication
US20160328539A1 (en) * 2015-05-05 2016-11-10 Nxp B.V. Obscuring Software Code With Split Variables
CA2986164C (en) 2015-05-26 2021-11-30 T0.Com, Inc. Obfuscation of intent in transactions using cryptographic techniques
US10230718B2 (en) 2015-07-07 2019-03-12 Shape Security, Inc. Split serving of computer code
US9471285B1 (en) * 2015-07-09 2016-10-18 Synopsys, Inc. Identifying software components in a software codebase
US9946853B1 (en) * 2015-09-17 2018-04-17 Symantec Corporation Techniques for application code obfuscation
US10509918B1 (en) * 2015-09-18 2019-12-17 Hrl Laboratories, Llc One-time obfuscation for polynomial-size ordered binary decision diagrams (POBDDs)
US10594705B2 (en) * 2015-10-06 2020-03-17 Shouhuai Xu Systems and methods for instructions-based detection of sophisticated obfuscation and packing
US9703537B2 (en) 2015-11-02 2017-07-11 International Business Machines Corporation Method for defining alias sets
EP3220306B1 (en) * 2016-02-22 2018-11-07 Eshard Method of testing the resistance of a circuit to a side channel analysis
US10171493B2 (en) 2016-03-05 2019-01-01 Sears Brands, L.L.C. Method and system to dynamically obfuscate a web services interface
WO2017156158A1 (en) 2016-03-09 2017-09-14 Shape Security, Inc. Applying bytecode obfuscation techniques to programs written in an interpreted language
US10216488B1 (en) 2016-03-14 2019-02-26 Shape Security, Inc. Intercepting and injecting calls into operations and objects
JP6730587B2 (ja) * 2016-06-13 2020-07-29 富士通株式会社 キャッシュミス推定プログラム、キャッシュミス推定方法及び情報処理装置
US10574632B2 (en) * 2016-06-30 2020-02-25 Hcl Technologies Limited System and method for secure sharing of a source code
US10243937B2 (en) * 2016-07-08 2019-03-26 Nxp B.V. Equality check implemented with secret sharing
US10078505B2 (en) * 2016-07-20 2018-09-18 International Business Machines Corporation Partial connection of iterations during loop unrolling
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
US11349816B2 (en) 2016-12-02 2022-05-31 F5, Inc. Obfuscating source code sent, from a server computer, to a browser on a client computer
US10382450B2 (en) * 2017-02-21 2019-08-13 Sanctum Solutions Inc. Network data obfuscation
WO2018194196A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Elf 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
WO2018194198A1 (ko) * 2017-04-20 2018-10-25 라인 가부시키가이샤 Pe 파일의 난독화 적용 여부의 탐지 및 보안성 평가를 위한 방법 및 시스템
JP7131946B2 (ja) 2017-04-20 2022-09-06 Line株式会社 アプリケーションの保安性を評価する方法およびシステム
US10521612B2 (en) * 2017-06-21 2019-12-31 Ca, Inc. Hybrid on-premises/software-as-service applications
US10331839B2 (en) * 2017-08-18 2019-06-25 Honeywell Federal Manufacturing & Technologies, Llc System and method for obfuscation of electronic circuits
EP3467691B1 (en) 2017-10-05 2020-08-26 Eshard Method of selecting software files
US10121022B1 (en) 2017-10-09 2018-11-06 Jason McNutt Methods and systems for encrypting data using object-based screens
US11307962B2 (en) 2018-07-09 2022-04-19 United States Of America As Represented By The Secretary Of The Navy Method for semantic preserving transform mutation discovery and vetting
US10521613B1 (en) * 2018-08-08 2019-12-31 Carlos Manuel Gonzalez Adaptive standalone secure software
US10620946B1 (en) * 2018-10-23 2020-04-14 Oracle International Corporation Dynamic modeling for opaque code during static analysis
KR20200047187A (ko) * 2018-10-26 2020-05-07 삼성전자주식회사 서버 및 서버의 제어 방법
DE102019004398A1 (de) * 2019-06-21 2020-12-24 Giesecke+Devrient Mobile Security Gmbh Obfuskierung einer Softwareapplikation
US20210004485A1 (en) * 2019-07-01 2021-01-07 International Business Machines Corporation Cognitive Iterative Minimization of Personally Identifiable Information in Electronic Documents
US11741197B1 (en) 2019-10-15 2023-08-29 Shape Security, Inc. Obfuscating programs using different instruction set architectures
US11599671B1 (en) 2019-12-13 2023-03-07 TripleBlind, Inc. Systems and methods for finding a value in a combined list of private values
US11431688B2 (en) 2019-12-13 2022-08-30 TripleBlind, Inc. Systems and methods for providing a modified loss function in federated-split learning
CN111190601A (zh) * 2019-12-25 2020-05-22 航天信息股份有限公司 面向安卓应用程序的渐进控制流混淆方法和电子设备
US11204985B2 (en) * 2020-03-31 2021-12-21 Irdeto Canada Corporation Systems, methods, and storage media for creating secured computer code having entangled transformations
US11354218B2 (en) * 2020-05-06 2022-06-07 Sap Se Generation of optimal program variation
CN113158147B (zh) * 2021-03-24 2022-12-09 中国人民解放军战略支援部队信息工程大学 一种基于母体融合的代码混淆方法
WO2023009588A1 (en) 2021-07-27 2023-02-02 TripleBlind, Inc. Systems and methods for providing a multi-party computation system for neural networks
US20230289449A1 (en) * 2022-03-11 2023-09-14 Bank Of America Corporation Apparatus and methods for leveraging machine learning to programmatically identify and detect obfuscation

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4644493A (en) 1984-09-14 1987-02-17 International Business Machines Corporation Implementing a shared higher level of privilege on personal computers for copy protection of software
US4827508A (en) 1986-10-14 1989-05-02 Personal Library Software, Inc. Database usage metering and protection system and method
US5224160A (en) 1987-02-23 1993-06-29 Siemens Nixdorf Informationssysteme Ag Process for securing and for checking the integrity of the secured programs
US4965724A (en) 1987-03-05 1990-10-23 Oki Electric Industry Co., Ltd. Compiler system using reordering of microoperations to eliminate interlocked instructions for pipelined processing of assembler source program
US4866769A (en) 1987-08-05 1989-09-12 Ibm Corporation Hardware assist for protecting PC software
CA2010056C (en) 1990-02-14 1998-05-12 Charles Brian Hall Method for improving the efficiency of arithmetic code generation in an optimizing compiler using machine independent update instruction generation
EP0459046A1 (en) 1990-05-31 1991-12-04 International Business Machines Corporation Computer software protection
US5481708A (en) 1992-06-05 1996-01-02 Borland International, Inc. System and methods for optimizing object-oriented compilations
US5287408A (en) 1992-08-31 1994-02-15 Autodesk, Inc. Apparatus and method for serializing and validating copies of computer software
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
JP3280449B2 (ja) 1993-03-01 2002-05-13 富士通株式会社 コンパイル装置
JPH07114473A (ja) 1993-10-19 1995-05-02 Fujitsu Ltd コンパイラの命令列最適化方法
US5579520A (en) 1994-05-13 1996-11-26 Borland International, Inc. System and methods for optimizing compiled code according to code object participation in program activities
US5950505A (en) 1994-05-24 1999-09-14 Locher; Beat Process for stripping an insulated wire or cable having a cross-section which may be non-circular and stripping device for carrying out the process
US5724425A (en) 1994-06-10 1998-03-03 Sun Microsystems, Inc. Method and apparatus for enhancing software security and distributing software
FR2721984B1 (fr) 1994-06-30 1996-09-06 Valeo Volant amortisseur, et embrayage notamment pour vehicule automobile equipe d'un tel volant
US5559884A (en) 1994-06-30 1996-09-24 Microsoft Corporation Method and system for generating and auditing a signature for a computer program
US5664191A (en) 1994-06-30 1997-09-02 Microsoft Corporation Method and system for improving the locality of memory references during execution of a computer program
US5646997A (en) 1994-12-14 1997-07-08 Barton; James M. Method and apparatus for embedding authentication information within digital data
US5745569A (en) 1996-01-17 1998-04-28 The Dice Company Method for stega-cipher protection of computer code
DE69637733D1 (de) 1995-02-13 2008-12-11 Intertrust Tech Corp Systeme und verfahren für ein sicheres übertragung
US5892900A (en) 1996-08-30 1999-04-06 Intertrust Technologies Corp. Systems and methods for secure transaction management and electronic rights protection
US6157721A (en) 1996-08-12 2000-12-05 Intertrust Technologies Corp. Systems and methods using cryptography to protect secure computing environments
US5943422A (en) 1996-08-12 1999-08-24 Intertrust Technologies Corp. Steganographic techniques for securely delivering electronic digital rights management control information over insecure communication channels
US5499333A (en) 1995-04-20 1996-03-12 International Business Machines Corporation Method and apparatus for at least partially instantiating an object in a compound document using the object's parent class configuration data when the object's configuration data is unavailable
US5592549A (en) 1995-06-15 1997-01-07 Infosafe Systems, Inc. Method and apparatus for retrieving selected information from a secure information source
US6006328A (en) 1995-07-14 1999-12-21 Christopher N. Drake Computer software authentication, protection, and security system
WO1997004394A1 (en) * 1995-07-14 1997-02-06 Christopher Nathan Drake Computer software authentication, protection, and security system
JP4518574B2 (ja) 1995-08-11 2010-08-04 ソニー株式会社 記録方法及び装置、記録媒体、並びに再生方法及び装置
US5835776A (en) 1995-11-17 1998-11-10 Sun Microsystems, Inc. Method and apparatus for instruction scheduling in an optimizing compiler for minimizing overhead instructions
US6088452A (en) * 1996-03-07 2000-07-11 Northern Telecom Limited Encoding technique for software and hardware
AU3205797A (en) 1996-05-15 1997-12-05 Intertrust Technologies Corp. Cryptographic methods, apparatus and systems for storage media electronic rights management in closed and connected appliances
US5805895A (en) 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5892899A (en) * 1996-06-13 1999-04-06 Intel Corporation Tamper resistant methods and apparatus
AU739693B2 (en) 1996-08-12 2001-10-18 Intertrust Technologies Corp. Trusted and secure techniques for item delivery and execution
US5966537A (en) * 1997-05-28 1999-10-12 Sun Microsystems, Inc. Method and apparatus for dynamically optimizing an executable computer program using input data
US6102966A (en) 1998-03-20 2000-08-15 Preemptive Solutions, Inc. Method for renaming identifiers of a computer program

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100350343C (zh) * 2002-03-13 2007-11-21 松下电器产业株式会社 安全设备
CN100382483C (zh) * 2003-05-20 2008-04-16 三星电子株式会社 防止程序篡改的方法、升级混淆程序的方法及装置
CN104335219B (zh) * 2012-03-30 2018-06-05 爱迪德技术有限公司 使用变量相关编码来保护可访问的系统
CN106415566A (zh) * 2014-03-31 2017-02-15 爱迪德技术有限公司 保护软件项目
CN105404794A (zh) * 2014-09-04 2016-03-16 腾讯科技(深圳)有限公司 Java应用软件的保护方法和装置
CN105404794B (zh) * 2014-09-04 2019-09-20 腾讯科技(深圳)有限公司 Java应用软件的保护方法和装置
CN104318134A (zh) * 2014-11-05 2015-01-28 北京深思数盾科技有限公司 一种数据保护方法
CN104318134B (zh) * 2014-11-05 2017-06-06 北京深思数盾科技股份有限公司 一种数据保护方法
WO2017016087A1 (zh) * 2015-07-30 2017-02-02 中兴通讯股份有限公司 一种生成随机布局程序的方法及装置
CN108475303A (zh) * 2015-12-31 2018-08-31 计算机2.0(2015)有限公司 应用递增多项式代码增强抵抗反向工程的计算机实现方法
CN107506651A (zh) * 2017-07-04 2017-12-22 上海斐讯数据通信技术有限公司 一种代码加密方法及系统
CN110659200A (zh) * 2018-06-29 2020-01-07 中国航发商用航空发动机有限责任公司 航空机载软件的源码和目标码对比分析方法及系统

Also Published As

Publication number Publication date
JP2002514333A (ja) 2002-05-14
US6668325B1 (en) 2003-12-23
CA2293650A1 (en) 1999-01-14
AU7957998A (en) 1999-01-25
JP4739465B2 (ja) 2011-08-03
CA2293650C (en) 2012-09-25
EP0988591A1 (en) 2000-03-29
WO1999001815A1 (en) 1999-01-14

Similar Documents

Publication Publication Date Title
CN1260055A (zh) 用于提高软件安全性的模糊技术
CN1308818C (zh) 用于结构仿真的系统
CN1728153A (zh) 支持配置实体的选择性表示的配置说明语言的方法和系统
CN1297935C (zh) 进行非结构化信息管理和自动文本分析的系统和方法
CN1105969C (zh) 用于计算机应用程序开发和执行的方法、系统和数据结构
CN1619490A (zh) 系统的集成设计,部署和管理阶段
CN1666202A (zh) 管理集成电路设计的装置和方法
CN1288585C (zh) 用于设计可配置处理器的自动处理器生成系统及方法
CN1781078A (zh) 硬件加速器个性编译器
CN101034349A (zh) 基于功能设计的数据库应用系统开发平台
CN1820266A (zh) 用于将应用程序与基于项的存储平台接口的系统和方法
CN1137320A (zh) 用于建立关系型数据库模式的语义目标模型化系统
CN101040292A (zh) 数据管理装置及其方法
CN1716192A (zh) 语义编程语言和语言对象模型
CN1679026A (zh) Web服务设备和方法
CN1591400A (zh) 集成数据处理系统
CN1535429A (zh) 可重用数据标记语言
CN1650279A (zh) 企业业务过程管理的方法和系统
CN1125990A (zh) 软件自动分析的方法与装置
CN1453699A (zh) 开发片上系统用的开发环境的生成方法及存储该程序的媒体
CN1399737A (zh) 便于组件选择的软件开发系统
Ha et al. Job forecasting based on the patent information: a word embedding-based approach
Paramonov et al. Tacle: Learning constraints in tabular data
CN1871598A (zh) 用于可由硬件/软件接口系统管理的信息单元的扩展和继承的系统和方法
CN102707938A (zh) 表形式软件规格制作支援方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication