当前位置: 首页 > news >正文

论文调研_BCSD综述论文调研

论文名称  发表期刊       发表时间发表单位
A Survey of Binary Code SimilarityACM Computing Surveys2022年IMDEA

1. BCSD基础

引入二进制代码基本概念、描述编译流程的扩展性以及现实中的多样性变换,明确二进制代码相似性检测(BCSD)定义。

1.1 基础概念引入:二进制代码的生成

二进制代码是指通过编译过程生成、可由CPU直接执行的机器码。标准的编译流程以程序的源代码文件为输入,结合所选的编译器优化级别特定平台(由架构、字长和操作系统定义),生成目标文件。这些目标文件随后会被链接为一个二进制程序,即独立的可执行文件或库文件。一般编译流程

1.2 扩展编译流程:现实世界中的二进制代码

二进制代码相似性检测方法通常涉及一个扩展的编译流程,如上图所示,在标准编译流程的基础上增加了两个可选步骤:源代码变换二进制代码变换。这两类变换通常是语义保持的,即不会改变程序的功能,最常用于代码混淆,以阻碍对分发的二进制程序的逆向工程。扩展编译流程

1.3 BCSD定义:同源二进制代码相似性捕获

同一份源代码在不同编译配置下可能生成不同的二进制表示。如上图所示,开发人员可以修改任意灰色模块,从而在不改变程序语义的前提下,生成多种不同的二进制程序。(1)这些差异可能源于标准编译过程中的变动,例如为了提高程序性能,开发人员可能调整编译器的优化级别,或更换不同的编译器,尽管源代码未变,但生成的二进制代码将随之变化。此外,开发人员也可能更换目标平台以适配不同的硬件架构,而若新平台使用不同的指令集,则生成的二进制代码可能差异巨大。(2)开发人员还可以主动应用混淆技术,使相同源代码生成多种语义等价但结构多样的变体。理想情况下,二进制代码相似性检测方法应能识别这些因变换而产生的不同二进制代码之间的相似性,其鲁棒性正体现为其应对各类编译和混淆变换的能力,即在这些变换存在的情况下依然能够准确检测代码相似性。

1.4 BCSD应用

补丁检测:补丁生成与分析是最早期且最常见的二进制代码相似性应用之一,其核心是对比同一程序的两个连续或相近版本,识别新版本中所做的补丁修改。这类应用在厂商未公开补丁细节的专有软件中尤为重要。通过差异分析生成的二进制补丁通常体积较小,可用于高效分发和程序更新。此外,该技术还可用于自动识别修复漏洞的安全补丁、对这些补丁进行深入分析,甚至可辅助生成适用于旧版本中未修复漏洞的利用代码。

漏洞检测:二进制代码相似性最广泛的应用之一是漏洞搜索,即在大型二进制代码库中查找已知漏洞对应的相似代码。由于代码重用现象普遍,存在缺陷的代码片段可能出现在多个程序中,甚至在同一个程序的不同位置重复出现。因此,在发现某个漏洞后,识别可能重用该缺陷代码的相似片段,对于漏洞扩散分析与补丁生成具有重要意义。漏洞搜索方法通常以存在缺陷的二进制代码片段作为查询输入,在目标代码库中寻找功能相似的片段。该问题的一个变体是跨平台漏洞搜索,目标代码可能针对不同平台(如 x86、ARM、MIPS)编译,从而对相似性检测方法的跨平台鲁棒性提出更高要求。

恶意软件分析:在二进制代码相似性检测中,恶意软件分析是一个重要的应用方向,主要包括以下三类:恶意软件检测:通过将待检测的可执行文件与已知恶意软件样本进行比对,若相似度较高,则该样本很可能是某一已知恶意家族的变体。相比于依赖系统或API调用行为的传统方法,BCSD更关注从代码层面识别语义相似性;恶意软件聚类:进一步将多个已知恶意样本按照二进制代码相似性划分为不同家族,每个家族通常包含同一恶意程序的不同版本及其多态变体(如加壳版本);恶意软件演化追踪:在已知属于同一恶意程序的样本集上构建版本演化图,图中每个节点代表一个程序版本,边表示其演化关系。由于恶意软件通常缺乏明确版本标识,演化追踪对于揭示其变种结构和传播路径具有重要意义,且通常依赖聚类结果作为前置步骤以确保分析的准确性。

许可证合规性分析:二进制代码相似性可用于识别对原告程序的未授权代码重用,例如源代码被窃取、二进制代码被直接复用、专利算法在未授权情况下被重新实现,或违反开源许可证(如将GPL代码用于商业软件)等情形。早期用于检测此类侵权行为的方法主要依赖软件指纹(birthmark),即提取程序固有功能特征的签名。然而,如第三节所述,本文不讨论基于签名的方法,而聚焦于基于二进制代码相似性的检测技术。

1.5 BCSD演进


论文名称  发表期刊       发表时间发表单位
How Machine Learning Is Solving the Binary Function Similarity ProblemUSENIX2022年Cisco


论文名称  发表期刊       发表时间发表单位
How Far Have We Gone in Binary Code Understanding Using Large Language Models2024 IEEE International Conference on Software Maintenance and Evolution2024年中国科学院大学

相关文章:

  • 使用 Ansible 在 Windows 服务器上安装 SSL 证书系列之二
  • SpringBoot项目接口集中测试方法及实现
  • 巴西医疗巨头尤迈Kafka数据泄露事件的全过程分析与AI安防策略分析
  • Mac软件卸载指南,简单易懂!
  • iframe(概念、简单例子、在vue项目中的使用)
  • 【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
  • MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
  • GOOUUU ESP32-S3-CAM 果云科技开发板开发指南(一)(超详细!)Vscode+espidf 通过摄像头拍摄照片并存取到SD卡中,文末附源码
  • Go 语言并发编程基础:无缓冲与有缓冲通道
  • VScode 使用 git 提交数据到指定库的完整指南
  • 【Fiddler工具判断前后端Bug】
  • 飞牛云一键设置动态域名+ipv6内网直通访问内网的ssh服务-家庭云计算专家
  • Linux下VSCode开发环境配置(LSP)
  • 阿里云ACP云计算备考笔记 (4)——企业应用服务
  • 客户端和服务器已成功建立 TCP 连接【输出解析】
  • WPF八大法则:告别模态窗口卡顿
  • 使用有限计算实现视频生成模型的高效训练
  • 安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计
  • uniapp 对接腾讯云IM群公告功能
  • wpf的converter
  • 学徒制下的课程网站建设/百度平台推广
  • 北京北站/seo 优化教程
  • 遵义公司做网站找哪个公司好/谷歌推广效果怎么样
  • 美国亚马逊网站如何做/站长之家排名查询
  • 真人男女直接做的视频网站/西安seo外包服务
  • 扁平化网站设计方案/全网整合营销推广系统