【论文阅读笔记】Order Matters(AAAI 20)

news2024/11/15 21:58:41

个人博客地址

注:部分内容参考自GPT生成的内容

论文笔记:Order Matters(AAAI 20)

用于二进制代码相似性检测的语义感知神经网络

论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》(AAAI 2020)

笔记参考:AAAI-20论文解读:基于图神经网络的二进制代码分析 | 腾讯科恩实验室官方博客 (tencent.com)

动机

传统方法通常使用图匹配算法,但这些方法慢且不准确。尽管基于神经网络的方法取得了进展(如Gemini),但它们每个基本块都是以人工选择特征的低维嵌入来表示的,通常不能充分捕获二进制代码的语义信息。其次,节点的顺序在表示二进制函数时起着重要作用,而以往的方法并没有设计提取节点顺序的方法。

另外,在Related Work中提到,(Zuo et al 2018) 使用的NLP模型也有缺点。他们通过修改编译器,在每个生成的汇编块中添加一个基本块特殊注释器,该注释器为每个生成的块注释一个唯一ID。这样,可以将来自同一源代码片段编译的两个基本块视为等效。获取相似块对是一个有监督的过程,不同操作系统或硬件架构需要训练不同的模型

方法

提出的模型

模型的输入是二进制代码函数的控制流图(CFGs),其中每个块是带有中间表示的token序列。在语义感知上,模型使用BERT预训练接受CFG作为输入,并预训练token嵌入和块嵌入。在结构感知上,使用带GRU更新函数的MPNN来计算图的语义和结构嵌入 g s s g_{ss} gss。在顺序感知上,采用CFG的邻接矩阵作为输入,并使用CNN来计算图的顺序嵌入 g o g_{o} go。最后将它们连接起来,并使用一个MLP层来计算图嵌入 g f i n a l = M L P ( [ g s s , g o ] ) g_{final} =MLP([g_{ss}, g_{o}]) gfinal=MLP([gss,go])

image-20240121203627839

语义感知模块 (Semantic-aware Modeling)

使用BERT进行预训练,包括四个任务:掩码语言模型任务(MLM)、邻接节点预测任务(ANP)、块内图任务(BIG)和图分类任务(GC)。这些任务帮助模型提取CFG的token级别、块级别和图级别的语义信息。

image-20240121204851147

  • 掩码语言模型任务(MLM):通过在输入层掩盖token并在输出层预测它们来提取块内的语义信息。这是一个自监督任务,模型在训练过程中某些token会被隐藏,模型必须基于其他token提供的上下文来预测缺失的token。
  • 邻接节点预测任务(ANP):因为块的信息不仅与块本身的内容相关,还与其邻近的块相关,ANP任务旨在让模型学习这种邻接信息。它涉及提取图中所有相邻块对,并在同一图中随机抽样多个块对,以预测它们是否相邻。
  • 图内块任务(BIG):与ANP类似,BIG任务旨在帮助模型判断两个节点是否存在于同一图中。它涉及随机抽样可能在同一图中或不在同一图中的块对,并预测它们的关系。这有助于模型理解块与整个图之间的关系
  • 图分类任务(GC):使模型能够基于不同平台、架构或优化选项来分类块,特别是在不同编译条件下。GC任务要求模型区分由于这些不同条件而产生的图和块信息的差异
结构感知模块 (Structural-aware Modeling)

使用消息传递神经网络(MPNN)结合GRU(门控循环单元)更新函数,以提取CFG的全图语义和结构嵌入(the whole graph semantic & structural embedding) g s s g_{ss} gss

image-20240121215922638
  • 消息传递(Message Passing)

    • 公式(2)表示的是消息传递阶段。对于图中的每个节点v,它计算了节点v在时间t+1的消息 m v t + 1 m^{t+1}_v mvt+1。这个消息是通过聚合节点v的所有邻居节点w的信息(使用消息函数M)来得到的。这里, h v t h^t_v hvt h w t h^t_w hwt分别代表节点v和它的邻居节点w在时间t的嵌入,而 e v w e_{vw} evw是节点v和w之间边的特征。
    • 公式(5)中,论文使用了多层感知机(Multi-Layer Perceptron, MLP)对邻居节点w的嵌入 h w t h^t_w hwt进行处理。
  • 更新(Update)

    • 公式(3)表示的是更新阶段。在这一步中,节点v的新嵌入 h v t + 1 h^{t+1}_v hvt+1是通过更新函数U,结合节点v在时间t的嵌入和它在时间t+1收到的消息来计算的。

    • 公式(6)说明了论文中的更新函数是通过GRU实现的,GRU考虑了节点的历史信息 h v t h^t_v hvt和新的消息 m v t + 1 m^{t+1}_v mvt+1,来学习图的时序信息。

  • 读出(Readout)

    • 公式(4)定义了读出函数R,它计算 g s s g_{ss} gss。这是通过对图中所有节点v的最终嵌入 h v T h^T_v hvT进行聚合来实现的。
    • 公式(7)中,读出函数是通过对所有节点的初始嵌入 h v 0 h^0_v hv0和最终嵌入 h v T h^T_v hvT使用多层感知机(MLP)并进行求和来实现的。这里 h v 0 h^0_v hv0是由BERT预训练得到的初始块嵌入。
