1 源代码与二进制文件SCA检测原理-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

源代码与二进制文件SCA检测原理

IT科技苏辞 来源:IT科技苏辞 作者:IT科技苏辞 2022-10-14 09:12 次阅读

源代码与二进制文件SCA检测原理

1、源代码与二进制的关系和特点

SCA(Software Composition Analysis)软件成分分析,通俗的理解就是通过分析软件包含的一些信息和特征来实现对该软件的识别、管理、追踪的技术。SCA具体的检测原理又是如何实现的,源代码和二进制文件的SCA检测又有哪些相同点和不同点,下面内容就来回答一下上述疑问。

对应编译类型的语言(C/C++/Go/Rust),都是遵循:源代码—>编译—>链接—>二进制文件的过程。影响二进制文件的因素包括不同的CPU架构(ARM、X86、PPC、MIPS…),不同的操作系统(Wndows、LinuxiOSAndroid…),不同的编译优化选项(O0~O3),即使是同一套源代码,最终编译生成的二进制文件之间也是差别非常大的。注:上述影响因素不涉及java语言

从上面可知源代码和二进制文件之间存在巨大的差别,源代码是基于高阶语言来编写,是给人看的,人看了很方便理解其中语句的语义;而二进制是由流(指令流或字节流)来构成的,是给计算机“看”的,对人来说是非常不友好,不好理解。

源代码包含了变量符号类型、函数名称、类名称、代码逻辑结构等大量丰富的代码信息,相反为保留二进制文件的紧凑性,编译生成的二进制文件中会丢弃掉很多运行时用不到的信息,只保留程序正确运行必要的信息,比如被丢弃的信息有变量类型、变量名称等符号信息,可能被保留的有类名称、函数名称等信息,一定会保留的有常量字符串数据。另外为了保证程序的正确运行,还会有保留一个相应的配置信息,比如jar包中的manifest信息、POM信息、maven信息、资源文件等。基于这些特点源代码SCA和二进制SCA的检测原理也存在很大的不同。

2、源代码SCA检测原理

由于源代码中包含有丰富的程序信息,因此源代码的SCA检测既有大颗粒度的检测方法,也有细颗粒度的检测方法。

2.1 大颗粒度检测方法:根据源代码文件的相似度来判断属于什么组件和版本;文件相似度可以基于hash的严格匹配方法,也可以根据文本相似度匹配方法;这种匹配方法的优点是效率高,匹配速度极快,确定是也很明显,基于hash的容易漏报,基于文本相似度的准确率低;

2.2 细颗粒度检测方法:经过源代码—>词法分析—>Token提取—>语法分析—>AST抽象语法树—>语义分析过程来提取相应的数据,再通过机器学习、NLP、CFG调用图、DFG数据流图等等匹配算法进行代码相似度的检测,这种基于语义的代码相似度检测与基于文本相似度检测相比准确率高;

2.3 具备包管理机制的语言,比如Java、Go,可以通过引用的开源软件包信息来实现开源软件的关联分析,这种方法可以几乎可以100%准确的分析出引用的开源软件名称。

3、二进制SCA检测原理

3.1 虽然好多源代码中具有的信息在二进制文件中不存在,但是对于常量字符串、部分类名称、函数名称、以及一些配置信息还是存在的,并且这些信息具备一定的不变性,即受cpu架构、不同编译优化选项的影响很小,因此二进制SCA主要从二进制文件中提取这些方面的不同特征,再运用匹配算法进行相似度计算,并根据相似度门限来检测出引用的开源软件名称和版本号。

3.2 结合分析二进制代码中的CFG调用图、DFG数据流图等信息进行更加精准的检测,但由于这些分析需要对二进制文件进行指令反汇编,导致分析时间非常的长,分析效率低下,因此这种SCA检测方法不适合对大规模二进制文件进行扫描。

4、源代码SCA和二进制SCA功能对比

比较项 源代码SCA 二进制SCA 备注
检测对象 源代码 二进制
检测效率
检测准确率 稍高 检测准确率和目标程序引用开源软件功能多少相关
嵌套组件检测能力 二进制中不会遗漏所有引入的开源软件功能特征信息
检测语言种类 二进制SCA只支持能够编译出指令流或字节流二进制文件的语言
文件格式 简单 复杂 源代码都可看作文本格式,二进制文件存在pe、elf、coff、jar、apk…
文件特点 一个开源软件包含N源码文件 一个二进制文件包含N个开源软件 一个开源软件由N>=1个源码文件;一个二进制文件包含N>=1个开源软件
检测阶段 开发阶段 测试阶段
检测绕过 存在 不存在 源码在构建环境中引入或链接静态库引入的开源软件存在绕过源代码SCA检测
样本特征构建难度 需要编译构建出二进制
人工确认分析难度 源代码人工对比分析容易
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 二进制
    +关注

    关注

    2

    文章

    795

    浏览量

    41643
  • SCA
    SCA
    +关注

    关注

    1

    文章

    36

    浏览量

    11968
  • 源代码
    +关注

    关注

    96

    文章

    2945

    浏览量

    66730
