CN111176623A - 一种基于图卷积神经网络的c++抽象信息恢复方法 - Google Patents
一种基于图卷积神经网络的c++抽象信息恢复方法 Download PDFInfo
- Publication number
- CN111176623A CN111176623A CN201911403402.5A CN201911403402A CN111176623A CN 111176623 A CN111176623 A CN 111176623A CN 201911403402 A CN201911403402 A CN 201911403402A CN 111176623 A CN111176623 A CN 111176623A
- Authority
- CN
- China
- Prior art keywords
- conclusion
- graph convolution
- neural network
- graph
- reasoning
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 33
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 12
- 238000011084 recovery Methods 0.000 title claims abstract description 12
- 238000004458 analytical method Methods 0.000 claims abstract description 23
- 238000012545 processing Methods 0.000 claims abstract description 9
- 230000006870 function Effects 0.000 claims description 21
- 238000012549 training Methods 0.000 claims description 7
- 238000013527 convolutional neural network Methods 0.000 claims 3
- 238000010586 diagram Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 102000054765 polymorphisms of proteins Human genes 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于图卷积神经网络的C++抽象信息恢复方法,所述方法包括:首先使用二进制分析工具提取出基本事实,推理使用;对于确定性的规则,直接推理得出结论;对于步骤B不能确定的结论,使用图卷积网络处理得出结论;对于用图卷积网络处理得出的结论,再额外设置一致性检查规则,若不能通过检查,则需要再从步骤C中取出第二个结论再进行尝试,直到可以通过推理得出一致性检查为止。本发明有益效果在于,图卷积神经网络(GCN)可应用于图的顶点的属性预测,把假设推理的规则抽象成图的顶点和边,就可以使用图卷积神经网络的属性预测代替Prolog的假设推理,从而达到更高的速度和准确率。
Description
技术领域
本发明涉及网络安全技术领域,特别涉及二进制可执行文件的逆向工程技术,具体的说,一种基于图卷积神经网络的C++抽象信息恢复方法。
背景技术
软件逆向工程是研究闭源软件行为的重要方式。通过逆向工程,我们可以恢复出闭源软件中的一些算法、协议和应用程序接口,进而了解一个软件内部是否包含恶意代码或者是否存在漏洞。
C++是目前主流的面向对象编程语言之一,同时具有能与C语言媲美的运行效率和面向对象编程语言的高开发效率,许多注重性能的软件都使用C++作为主要开发语言。C++继承自C,因此也存在类似C语言的一些内存安全问题,比如常见的缓冲区出,空指针解引用和Use-After-Free等。要分析由C++编译成的二进制可执行文件中Use-After-Free漏洞,则要先知道C++对象是如何被构造的;要分析由C++编译成的二进制可执行文件是否包含恶意代码,也要先通过C++抽象信息(即C++的类、对象、类的方法、成员变量、类之间的继承关系等)来分析程序逻辑。因此,恢复出C++的抽象信息在二进制可执行文件的逆向工程中具有十分重要的意义。
然而,在二进制可执行文件的逆向工程中,由C++编译成的二进制可执行文件的分析难度比由C编译成的二进制可执行文件大得多,因为由C++编译成的二进制可执行文件在运行过程中并不需要知道C++的抽象信息,所以这些信息在编译的过程中大部分都被丢弃了。如何准确地恢复出这些C++的抽象信息,成为二进制可执行文件的逆向工程中的一个热点问题。
软件逆向工程是研究闭源软件行为的重要方式。通过逆向工程,我们可以恢复出闭源软件中的一些算法、协议和应用程序接口(API),进而可以了解一个软件内部是否包含恶意代码,或者漏洞(比如常见的栈溢出、堆溢出和Use-After-Free等)。在法律允许的情况下,我们还可以通过逆向工程恢复出闭源软件中的一些算法、协议和应用程序接口(API)。增加一句话或者2句话说明对于C++编写的软件恢复的重要意义。
C++是目前主流的面向对象编程语言之一,许多注重性能的软件都使用C++作为主要开发语言。在二进制可执行文件的逆向工程中,由C++编译成的二进制文件的分析难度通常比由C编译成的二进制文件大得多,这是因为C++引入了类与对象等面向对象(OO)编程的概念,而这些信息在编译的过程中大部分都丢失了。要正确地理解由C++编译成的二进制文件的行为,就要先从二进制文件中恢复出C++的类、对象等面向对象编程相关的属性信息//题目是C++对象恢复,这里说的是属性恢复,需要保持一致,你需要确认到底想做什么,再修改题目和这里,令它们保持一致。
对XXX的恢复技术中,目前现有的技术的方法主要包括XXXX。这些方法主要是通过分析C++虚函数表和程序的控制流来实现(来实现什么需补充)。但是这些技术都要通过分析C++虚函数表得到一些基本信息,所以对于没有虚函数的类,分析起来比较困难。较新的方法使用了符号分析的方法得到一些二进制代码内的一些C++基本事实,再基于Prolog规则进行推理分析,最终从而恢复出对象的具体属性。符号分析可以较准确地得到C++中对象的创建、修改、维护等操作,但是在Prolog推理分析中,对于含义比较模糊的属性,Prolog会先作出一个假设推理,再对结论进行验证。这个过程需要大量的计算,并且准确率不高。//这段主要是将已有的技术分成几类,开头先概括,最后说明你想做的方法主要是在哪个方面,跟专利的题目相一致。目前已有的方法主要包括:分析C++的运行时类型识别(RTTI)信息、分析C++虚函数表和程序的控制流等。
1、分析C++的RTTI信息
C++的对象具有多态性,其基类的指针就可以指向任何派生类的对象。为了确定基类的指针到底指向了哪个派生类的对象,需要使用运行时类型识别(RTTI)功能。C++的RTTI功能主要服务于两个关键字:typeid和dynamic_cast。为了使用RTTI,编译器会在二进制代码中加入特定的数据结构,里面包含了C++类名及其继承关系,因此,直接分析二进制代码中的RTTI结构体就可以恢复出。但是,C++的RTTI功能经常被错误地使用,并且需要使用typeid和dynamic_cast这两个关键字的场合也不多,所以现代应用程序基本上默认不使用RTTI,基于RTTI的分析方法不能很好发挥作用。
2、分析C++虚函数表和程序的控制流
此方法通过分析虚函数表跟踪对象指针、分析程序控制流、C++异常处理函数来得到C++抽象信息。但是这个方法是基于分析C++虚函数表的,而非多态类(即没有虚函数的类)没有虚函数表,因此无法分析非多态类的继承关系。
3、基于Prolog规则进行推理分析
基于Prolog规则进行推理分析综合了以上两种方法的优点,并使用了简单的静态符号执行来分析,得到二进制代码内的一些C++基本事实,再基于Prolog规则进行推理分析,最终恢复出C++抽象信息。静态符号执行分析可以较准确地得到C++中对象的创建、修改、维护等操作,同时Prolog推理的方法更具有全局性,可以通过跟踪程序数据流来推理得到非多态类的信息。
在Prolog推理分析中,对于含义比较模糊的抽象信息,则先作出一个假设推理,再对结论进行验证。如果验证不通过,则要进行回溯。回溯的原理是添加更多的规则以排除不合理的解,这个过程的计算复杂度非常高,对内存消耗也非常大,并且准确率不高。
发明内容
本发明的目的在于解决C++抽象信息恢复过程中含义比较模糊的抽象信息恢复的速度、准确率上的问题。图卷积神经网络(GCN)可应用于图的顶点的属性预测,把假设推理的规则抽象成图的顶点和边,就可以使用图卷积神经网络的属性预测代替Prolog的假设推理,从而达到更高的速度和准确率。
为了实现上述目的,本发明采用如下技术方案:
一种基于图卷积神经网络的C++抽象信息恢复方法,所述方法包括:
A首先使用二进制分析工具提取出基本事实,推理使用;
B对于确定性的规则,直接推理得出结论;
C对于步骤B不能确定的结论,使用图卷积网络处理得出结论;
D对于用图卷积网络处理得出的结论,再额外设置一致性检查规则,若不能通过检查,则需要再从步骤C中取出第二个结论再进行尝试,直到可以通过推理得出一致性检查为止。
优选地,所述二进制分析工具为pharos。
优选地,所述推理的工具为Prolog。
优选地,所述步骤C中还包括:
C1首先使用编译工具编译用于训练的二进制代码,得到程序数据库文件;
C2解析步骤C1获得的程序数据库文件,得到程序中包含的所有C++类,包括类的成员变量,成员函数,和/或类的虚函数表的偏移量;
C3以步骤C2得到的C++类型信息作为标签,对图卷积网络进行训练。
优选地,所述编译工具为Microsoft C++Compiler。
相较于基于prolog的分析方法,本发明提出的技术方案,具有以下优势:
第一,使用图卷积网络进行预测意味着不需要太多的专业领域知识,因为图卷积网络在训练过程中可以自动学习规则;
第二,相对于Prolog的假设推理算法,图卷积网络的计算复杂度更低,且图卷积网络的实现可以充分利用现代计算机硬件的并行计算特性,达到更快的速度;
第三,Prolog的假设推理算法每次都进行随机猜测,而图卷积网络可以根据训练数据的规律进行预测,准确性更高。
附图说明
图1为本发明的抽象信息恢复的流程示意图;
图2为本发明步骤C2中待处理的源代码示意图;
图3为本发明获得的汇编代码示意图;
图4为本发明读取PDB文件得到的结果示意图;
图5为通过本发明恢复后的图卷积网络由结点和有向边组成的结果示意图。
具体实施方式
以下将结合附图对本发明作进一步的描述,需要说明的是,以下实施例以本技术方案为前提,给出了详细的实施方式和具体的操作过程,但本发明的保护范围并不限于本实施例。
如图1所示,本发明为一种基于图卷积神经网络的C++抽象信息恢复方法,所述方法包括:
A首先使用二进制分析工具提取出基本事实,推理使用;
B对于确定性的规则,直接推理得出结论;
C对于步骤B不能确定的结论,使用图卷积网络处理得出结论;
D对于用图卷积网络处理得出的结论,再额外设置一致性检查规则,若不能通过检查,则需要再从步骤C中取出第二个结论再进行尝试,直到可以通过推理得出一致性检查为止。
优选地,所述二进制分析工具为pharos。
优选地,所述推理的工具为Prolog。
优选地,所述步骤C中还包括:
C1首先使用编译工具编译用于训练的二进制代码,得到程序数据库文件;
C2解析步骤C1获得的程序数据库文件,得到程序中包含的所有C++类,包括类的成员变量,成员函数,和/或类的虚函数表的偏移量;
C3以步骤C2得到的C++类型信息作为标签,对图卷积网络进行训练。
优选地,所述编译工具为Microsoft C++Compiler。
实施例
步骤A,首先使用二进制分析工具(pharos)分析提取出基本事实,供Prolog推理使用。
基本事实具有以下类型。
基本事实示例:
步骤B),对于确定性的规则,直接使用Prolog推理分析得出结论。
步骤C),对于步骤B不能确定的结论(例如,有时候会出现一个method运用步骤B中的规则并不能确定它是一个类的构造函数,也不能确定它不是类的构造函数),则运用图卷积网络进行预测。
步骤C1,首先使用编译工具(Microsoft C++Compiler)编译用于训练的二进制代码,得到程序数据库(Program Data Base,PDB)文件。
步骤C2,解析程序数据库(PDB)文件,得到二进制文件中OO类型信息,包括C++类和它的成员变量,成员函数,和/或类的虚函数表的偏移量(如果存在的话)等。
PDB文件格式并未公开,但可以使用微软提供的cvdump工具来读取其中的信息。图2为待处理的源代码。
编译源代码得到二进制可执行文件,再使用反汇编工具分析,得到的汇编代码(CMFCApplication1Dlg::OnBnClickedOk()部分)如图3所示。
使用命令“cvdump-s”读取PDB文件得到的结果,如图4所示。
步骤C3,以步骤C2得到的C++类型信息作为标签,对图卷积网络进行训练。其中,标签类别如下表所示:
图卷积网络由结点和有向边组成。如下图5所示,结点共有两类,圆形表示基本事实的类型(比如类的方法、类的对象、偏移量等),矩形表示的是基本事实。基本事实在Prolog语言的表示形式为Fact(a,b,c),若类型与基本事实存在关系,则用一条有向边将它们连接起来。考虑到Fact(a,b,c)中a,b,c的顺序,需要给每条有向边加上权值,第n个参数的权值为n。
给类型贴上标签,训练好图卷积网络后,就可以用于预测了。
步骤D,因为图卷积网络处理得出的结论并不完全准确,所以还需要再额外设置一致性检查规则进行检查。若不能通过检查,则回到传统的Prolog假设推理得出结论,并再次进行一致性检查,直到通过检查为止。
对于本领域的技术人员来说,可以根据以上的技术方案和构思,给出各种相应的改变和变形,而所有的这些改变和变形,都应该包括在本发明权利要求的保护范围之内。
Claims (5)
1.一种基于图卷积神经网络的C++抽象信息恢复方法,其特征在于,所述方法包括:
A首先使用二进制分析工具提取出基本事实,推理使用;
B对于确定性的规则,直接推理得出结论;
C对于步骤B不能确定的结论,使用图卷积网络处理得出结论;
D对于用图卷积网络处理得出的结论,再额外设置一致性检查规则,若不能通过检查,则需要再从步骤C中取出第二个结论再进行尝试,直到可以通过推理得出一致性检查为止。
2.根据权利要求1所述的基于图卷积神经网络的C++抽象信息恢复方法,其特征在于,所述二进制分析工具为pharos。
3.根据权利要求1所述的基于图卷积神经网络的C++抽象信息恢复方法,其特征在于,所述推理的工具为Prolog。
4.根据权利要求1所述的基于图卷积神经网络的C++抽象信息恢复方法,其特征在于,所述步骤C中还包括:
C1首先使用编译工具编译用于训练的二进制代码,得到程序数据库文件;
C2解析步骤C1获得的程序数据库文件,得到程序中包含的所有C++类,包括类的成员变量,成员函数,和/或类的虚函数表的偏移量;
C3以步骤C2得到的C++类型信息作为标签,对图卷积网络进行训练。
5.根据权利要求4所述的基于图卷积神经网络的C++抽象信息恢复方法,其特征在于,所述编译工具为Microsoft C++Compiler。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911403402.5A CN111176623B (zh) | 2019-12-31 | 2019-12-31 | 一种基于图卷积神经网络的c++抽象信息恢复方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911403402.5A CN111176623B (zh) | 2019-12-31 | 2019-12-31 | 一种基于图卷积神经网络的c++抽象信息恢复方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111176623A true CN111176623A (zh) | 2020-05-19 |
CN111176623B CN111176623B (zh) | 2021-11-26 |
Family
ID=70654268
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911403402.5A Active CN111176623B (zh) | 2019-12-31 | 2019-12-31 | 一种基于图卷积神经网络的c++抽象信息恢复方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111176623B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951778A (zh) * | 2015-07-24 | 2015-09-30 | 上海华旌科技有限公司 | 基于语义网络的人脸识别专家*** |
US20170278135A1 (en) * | 2016-02-18 | 2017-09-28 | Fitroom, Inc. | Image recognition artificial intelligence system for ecommerce |
CN108630312A (zh) * | 2018-05-11 | 2018-10-09 | 北京诺道认知医学科技有限公司 | 一种高血压诊断规则库自动生成方法及装置 |
US20190042911A1 (en) * | 2017-12-22 | 2019-02-07 | Intel Corporation | System and method for learning the structure of deep convolutional neural networks |
CN109359090A (zh) * | 2018-08-27 | 2019-02-19 | 中国科学院信息工程研究所 | 基于卷积神经网络的文件碎片分类方法及*** |
US20190057036A1 (en) * | 2018-10-15 | 2019-02-21 | Amrita MATHURIYA | Programmable interface to in-memory cache processor |
US20190130720A1 (en) * | 2017-10-27 | 2019-05-02 | Benjamin Lui | Systems and methods for a machine learning baby monitor |
-
2019
- 2019-12-31 CN CN201911403402.5A patent/CN111176623B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951778A (zh) * | 2015-07-24 | 2015-09-30 | 上海华旌科技有限公司 | 基于语义网络的人脸识别专家*** |
US20170278135A1 (en) * | 2016-02-18 | 2017-09-28 | Fitroom, Inc. | Image recognition artificial intelligence system for ecommerce |
US20190130720A1 (en) * | 2017-10-27 | 2019-05-02 | Benjamin Lui | Systems and methods for a machine learning baby monitor |
US20190042911A1 (en) * | 2017-12-22 | 2019-02-07 | Intel Corporation | System and method for learning the structure of deep convolutional neural networks |
CN108630312A (zh) * | 2018-05-11 | 2018-10-09 | 北京诺道认知医学科技有限公司 | 一种高血压诊断规则库自动生成方法及装置 |
CN109359090A (zh) * | 2018-08-27 | 2019-02-19 | 中国科学院信息工程研究所 | 基于卷积神经网络的文件碎片分类方法及*** |
US20190057036A1 (en) * | 2018-10-15 | 2019-02-21 | Amrita MATHURIYA | Programmable interface to in-memory cache processor |
Non-Patent Citations (2)
Title |
---|
EDWARD J.SCHEWARTZ: ""Using Logic Programming to Recover C++ Classes and Methods from Compiled Executables"", 《CONFERENCE ON COMPUTER AND COMMUNICATIONS SECURITY》 * |
王红: ""基于Att_GCN模型的知识图谱推理算法"", 《计算机工程与应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111783100A (zh) * | 2020-06-22 | 2020-10-16 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
CN111783100B (zh) * | 2020-06-22 | 2022-05-17 | 哈尔滨工业大学 | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111176623B (zh) | 2021-11-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
US8539475B2 (en) | API backward compatibility checking | |
US8589888B2 (en) | Demand-driven analysis of pointers for software program analysis and debugging | |
CN107526625B (zh) | 一种基于字节码检查的Java智能合约安全检测方法 | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
US7779049B1 (en) | Source level optimization of regular expressions | |
Nie et al. | A framework for writing trigger-action todo comments in executable format | |
CN112905447B (zh) | 一种区块链虚拟机的测试方法和*** | |
Alrabaee et al. | On leveraging coding habits for effective binary authorship attribution | |
US20210004470A1 (en) | Automatic Generation Of Patches For Security Violations | |
CN112948828A (zh) | 一种二进制程序恶意代码检测方法、终端设备及存储介质 | |
CN113011461A (zh) | 通过知识学习增强基于分类的软件需求跟踪链接恢复方法及电子装置 | |
Küster | Systematic validation of model transformations | |
Gao et al. | APIfix: output-oriented program synthesis for combating breaking changes in libraries | |
CN111176623B (zh) | 一种基于图卷积神经网络的c++抽象信息恢复方法 | |
CN114064114A (zh) | 一种动态库生成方法及装置 | |
US20180253287A1 (en) | Method for translation of assembler computer language to validated object-oriented programming language | |
Escalada et al. | An efficient platform for the automatic extraction of patterns in native code | |
Börger | Why programming must be supported by modeling and how | |
CN117235746B (zh) | 一种基于多维ast融合检测的源代码安全管控平台 | |
CN114610320B (zh) | 一种基于llvm的变量类型信息修复与比较方法及*** | |
Johansen et al. | Dynamic structural operational semantics | |
Meng et al. | Refactoring Model of Legacy Software in Smart Grid based on Cloned Codes Detection | |
Negrini | A hybrid approach for automatic recognition of C++ objects in optimized binaries | |
Gibson | Waddle: A proven interpreter and test framework for a subset of the Go semantics |
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 |