image-20240121220012016
顺序感知模块 (Order-aware Modeling)

通过卷积神经网络(CNN)处理邻接矩阵,以提取CFG节点的顺序信息。

image-20240122001434356

如图,CNN能捕获从(a)到(b)的变化信息,当 CNN 看到大量训练数据时,它具有平移不变性(translation invariance)

对于(b)->©,与图像放缩类似,在看到足够多的训练数据后,CNN 也可以学习这种伸缩不变性(scale invariance)。

由于二进制代码函数在不同平台上编译时节点顺序通常不会大改变,CNN能够处理由此引起的添加、删除或交换节点等小变化,优势如下:

  1. 使用CNN直接在邻接矩阵上的操作相比于传统的图特征提取算法要快得多。
  2. CNN可以处理不同大小的输入,这允许模型处理不同大小的图而无需预处理,如填充或裁剪。

使用具有 3 个残差块的 11 层 Resnet,所有的feature map大小均为3*3,最后使用最大池化层来计算图的顺序嵌入 g o = M a x p o o l i n g ( R e s n e t ( A ) ) g_o = Maxpooling(Resnet(A)) go=Maxpooling(Resnet(A))

效果

数据集:

  • 任务1是跨平台二进制代码检测,目的是确认相同的源代码在不同平台上编译成的CFG是否具有较高的相似性得分。

    • 与Gemini模型类似,使用孪生网络(siamese network)来减少损失,并使用余弦距离来计算图的相似性。
  • 任务2是图分类,对图嵌入进行优化选项分类

    • 使用softmax函数并选择交叉熵作为损失函数

由于模型具有三个组成部分:语义感知、结构感知和顺序感知,因此进行了不同的实验来找出每个部分的效果。

image-20240122012435397image-20240122012444904

表中:

  • 第一个分块是整体模型,包括graph kernel,Gemini以及MPNN模型。

  • 第二个分块是语义感知模块的对比实验,分别使用了word2vec[5],skip thought[6],以及BERT,其中BERT2是指原始BERT论文中的两个task(即MLM和ANP),BERT4是指在此基础上加入两个graph-level task(BIG和GC)。

  • 第三个分块是对顺序感知模块的对比实验,基础CNN模型使用3层CNN以及7、11层的Resnet,CNN_random是对训练集中控制流图的节点顺序随机打乱再进行训练,MPNN_ws是去除控制流图节点中的语义信息(所有block向量设为相同的值)再用MPNN训练。

  • 最后是本文的最终模型,即BERT (4 tasks) + MPNN + 11layer Resnet。

MPNN (即加上结构感知模块)在所有数据集上都优于 Gemini,这是因为 GRU 更新函数可以存储更多信息,因此在所有其他模型中都使用 MPNN。

基于NLP的块预训练特征比手动特征好得多,并且顺序感知模块在两个任务上也有很好的结果。

在跨平台二进制代码检测任务中,语义信息比顺序信息更有用。不同的CFG可能具有相似的节点顺序,因此仅使用节点顺序信息是不够的。

最后,最终模型优于所有其他模型。

分开观察各个模块的有效性

image-20240122014527423 image-20240122014536191

“语义感知(Semantic-aware)”:

  • 表中的第二块显示,BERT模型的性能优于word2vec和skip thought模型。这是因为BERT在预训练过程中不仅考虑了块级别的预测,还包括了token级别的预测,并且双向Transformer结构能够提取更多有用的信息。
  • 当BERT模型加入了BIG和GC两个图级任务后,性能有了1%到2%的提升,表明引入图级任务对预训练是有益的。
  • 图6展示了4个控制流图(CFG)的块嵌入可视化,使用K-means算法将预训练后的块嵌入分成四个类别,每个类别用不同颜色表示。从图中可以观察到,同一控制流图中的块倾向于拥有相同的颜色,而不同控制流图的主要颜色也不同。

