CN102841844B - 一种基于简易符号执行的二进制代码漏洞挖掘方法 - Google Patents
一种基于简易符号执行的二进制代码漏洞挖掘方法 Download PDFInfo
- Publication number
- CN102841844B CN102841844B CN201210243800.7A CN201210243800A CN102841844B CN 102841844 B CN102841844 B CN 102841844B CN 201210243800 A CN201210243800 A CN 201210243800A CN 102841844 B CN102841844 B CN 102841844B
- Authority
- CN
- China
- Prior art keywords
- function
- fundamental block
- intermediate language
- input
- binary code
- 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.)
- Expired - Fee Related
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于简易符号执行的二进制代码漏洞挖掘方法,它有五大步骤;首先把二进制代码通过二进制代码翻译组件,转化为一种静态单赋值的中间语言。然后使用反汇编引擎对二进制代码进行反汇编,提取其中的控制流信息,基于该控制流信息在中间语言上进行静态的符号执行,在符号执行过程中需确认输入点,把输入向量转化为符号,并对调用函数进行建模。当符号执行过程完成后可得到依赖输入向量的中间语言的语句集合,对该集合中的语句简化后,使用安全属性规则验证后生成漏洞确认报告。
Description
技术领域
本发明涉及到一种基于简易符号执行的二进制代码漏洞挖掘方法,可以检测由输入不当导致的漏洞。可适用于多平台,且只对二进制代码进行静态解释,不需要实际执行,因此较高效。使用其中一种安全属性规则成功地验证了所有近年来瑞星、超级巡警、诺顿等杀毒软件驱动程序中报的ioctrol例程中的漏洞。适用于软件测试、漏洞挖掘等领域。
背景技术
传统软件漏洞挖掘方法一般使用黑盒Fuzz测试,通过构造一组随机输入传递给程序,直到程序崩溃。这种方法较盲目,既无法获知哪些程序路径已经被执行,也无法有导向性地构造输入,使程序可执行到未被遍历过的路径。测试过程中的大部分时间都在重复执行着同样的路径,使测试时间成本过高。源码级的测试可以帮助程序员发现很多由于代码风格或错误的语法语义引起的BUG,但存在几个缺点:1)无法发现程序运行时的BUG;2)在很多情况下,源码并不是可及的;3)需对每一类程序设计语言分别考虑。
对于软件测试、漏洞挖掘等领域,往往需要考虑代码覆盖问题,尽可能多地覆盖二进制代码的执行路径,可以提高发现程序代码中BUG的可能性。然而,由于二进制代码中的分支数量非常多,使获取某一执行路径所对应的输入成为最难的研究问题之一。为解决这个问题,学术界提出了一种新的概念,符号执行,即把输入作为符号,然后通过静态解释源码的形式来收集约束,遇到分支时,同时展开两条路径,继续向下进行。符号执行的误报率极低,但是也存在一些弊端:解释过程中,状态空间容易增长得非常大,效率较低。
近年来,国外出现了一些基于动态执行路径,符号与具体执行混合的方法所实现的工具,如DART、CUTE、Sage、Catchconv、Fuzzgrind等。其中,DART与CUTE同宗,它们使用同样的中间语言、插装方式及求解方法。Catchconv与Fuzzgrind为开源工具,都使用Valgrind作为其插装框架,只有微软的Sage是运行在Windows上,但未发布出来。但这些工具有一个共同的缺点,由于需要对源代码或二进制代码进行插装,由于插装代码的大量存在使运行效率较低,对于恶意软件,实际运行会带来其它危险。
综上所述,本发明提出一种针对于二进制的、使用简易的符号执行挖掘漏洞的方法。在本方法中,先获取二进制代码的控制流信息,并把二进制代码翻译到一种中间语言,在该中间语言和控制流信息对某个函数进行符号执行,函数体内的分支一般不会很多,且不需要考虑循环问题,因此比传统的符号执行更加高效,通过获得表达式与输入向量间的依赖关系,根据一定的安全属性规则来判断是否漏洞。
发明内容
本发明的目的就是在克服传统的符号执行与具体执行的缺点的前提上,提供一种基于简易符号执行的二进制代码漏洞挖掘方法,它是一种快速、有效的软件漏洞挖掘方法,针对二进制代码中的函数进行符号执行,并考虑控制流从而达到代码覆盖。
为达到上述目的,本发明的技术方案是这样实现的:
一种基于简易符号执行的二进制代码漏洞挖掘方法,该方法包括以下步骤:
步骤A.实现反汇编引擎,可以提取二进制代码中的函数信息,并能分析函数内的控制流信息。
步骤B.实现二进制代码翻译组件,将二进制代码转化成中间语言。
步骤C.确认输入点(即函数的参数及子函数调用),对函数中调用的子函数进行建模。
步骤D.根据步骤A,B,C中产生的结果进行符号执行,把输入作为符号,静态解释中间语言并更新每条指令执行的上下文,对于分支,需要保存当前上下文,遍历一条路径后,再恢复保存的上下文,继续执行下一条路径。
步骤E.当执行到函数结束时,符号执行过程产生一些与输入相关的表达式集合,根据一定的安全属性规则,简化、分析这些表达式最后判断是否有漏洞。
其中,步骤A中所述的二进制代码为Windows、Linux等操作系统下的x86可执行代码。
步骤A所述控制流信息是由基本块信息组成的链表,基本块信息包括:
A1.基本块标号(Label),表示该基本块的标识符,值唯一;
A2.基本块的开始地址(StartAddress);
A3.基本块的结束地址(EndAddress);
A4.基本块的入度数(InCount),表示可以到达该基本块的前驱的数量,入度数为0的基本块为本函数的第一个基本块;
A5.基本块的出度数(OutCount),表示由该基本块可到达的后继的数量,该值不大于2,出度数为0的基本块为本函数的最后一个基本块;
A6.基本块的前驱数组,表示到达该基本块的前驱的集合;
A7.基本块的后继数组,表示由该基本块可达的后继的集合;
A8.循环标志,表示该基本块是否处于循环中;
其中,步骤B所述的中间语言中,包括三种存储介质:
B11.临时变量,在每个基本块中临时申请,用于实现静态单赋值,为寄存器与内存间的媒介;
B12.寄存器,与机器指令中的寄存器相同,读写寄存器使用中间语言中的Get和Put操作完成;
B13.内存,内存地址由常量或临时变量表示,读写内存使用中间语言中的LDle和STle操作完成;
步骤B中所述的中间语言由语句IRStmt组成,语句IRStmt包括:
B21.IMark语句,表示每个基本块的入口标志,其中包括该基本块对应机器指令的开始地址及该指令的字节数;
B22.Put语句,表示把临时变量的值写入寄存器;
B23.Store语句,表示把临时变量的值写入内存;
B24.IRDirty语句,表示调用有副作用的函数;
B25.Exit语句,表示基本块的出口;
步骤B中所述的中间语言由语句IRStmt组成,语句IRStmt由表达式IRExpr组成,表达式IRExpr包括:
B31.Get表达式,表示从寄存器中读取值;
B32.Tmp表达式,表示临时变量;
B33.Binop表达式,表示二元操作;
B34.Unop表达式,表示一元操作;
B35.Load表达式,表示从内存中读取值;
B36.Const表达式,表示常量;
B37.MuxOX表达式,表示if-then-else语句;
其中,步骤C所述的输入点一般指函数的参数或者从外部引入的值。在x86指令集中,参数一般表示为栈桢指针与正数偏移相加,但栈桢指针可能是ESP或者EBP,需要启发式判断。
另外这种输入是从外部引入的值,如在函数内部调用ReadFile、Recv、Accept等函数时引入的外部值,在函数建模后就可以针对这些输入向量适当地引入符号。
其中,步骤D所述的简易符号执行方法是在中间语言上进行,需要考虑以下几种情况:
D1.Put操作,检查赋值给寄存器的临时变量是否依赖于输入;
D2.赋值给临时变量时,左值需要考虑以下几种情况:
C21.从临时变量中读,检查该临时变量是否依赖于输入;
C22.从内存中读,检查该内存中的值是否依赖于输入;
C23.从寄存器中读,检查该寄存器是否依赖于输入;
C24.一元操作与二元操作,检查操作数是否依赖于输入;
D3.Store操作,检查写入内存的临时变量是否依赖于输入;
步骤D所述收集到路径约束为与输入相关的表达式,包括二元操作,一元操作、位移操作,有符号扩展、无符号扩展。
步骤D所述的符号执行达到分支指令时,需要保存当前的上下文信息,该信息包括执行到当前指令所有寄存器、临时变量、以及内存的符号信息。然后执行一条路径,执行完成后回溯到分支处,恢复保存的上下文信息再继续执行另一条路径。
其中,步骤E中所述的安全属性规则为判断该指令是否为漏洞的依据,目前,本发明成功添加三种安全属性规则来判断非法写内存模式的漏洞:
E1.写任意值到任意地址;
E2.写任意值到固定地址;
E3.写固定值到任意地址;
优点及功效:本发明一种基于简易符号执行的二进制代码漏洞挖掘方法,它是一种快速、有效的软件漏洞挖掘方法,针对二进制代码中的函数进行符号执行,并考虑控制流从而达到代码覆盖。
附图说明
图1为基于简易符号执行的二进制代码漏洞挖掘方法流程示意图
图2为CVE-2010-1591漏洞附近的代码转化后的中间语言
具体实施方式
下面结合附图及本发明的实施对本发明的方法作进一步详细的说明。
本发明的基本思想为:将二进制代码转化为中间语言,然后结合上控制流信息,输入点信息、函数建模信息,在该中间语言上进行符号执行,当符号执行过程完成后,得到与输入相关的指令的中间语言语句的集合,根据一定的安全属性规则,对这些语句进行判断其是否存在漏洞。
图1为基于简易符号执行的二进制代码漏洞挖掘方法流程示意图,如图1所示,该方法包括如下步骤:
步骤A:将二进制代码交给反汇编引擎,解码为汇编指令,提取出汇编指令中的函数信息,再对每个函数分析,提取出该函数的控制流信息;
需说明,得到函数信息后,可生成调用图,使用反向的深度遍历算法,即从调用图的叶子结点开始向上处理,这可保证在处理某函数时,它的调用子函数都已经被处理过。
步骤B:实现二进制代码翻译组件将二进制代码翻译成中间语言,如图2所示;
这里的中间语言与动态产生的中间语言并不相同,动态生成的中间语言,跳转指令已经得到确定,或者跳转、或者顺序执行。静态下翻译的中间语言遇到分支指令时转化为CMP-JCC语句,并不能确定是否跳转。
步骤C:分析函数的输入点及对内部调用函数进行建模。
根据前面所述,这里考虑了两种输入,一种为函数自身的参数,它可能是由用户指定的,表示为栈桢指针与正数偏移相加。另一种为具有副作用的函数引入的外部输入,如ReadFile、fread、accept、recv等函数,需要建立一张函数信息表描述这些函数,参数与返回值之间的映射关系,从而可以确定输入符号。
步骤D:根据前述步骤产生的结果,在翻译后的中间语言上进行简易符号执行过程,之所以称之为简易的符号执行,是因为符号执行过程是在函数体内进行的,而并非针对整段二进制代码,这样就可以跳过一些没意义的函数,从而减少符号执行所用的时间。其次,该符号执行过程是一个静态解释中间语言的过程,传播描述输入的符号,对于循环,只执行一次循环后即跳出,从而避免由循环引起的状态爆炸问题。对于分支,需要保存当前的上下文信息,先执行其中一条路径,当执行完成返回后,恢复保存后的上下文信息,再继续解释另一条路径。
步骤E:符号执行完成后,可得到一个与输入相关的中间语言语句的集合,根据安全属性规则进行判断是否存在漏洞。本发明中目前只添加了非法写内存漏洞模式的规则:
其中Store为存储函数,如Store(a)=b表示把b写入由地址a表示的内存中。Expr(x)表示关于x的表达式,I表示输入,f0表示固定值。
由此可见,这三种规则的语义分别为:(a)写任意值到任意地址;(b)写固定值到任意地址;(c)写任意值到固定地址。通过这三种规则即可以描述非法写内存的漏洞特征。
综上所述,基于简易的符号执行的二进制代码漏洞挖掘方法可以针对特定的函数进行分析,而不是整块二进制代码。可以处理分支,达到很高的覆盖率。在中间语言上进行静态解释,不需要实际运行程序,也可以避免机器指令的副作用问题。此方法可以通过描述良好的安全属性规则检测二进制代码中的漏洞,漏报率与误报率都较低。
Claims (1)
1.一种基于简易符号执行的二进制代码漏洞挖掘方法,其特征在于:该方法包括以下步骤:
步骤A:将二进制代码交给反汇编引擎,解码为汇编指令,提取出汇编指令中的函数信息,再对每个函数分析,提取出该函数的控制流信息;得到函数信息后,生成调用图,使用反向的深度遍历算法,从调用图的叶子结点开始向上处理,保证在处理某函数时,调用子函数都已经被处理过;
步骤B.实现二进制代码翻译组件,将二进制代码转化成中间语言;
所述中间语言与动态产生的中间语言并不相同,动态生成的中间语言,跳转指令已经得到确定,或者跳转、或者顺序执行;静态下翻译的中间语言遇到分支指令时转化为CMP-JCC语句,并不能确定是否跳转;
步骤C.确认输入点即函数的参数及子函数调用,对函数中调用的子函数进行建模;
包括两种输入,一种为函数自身的参数,它是由用户指定的,表示为栈桢指针与正数偏移相加;另一种为具有副作用的函数引入的外部输入,包括ReadFile、fread、accept、recv函数,需要建立一张函数信息表描述这些函数、参数与返回值之间的映射关系,从而确定输入符号;
步骤D.根据前述步骤A、B、C产生的结果,在翻译后的中间语言上进行简易符号执行过程,称之为简易的符号执行,是因为符号执行过程是在函数体内进行的,而并非针对整段二进制代码,这样就跳过一些没意义的函数,从而减少符号执行所用的时间;其次,该符号执行过程是一个静态解释中间语言的过程,传播描述输入的符号,对于循环,只执行一次循环后即跳出,从而避免由循环引起的状态爆炸问题;对于分支,需要保存当前的上下文信息,先执行其中一条路径,当执行完成返回后,恢复保存后的上下文信息,再继续解释另一条路径;
步骤E.当执行到函数结束时,符号执行过程产生一些与输入相关的表达式集合,根据安全属性规则,简化、分析这些表达式最后判断是否有漏洞;
该简易符号执行的二进制代码漏洞挖掘方法中只添加了非法写内存漏洞模式的规则:
其中Store为存储函数,Store(a)=b表示把b写入由地址a表示的内存中;Expr(x)表示关于x的表达式,I表示输入,f0表示固定值;
其中,步骤A中所述的二进制代码为Windows、Linux操作系统下的x86可执行代码;所述控制流信息是由基本块信息组成的链表,基本块信息包括:
A1.基本块标号Label,表示该基本块的标识符,值唯一;
A2.基本块的开始地址StartAddress;
A3.基本块的结束地址EndAddress;
A4.基本块的入度数InCount,表示到达该基本块的前驱的数量,入度数为0的基本块为本函数的第一个基本块;
A5.基本块的出度数OutCount,表示由该基本块到达的后继的数量,该出度数的值不大于2,出度数为0的基本块为本函数的最后一个基本块;
A6.基本块的前驱数组,表示到达该基本块的前驱的集合;
A7.基本块的后继数组,表示由该基本块到达的后继的集合;
A8.循环标志,表示该基本块是否处于循环中;
其中,步骤B所述的中间语言中,包括三种存储介质:
B11.临时变量,在每个基本块中临时申请,用于实现静态单赋值,为寄存器与内存间的媒介;
B12.寄存器,与机器指令中的寄存器相同,读写寄存器使用中间语言中的Get和Put操作完成;
B13.内存,内存地址由常量或临时变量表示,读写内存使用中间语言中的LDle和STle操作完成;
步骤B中所述的中间语言由语句IRStmt组成,语句IRStmt包括:
B21.IMark语句,表示每个基本块的入口标志,其中包括该基本块对应机器指令的开始地址及该指令的字节数;
B22.Put语句,表示把临时变量的值写入寄存器;
B23.Store语句,表示把临时变量的值写入内存;
B24.IRDirty语句,表示调用有副作用的函数;
B25.Exit语句,表示基本块的出口;
其中,所述的语句IRStmt由表达式IRExpr组成,表达式IRExpr包括:
B31.Get表达式,表示从寄存器中读取值;
B32.Tmp表达式,表示临时变量;
B33.Binop表达式,表示二元操作;
B34.Unop表达式,表示一元操作;
B35.Load表达式,表示从内存中读取值;
B36.Const表达式,表示常量;
B37.MuxOX表达式,表示if-then-else语句;
其中,步骤C所述的输入点一般指函数的参数或者从外部引入的值,在x86指令集中,参数表示为栈桢指针与正数偏移相加,但栈桢指针是ESP或者EBP,需要启发式判断;另外这种输入是从外部引入的值,在函数内部调用ReadFile、Recv、Accept函数时引入的外部值,在函数建模后就针对这些输入向量适当地引入符号;
其中,步骤D所述的简易符号执行方法是在中间语言上进行,需要考虑以下几种情况:
D1.Put操作,检查赋值给寄存器的临时变量是否依赖于输入;
D2.赋值给临时变量时,左值需要考虑以下几种情况:
D21.从临时变量中读,检查该临时变量是否依赖于输入;
D22.从内存中读,检查该内存中的值是否依赖于输入;
D23.从寄存器中读,检查该寄存器是否依赖于输入;
D24.一元操作与二元操作,检查操作数是否依赖于输入;
D3.Store操作,检查写入内存的临时变量是否依赖于输入;
步骤D所述的Put与Store操作为与输入相关的表达式,包括二元操作,一元操作、位移操作,有符号扩展、无符号扩展;
步骤D所述的符号执行达到分支指令时,需要保存当前的上下文信息,该信息包括执行到当前指令所有寄存器、临时变量、以及内存的符号信息,然后执行一条路径,执行完成后回溯到分支处,恢复保存的上下文信息再继续执行另一条路径;
其中,步骤E中所述的安全属性规则为判断指令是否为漏洞的依据,目前,成功添加三种安全属性规则来判断非法写内存模式的漏洞:
E1.写任意值到任意地址;
E2.写任意值到固定地址;
E3.写固定值到任意地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210243800.7A CN102841844B (zh) | 2012-07-13 | 2012-07-13 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210243800.7A CN102841844B (zh) | 2012-07-13 | 2012-07-13 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102841844A CN102841844A (zh) | 2012-12-26 |
CN102841844B true CN102841844B (zh) | 2015-12-16 |
Family
ID=47369234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210243800.7A Expired - Fee Related CN102841844B (zh) | 2012-07-13 | 2012-07-13 | 一种基于简易符号执行的二进制代码漏洞挖掘方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102841844B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104731705B (zh) * | 2013-12-31 | 2017-09-01 | 北京理工大学 | 一种基于复杂网络的脏数据传播路径发现方法 |
CN104932865B (zh) * | 2015-07-10 | 2017-10-10 | 武汉工程大学 | 一种组件协议挖掘方法、装置及系统 |
CN105678169B (zh) * | 2015-12-30 | 2019-02-26 | 西安胡门网络技术有限公司 | 一种二进制程序漏洞挖掘方法和系统 |
CN106354630B (zh) * | 2016-08-23 | 2018-11-13 | 电子科技大学 | 一种基于动态符号执行的软件缺陷检测方法 |
CN106407809B (zh) * | 2016-09-20 | 2019-03-01 | 四川大学 | 一种Linux平台恶意软件检测方法 |
CN106371999B (zh) * | 2016-10-20 | 2019-08-06 | 腾讯科技(深圳)有限公司 | 程序代码测试方法及装置 |
CN107102861B (zh) * | 2017-04-25 | 2019-09-03 | 中南大学 | 一种获取开源代码库中函数的向量的方法和系统 |
CN111523121B (zh) * | 2019-12-24 | 2023-08-29 | 国网天津市电力公司 | 一种指引二进制漏洞挖掘路径的方法及其应用 |
CN111859388B (zh) * | 2020-06-30 | 2022-11-01 | 广州大学 | 一种多层次混合的漏洞自动挖掘方法 |
CN112307485B (zh) * | 2020-11-09 | 2024-03-26 | 浙江大学 | 一种面向跨架构漏洞挖掘的符号执行引擎优化方法 |
CN113515745B (zh) * | 2021-06-24 | 2021-12-21 | 北京中超伟业信息安全技术股份有限公司 | 一种用于木马检测的方法及系统 |
CN114510429B (zh) * | 2022-02-28 | 2024-05-07 | 中国人民解放军国防科技大学 | 一种基于动态符号执行的调试方法、系统和介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996132A (zh) * | 2009-08-14 | 2011-03-30 | 中兴通讯股份有限公司 | 公用对象请求代理程序体系结构接口自动测试方法和装置 |
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测系统及检测方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5425699B2 (ja) * | 2010-04-30 | 2014-02-26 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 情報処理装置、テストケース生成方法、プログラムおよび記録媒体 |
-
2012
- 2012-07-13 CN CN201210243800.7A patent/CN102841844B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101996132A (zh) * | 2009-08-14 | 2011-03-30 | 中兴通讯股份有限公司 | 公用对象请求代理程序体系结构接口自动测试方法和装置 |
CN102222035A (zh) * | 2011-07-25 | 2011-10-19 | 公安部第三研究所 | 基于符号执行技术的软件行为检测系统及检测方法 |
Non-Patent Citations (2)
Title |
---|
基于控制流精化的反汇编方法;马金鑫等;《清华大学学报(自然科学版)》;20111031;第51卷(第10期);第1345-1347页 * |
基于符号化执行的Fuzzing测试集动态生成技术研究;陈建敏;《中国硕士学位论文全文数据库 信息科技辑》;20120315(第3期);第12-24、34-43页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102841844A (zh) | 2012-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102841844B (zh) | 一种基于简易符号执行的二进制代码漏洞挖掘方法 | |
Brumley et al. | Creating vulnerability signatures using weakest preconditions | |
Stickel | A Prolog technology theorem prover: Implementation by an extended Prolog compiler | |
CN105930694A (zh) | 用于模糊虚拟机的灵活指令集 | |
CN105164642B (zh) | 对合同的操作系统支持 | |
Kan et al. | Automated deobfuscation of Android native binary code | |
CN113312618A (zh) | 程序漏洞检测方法、装置、电子设备及介质 | |
Appel | Modular verification for computer security | |
Namjoshi et al. | A witnessing compiler: A proof of concept | |
Kwon et al. | Proving flow security of sequential logic via automatically-synthesized relational invariants | |
Zhang et al. | Parameter and return-value analysis of binary executables | |
Li et al. | An explicit transition system construction approach to LTL satisfiability checking | |
Blazy et al. | Verified abstract interpretation techniques for disassembling low-level self-modifying code | |
CN113688402A (zh) | 一种智能合约漏洞挖掘方法及装置 | |
Moukahal et al. | Boosting grey-box fuzzing for connected autonomous vehicle systems | |
Bensalem et al. | Abstraction as the key for invariant verification | |
Xie et al. | A new detection method for stack overflow vulnerability based on component binary code for third-party component | |
CN115391780B (zh) | 应用代码的安全加固方法、系统、设备及存储介质 | |
Molnár | Extensions and generalization of the saturation algorithm in model checking | |
Gurfinkel et al. | Automatic Program Verification with SEAHORN | |
Goluch | Trust, transforms, and control flow: A graph-theoretic method to verifying source and binary control flow equivalence | |
Mondok et al. | Efficient formal verification of component-based engineering models | |
Korel et al. | Assertion-based validation of modified programs | |
Busi et al. | Control-flow flattening preserves the constant-time policy (extended version) | |
Mondok et al. | Formal verification of engineering models via extended symbolic transition systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151216 Termination date: 20180713 |
|
CF01 | Termination of patent right due to non-payment of annual fee |