收藏 人收藏

    评论

    相关推荐

    hex格式和二进制的区别

    HEX格式和二进制在多个方面存在显著的区别。以下是对这两者的对比: 一、定义与表示方式 HEX格式 : HEX,全称为Intel HEX,是一种用于存储和传输数据到嵌入式系统(如单片机)的文件
    的头像 发表于 11-18 15:24 446次阅读

    base64字符串转换为二进制文件

    一些编程知识。以下是将Base64字符串转换为二进制文件的一般步骤,以及一个简单的Python示例代码。 步骤: 获取Base64字符串 :首先,你需要有一个Base64编码的字符串。 解码Base64字符串 :使用编程语言提供
    的头像 发表于 11-10 10:55 926次阅读

    ASCII码和二进制的转换关系

    。ASCII码使用7位二进制数来表示128个不同的字符,包括大小写英文字母、数字0-9以及一些控制字符和标点符号。后来,ASCII码被扩展到了8位,即ASCII-8BIT,可以表示256个不同的字符。 二进制
    的头像 发表于 11-10 09:50 1015次阅读

    二进制编码器在自动化领域的作用

    二进制编码器是一种将二进制信号转换为数字信号的电子设备,广泛应用于自动化领域。 一、二进制编码器的工作原理 二进制编码器是一种将二进制信号转
    的头像 发表于 11-06 09:53 306次阅读

    二进制编码器的种类及特点

    二进制编码器是一种电子电路,用于将二进制信号转换为其他格式,如十进制、格雷码等。以下是一些常见的二进制编码器种类及其特点: 优先编码器(Priority Encoder) : 特点 :
    的头像 发表于 11-06 09:47 453次阅读

    二进制编码器应用场景 二进制编码器与模拟编码器比较

    限性。 二进制编码器概述 二进制编码器是一种将输入信号转换为二进制代码的设备。它通常用于数字系统中,将模拟信号或非二进制信号转换为
    的头像 发表于 11-06 09:45 379次阅读

    二进制编码器工作原理 如何选择二进制编码器

    二进制编码器是一种数字电路,它将输入的二进制代码转换为对应的输出信号。在数字系统中,编码器用于将数据从一种形式转换为另一种形式,以便于处理和传输。 二进制编码器工作原理 输入与输出关系
    的头像 发表于 11-06 09:44 648次阅读

    二进制处理中的一些技巧

    二进制和十进制的处理中,有时候一些小技巧是很有用的。 1、把十进制数转换成二进制数 (1)在MATLAB中有一个函数dec2bin,可以把正整数转换为2
    的头像 发表于 07-05 11:51 560次阅读

    二进制串行计数器工作原理是什么?

    在数字电路设计中,计数器是一种非常关键的组件,用于测量时间、计数事件或跟踪状态变化等。其中,二进制串行计数器作为一种常用的计数器类型,在多种应用场景中都发挥着重要作用。本文将对二进制串行计数器
    的头像 发表于 05-28 15:52 838次阅读

    如何实现二进制和BCD码数据的相互转变?

    如何实现二进制和BCD码数据的相互转变? 二进制码是将十进制数字表示为二进制数和十进制数的一种表示方法。在计算机系统中,
    的头像 发表于 02-18 14:51 3521次阅读

    鸿蒙二进制数组创建

    你data是非unsigned char。你里面的数据就会转换错乱,导致二进制的数据无法再转换成正确的字符串 代码实例 错误的代码例子:   //接收
    的头像 发表于 01-31 15:24 1264次阅读

    二进制、八进制、十六进制在现实当中有什么意义?

    二进制、八进制、十六进制在现实当中有什么意义? 二进制、八进制和十六进制在现实生活中有着广泛的应
    的头像 发表于 01-16 11:14 5350次阅读

    10进制转换为二进制的算法

    进制转换为二进制是计算机科学中非常基础且重要的概念之一。在理解和应用计算机科学的基础知识时,掌握这个算法是至关重要的。 在开始讲解十进制转换为二进制的算法之前,让我们回顾一下十
    的头像 发表于 01-15 10:32 3246次阅读

    10进制转换为二进制的算法

    10进制转换为二进制是计算机领域中非常重要的一个问题。在计算机中,所有的数据都是以二进制形式进行存储和处理的。因此,我们常常需要将10进制数转换为
    的头像 发表于 01-11 09:14 2344次阅读

    labview二进制字符串转数值

    LabVIEW是一种图形化编程环境,用于实时数据采集、信号处理以及自动化控制等领域。它采取了数据流编程的思想,用户可以通过将各种功能模块进行连接,轻松搭建起复杂的系统。 在LabVIEW中,二进制
    的头像 发表于 01-05 16:20 2650次阅读