“顺序感知(Order-aware)”:

  • 表中的第三块显示,基于CNN的模型在两个任务上都取得了良好的效果,其中11层的Resnet略优于3层的CNN和7层的Resnet。
  • 与不含语义信息的MPNN(MPNN_ws)相比,基于CNN的模型表现出更好的性能。
  • 节点顺序被随机打乱后,CNN的效果显著下降,这证明CNN模型确实能够学习到图的节点顺序信息。
  • 图7展示了两个由相同源代码编译而成的CFG变化的例子,尽管左图的节点3在右图中被分成了节点3和4,但其他节点的顺序和边的连接方式保持不变。通过CNN模型的计算,这两个CFG的余弦相似度为0.971,并且在整个平台中的代码检测排名中位列第一。这意味着CNN模型能够从邻接矩阵中有效提取控制流图的节点顺序信息,与假设相符。

结论

这篇论文提出了一个新颖的二进制代码图学习框架,包含了语义感知组件、结构感知组件和顺序感知组件。作者观察到,语义信息和节点顺序信息对于表示控制流图(CFGs)都非常重要。为了捕捉语义特征,作者提出了针对CFGs块的BERT预训练,包括两个原始任务MLM和ANP,以及两个额外的图级任务BIG和GC。然后作者使用MPNN来提取结构信息。作者进一步提出了一个基于CNN的模型来捕捉节点顺序信息。作者在两个任务上使用了四个数据集进行了实验,实验结果表明本文提出的模型超越了当时最先进的方法。

附:部分基础概念解释

由于是第一次精读深度学习相关的技术论文,我翻看了很多基础概念

MLM和NSP

MLM(Masked language model)和NSP(next sentence prediction)是BERT模型中两个重要的训练任务,它们共同帮助BERT学习理解语言的深层次结构和关系。以下是对这两个任务的具体介绍:

掩码语言模型任务(MLM)

  • 目的:MLM旨在使模型能够更好地理解语言本身的规律和结构。它通过在文本中随机掩盖一些单词(即使用特殊的“[MASK]”标记替换),然后要求模型预测这些掩盖单词的原始值来实现。
  • 训练过程:在训练时,BERT模型会尝试根据上下文中的其他单词来猜测被掩盖的单词是什么。例如,在句子“The cat sat on the [MASK]”中,模型需要预测被掩盖的词是“mat”。
  • 作用:这种训练方式使得BERT能够有效地学习单词的上下文关系和语义信息,从而更好地理解语言。

下一个句子预测任务(NSP)

  • 目的:NSP的目标是使模型能够理解句子之间的关系。这对于很多NLP任务(如问答系统、自然语言推理等)至关重要。
  • 训练过程:在训练时,模型被给予一对句子,并需要判断第二个句子是否在原文中紧跟在第一个句子之后。训练集由两种类型的句子对组成:一种是真实的相邻句子对,另一种是随机组合的非相邻句子对。
  • 作用:通过这种方式,BERT学习理解句子之间的逻辑和关系,增强对文本的整体理解能力。
消息传递神经网络(MPNN)

消息传递神经网络(Message Passing Neural Network)是一类图神经网络,它通过在图的节点之间交换信息来学习节点的表示。它们基于以下步骤工作:

  1. 消息传递:每个节点接收其邻居节点的信息,并根据这些信息生成“消息”。
  2. 聚合:将所有接收到的消息聚合成单个表示,这可以通过不同的函数实现,如求和、求平均或更复杂的操作。
  3. 更新:使用聚合的信息来更新节点的状态。

MPNN的核心思想是通过迭代这些步骤来精炼每个节点的表示,从而捕捉图的结构特征和节点之间的关系。

门控循环单元(GRU)

GRU(gated recurrent unit)是循环神经网络(RNN)的一种变体,用于处理序列数据。与传统的RNN相比,GRU通过引入门控机制来解决梯度消失和梯度爆炸的问题,使得网络能够捕捉长距离依赖关系。GRU包含两个门:

  1. 更新门:决定状态信息应该如何更新。
  2. 重置门:决定过去的状态信息在计算新状态时应保留多少。

在每个时间步,GRU可以选择保留旧状态的信息并融入新输入的信息,这使得它在处理具有复杂依赖结构的数据时非常有效。

多层感知机 (MLP)
  • 定义:多层感知机是一种基础的人工神经网络,由一个输入层、若干隐藏层和一个输出层组成。每一层由多个神经元组成,相邻层之间的神经元通过权重连接。
  • 功能:MLP主要用于分类和回归问题,能够识别和建模输入数据中的非线性关系。
  • 工作原理:在MLP中,数据从输入层进入,每个神经元对输入进行加权求和,再加上一个偏置项,最后通过激活函数进行非线性转换。这个过程在每个隐藏层中重复进行,直到输出层。在输出层,数据被转换为最终的输出格式(如分类标签或回归值)。
卷积神经网络 (CNN)
  • 定义:卷积神经网络是一种深度学习网络,特别适用于处理具有网格结构的数据,如图像(2D网格)和声音(1D网格)。
  • 功能:CNN广泛应用于图像和视频识别、图像分类、医学图像分析、自然语言处理等领域。
  • 工作原理:CNN通过一系列卷积层、池化层和全连接层处理数据。卷积层使用卷积核提取空间特征,池化层(如最大池化)则减小特征维度并提供一定程度的位置不变性。最后,全连接层将提取的特征用于分类或回归任务。
最大池化 (MaxPooling)
  • 定义:最大池化是一种池化操作,常在卷积神经网络中使用,用于减小特征图的空间尺寸。
  • 功能:最大池化通过降低参数数量和计算量来减少过拟合,同时保持重要特征。
  • 工作原理:最大池化通过在输入特征图的不同区域上应用一个固定大小的窗口,并从每个窗口中选择最大值来实现。这样做可以提取最显著的特征,并且对小的位置变化保持不变性。
残差网络 (ResNet)
  • 定义:ResNet是一种深度卷积神经网络,通过引入残差学习框架来易于优化,并能够构建更深的网络。
  • 功能:ResNet在图像识别、分类和其他计算机视觉任务中表现优异。
  • 工作原理:在ResNet中,残差块的引入允许输入跳过一些层。每个残差块学习输入和输出的残差(差异),而不是直接学习输出。这帮助网络学习恒等映射,解决了深层网络中的梯度消失问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1643557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为对于商机的判断工具(收藏):PPVVC工具

来自《LTC与铁三角∶从线索到回款》一书中不错的收藏: 企业的合同商务部把这个模型开发为一个工具,基于 痛点( Pain )、权力( Power )、构想( Vision )、价值 ( Value …

6层板学习笔记2

说明:笔记基于6层全志H3消费电子0.65MM间距BGA 67、多层板的电源建议直接大面积铺铜,不建议走线,铺铜充分满足其载流能力 68、凡亿推荐表层1OZ的铜厚线宽20MIL能承载1A的电流,内层0.5OZ的铜厚线宽为40MIL能承载1A的电流,过孔直径20MIL(0.5MM)能承载1A左右的电流,实际设…

《QT实用小工具·五十五》带有标签、下划线的Material Design风格输入框

1、概述 源码放在文章末尾 该项目实现了一个带有标签动画、焦点动画、正确提示、错误警告的单行输入框控件。下面是demo演示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef LABELEDEDIT_H #define LABELEDEDIT_H#include <QObject> #include <QWidget>…

FTP和NFS

一、FTP 1.FTP原理 FTP&#xff08;file Transfer Protocol&#xff0c;文件传输协议&#xff09;&#xff0c;是典型的C/S架构的应用层协议&#xff0c;由客户端软件和服务端软件两个部分共同实现文件传输功能&#xff0c;FTP客户端和服务器之间的连接时可靠的&#xff0c;面…

华为OD机试 - 执行任务赚积分 - 动态规划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

JVM六种常见的垃圾回收器-重点含CMS过程详解

一、jdk 1.8 及其之前的分代模型: 堆内存结构必须熟悉&#xff1a;&#xff08;垃圾回收&#xff0c;性能调优常用&#xff09; 过程简单分析&#xff1a; ①年轻代和老年代在堆内存中的占比默认 1 &#xff1a;2 ②年轻代又分为两个区&#xff0c;伊甸园区(Eden)和幸存区(S0和…

给Ollama套个WebUI,方便使用

Ollama 基本的安装使用参考前文 https://xugaoxiang.com/2024/05/01/ollama-offline-deploy/&#xff0c;前文使用的模型是 llama2&#xff0c;本篇将使用 llama3&#xff0c;因此在启动时&#xff0c;命令是 ollama run llama3。 Ollama Llama3 Llama3 是 Meta 发布的大语言模…

双向链表的简单实现

目录 1. 双向链表的结构 2.双向链表的实现 2.1 初始化 2.2 增 2.2.1 尾插 ​编辑 2.2.2 头插 3.删 2.3.1 尾删 2.3.2 头删 4. 找 5.任意位置插入 5.1 任意位置前插入 ​编辑 5.2 任意位置后插入 ​编辑 6. 任意位置删除 ​编辑 7. 改 8. 链表的销毁 3. 顺序…

基于JSP的酒店客房管理系统(二)

目录 第二章 相关技术介绍 2.1 Jsp的简介 2.2 sql server 2005 的简介 第三章 系统的分析与设计 3.1 系统需求分析 1&#xff0e;理解需求 2&#xff0e;需求分析 3.2开发及运行环境 3.3功能模块的设计 3.3.1 设计目标 3.3.2 客房管理系统前台的设计 3.3.3 操作员管…

牛角源码 | 【高级版】威客点赞悬赏任务源码/赚钱系统抖音快手火山悬赏任务站

点赞任务平台 无BUG完美自营版&#xff01; 霸屏天下赚钱系统源码/抖音快手火山悬赏任务平台 全新ui界面修复升级版任务系统&#xff0c;非市场垃圾版本。非常适合运营&#xff01; 下载地址&#xff1a;【高级版】威客点赞悬赏任务源码/赚钱系统抖音快手火山悬赏任务站 - 牛…

深入解析I2C协议:通讯简化之道

在现代电子系统中&#xff0c;组件间的通信是必不可少的。而I2C协议&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;由Philips Semiconductor&#xff08;现为NXP Semiconductors&#xff09;在1980s初期发明&#xff0c;已成为一种广泛使用的串行通信协议。其设…

cocos=》 预乘、混合(黑边、白色)

简介 预乘&#xff0c;指的是在数据提交给GPU之前&#xff0c;就对纹理的RGB分量与alpha值进行计算。 预乘计算 结果颜色 源颜色值 目标颜色值 * (1 - 源 alpha 值) result source.RGB dest.RGB * (1 - source.A); 对应的颜色混合函数设置为 gl.blendFunc(gl.ONE, gl.…

【动态规划】投资问题

本文利用markdown基于https://blog.csdn.net/qq_41926985/article/details/105627049重写,代码部分为本人编辑 代码要求 应用动态规划方法&#xff0c;求解投资问题&#xff0c;实现下面的例子。 #define MAX_N 4 //最大投资项目数目 #define MAX_M 5 //最大投资钱数(万元) /…

文献阅读:SPACEL:基于深度学习的空间转录组结构表征

文献介绍 「文献题目」 SPACEL: deep learning-based characterization of spatial transcriptome architectures 「研究团队」 瞿昆&#xff08;中国科学技术大学&#xff09; 「发表时间」 2023-11-22 「发表期刊」 Nature Communications 「影响因子」 16.6 「DOI」 10.…

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2

ICode国际青少年编程竞赛- Python-1级训练场-基础训练2 1、 a 4 # 变量a存储的数字是4 Dev.step(a) # 因为变量a的值是4&#xff0c;所以Dev.step(a)就相当于Dev.step(4)2、 a 1 # 变量a的值为1 for i in range(4):Dev.step(a)Dev.turnLeft()a a 1 # 变量a的值变为…

[C++初阶]string类

1. 为什么要学习string类 1.1 C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(面向对象)的思想&…

JAVA中的lambda表达式(无废话)

Lambda表达式是Java SE 8中一个重要的新特性。 它是一种语法形式&#xff0c;可以代码书写更加精炼。 用人话说就是把原来的代码变得很短。 这部分的内容是非常简单的。 一、函数式接口 想要理解lambda表达式&#xff0c;首先要了解函数式接口。 关于接口的知识请查阅&am…

浏览器中不能使用ES6的扩展语法...报错

浏览器大多数已经支持ES6&#xff08;ECMAScript 2015&#xff09;的扩展语法&#xff08;...&#xff09;&#xff0c;包括Chrome、Firefox、Safari和Edge等。然而&#xff0c;如果你在某些浏览器中遇到无法使用扩展语法的问题&#xff0c;可能是由以下原因导致的&#xff1a;…

ngrinder项目-本地调试遇到的坑

前提-maven mirrors配置 <mirrors><!--阿里公有仓库--><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</ur…

每周打靶VulnHub靶机-DOUBLETROUBLE_ 1

doubletrouble: 1靶机传送门 get flags 靶机名为 双重麻烦&#xff0c;可能会繁琐一点 1.信息搜集 使用nmap进行域内存活主机扫描继续扫描其开放端口开放了22(ssh)、80(http)端口使用浏览器访问其80端口是一个登录页面&#xff0c;继续扫描其 敏感目录dirsearch -u [http://19…