破局传统算法痛点,腾讯安全首提基于跨模态检索的二进制代码-源代码匹配
整理 | 高卫华
出品 | AI科技大本营
头图 | CSDN付费下载自视觉中国
近日,在NeurIPS 2020正式发布的论文入选名单中,腾讯安全科恩实验室聚焦解决二进制安全问题的《CodeCMR: Cross-Modal Retrieval For Function-Level Binary Source Code Matching》,凭借首次提出基于AI的二进制代码/源代码端到端匹配算法的创新研究入选。
该论文首次提出了基于AI的二进制代码/源代码端到端匹配算法,与传统算法相比,准确率大幅提升,并为逆向分析领域提供了新的思路,可提升工业部署方面的效率。
目前,该论文成果已在腾讯安全科恩实验室研发的代码检索工具BinaryAI实现了落地应用。
论文背景
在AAAI 2020中,腾讯安全科恩实验室提出了一项利用图神经网络解决二进制程序函数相似性分析问题的技术,得到广泛关注。
在此基础上,科恩实验室将研究方向扩展到二进制代码与源代码的交叉领域,进一步实现其在AI+安全新兴方向中的全新探索与突破。
二进制代码-源代码匹配是信息安全领域的重点研究方向之一。在给定二进制代码的情况下,逆向分析的研究人员希望可以找到它对应的源代码,从而提升逆向分析的效率和准确率。
B2SFinder和BinPro等传统算法提取源代码和二进制代码的字符串、立即数等特征进行匹配,而函数级别的源代码与二进制代码的特征非常少,匹配准确率不高。另外,要设计合适的特征,需要大量的专家经验。
图1展示了一个函数的源代码与二进制代码,从中可看出,除了字符串和立即数特征,代码中隐藏的语义特征也很关键。
因此,该论文设计了一种端到端的模型,可以自动提取代码间的语义特征,从而提升匹配的准确率。
图1 - 二进制代码与对应的源代码
CodeCMR框架介绍
二进制代码-源代码间的检索任务中,把两种代码当作两个模态输入,可类比到图文互搜等跨模态检索场景。
对此,科恩实验室基于AI设计了CodeCMR框架,以解决传统算法匹配准确率不高的问题。
计算最终向量前,两个模态之间没有信息传递,在实际应用时可预先计算向量,节省线上计算时间以及存储空间。
图2 - CodeCMR整体框架
整体结构
模型输入中有源代码特征和二进制代码特征两部分,其中源代码特征是字符级别的源代码、从源代码中提取的字符串和立即数,二进制代码特征是控制流图、二进制代码的字符串和立即数。
CodeCMR框架能够以不同模型对源代码特征和二进制代码特征两大模块的语义、字符串、立即数等三大输入特征进行向量计算,并以在基础上用拼接+BatchNorm方式实现高效匹配转化,最后使用triplet loss作为损失函数。
语义模型
CodeCMR框架中,字符级源代码使用DPCNN模型,二进制控制流图使用端到端的GNN模型。
在函数级别,字符级源代码的输入通常在4096以上,DPCNN的效果远优于TextCNN和LSTM。另外,在语义特征识别中,端到端的GNN模型表现出更强的健壮性,可帮助破解传统算法高专家经验的痛点。
图3 - 源代码与二进制代码的语义模型
立即数、字符串模型
源代码和二进制代码的字符串和立即数不完全相同,需要设计模型进行匹配。
对于立即数,科恩实验室设计了Integer-LSTM,其输入有integer token和integer number两个。integer number作用在LSTM的输入门和输出门,以控制信息流动。
对于字符串,其采用分层模型,先通过LSTM模型得到每个字符串的向量,再使用sum pooling方法得到字符串集合的向量。
Norm weighted sampling
在两大模块的向量采样阶段,Norm weighted sampling 与随机采样和distance weighted采样方法相比,表现出更好的匹配效果。
distance weighted sampling采样方法可解决hard样本在训练早期收敛到局部极小值的问题,在分布中选择各个概率的样本。
在此基础上,科恩实验室又提出改进,增加超参数s,帮助调整概率的分布,从而适应不同的任务和数据集。
这种融合训练的方法可大幅提升二进制代码/源代码的匹配准确率,从而提升工业部署效率。
实验结果
与传统算法仅提取字符串、立即数特征进行匹配的做法不同,CodeCMR模型能够实现对代码间隐藏语义特征的自动提取,从而达到提升二进制代码-源代码跨模态检索匹配效率的目的。
从实验结果中可以看出,在语义模型中,DPCNN+HBMP取得最优效果,表示在二进制侧采用端到端训练优于预训练的node embedding;此外,与随机采样、distance weighted采样相比,norm weighted的采样效果更好。
表1 - 实验结果
train/valid loss曲线也证明了这一点,当s=5时,norm weighted sampling的train loss更高,valid loss更低。
图4 - 训练与验证的损失函数曲线
论文链接:
https://keenlab.tencent.com/zh/whitepapers/neurips-2020-cameraready.pdf
更多精彩推荐
隐私数据在隐私AI框架中的安全流动
比Python 3.8快20%,Pyston v2正式发布
一口气看完45个寄存器,CPU核心技术大揭秘
在吗?我要讲件大事了,你绝对不知道CSDN公众号还有这个功能!错过后悔!
离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员
相关文章:

DataGrid删除确认及Item颜色交替
有时候我们需要在删除DataGrid中Item相对应的数据时,需要弹出一个确认对话框来提示使用者,其实这个功能非常简单,下面的代码可以在DataGrid的Item 中产生颜色交替的效果。 private void dg_ItemDataBound(object sender, DataGridItemEve…

SharePoint 2010 自定义日志
7/6/2012 How to log to the SharePoint ULS Logs(Clean Debugging and Error Logging broken down into steps) By: Philip Stathis 原文地址 http://www.thesharepointblog.net/Lists/Posts/Post.aspx?ID122 This article is meant to introduce a simple error logging rou…

使用Bot Service创建Bot Framework
创建Bot Service:进入至Azure控制台中,新建Bot Service,如不知道Bot Service在哪个选项中,可以先查找Bot Service再创建 在弹出的查询结果中,选择Bot Service,点击后会进入至下一个步骤 在弹出的Bot Servic…

[转]大三下,我们该做什么?一篇被转万次的日志,你值得一看
大三下,我们该做什么?一篇被转万次的日志,你值得一看 还有几个月,你就不得不参加考研、就业大军了,你做好准备了么?你知道211学校、985学校和非211、985的主要区别么?找工作机会一定是不均等的。…

如何在DataGrid里面产生滚动条而不滚动题头
作者Blog:http://blog.csdn.net/cuike519/ 我们在开发的时候一定遇到,使用DataGrid的时候由于不想分页(数据没有那么多)但是又显示不在一页里面,此时我们希望在DataGrid里面出现一个滚动条,可以上下滚动Dat…
“小霸王学习机”再现?树莓派400正式发布,售价70美元
整理 | 高卫华出品 | AI科技大本营头图 | CSDN 下载自视觉中国11月2日,树莓派 4 的制造商正式推出了树莓派 400,这是一款集成了 4GB 内存树莓派 4 的紧凑型键盘。有了树莓派 400,只需使用其两个微型HDMI端口之一,将其插入电视或显…

display的block、none、inline属性及解释
常会用到display对应值有block、none、inline这三个值 参数: block :块对象的默认值。用该值为对象之后添加新行。之前也添加一行。 none :隐藏对象。与visibility属性的hidden值不同,其不为被隐藏的对象保留其物理空间 inline :内联对象的默认值。用该值…

datagrid分页问题(前后跳页)《控件版》
在ASCX中写的。 在CSDN上看了很多的DATAGRID分页问题,当然DATAGRID有自己的分页项,功能是很有限的,我也在CSDN上看了很多自己分页的代码,发现都是用C#写的,我写了一个用ASP。NET中VB语言写的。以下代码供大家参考。 HT…

F5第一个10000台
F5中国第一个累积销售10000台,花了整整9年时间。下一个累积销售10000台需要多少时间,5年,3年,甚至更短的时间?让我们拭目以待。转载于:https://blog.51cto.com/f5555/1126095

java内存溢出的情况解决方法
内存溢出虽然很棘手,但也有相应的解决办法,可以按照从易到难,一步步的解决。 第一步,就是修改JVM启动参数,直接增加内存。这一点看上去似乎很简单,但很容易被忽略。JVM默认可以使用的内存为64Mÿ…
DataGrid基于Access的快速分页法
DataGrid基于Access的快速分页法撰文/ 黎波DataGrid是一个功能非常强大的ASP.NET Web服务器端控件,它除了能够方便地按各种方式格式化显示表格中的数据,还可以对表格中的数据进行动态的排序、编辑和分页。使Web开发人员从繁琐的代码中解放。实现DataGrid…

urlrewrite使用小结
urlrewrite顾名思义,就是对URL进行重写,用户得到的全部都是经过处理后的URL地址,这样做我觉得好处有三:一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话…
性能超越图神经网络,将标签传递和简单模型结合实现SOTA
译者 | 刘畅出品 | AI科技大本营头图 | CSDN付费下载自视觉中国图神经网络(GNNs)是图学习中一种主流的技术。然而,对于GNN为什么在实际使用中很成功以及它们是否是优异性能所必需的技术,了解相对较少。本文展示了许多标准的传导节…

模仿VIMD的模式的简化代码示例
按numpad0来切换模式,按t显示不同的结果; Numpad0:: tfmode:!tfmode aaa:(tfmode1?"AAAA":"BBBB") SplashImage Off SplashImage, "",X500 Y500 W200 B fs10 CT00FFFF CW000000,%aaa%, , 切换模式提示 WinSet, Tr…

DataGrid连接Access的快速分页法(1)——需求与现状
作者:黎波一、需求分析 DataGrid是一个功能强大的ASP.NET Web服务器端控件,它除了能够按各种方式格式化显示数据,还可以对数据进行动态的排序、编辑和分页。大大减轻了广大Web程序员的工作量。实现DataGrid的分页功能一直是很多入门者感到棘手…
CSDN公众号新功能上线,居然还能搜出小姐姐???
为了给各位打工人更好的搜索体验CSDN总是在学习新技能这次CSDN公众号又给大家带来了一项全新的搜索技能在CSDN旗下的公众号内回复消息就能自动回复想搜索的内容啦小编来给大家演示一下,在公众号内输入“mysql安装教程”,就能得到CSDN全站内关于mysql安装…
p2v、v2v 转换-windows篇
问题:如何把 xenserver的虚拟机转成Esxi的虚拟机 如何把物理机转成Esxi的虚拟机答案:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓首先介绍一下实验环境。一台xenserver主机上两台虚拟机 win03和win08 转到Esxi5.0的一台主机上。Esxi5.0在某个…
WebViewJavascriptBridge原理解析
基本说明 我们的项目是一个OC与javascript重度交互的app,OC与javascript交互的那部分是在WebViewJavascriptBridge的github地址的基础上修改的,WebViewJavascriptBridge应该是当前最流行最成功的OC与Web交互实现了。最近看了一下他的实现原理,…
DataGrid连接Access的快速分页法(2)——SQL语句的选用(升序与降序)
作者:黎波 一、相关概念 在 ACCESS 数据库中,一个表的主键(PRIMARY KEY,又称主索引)上必然建立了唯一索引(UNIQUE INDEX),因此主键字段的值是不会重复的。并且索引页依据索引列的值…
从谷歌AutoML到百度EasyDL,AI大生产时代,调参师不再是刚需
出品 | AI科技大本营头图 | 付费下载于视觉中国2018 年,Google Cloud 宣布将 AutoML 作为机器学习产品的一部分。至此,AutoML 开始进入大众的视野。 实际上,2013 年AutoWEKA的发布可以算作AutoML的开端;2014 年,ICML开…

Python 语法小知识
为什么80%的码农都做不了架构师?>>> 序列解包 将含有多个值的序列解开,然后把值存放到变量中,当函数或者方法返回元组时这个特性很有用,可以把返回的序列值直接赋值给变量,在序列解包时等号两边的元素个数…

CSS布局之-水平垂直居中
对一个元素水平垂直居中,在我们的工作中是会经常遇到的,也是CSS布局中很重要的一部分,本文就来讲讲CSS水平垂直居中的一些方法。另外,文中的css都是用less书写的,如果看不懂less,可以把我给的demo链接打开&…

DataGrid连接Access的快速分页法——动态生成SQL语句
作者:黎波using System;using System.Text;namespace Paging{/// <summary>/// FastPaging 的摘要说明。/// </summary>public class FastPaging {private FastPaging() {}/// <summary>/// 获取根据指定字段排序并分页查询的 SELECT 语句。/// &…
一文读懂机器学习“数据中毒”
作者 | Ben Dickson翻译 | 火火酱~出品 | AI科技大本营头图 | 付费下载于视觉中国在人类的眼中,下面的三张图片分别展示了三样不同的东西:一只鸟、一只狗和一匹马。但对于机器学习算法来说,这三者或许表示同样的东西:一个有黑边的白色小方框。…

chartee
2019独角兽企业重金招聘Python工程师标准>>> 一个绘制图表的类库,支持绘制股票的K线图,还可以绘制曲线、柱状图等等。 Code4App编译测试,测试环境:Xcode 4.3, iOS 5.0。 转载:http://www.adobex.com/ios/source/detail…

C语言存储类关键字
1、static这个关键字有三种用法:(1)第一种是用来修饰局部变量,使之成为静态局部变量;静态局部变量存储在数据段/bss段中,作用域是代码块作用域,生命周期是程序生命周期,链接属性是无…

显示DataGrid序号的一个适用的方法
作者Blog:http://blog.csdn.net/wangj2001/如果数据量小的话没有问题,一旦数据量大,显示特别慢,还有个缺点就是拖动行高时行号不随行高的变化而变动,出现是几个序号在一个单元格中显示。我自己对他们的算法进行总结&am…

Integer的自动缓存
2019独角兽企业重金招聘Python工程师标准>>> Interger装箱有个自动缓存的概念 Integer a 100;Integer b 100;Integer c 200;Integer d 200;System.out.println(a b); //trueSystem.out.println(c d); //false Integer是对象,比较的是对象在内存中…
崩溃!双十一第 4 天,某互联网公司黄了?
01打折这么狠是不是要黄了??今年的双十一,开始地比以往早一些!不知道各位程序员小哥哥们的战绩如何,是不是已经被一轮又一轮的定金、尾款,折腾到数学细胞耗尽?付款了也不清楚自己有没有真正的「…