CN104798075A - 应用随机化 - Google Patents
应用随机化 Download PDFInfo
- Publication number
- CN104798075A CN104798075A CN201280077350.7A CN201280077350A CN104798075A CN 104798075 A CN104798075 A CN 104798075A CN 201280077350 A CN201280077350 A CN 201280077350A CN 104798075 A CN104798075 A CN 104798075A
- Authority
- CN
- China
- Prior art keywords
- instruction block
- application
- instruction
- intermediate representation
- amendment
- 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
Links
- 238000005206 flow analysis Methods 0.000 claims description 38
- 230000004044 response Effects 0.000 claims description 12
- 230000008707 rearrangement Effects 0.000 claims description 5
- 230000003068 static effect Effects 0.000 claims description 3
- 238000012986 modification Methods 0.000 abstract description 17
- 230000004048 modification Effects 0.000 abstract description 17
- 238000000034 method Methods 0.000 description 47
- 230000008569 process Effects 0.000 description 37
- 230000008859 change Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 17
- 238000004891 communication Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 238000005457 optimization Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 238000009434 installation Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000005309 stochastic process Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Abstract
在一个实现中,应用随机化系统访问应用的带注释的中间表示,识别带注释的中间表示内的第一指令块,并随机选择用于第一指令块的第一修改。应用随机化系统然后识别带注释的中间表示内的第二指令块并随机选择用于第二指令块的不同于第一修改的第二修改。应用随机化系统然后生成应用的本机代码表示,其中第一修改被应用于第一指令块并且第二修改被应用于第二指令块。
Description
背景技术
应用(或软件程序)典型地针对特定环境(例如操作系统和硬件平台)而编译且在诸如实现该环境的计算系统之类的主机处执行。因此,应用的特定构造或版本的一个实例与应用的该构造或版本的其它实例相同。
应用的实例之间的这样的类似性可以是安全风险,因为攻击者可以通过观察应用的一个实例来知悉关于该应用的许多或全部实例的各种运行时特性。一些环境对应用或由应用访问的库的地址空间布局(或存储器空间占用)进行随机化以使应用数据和可执行代码的位置发生变化来减轻这样的安全风险。
附图说明
图1是根据实现的应用随机化系统的操作的图示。
图2是根据实现的生成应用的带注释的中间表示的过程的流程图。
图3是根据实现的应用的带注释的中间表示的图示。
图4是根据另一实现的应用的带注释的中间表示的图示。
图5是根据实现的将随机修改应用于应用的过程的流程图。
图6是根据实现的随机修改过程的流程图。
图7是根据实现的应用随机化系统的示意性框图。
图8是根据实现的托管应用随机化系统的计算系统的示意性框图。
具体实施方式
攻击者通常试图通过与应用交互来知悉应用的内部操作和结构。也就是说,攻击者可以通过向应用提供输入并观察输出来知悉应用。作为具体实例,攻击者可以通过经由应用的接口提供随机输入和/或有针对性的输入(例如,包括利用特定安全漏洞或安全漏洞类的值或符号的输入)并观察应用的输出来研究基于web的或网络使能的应用。这样的技术可以称为模糊处理(fuzzing)。
作为具体实例,攻击者可以向应用的接口提供被精心制作成利用结构化查询语言(SQL)漏洞(例如,被嵌入在输入中的SQL查询)、缓冲器溢出漏洞(例如,输入中的大容量数据)或任意代码执行漏洞(例如,被嵌入在输入中的shell代码)的输入。基于响应或对应于输入的输出,攻击者可以确定在应用内是否和在哪里存在安全漏洞。
攻击者还使用诸如反汇编和汇编代码分析之类的反向工程技术来研究应用。例如,攻击者可以反汇编应用的本机代码(或对象-代码)表示并分析所得到的汇编指令以知悉应用的结构和操作。
因为许多应用作为那些应用的特定构造的拷贝而被分发,所以应用的一个拷贝中的漏洞很可能也存在于该应用的其它拷贝中。换言之,应用的特定版本或构造的每一个拷贝共享应用的该版本或构造的其它拷贝的结构、操作和漏洞。因此,攻击者从研究应用的一个实例(或执行拷贝)知悉的信息适用于该应用的许多其它实例。
地址空间布局随机化(ASLR)已被用于更改应用的加载时实例的存储器布局。更具体地,ASLR对诸如数据、代码、库、堆和/或栈之类的应用组件的存储器中的定位或位置进行随机化。应用的实例是指在运行时处应用的表示。例如,应用的实例可以是指定义应用且由处理器执行的存储在存储器(例如随机存取存储器(RAM))处的指令组。ASLR使一些安全漏洞的利用变得复杂,因为该技术迫使攻击者动态地识别正在执行的实例的这些应用组件的存储器位置。
然而,ASLR不改变应用自身的操作或结构。而是,ASLR移动在加载时和/或运行时处一些应用组件的存储器内位置。换句话说,应用的一个实例的所有漏洞存在于该应用的其它实例中,但仅仅已被重定位在存储器中。因此,在攻击者能够动态地识别漏洞的位置之后,可以一致地利用漏洞。
本文所讨论的实现在应用在主机处被实例化之前随机修改应用。应用的实例化是指生成应用的实例。例如,实例化可以包括:将表示应用的指令或程序代码加载到存储器(例如RAM)中,以及在应用的进入点(例如进入地址)处开始由处理器执行。在一些实现中,应用的实例化可以包括:在存储器内重定位应用的部分以实现ASLR。换言之,本文所讨论的实现可以与ASLR方法组合。
本文所讨论的随机修改可以被应用于应用的每一个实例(即,每当应用被实例化或执行时)以更改应用的结构和操作而不更改应用的功能性。换言之,随机修改改变应用如何执行任务,但不改变应用执行什么任务。换句话说,应用的每一个实例执行相同功能性,但使用不同内部结构和/或操作来这样做。也就是说,每一个实例中的不同的结构和/或操作的结果是等效的。
由此,漏洞跨应用的示例而不一致。因此,应用的一个实例中的漏洞的研究提供了极少或不提供对应用的其它实例中的漏洞的洞悉。而且,因为应用的结构和操作对于每一个实例而言是不同的,所以漏洞不会跨应用的实例而一致地表现。例如,应用的一个实例中的成功代码注入将很可能导致应用的另一实例的异常或过早终止。
图1是根据实现的应用随机化系统的操作的图示。更具体地,图1图示了通过应用随机化系统的组件(例如模块)的应用(或应用的不同表示)的流。如本文所使用的,术语“应用”是指可在环境内执行(或托管)以执行一个或多个功能性的软件。作为示例,诸如web或超文本传输协议服务器、web应用服务器、office产品(例如文字处理)软件、便携式文档格式(PDF)解释器、电子邮件客户端或服务器之类的网络服务和诸如网络协议栈之类的中间件是应用的示例。
如图1中图示的,向中间表示生成器120提供应用的源代码表示111。应用的源代码表示是使用人类可读编程语言定义的指令的集合。例如,源代码表示111可以是以诸如本机编程语言之类的编程语言定义应用的文件或文件组。编程语言的示例包括:C,C++,C#,Objective-C,JavaTM,Haskell,Erlang,Scala,Lua和Python。在一些实现中,源代码表示111可以参考源代码表示111外部的功能性或资源,诸如在应用的编译时期间(例如,在中间表示生成器120或本机代码生成器160处)或在应用的运行时处可访问的库或环境服务(例如操作系统服务)。
中间表示生成器120是基于源代码表示111生成应用的中间表示112的模块。例如,中间表示生成器120可以是执行词汇、句法、语义和优化分析且输出应用的中间表示的编译器或诸如编译器组件之类的编译器的一部分。作为中间表示生成器120的具体示例,中间表示112可以是低级虚拟机(LLVM)位码中间表示,源代码表示111可以是C源代码文件的组,并且中间表示生成器120可以包括输出中间表示112的诸如clang之类的LLVM编译器。可以以多种形式描述LLVM中间表示。典型地,以位码形式或符号文本形式描述LLVM中间表示,并且LLVM系统包括用于在这些形式之间转换的实用程序。因此,本文参考LLVM位码中间表示所讨论的实现是本发明的具体示例实现。与这样的示例实现有关地讨论的方法和系统可以适用于其它实现,诸如利用诸如具有符号形式的LLVM中间表示之类的其它中间表示的实现。
如本文所使用的,术语“中间表示”是指使用中间语言指定的应用的表示,所述中间语言是除诸如抽象机之类的应用的主机外的机器的语言。也就是说,以中间表示而表示的指令不可由应用的主机(即,将执行应用的机器或虚拟机)直接执行。作为示例,可以以寄存器传送语言(RTL)、字节码语言、诸如LLVM位码之类的静态单赋值(SSA)语言、诸如公共中间语言之类的基于栈的中间语言、一些其它中间语言或其组合指定中间表示。
在一些实现中,应用的中间表示不可由应用的主机直接执行。因此,在不使用例如如本文更加详细讨论的随机修改模块和本机代码生成器来生成应用的本机代码表示的情况下,中间表示不由主机执行。因此,每当应用被实例化或执行时,生成应用的唯一或随机本机代码表示。
典型地,中间表示简化应用的流分析。例如,中间表示可以以其中中间表示的每一个指令仅定义一个操作(即,不存在多操作指令)并且可用寄存器的数目非常大或不受限制的形式表示应用。作为具体示例,中间表示可以是其中每一个寄存器或变量被赋值一次的静态单赋值形式中间表示。
中间表示112然后由流分析模块130访问以生成带注释的中间表示113。流分析模块130分析中间表示112以识别中间表示112内的指令块。例如,流分析模块130可以使用数据流和/或控制流分析技术来分析中间表示112以识别中间表示112内的指令块。流分析模块130然后为中间表示112加注释以标识指令块,以及在一些实现中,标识带注释的中间表示113内的其性质或特性。
如本文所使用的,术语“指令块”意指中间表示内的相关指令的组。作为简单示例,中间表示112内的子例程可以被定义为指令块。作为另一示例,特定寄存器或值对其而言是操作数的顺序指令的组可以被定义为指令块。作为又一示例,指令块可以是顺序地指定而没有中间表示内的中断的指令的组。更具体地,例如,跳转目标之间的指令(例如,跳转指令向其传送控制或执行的指令)和跳转(或分支)指令可以被定义为指令块。也就是说,如中间表示112所指定的,指令块中的每一个指令要被顺序地执行。换言之,应用的控制或执行流通过指令块的指令串行进行。
作为具体示例,流分析模块130可以基于中间表示112生成控制流图。控制流图的节点包括(或表示)没有任何跳转指令或跳转目标的指令组。也就是说,跳转目标标示块的开始,并且跳转指令标示块的结束。控制流图的边缘表示应用的流中的跳转(或分支)。流分析模块130然后可以从控制流图的节点提取或识别应用的指令块。
流分析模块130然后基于中间表示112和指令块生成带注释的中间表示113。也就是说,流分析模块130为中间表示112加注释以标识指令块的开始来定义带注释的中间表示113。在一些实现中,流分析模块130包括带注释的中间表示113内的附加注释(或信息)。这样的注释可以标识指令块的结束,标识指令块的长度,描述指令块,标识由子例程定义的指令块,标识指令块跳转到的跳转目标(即,指令块结束在其处的跳转指令的跳转目标或潜在跳转目标),标识跳转到指令块内的跳转目标的指令块(或跳转指令),和/或包括涉及指令块的附加信息。
如图1中所图示的,带注释的中间表示113可以存储在数据储存140处。数据储存140是诸如下述各项之类的设备或服务:硬盘驱动器(HDD)、诸如固态驱动器(SSD)之类的非易失性的基于半导体的存储器设备、易失性存储器处的高速缓存、文件系统、或带注释的中间表示113可以被存储在其处以供随后使用的数据库。出于多种原因,这样的存储装置可以是有用的。例如,对于一些应用而言,在流分析模块130处执行的流分析可能花费许多秒、分钟或甚至许多小时。如本文将更加详细讨论的,带注释的中间表示113可以用于每当应用被实例化(或启动)时生成应用的随机化中间表示。为应用的每一个实例化执行中间表示112的流分析可能显著地增加对应用进行实例化所需的时间。因此,访问数据储存140处的预生成的带注释的中间表示130而不是执行流分析可以减少对应用进行实例化所需的时间。
此外,因为应用典型地在应用的实例化之间不改变(即,当没有对应用的更新可用时),所以使用中间表示112执行针对应用的流分析不必要地重复。在对应用的更新可用的情况下,流分析模块130可以在经更新的应用的中间表示上执行流分析,并生成新的带注释的中间表示以取代带注释的中间表示113。
随机修改模块150例如响应于与应用相关联的实例化信号而访问数据储存140处的带注释的中间表示113。也就是说,其中将托管应用的环境可以例如响应于向随机修改模块150指示应用应当被实例化的用户输入而提供信号(或指示)。随机修改模块150接收带注释的中间表示113,并使用由流分析模块130提供的注释来标识指令块。因此,随机修改模块150不必执行针对应用的流分析。而是,随机修改模块150依赖于带注释的中间表示113中的注释来提供由流分析模块130执行的流分析的结果。
随机修改模块150然后随机修改应用的指令块。由随机修改模块150执行的修改更改应用的操作和/或结构,但不更改应用的功能性。也就是说,修改更改指令块以例如改变指令的数目、顺序、操作数或类型而不更改指令块的结果。
作为示例,随机修改模块150可以通过添加跳转指令将一个指令块分解成多个指令块(例如,跳转指令将该多个指令块链接在一起以给该一个指令块提供等效的功能性);重布置(重排序)指令块内的在不同数据上操作的指令;通过移除跳转指令并从一个指令块向另一指令块添加指令来聚集两个或更多指令块;向指令块添加附加指令;将不是子例程的指令块更改成子例程并将该指令块对其而言是跳转目标的跳转指令更改成对该指令块的子例程调用;展开指令块内的循环;组合指令块内的循环;将一个子例程分解成多个子例程并添加对子例程的子例程调用以将子例程链接在一起以便给该一个子例程提供等效的结果;内联子例程(例如,从子例程向调用子例程的每一个指令块添加指令);和/或以其它方式修改或混淆(obfuscate)带注释的中间表示113内的应用的中间表示。换句话说,随机修改模块150可以修改带注释的中间表示113内的应用的中间表示内的指令以实现这样的修改。
将这样的修改随机地应用于应用的指令块。换言之,对于应用的每一个指令块,随机修改模块150随机选择是否修改该指令块和对该指令块应用哪个或哪些修改。如本文所使用的,术语“随机的”、“随机地”和类似的术语是指具有真随机结果的真随机过程和诸如基于种子的伪随机数生成器之类的伪随机过程二者。作为具体示例,随机操作或随机执行的某操作可以基于例如来自盖革(Geiger)计数器、光子计数器或被提供有随机化种子(即,作为初始状态对伪随机数生成器而输入的值)的伪随机数生成器的输出。
在一些实现中,随机化种子可以由诸如系统管理员之类的用户提供或选择。例如,应用随机化系统可以包括系统管理员经由其可提供随机化种子的诸如图形用户接口之类的接口。该接口可以例如使用授权技术、凭证(例如口令或安全证书)、密码术、诸如可信平台模块(TPM)之类的可信计算机制和/或其它方法加以保护。
这样的实现可以有益于允许系统管理员使应用随机化系统生成应用的相同本机代码表示以用于例如调试应用和/或应用随机化系统。也就是说,如果基于伪随机数生成器的输出随机选择修改,则向伪随机数生成器提供相同的随机化种子导致伪随机数生成器向随机修改模块输出相同的随机输入(或随机值)序列。因为随机修改模块基于来自伪随机数生成器的随机输入来选择用于指令块的修改,所以向伪随机数生成器提供公共随机化种子导致随机修改模块每当随机修改模块修改应用的中间表示时选择用于指令块的相同修改。
随机修改模块150输出随机化的中间表示114。随机化的中间表示114是包括由随机修改模块150执行的修改的应用的中间表示。典型地,随机化的中间表示114不包括被添加到中间表示112以定义带注释的中间表示113的注释流分析模块130。
如以上讨论的,中间表示不可由应用的主机(例如运行时环境)执行。本机代码生成器160是访问随机化的中间表示114且生成应用的本机代码表示115的模块。应用的本机代码表示115是其中通过可在应用的主机处执行的指令定义应用的应用表示。例如,本机代码生成器160可以是从随机化的中间表示114生成本机代码表示115的即时编译器或翻译器。因为基于(或使用或从)随机化的中间表示114生成本机代码表示115,所以本地代码表示115包括(或具有)在随机修改模块150处执行的修改。换言之,在随机修改模块150处执行的修改被应用于本机代码表示115(或被应用在本机代码表示115处)。
作为具体实例,随机化的中间表示114可以是在LLVM位码中间表示中指定的,本机代码生成器160可以是用于x86架构的LLVM即时编译器,并且本机代码表示115可以由x86对象或二进制代码定义。
在一些实现中,本机代码生成器160不执行任何优化或者仅在随机化的中间表示114上执行一些类型的优化以生成本机代码表示115。例如,本机代码生成器160可以将单操作指令组合成多操作指令,但不移除不相关的指令。这样的实现可以特别有益于防止本机代码生成器160移除或“优化出”由随机修改模块150执行以生成随机化的中间表示114的随机修改。
在这样的实现中,中间表示生成器120可以在源代码表示111上执行优化以生成中间表示112。在一些实现中,中间表示生成器120可以执行本机代码生成器160不在源代码表示111上执行的优化以生成中间表示112。为了从上文继续示例,中间表示生成器120可以执行优化以移除不相关的指令,尽管本机代码生成器160不这样做。因为中间表示生成器120在随机修改模块150随机修改应用之前执行优化,所以这些优化不干扰由随机修改模块150执行的修改。
在一些实现中,软件供应商可以使用中间表示生成器120和流分析模块130来分发作为带注释的中间表示113的应用。换言之,软件供应商可以分发作为带注释的中间表示113的应用而不是分发应用的本机代码表示。应用的用户然后可以在具有包括随机修改模块150和本机代码生成器160的应用随机化系统的主机(例如计算系统)处实例化应用。也就是说,数据储存140、随机修改模块150和本机代码生成器160对主机而言可以是可访问的。因此,每当应用被实例化时,在主机处生成和执行与应用的其它本机代码表示不同的应用的新的本机代码表示。
在其它实现中,软件供应商可以为每一个用户或客户端生成应用的本机代码表示。也就是说,数据储存140、随机修改模块150和本机代码生成器160可以对软件供应商而言可访问。例如,应用的潜在用户可以经由例如网页或其它接口来请求应用的本机代码表示。软件供应商然后可以访问数据储存140处的带注释的中间表示113,向随机修改模块150提供中间表示113,并向本机代码生成器160提供应用的随机化的中间表示。本机代码生成器160然后为该用户生成应用的本机代码表示,并向该用户提供应用的本机代码表示。因此,应用的每一个用户可以具有应用的唯一本机代码表示。
图2是根据实现的生成应用的带注释的中间表示的过程的流程图。过程200可以被实现例如以向将执行应用的主机分发以带注释的中间表示存在的应用。在块210处,在应用的中间表示上执行流分析以识别应用的中间表示内的指令块。例如,可以生成控制流图或数据流图以识别应用的指令块。
然后在块220处使用涉及应用的指令块的信息以生成应用的带注释的中间表示。应用的带注释的中间表示包括在块210处在其上执行了流分析的中间表示,并包括标识指令块的注释。在一些实现中,注释标识例如指令块的开始和结束、由子例程定义的指令块、指令块跳转到的跳转目标、在指令块内使用的寄存器、和/或指令块的其它特性或性质。
而且,带注释的中间表示可以以多种格式中的任一种存在。例如,图3是根据实现的应用的带注释的中间表示的图示。带注释的中间表示300包括两个段:包括对指令块的参考的段310(即,标识指令块的注释);和包括应用的中间表示的段320。段310和320可以是例如分离的文件。段320可以是包括应用的中间表示的文件。例如,中间表示可以是LLVM位码中间表示,并且对块311-319的参考可以是到指令块在其处被编码的LLVM位码中间表示中的位或字节偏移。作为另一示例,段310和320可以是文件或与文件相关联的数据的不同部分。更具体地,例如,段310可以是文件的特定部分处的元数据(例如,在文件的开始处)或存储在文件系统内且与包括段320的文件相关联的元数据(即,应用的中间表示)。
参考图2,在块220处,可以确定对在块210处分析的中间表示内的每一个指令块的开始的字节偏移,并且可以将表示该字节偏移的值存储在文件处或者存储为具有该指令块的标识符(例如唯一号码或字母数字标识符)的元数据。被存储在文件处或被存储为元数据的标识符、字节偏移和任何其它信息可以称为注释。
作为另一示例,图4是根据另一实现的应用的带注释的中间表示的图示。带注释的中间表示400包括多个段,其中每一个包括指令块的中间表示。换言之,段411-419中的每一个包括由该段表示的指令块的中间表示。例如,带注释的中间表示400可以是其中每一个段是表示指令块的XML元素的可扩展标记语言(XML)文档,其封装该指令块的中间表示。
参考图2,在块220处,可以生成XML文档,以及每一个指令块的中间表示,其被从应用的中间表示拷贝到用于该指令块的XML元素中。每一个XML元素还可以包括描述指令块的属性或其它元素。例如,这样的属性或其它元素可以包括指令块的字节偏移、指令块的标识符、该指令块跳转到的跳转目标和/或跳转到该指令块的其它指令块的标识符。
在一些实现中,应用随机化系统可以使用各种工具或实用程序来操纵中间表示,而不是直接操纵应用的中间表示。例如,对于LLVM中间表示,应用随机化系统可以使用LLVM系统的工具或实用程序来读取、产生、更改或以其它方式操纵中间表示。这样的工具和实用程序可以包括用于访问作为指令块的中间表示内的指令组的机制。
在块230处,可以向主机分发应用的带注释的中间表示。例如,可以经由诸如因特网之类的通信链路向主机分发作为下载的应用的带注释的中间表示。可替换地,例如,可以在诸如数字多功能盘(DVD)、FLASH驱动器或其它介质之类的非暂时性处理器可读介质上向主机分发应用的带注释的中间表示。
然后可以在对于主机而言可访问的数据储存(或多个数据储存)处存储应用的带注释的中间表示,并且可以访问应用的带注释的中间表示以便每当应用被实例化(或启动)时生成应用的新的本机代码表示。例如,图5是根据实现的将随机修改应用于应用的过程的流程图。过程500可以被实现在诸如计算设备之类的主机处托管的应用随机化系统处以便每当应用被实例化时从应用的带注释的中间表示生成应用的新的本机代码表示。
在块510处,接收针对应用(或与其相关联)的诸如加载时实例化信号之类的实例化信号。例如,操作系统可以通过调用子例程或引用实现过程500的应用随机化系统的方法来提供信号以指示应用应当被实例化。响应于实例化信号,在块520处,应用随机化系统访问应用的带注释的中间表示。例如,应用随机化系统可以访问文件系统、数据库或其它数据储存处的应用的带注释的中间表示。
如以上所讨论的,对于应用的许多实例,访问应用的相同的带注释的中间表示。然而,在块530处,对于应用的每一个实例,随机修改带注释的中间表示(或其拷贝)。图6图示了将随机修改应用于应用的示例过程,且以下更加详细地加以讨论。
在块530处修改带注释的中间表示之后,在块540处,使用应用的随机化的中间表示以生成应用的本机代码表示。例如,应用随机化系统可以包括或访问诸如即时编译器之类的编译器以将随机化的中间表示转换成本机代码表示。而且,应用随机化系统可以禁用或排除编译器(例如,即时编译器)的优化功能性以防止编译器移除在块540处被应用于随机化的中间表示的随机修改。
然后对应用进行实例化并且在块550处通过例如将应用的本机代码表示加载到主机的存储器中并且在应用的本机代码表示的进入点处开始执行指令来执行应用的本机代码表示。应用的该实例执行直至其在块560处终止或被终止,并且在块570处丢弃应用的本机代码表示。例如,可以从主机的存储器擦除本机代码表示和/或可以从文件系统删除存储应用的本机代码表示的文件。在其它实现中,在数据储存处对应用的本机代码表示进行存档。
如以上所讨论的,过程500可以在应用随机化系统处针对为应用生成的每一个实例化信号而执行。因此,应用的每一个实例都基于应用的唯一本机代码表示。由此,应用的每一个实例的内部操作和/或结构不同于应用的其它实例。
图5中图示的过程500是对应用进行随机化的过程的示例。在其它实现中,过程500可以包括与图5中图示的那些块或步骤相比附加的和/或更少的块或步骤。例如,在一些实现中,过程500不包括块560和570。而且,在一些实现中,过程500不包括块550。而是,例如,实现过程500的应用随机化系统可以在数据储存处存储应用的本机代码表示,并向诸如操作系统之类的环境提供信号以使用本机代码表示来实例化应用。
图6是根据实现的随机修改过程的流程图。过程600可以例如是诸如过程500之类的对应用进行随机化的过程的子过程。作为具体示例,过程600可以在过程500的块530处执行。
在块610处,在应用的带注释的中间表示内识别指令块。例如,实现过程600的应用随机化系统可以解析带注释的中间表示以访问注释和识别指令块。例如,如以上所讨论的,注释可以标识指令的开始指令,可以封装指令块的中间表示,和/或可以描述指令块的其它特征或特性。
应用随机化系统然后在块620处确定随机输入。随机输入可以是例如来自伪随机数生成器或随机源的随机数或值。然后在块630处,使用随机输入来选择用于指令块的修改。例如,散列函数可以被应用于随机输入,并且散列函数的输出是指示哪组修改应当被应用于指令块的值。更具体地,例如,来自散列函数的值可以被输入到查找表以选择用于指令块的修改。因此,随机地选定(或选择)用于指令块的修改。
在一些实现中,应用随机化系统可以使在应用上执行的修改的量发生变化。例如,应用随机化系统可以包括系统管理员经由其可指定修改的水平或量的诸如图形用户接口之类的接口。应用随机化系统可以将例如散列函数或查找表(例如,包括用于优选修改或其组的多个条目)朝向没有修改、修改的特定组或基于该输入的特定修改加权或偏置。换言之,在实现中,一些修改可以比其它修改优选(或比其它修改更可能)。
然后在块640处在指令块上执行修改。换言之,根据在块630处随机选择的修改来修改在块610处识别的指令块。也就是说,例如,将指令添加到指令块、从指令块移除、在指令块内修改或在指令块内重布置。在一些实现中,在块640处修改其它指令块。例如,在块640处还可以修改诸如以到该指令块的跳转结束的指令块(即,对于其而言该指令块为跳转目标的指令块)或作为该指令块的跳转目标的指令块之类的与在块610处识别的指令块相关联的其它指令块。然后将经修改的指令块作为应用的随机化的中间表示存储在存储器或数据储存处。
该一个或多个修改可以例如是通过添加跳转指令将一个指令块分解成多个指令、重布置在指令块内的不同数据上操作的指令、通过移除跳转指令并从一个指令块向另一指令块添加指令来聚集两个或更多指令块、向指令块添加指令、将不是子例程的指令块更改成子例程并将该指令块对其而言是跳转目标的跳转指令更改成对该指令块的子例程调用、展开指令块内的循环、组合指令块内的循环、混淆或其组合;某其它修改或其组合;或空修改(即,无修改)。
如图6中图示的,在一些实现中,在块650处记录修改。例如,可以在修改日志处记录修改的描述或标识符以供稍后分析或审核。在一些实现中,记录修改包括记录修改被应用于的指令块的描述、在修改之前该指令块的表示、在修改之后该指令块的表示和/或涉及修改的其它信息。
过程600然后进行到块660以确定在带注释的中间表示内是否存在附加指令块。如果带注释的中间表示包括附加指令块,则过程600返回到块610,在块610处识别另一指令块。如果带注释的中间表示不包括附加指令块,则过程600完成。换言之,当在块610、620、630、640和650处已经处理或考虑了带注释的中间表示的所有指令块时,应用的随机化的中间表示完成。
在图6中图示的过程600是对应用进行随机化的过程的示例。在其它实现中,过程600可以包括与图6中图示的那些块或步骤相比附加、更少和/或重布置的块或步骤。例如,在一些实现中,过程600不包括块650。也就是说,应用随机化系统不记录修改日志。而且,在一些实现中,过程600不包括块650,但包括在此处记录用于在块620处确定随机输入的随机化种子的块。例如,随机输入可以是随机化种子作为初始状态而被提供给的伪随机数生成器的输出。记录随机化种子允许例如系统管理员稍后确定用于随机选择应用随机化系统通过其对应用进行随机化的修改的随机输入。使用随机输入,系统管理员可以确定在哪些指令块上执行了哪些修改,并基于该信息来重构应用的随机化的中间表示。
图7是根据实现的应用随机化系统的示意性框图。图7中图示的应用随机化系统700包括中间表示生成器720、流分析模块730、随机修改模块750和本机代码生成器760。尽管与图7和其它示例实现有关地图示和讨论了这些特定模块(即,硬件和软件的组合)和各种其它模块,但是在其它实现内可以包括模块的其它组合或子组合。换句话说,尽管图7中图示的和在其它示例实现中讨论的模块执行本文所讨论的示例中的具体功能性,但是这些和其它功能性可以被完成、实现或达成在不同模块处或模块的组合处。例如,被图示和/或讨论为分离的两个或更多模块可以被组合成执行与两个模块有关地讨论的功能性的模块。作为另一示例,如与这些示例有关地讨论的在一个模块处执行的功能性可以在一个或多个不同模块处执行。
中间表示生成器720、流分析模块730、随机修改模块750和本机代码生成器760分别类似于以上关于图1讨论的中间表示生成器120、流分析模块130、随机修改模块150和本机代码生成器160。中间表示生成器720、流分析模块730、随机修改模块750和本机代码生成器760可以被托管在一个主机处,或者可以是分布式的。例如,中间表示生成器720和流分析模块730可以被托管在应用开发环境内,并且随机修改模块750和本机代码生成器760可以被托管在应用的主机处。作为具体示例,中间表示生成器720和流分析模块730可以被托管在应用构建或编译系统(例如,包括编译应用的源代码表示的软件的计算系统)内,并且随机修改模块750和本机代码生成器760可以每一个被托管在应用的实例可被托管在其处的许多计算设备处。
在其它实现中,随机修改模块750和本机代码生成器760可以称为应用随机化系统。例如,图8是根据实现的托管应用随机化系统的计算系统的示意性框图。在一些实现中,托管应用随机化系统的计算系统自身被称为应用随机化系统。在图8中图示的示例中,计算系统800包括处理器810和存储器830。计算系统800可以是例如诸如台式计算机或笔记本计算机之类的个人计算机、平板设备、智能电话、电视或某其它计算设备。
处理器810是执行或解译指令、代码或信号的硬件和软件的任何组合。例如,处理器810可以是微处理器、专用集成电路(ASIC)、诸如处理器或计算系统的集群或网络之类的分布式处理器、多核或多处理器的处理器、或者虚拟机的虚拟或逻辑处理器。
存储器830是存储指令、代码、数据或其它信息的处理器可读介质。如本文所使用的,处理器可读介质是非暂时性地存储指令、代码、数据或其它信息且对处理器而言可直接或间接访问的任何介质。换句话说,处理器可读介质是处理器在其处可访问指令、代码、数据或其它信息的非暂时性介质。例如,存储器830可以是易失性随机存取存储器(RAM)、诸如硬盘驱动器或固态驱动器之类的持久性数据储存、紧致盘(CD)、数字多功能盘(DVD)、Secure DigitalTM(SD)卡、多媒体卡(MMC)卡、CompactFlashTM(CF)卡或其组合或其它存储器。换句话说,存储器830可以表示多个处理器可读介质。在一些实现中,存储器830可以与处理器810集成、从处理器810分离或者在计算系统800外部。
存储器830包括当在处理器810处执行时实现操作系统831、随机修改模块835和本机代码生成器836的指令或代码。如以上所讨论的,随机修改模块835和本机代码生成器836可以共同称为应用随机化系统。同样如以上所讨论的,应用随机化系统可以包括与图8中图示的模块相比附加或更少的模块(或组件)。
如图8中所图示的,存储器830可操作成存储带注释的中间表示839。例如,在操作系统831的运行时期间,可以经由计算设备800的通信接口(未示出)接收带注释的中间表示839。作为另一示例,计算系统800可以包括(在图8中未图示)处理器可读介质访问设备(例如CD、DVD、SD、MMC或CF驱动器或读取器),并可以经由该处理器可读介质访问设备访问处理器可读介质处的带注释的中间表示839。
在一些实现中,计算系统800可以是虚拟化计算系统。例如,计算系统800可以作为虚拟机而被托管在计算服务器处。而且,在一些实现中,计算系统800可以是计算电器或虚拟化计算电器,并且操作系统831是最小或刚好足够的操作系统以支持(例如提供诸如通信协议栈和对诸如通信接口之类的计算系统800的组件的访问之类的服务)随机修改模块835和本机代码生成器836。
包括随机修改模块835和本机代码生成器836的应用随机化系统可以是从多种存储器或处理器可读介质在计算系统800处访问或安装的。例如,计算系统800可以经由通信接口(未示出)访问远程处理器可读介质处的应用随机化系统。作为具体示例,计算系统810可以是在引导过程(或序列)期间访问操作系统831、随机修改模块835和本机代码生成器836的网络引导设备。
作为另一示例,计算系统800可以包括(在图8中未图示)处理器可读介质访问设备(例如CD、DVD、SD、MMC或CF驱动器或读取器),并可以经由该处理器可读介质访问设备访问处理器可读介质处的随机修改模块835和本机代码生成器836。作为更具体的示例,处理器可读介质访问设备可以是在其处可访问包括用于随机修改模块835和本机代码生成器836中的一个或多个的安装包的DVD的DVD驱动器。可以在处理器800处执行或解译安装包以在计算系统800处(例如在存储器830处)安装随机修改模块835和本机代码生成器836中的一个或多个。计算系统800然后可以托管或执行随机修改模块835和本机代码生成器836中的一个或多个。
在一些实现中,可以在多个源、位置或资源处访问或者从其安装随机修改模块835和本机代码生成器836。例如,随机修改模块835和本机代码生成器836的一些组件可以经由通信链路(例如来自经由通信链路可访问的文件服务器)而安装,并且随机修改模块835和本机代码生成器836的其它组件可以从DVD安装。
在其它实现中,随机修改模块835和本机代码生成器836可以跨多个计算系统分布。也就是说,随机修改模块835和本机代码生成器836的一些组件可以被托管在一个计算系统处,并且随机修改模块835和本机代码生成器836的其它组件可以被托管在另一计算系统处。作为具体示例,随机修改模块835和本机代码生成器836可以被托管在计算系统的集群内,其中随机修改模块835和本机代码生成器836中的每一个的组件被托管在多个计算系统处,并且没有单个计算系统托管随机修改模块835和本机代码生成器836中的每一个的所有组件。
虽然已经在上文中示出和描述了某些实现,但是可以做出形式和细节方面的各种改变。例如,已与一个实现和/或过程有关地描述的一些特征可以涉及其它实现。换言之,与一个实现有关地描述的过程、特征、组件和/或性质在其它实现中可以是有用的。作为另一示例,以上与具体模块或元件有关地讨论的功能性在其它实现中可以被包括在不同模块、引擎或元件处。另外,应当理解的是,本文所描述的系统、装置和方法可以包括所描述的不同实现的组件和/或特征的各种组合和/或子组合。因此,参考一个或多个实现描述的特征可以与本文描述的其它实现组合。
如本文所使用的,术语“模块”是指硬件(例如,诸如集成电路或其它电路之类的处理器)和软件(例如,机器或处理器可执行指令、命令或诸如固件、编程或对象代码之类的代码)的组合。硬件和软件的组合包括仅硬件(即,没有软件元件的硬件元件)、在硬件处托管的软件(例如,存储在存储器处且在处理器处执行或解译的软件)、或者硬件和在硬件处托管的软件。
此外,如本文所使用的,单数形式“一”、“一个”和“该”包括复数指示物,除非上下文以其它方式明确指示。因此,例如,术语“模块”意图意指一个或多个模块或模块的组合。而且,如本文所使用的术语“提供”包括推送机制(例如经由通信路径或信道向计算系统或代理发送数据)、拉取机制(例如响应于来自计算系统或代理的请求向计算系统或代理递送数据)和存储机制(例如将数据存储在计算系统或代理在其处可访问数据的数据储存或服务处)。另外,如本文所使用的,术语“基于”意指“至少部分地基于”。因此,被描述为基于某个理由的特征可以仅基于该理由或者基于该理由且基于一个或多个其它理由。
Claims (18)
1.一种存储表示指令的代码的处理器可读介质,所述指令当在处理器处执行时使处理器:
访问应用的带注释的中间表示;
识别带注释的中间表示内的第一指令块;
随机选择用于第一指令块的第一修改;
识别带注释的中间表示内的第二指令块;
随机选择与第一修改不同的用于第二指令块的第二修改;以及
生成应用的本机代码表示,其中第一修改被应用于第一指令块并且第二修改被应用于第二指令块。
2.权利要求1的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
访问应用的中间表示;
在中间表示上执行流分析以识别中间表示内的多个指令块,所述多个指令块包括第一指令块和第二指令块;以及
生成与所述多个指令块相关联的多个注释以定义应用的带注释的中间表示。
3.权利要求1的处理器可读介质,其中:
第一指令块表示子例程;并且
第一修改包括将子例程分解成多个子例程。
4.权利要求1的处理器可读介质,其中:
第一修改包括重布置应用的中间表示内的指令;并且
第二修改包括在应用的中间表示内添加指令。
5.权利要求1的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
记录用于随机选择第一修改和随机选择第二修改的随机化种子。
6.权利要求1的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
在修改日志处记录第一修改;以及
在修改日志处记录第二修改。
7.权利要求1的处理器可读介质,其中应用的本机代码表示是应用的第一本机代码表示,并且随机选择第一修改和随机选择第二修改响应于第一实例化信号,处理器可读介质还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
响应于第二实例化信号随机选择用于第一指令块的第三修改,第三修改不同于第一修改;
响应于第二实例化信号随机选择用于第二指令块的与第二修改不同的第四修改;以及
生成应用的第二本机代码表示,其中第三修改被应用于第一指令块并且第四修改被应用于第二指令块。
8.一种存储表示指令的代码的处理器可读介质,所述指令当在处理器处执行时使处理器:
接收与应用相关联的第一实例化信号;
识别应用的带注释的中间表示内的多个指令块;
响应于第一实例化信号,随机选择用于所述多个指令块中的每一个指令块的第一修改;
生成应用的第一本机代码表示,其中用于每一个指令块的第一修改被应用于该指令块;
接收与应用相关联的第二实例化信号;
响应于第二实例化信号,随机选择用于所述多个指令块中的每一个指令块的第二修改;
生成应用的第二本机代码表示,其中用于每一个指令块的第二修改被应用于该指令块,应用的第二本机代码表示不同于应用的第一本机代码表示。
9.权利要求8的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
记录用于随机选择用于所述多个指令块中的每一个指令块的第一修改和第二修改的随机化种子。
10.权利要求8的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
在修改日志处记录用于所述多个指令块中的每一个指令块的第一修改;以及
在修改日志处记录用于所述多个指令块中的每一个指令块的第二修改.
12.权利要求8的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
访问应用的中间表示;
在中间表示上执行流分析以识别中间表示内的所述多个指令块;以及
生成与所述多个指令块相关联的多个注释以定义应用的带注释的中间表示.
13.权利要求8的处理器可读介质,还包括表示下述指令的代码,该指令当在处理器处执行时使处理器:
访问应用的静态单赋值形式中间表示;
在中间表示上执行流分析以识别中间表示内的所述多个指令块;以及
生成与所述多个指令块相关联的多个注释以定义应用的带注释的中间表示.
14.一种应用随机化系统,包括:
随机修改模块,识别应用的带注释的中间表示内的多个指令块并且响应于与应用相关联的实例化信号而随机选择用于所述多个指令块中的每一个指令块的修改;以及
本机代码生成器,生成应用的本机代码表示,其中用于每一个指令块的修改被应用于该指令块.
15.权利要求14的系统,还包括:
流分析模块,在应用的中间表示上执行流分析并且生成应用的带注释的中间表示.
16.权利要求14的系统,还包括:
流分析模块,在应用的中间表示上执行流分析并且将多个注释与所述多个指令块相关联以定义应用的带注释的中间表示.
17.权利要求14的系统,其中随机修改模块被配置成记录用于随机选择用于所述多个指令块中的每一个指令块的修改的随机化种子.
18.权利要求14的系统,其中随机修改模块被配置成记录用于所述多个指令块中的每一个指令块的修改.
19.权利要求14的系统,其中:
用于每一个指令块的修改是用于每一个指令块的第一修改;
实例化信号是第一实例化信号;
应用的本机代码表示是应用的第一本机代码表示;
随机修改模块被配置成响应于与应用相关联的第二实例化信号而随机选择用于所述多个指令块中的每一个指令块的第二修改;并且
本机代码生成器被配置成生成应用的第二本机代码表示,其中用于每一个指令块的第二修改被应用于该指令块。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2012/057819 WO2014051608A1 (en) | 2012-09-28 | 2012-09-28 | Application randomization |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104798075A true CN104798075A (zh) | 2015-07-22 |
Family
ID=50388797
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280077350.7A Pending CN104798075A (zh) | 2012-09-28 | 2012-09-28 | 应用随机化 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20150294114A1 (zh) |
EP (1) | EP2901348A4 (zh) |
CN (1) | CN104798075A (zh) |
WO (1) | WO2014051608A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11763188B2 (en) | 2018-05-03 | 2023-09-19 | International Business Machines Corporation | Layered stochastic anonymization of data |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3123311B8 (en) | 2014-11-17 | 2021-03-03 | Morphisec Information Security 2014 Ltd | Malicious code protection for computer systems based on process modification |
US10089089B2 (en) * | 2015-06-03 | 2018-10-02 | The Mathworks, Inc. | Data type reassignment |
US10248434B2 (en) * | 2015-10-27 | 2019-04-02 | Blackberry Limited | Launching an application |
EP3380899B1 (en) * | 2016-01-11 | 2020-11-04 | Siemens Aktiengesellschaft | Program randomization for cyber-attack resilient control in programmable logic controllers |
WO2017137804A1 (en) | 2016-02-11 | 2017-08-17 | Morphisec Information Security Ltd. | Automated classification of exploits based on runtime environmental features |
US10268601B2 (en) | 2016-06-17 | 2019-04-23 | Massachusetts Institute Of Technology | Timely randomized memory protection |
US10310991B2 (en) * | 2016-08-11 | 2019-06-04 | Massachusetts Institute Of Technology | Timely address space randomization |
US10133560B2 (en) * | 2016-09-22 | 2018-11-20 | Qualcomm Innovation Center, Inc. | Link time program optimization in presence of a linker script |
US20180275976A1 (en) * | 2017-03-22 | 2018-09-27 | Qualcomm Innovation Center, Inc. | Link time optimization in presence of a linker script using path based rules |
US11022950B2 (en) * | 2017-03-24 | 2021-06-01 | Siemens Aktiengesellschaft | Resilient failover of industrial programmable logic controllers |
US11250123B2 (en) * | 2018-02-28 | 2022-02-15 | Red Hat, Inc. | Labeled security for control flow inside executable program code |
CA3134459A1 (en) * | 2019-03-21 | 2020-09-24 | Capzul Ltd | Detection and prevention of reverse engineering of computer programs |
US11074055B2 (en) * | 2019-06-14 | 2021-07-27 | International Business Machines Corporation | Identification of components used in software binaries through approximate concrete execution |
JP7335591B2 (ja) * | 2019-07-22 | 2023-08-30 | コネクトフリー株式会社 | コンピューティングシステムおよび情報処理方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060195703A1 (en) * | 2005-02-25 | 2006-08-31 | Microsoft Corporation | System and method of iterative code obfuscation |
CN101416197A (zh) * | 2006-02-06 | 2009-04-22 | 松下电器产业株式会社 | 程序混淆装置 |
US20090106744A1 (en) * | 2005-08-05 | 2009-04-23 | Jianhui Li | Compiling and translating method and apparatus |
US20090119515A1 (en) * | 2005-10-28 | 2009-05-07 | Matsushita Electric Industrial Co., Ltd. | Obfuscation evaluation method and obfuscation method |
US20120204038A1 (en) * | 2011-02-09 | 2012-08-09 | Apple Inc. | Performing boolean logic operations using arithmetic operations by code obfuscation |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
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 |
FR2775370B1 (fr) * | 1998-02-20 | 2001-10-19 | Sgs Thomson Microelectronics | Procede de gestion d'interruptions dans un microprocesseur |
US7092523B2 (en) * | 1999-01-11 | 2006-08-15 | Certicom Corp. | Method and apparatus for minimizing differential power attacks on processors |
US6598166B1 (en) * | 1999-08-18 | 2003-07-22 | Sun Microsystems, Inc. | Microprocessor in which logic changes during execution |
AU2001269354A1 (en) * | 2000-05-12 | 2001-11-20 | Xtreamlok Pty. Ltd. | Information security method and system |
US7065652B1 (en) * | 2000-06-21 | 2006-06-20 | Aladdin Knowledge Systems, Ltd. | System for obfuscating computer code upon disassembly |
US7243340B2 (en) * | 2001-11-15 | 2007-07-10 | Pace Anti-Piracy | Method and system for obfuscation of computer program execution flow to increase computer program security |
JP2003280754A (ja) * | 2002-03-25 | 2003-10-02 | Nec Corp | 隠蔽化ソースプログラム、ソースプログラム変換方法及び装置並びにソース変換プログラム |
JP2003280755A (ja) * | 2002-03-25 | 2003-10-02 | Nec Corp | 自己復元型プログラム、プログラム生成方法及び装置、情報処理装置並びにプログラム |
US7424620B2 (en) * | 2003-09-25 | 2008-09-09 | Sun Microsystems, Inc. | Interleaved data and instruction streams for application program obfuscation |
US7383583B2 (en) * | 2004-03-05 | 2008-06-03 | Microsoft Corporation | Static and run-time anti-disassembly and anti-debugging |
US7636856B2 (en) * | 2004-12-06 | 2009-12-22 | Microsoft Corporation | Proactive computer malware protection through dynamic translation |
US7584364B2 (en) * | 2005-05-09 | 2009-09-01 | Microsoft Corporation | Overlapped code obfuscation |
US8479018B2 (en) * | 2006-04-28 | 2013-07-02 | Panasonic Corporation | System for making program difficult to read, device for making program difficult to read, and method for making program difficult to read |
EP2041651A4 (en) * | 2006-07-12 | 2013-03-20 | Global Info Tek Inc | SYSTEM AND METHOD FOR SECURITY BASED ON DIVERSITY |
JP4470982B2 (ja) * | 2007-09-19 | 2010-06-02 | 富士ゼロックス株式会社 | 情報処理装置及び情報処理プログラム |
US20090094443A1 (en) * | 2007-10-05 | 2009-04-09 | Canon Kabushiki Kaisha | Information processing apparatus and method thereof, program, and storage medium |
US8462949B2 (en) * | 2007-11-29 | 2013-06-11 | Oculis Labs, Inc. | Method and apparatus for secure display of visual content |
JP4905480B2 (ja) * | 2009-02-20 | 2012-03-28 | 富士ゼロックス株式会社 | プログラム難読化プログラム及びプログラム難読化装置 |
EP2264635A1 (en) * | 2009-06-19 | 2010-12-22 | Thomson Licensing | Software resistant against reverse engineering |
EP2362314A1 (en) * | 2010-02-18 | 2011-08-31 | Thomson Licensing | Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code |
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 |
US9274976B2 (en) * | 2010-11-05 | 2016-03-01 | Apple Inc. | Code tampering protection for insecure environments |
US20120159193A1 (en) * | 2010-12-18 | 2012-06-21 | Microsoft Corporation | Security through opcode randomization |
US8812868B2 (en) * | 2011-03-21 | 2014-08-19 | Mocana Corporation | Secure execution of unsecured apps on a device |
US8615735B2 (en) * | 2011-05-03 | 2013-12-24 | Apple Inc. | System and method for blurring instructions and data via binary obfuscation |
US8661549B2 (en) * | 2012-03-02 | 2014-02-25 | Apple Inc. | Method and apparatus for obfuscating program source codes |
US9213841B2 (en) * | 2012-07-24 | 2015-12-15 | Google Inc. | Method, manufacture, and apparatus for secure debug and crash logging of obfuscated libraries |
US9569184B2 (en) * | 2012-09-05 | 2017-02-14 | Microsoft Technology Licensing, Llc | Generating native code from intermediate language code for an application |
-
2012
- 2012-09-28 US US14/432,202 patent/US20150294114A1/en not_active Abandoned
- 2012-09-28 WO PCT/US2012/057819 patent/WO2014051608A1/en active Application Filing
- 2012-09-28 EP EP12885210.0A patent/EP2901348A4/en not_active Withdrawn
- 2012-09-28 CN CN201280077350.7A patent/CN104798075A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060195703A1 (en) * | 2005-02-25 | 2006-08-31 | Microsoft Corporation | System and method of iterative code obfuscation |
US20090106744A1 (en) * | 2005-08-05 | 2009-04-23 | Jianhui Li | Compiling and translating method and apparatus |
US20090119515A1 (en) * | 2005-10-28 | 2009-05-07 | Matsushita Electric Industrial Co., Ltd. | Obfuscation evaluation method and obfuscation method |
CN101416197A (zh) * | 2006-02-06 | 2009-04-22 | 松下电器产业株式会社 | 程序混淆装置 |
US20120204038A1 (en) * | 2011-02-09 | 2012-08-09 | Apple Inc. | Performing boolean logic operations using arithmetic operations by code obfuscation |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11763188B2 (en) | 2018-05-03 | 2023-09-19 | International Business Machines Corporation | Layered stochastic anonymization of data |
Also Published As
Publication number | Publication date |
---|---|
US20150294114A1 (en) | 2015-10-15 |
EP2901348A4 (en) | 2016-12-14 |
EP2901348A1 (en) | 2015-08-05 |
WO2014051608A1 (en) | 2014-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104798075A (zh) | 应用随机化 | |
EP3971742A1 (en) | Methods, blockchain nodes and storage media for deploying smart contract | |
US8607211B2 (en) | Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization | |
US8615745B2 (en) | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization | |
US8645930B2 (en) | System and method for obfuscation by common function and common function prototype | |
US20160364707A1 (en) | Potentate: A Cryptography-Obfuscating, Self-Policing, Pervasive Distribution System For Digital Content | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
US11556348B2 (en) | Bootstrapping profile-guided compilation and verification | |
KR20170018745A (ko) | 어플리케이션의 코드 난독화를 위한 시스템 및 방법 | |
US11074154B2 (en) | Identifying a source file for use in debugging compiled code | |
CN114154190A (zh) | 管理敏感生产数据 | |
US10613844B2 (en) | Using comments of a program to provide optimizations | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
US11294791B2 (en) | Code optimization for connected managed runtime environments | |
CN111078279A (zh) | 字节码文件的处理方法、装置、设备及存储介质 | |
Choi et al. | Reusable inline caching for JavaScript performance | |
CN110597496B (zh) | 应用程序的字节码文件获取方法及装置 | |
US10936290B2 (en) | Compile-time folding of assumed constant values | |
Cao et al. | BREWasm: A General Static Binary Rewriting Framework for WebAssembly | |
KR101845155B1 (ko) | 어플리케이션 패키지를 제공하는 방법 및 시스템, 그리고 어플리케이션을 실행하는 방법 및 시스템 | |
Kim et al. | Static dalvik bytecode optimization for Android applications | |
Koshelev et al. | Interprocedural taint analysis for LLVM-bitcode | |
US9405909B2 (en) | Non-transitory computer-readable recording medium and information processing apparatus including shared library that prevents unauthorized use | |
CN112860279A (zh) | 生成应用安装包的方法、装置、设备和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150722 |