CN107908955B - 一种基于中间语言分析的控制流完整性保护方法及系统 - Google Patents
一种基于中间语言分析的控制流完整性保护方法及系统 Download PDFInfo
- Publication number
- CN107908955B CN107908955B CN201711236825.3A CN201711236825A CN107908955B CN 107908955 B CN107908955 B CN 107908955B CN 201711236825 A CN201711236825 A CN 201711236825A CN 107908955 B CN107908955 B CN 107908955B
- Authority
- CN
- China
- Prior art keywords
- intermediate language
- point
- llvm
- cryptographic hash
- source 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.)
- Active
Links
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/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
-
- 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/55—Detecting local intrusion or implementing counter-measures
-
- 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
-
- 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/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于中间语言分析的控制流完整性保护方法及系统,包括:将源代码翻译成LLVM中间语言;将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流;基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,调用点的哈希值和被调用点的哈希值相同;将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,调用点哈希值和被调用点的哈希值用于在可执行程序运行时检查其是否受到攻击;当可执行程序受到攻击时,调用点哈希值和被调用点的哈希值不匹配,控制流不完整,停止运行可执行程序。本发明可以保证控制流的完整性。
Description
技术领域
本发明涉及计算机技术领域,更具体地,涉及一种基于中间语言分析的控制流完整性保护方法及系统。
背景技术
缓冲区溢出漏洞一直是计算机软件存在的问题。通过利用缓冲区溢出漏洞,攻击者能对内存任意读写,从而修改代码指针,最终劫持控制流以完成攻击意图。控制流劫持攻击和防御是近几年学术研究的热点。为了保护内存安全,学术和工业界不断研究并部署有效的保护措施。已有很多保护措施被广泛采纳,如DEP(Data Execution Prevention)、ASLR(Address Space Layout Randomization)、GS/SSP(Stack Smashing Protector)和SafeSEH(Safe Structured Exception Handling)。但仍有多项攻击技术,可以绕过以上这些保护措施。为此,控制流完整性的概念被提出。控制流完整性保护不直接保护内存安全,而是检查控制流是否被劫持,从而判断是否受到攻击。控制流完整性保护方案通常会在程序运行之前为程序生成一个控制流图,在程序运行时利用已生成的控制流图来监控程序的行为,以确保程序控制流符合控制流图。当发现程序控制流不符合控制流图时,通常的做法就是发出警告并终止程序。
传统上,控制流劫持攻击以ret指令、间接jmp指令和间接call指令为目标控制程序指针。目前,越来越多的攻击者开始使用C++应用中的虚调用作为攻击目标。在针对Chrome的攻击中,80%的攻击利用user-after-free漏洞和虚函数调用;并且,Chrome中91.8%的间接调用为虚函数调用。50%的针对Window7的攻击利用user-after-free漏洞和虚函数调用。新的攻击方式COOP可以绕过没有考虑C++语义的防护手段,通过修改虚表指针(vptr)在不改变原有控制流的情况下构建攻击。
针对虚表劫持攻击,学术界分别提出了针对二进制程序和源代码的解决方案。源代码层的解决方案,通过分析源代码可以获取类继承结构的信息,在函数的调用点和被调用点插入由函数名、参数列表、修饰符和类型信息编码生成的哈希值,在函数调用时通过匹配函数的哈希值来判断调用的合法性。基于源代码的解决方案无法应用于缺少源代码的二进制应用程序。基于二进制的解决方案,通过数据流可控制流分析,分析出虚表和类继承结构,虚函数被调用时,判断虚表指针是否指向正确的虚表。缺点是无法从二进制完全恢复出所有虚表。另一种基于二进制的解决方案,通过分析汇编代码,确定函数调用点和被调用点的参数比较来判断是否受到续表劫持攻击。这两种方案的都属于粗粒度的解决方案。
综上所述,现有的针虚表劫持攻击的控制流完整性保护方法存在以下不足:源代码层的解决方案无法对二进制应用程序进行保护,二进制层的解决方案粒度太大,可能会到精心设计的虚表劫持攻击的威胁。
发明内容
针对现有技术的缺陷,本发明的目的在于解决现有的针虚表劫持攻击的控制流完整性保护方法存在以下不足:源代码层的解决方案无法对二进制应用程序进行保护,二进制层的解决方案粒度太大,可能会到精心设计的虚表劫持攻击的威胁的技术问题。
为实现上述目的,第一方面,本发明提供一种基于中间语言分析的控制流完整性保护方法,包括:
将源代码翻译成LLVM中间语言(LLVM Intermediate Representation);将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流;基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同;将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击;当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值不匹配,所述控制流不完整,停止运行所述可执行程序。
可选地,将源代码翻译成LLVM中间语言,包括:确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
可选地,将二进制程序反汇编成LLVM中间语言,包括:反汇编二进制程序并生成控制流图(control flow graph,CFG)文件;将CFG文件转化为LLVM中间语言。
可选地,LLVM中间语言中函数的信息包括:函数名、参数列表、函数返回类型和函数所属库。
第二发明,本发明提供一种基于中间语言分析的控制流完整性保护系统,包括:
源代码翻译模块,用于将源代码翻译成LLVM中间语言;
二进制反汇编模块,用于将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流;
函数类型哈希值生成模块,用于基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同;
函数类型检查部署模块,用于将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击;当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值不匹配,所述控制流不完整,停止运行所述可执行程序。
可选地,源代码翻译模块,用于确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
可选地,二进制反汇编模块用于反汇编二进制程序并生成控制流图CFG文件;将CFG文件转化为LLVM中间语言。
可选地,LLVM中间语言中函数的信息包括:函数名、参数列表、函数返回类型和函数所属库。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:
(1)实用性:本发明适用于源代码和二进制程序,基于中间语言分析获取用来匹配的哈希值,不依赖源代码分析和二进制程序分析。当可执行程序受到攻击时,调用点哈希值和被调用点的哈希值不匹配,控制流不完整,停止运行可执行程序,以保证控制流的完整性。因此,本发明具有较高的实用性。
(2)创新性:本发明是第一个通过对LLVM中间语言分析同时保护源代码和二进制应用的解决方法。
(3)模块化支持。本发明匹配规则简单,调用点和被调用点的哈希值可以分别生成,不相互依赖。所以只需要对动态链接库进行同样的保护生成对应的哈希值,库函数被调用时,匹配调用点和被调用点的哈希值。因此,本发明支持模块化。
(4)增量编译。本发明通过匹配函数调用点和被调用点的哈希值来确定控制流的完整性。调用点和被调用点的哈希值生成不相互依赖,因此本发明支持增量编译。
(5)低开销。本发明在运行时匹配汇编时插入的哈希值,不需对程序进行动态的控制流追踪和检查,因此引入的运行时开销非常低,能够忽略不计。
附图说明
图1是本发明提供的基于中间语言分析的控制流完整性保护方法流程图;
图2是本发明提供的基于中间语言分析的控制流完整性保护系统整体架构图;
图3是本发明提供的源代码翻译模块的工作流程图;
图4是本发明提供的二进制反汇编模块的工作流程图;
图5是本发明提供的函数类型哈希值生成模块工作流程图;
图6是本发明提供的函数类型检查部署模块工作流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明提供了一种基于中间语言分析的控制流完整性保护方法及系统,其目的在于,解决现有针对二进制程序的控制流保护方法中出现的上述局限和不足,保证保护方法的透明性、兼容性和模块化支持,并且同时对源代码和二进制程序的控制流提供保护。
为实现上述目的,本发明提供了一种基于中间语言分析的控制流完整性保护方法,如图1所示,包括以下步骤:
S1,将源代码翻译成LLVM中间语言(LLVM Intermediate Representation)。
S2,将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流。
S3,基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同。
S4,将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击。
S5,当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值不匹配,所述控制流不完整,停止运行所述可执行程序。
可选地,将源代码翻译成LLVM中间语言,包括:确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
可选地,将二进制程序反汇编成LLVM中间语言,包括:反汇编二进制程序并生成控制流图(control flow graph,CFG)文件;将CFG文件转化为LLVM中间语言。
可选地,LLVM中间语言中函数的信息包括:函数名、参数列表、函数返回类型和函数所属库。
相应地,本发明提供了一种基于中间语言分析的控制流完整性保护系统,其架构图如图2所示,包括:源代码翻译模块、二进制反汇编模块、函数类型哈希值生成模块以及函数类型检查部署模块。
源代码翻译模块,用于将源代码翻译成LLVM中间语言。
二进制反汇编模块,用于将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流。
函数类型哈希值生成模块,用于基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同。
函数类型检查部署模块,用于将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击;当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值不匹配,控制流不完整,停止运行所述可执行程序。
可选地,源代码翻译模块,用于确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
具体地,如图3所示,可将源代码翻译模块的功能划分为:
(1)词法分析:词法分析器读入组成源代码的字符流,并将它们组织成词素序列。对于每个词素,词法分析器产生如下形式的词法单元作为输出:<token-name,attribute-value>。词法分析生成的词法单元用于语法分析。词法单元第一分量token-name是一个由语法分析步骤使用的抽象符号,第二个分量attribute-name指向符号表中关于这个词法单元的条目。符号表条目的信息由词法分析器生成,并会被语义分析和中间代码生成步骤使用。
(2)语法分析:语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。该中间表示给出了词法分析产生的词法单元流的语法结构:抽象语法树。
(3)语义分析:语义分析器使用抽象语法树和符号表中的信息来检查源代码是否和语言定义的语义一致。语义分析器同时也收集与符号表中条目相关的类型信息,并把这些类型信息放在抽象语法树或者符号表中。抽象语法树和符号表用于中间代码的生成。
(4)中间代码生成:中间代码生成器基于抽象语法树和符号表中信息生成LLVM中间语言。
具体地,如图4所示,二进制反汇编模块:反汇编二进制程序为LLVM中间语言,具体步骤如下:
(1)反汇编二进制程序并生成CFG文件;
(2)将CFG文件转化为为LLVM中间语言
具体地,如图5所示,函数类型哈希值生成模块:在数调用点和被调用点生成哈希值,具体步骤如下:
基于LLVM中间语言中函数的信息:函数名,参数列表,函数返回类型和函数所属库,生成调用点和被调用点的哈希值。
具体地,如图6所示,函数类型检查部署模块:将函数的哈希值插入程序生成的汇编代码,具体步骤如下:
(1)汇编LLVM中间语言为汇编代码;
(2)在链接时把函数调用点和被调用点生成的哈希值插入汇编代码,生成可执行程序。
本发明的整体思路在于,将源代码或者二进制应用转化为LLVM中间语言,基于LLVM中间语言生成函数调用点和被调用点的哈希值(函数名、参数列表、函数返回类型和函数所属库),程序运行时通过匹配函数调用点和被调用点的哈希值是否相等判断应用是否受到了攻击。如果运行时的函数调用点和被调用点的哈希值相等,程序正常执行;如果不相等,说明应用程序受到控制流劫持攻击,应用程序停止执行,保证了控制流的完整性。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种基于中间语言分析的控制流完整性保护方法,其特征在于,包括:
将源代码翻译成LLVM中间语言;
将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流;
基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同;所述LLVM中间语言指的是来自源代码或二进制程序的LLVM中间语言;
将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击;
当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值将不匹配,所述控制流不完整,停止运行所述可执行程序。
2.根据权利要求1所述的基于中间语言分析的控制流完整性保护方法,其特征在于,所述将源代码翻译成LLVM中间语言,包括:
确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;
使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;
使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
3.根据权利要求1所述的基于中间语言分析的控制流完整性保护方法,其特征在于,所述将二进制程序反汇编成LLVM中间语言,包括:
反汇编二进制程序并生成控制流图CFG文件;
将CFG文件转化为LLVM中间语言。
4.根据权利要求1所述的基于中间语言分析的控制流完整性保护方法,其特征在于,LLVM中间语言中函数的信息包括:函数名、参数列表、函数返回类型和函数所属库。
5.一种基于中间语言分析的控制流完整性保护系统,其特征在于,包括:
源代码翻译模块,用于将源代码翻译成LLVM中间语言;
二进制反汇编模块,用于将二进制程序反汇编成LLVM中间语言,LLVM中间语言生成的二进制程序被执行时的跳转信息对应基于LLVM中间语言分析生成的控制流;
函数类型哈希值生成模块,用于基于LLVM中间语言中函数的信息,生成调用点哈希值和被调用点的哈希值,所述调用点的哈希值和所述被调用点的哈希值相同;所述LLVM中间语言指的是来自源代码或二进制程序的LLVM中间语言;
函数类型检查部署模块,用于将LLVM中间语言汇编为汇编代码,并将调用点哈希值和被调用点的哈希值插入汇编代码,生成可执行程序,所述调用点哈希值和被调用点的哈希值用于在所述可执行程序运行时检查其是否受到攻击;当所述可执行程序受到攻击时,所述调用点哈希值和被调用点的哈希值不匹配,所述控制流不完整,停止运行所述可执行程序。
6.根据权利要求5所述的基于中间语言分析的控制流完整性保护系统,其特征在于,所述源代码翻译模块,用于确定组成源代码的字符流,并将所述字符流组织成词素序列,对于每个词素产生对应的词法单元作为输出,所述词法单元的第一分量对应该词素的抽象符号,所述词法单元的第二分量指向符号表中关于这个词法单元的条目,所述符号表用于存放第一个分量相关的信息;使用各个词法单元的第一个分量来创建树形的中间表示,所述树形的中间表示给出了所有词法单元的语法结构:抽象语法树;使用抽象语法树和符号表中的信息来检查源代码是否和源代码所使用的编程语言定义的语义一致,若一致,则基于抽象语法树和符号表中信息生成LLVM中间语言。
7.根据权利要求5所述的基于中间语言分析的控制流完整性保护系统,其特征在于,所述二进制反汇编模块用于反汇编二进制程序并生成控制流图CFG文件;将CFG文件转化为LLVM中间语言。
8.根据权利要求5所述的基于中间语言分析的控制流完整性保护系统,其特征在于,LLVM中间语言中函数的信息包括:函数名、参数列表、函数返回类型和函数所属库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711236825.3A CN107908955B (zh) | 2017-11-30 | 2017-11-30 | 一种基于中间语言分析的控制流完整性保护方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711236825.3A CN107908955B (zh) | 2017-11-30 | 2017-11-30 | 一种基于中间语言分析的控制流完整性保护方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107908955A CN107908955A (zh) | 2018-04-13 |
CN107908955B true CN107908955B (zh) | 2019-11-12 |
Family
ID=61849415
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711236825.3A Active CN107908955B (zh) | 2017-11-30 | 2017-11-30 | 一种基于中间语言分析的控制流完整性保护方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107908955B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102019105418B3 (de) | 2019-03-04 | 2020-08-13 | Fujitsu Technology Solutions Intellectual Property Gmbh | Verfahren zum Erzeugen einer Darstellung einer Programmlogik, Dekompiliervorrichtung, Rekompiliersystem und Computerprogrammprodukte |
EP3956793A4 (en) * | 2019-04-18 | 2023-01-04 | RunSafe Security, Inc. | SOURCE CHANGE MACHINE |
CN110287378B (zh) * | 2019-05-24 | 2021-10-19 | 中国科学院计算技术研究所 | 一种基于动态代码生成的图计算方法及系统 |
CN113553056B (zh) * | 2021-07-21 | 2024-05-14 | 浙江大学 | 基于图匹配的llvm中间语言差分分析方法及系统 |
CN116049835B (zh) * | 2023-03-08 | 2023-06-23 | 中汽智联技术有限公司 | 汽车固件的安全漏洞检测方法、设备和存储介质 |
CN118760437B (zh) * | 2024-09-09 | 2024-12-13 | 四维创智(北京)科技发展有限公司 | 多语言前端翻译成网络安全专用编译器的yak字节码的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9032380B1 (en) * | 2011-12-05 | 2015-05-12 | The Mathworks, Inc. | Identifying function calls and object method calls |
CN104915211A (zh) * | 2015-06-18 | 2015-09-16 | 西安交通大学 | 反编译中基于子图同构匹配算法的内在函数识别方法 |
CN106203113A (zh) * | 2016-07-08 | 2016-12-07 | 西安电子科技大学 | 安卓应用文件的隐私泄露监控方法 |
CN106295258A (zh) * | 2016-08-04 | 2017-01-04 | 南京大学 | 用于多线程后向控制流完整性保护的影子栈实现方法 |
CN106528403A (zh) * | 2016-10-08 | 2017-03-22 | 西安电子科技大学 | 基于二进制代码植入技术的软件运行时监控方法 |
-
2017
- 2017-11-30 CN CN201711236825.3A patent/CN107908955B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9032380B1 (en) * | 2011-12-05 | 2015-05-12 | The Mathworks, Inc. | Identifying function calls and object method calls |
CN104915211A (zh) * | 2015-06-18 | 2015-09-16 | 西安交通大学 | 反编译中基于子图同构匹配算法的内在函数识别方法 |
CN106203113A (zh) * | 2016-07-08 | 2016-12-07 | 西安电子科技大学 | 安卓应用文件的隐私泄露监控方法 |
CN106295258A (zh) * | 2016-08-04 | 2017-01-04 | 南京大学 | 用于多线程后向控制流完整性保护的影子栈实现方法 |
CN106528403A (zh) * | 2016-10-08 | 2017-03-22 | 西安电子科技大学 | 基于二进制代码植入技术的软件运行时监控方法 |
Non-Patent Citations (2)
Title |
---|
Building dynamic integrity protection for multiple independent authorities in virtualization-based infrastructure;Ge Cheng;《2009 10th IEEE/ACM International Conference on Grid Computing》;20091015;第113-119页 * |
二进制代码块: 面向二进制程序的细粒度控制流完整性校验方法;王明华 等;《信息安全学报》;20160430;第61-72页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107908955A (zh) | 2018-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107908955B (zh) | 一种基于中间语言分析的控制流完整性保护方法及系统 | |
Liljestrand et al. | {PAC} it up: Towards pointer integrity using {ARM} pointer authentication | |
Li et al. | Defeating return-oriented rootkits with" return-less" kernels | |
Abate et al. | When good components go bad: Formally secure compilation despite dynamic compromise | |
US8589897B2 (en) | System and method for branch extraction obfuscation | |
Haller et al. | Shrinkwrap: Vtable protection without loose ends | |
US8874928B2 (en) | System and method for obfuscating constants in a computer program | |
CN110210190A (zh) | 一种基于二次汇编的代码混淆方法 | |
CN107092518A (zh) | 一种保护拟态防御系统软件层安全的编译方法 | |
Payer et al. | String oriented programming: When ASLR is not enough | |
US10528729B2 (en) | Methods and systems for defending against cyber-attacks | |
CN109829313B (zh) | 一种基于代码复用编程防御sgx侧信道攻击的方法及装置 | |
Patrignani et al. | Robustly safe compilation | |
Patrignani et al. | Robustly safe compilation, an efficient form of secure compilation | |
US11010495B1 (en) | Systems and methods for runtime enforcement of data flow integrity | |
CN111475168B (zh) | 一种代码编译方法及装置 | |
Coudray et al. | PICON: control flow integrity on LLVM IR | |
Larmuseau et al. | A secure compiler for ML modules | |
US8738931B1 (en) | Method for determining and protecting proprietary source code using mnemonic identifiers | |
Khoo | Decompilation as search | |
Alouneh et al. | Stack memory buffer overflow protection based on duplication and randomization | |
Jacob et al. | Functional polymorphic engines: formalisation, implementation and use cases | |
Fan et al. | VPV: Enforcing Secure C++ Dynamic Dispatch by Vtable Pointer Verification. | |
Alouneh et al. | A software approach for stack memory protection based on duplication and randomisation | |
Sah et al. | Basic block encoding based run-time cfi check for embedded software |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |