0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

基于源码的二进制SCA特征生成技术

zz爱尚科技 ? 来源:zz爱尚科技 ? 作者:zz爱尚科技 ? 2022-10-13 13:56 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

基于源码的二进制SCA特征生成技术

检测原理及流程简介:

在二进制SCA检测原理中提到对于常量字符串、部分类名称、函数名称、以及一些配置信息还是存在的,并且这些信息具备一定的不变性;因此二进制SCA工具其中的一部分特征来源就包含这些信息。因此在特征库保存有每个开源软件的特征,二进制SCA工具在检测时会从待检测二进制文件中提取出特征,通过算法和特征库的保存的开源软件特征进行相似度计算,从而判断该二进制文件中引用了哪些开源软件及对应的版本号。

二进制SCA检测处理流程:****

image.png

从检测流程和方法中可以看出特征库中保存的特征来源并没有规定一定从二进制文件中生成,而是只要满足特征库中的特征必须和二进制中生成的特征要一致,因为计算相似度时其中一个输入的特征是从二进制文件中提取到的。很明显特征库中特征来源无非就2条路径:一条来自二进制文件,另外一条那就是来自生成二进制的源代码。

不同特征来源优缺点比较:

1. 二进制文件特征提取优点:

基于二进制文件来提取特征具有提取方便,和检测时提取方法一致,不需要额外开发提取工具和提取算法。

2. 二进制文件特征提取缺点:

a. 二进制文件首先需要由源代码编译出来,而搭建构建编译环境可能会很复杂,需要很多额外的工作量,效率低;

b.由于编译宏的原因,由源代码生成的二进制文件并不一定是全量源代码都包含中其中的,可能只有部分源代码参与生成最终的二进制文件;

c.由于构建依赖的原因,二进制文件中包含有依赖对象的信息,也就是说包含有源代码之外对象的信息,这会导致提取到的特征纯度不足,直接影响到检测结果的准确性;

3. 源码特征提取优点:

正好可以解决从二进制文件中生成特征的短板问题,不需要编译可以大大提升自动化出来水平和提取效率,提取到的特征只限于源代码中的特征和其他无关,提取到的特征纯度很高。

4. 源码特征提取缺点:

针对不同语言类型需要额外开发相应的特征提取工具来实现特征提取,开发工作量大,且不同语言的特征提取工具开的发难度也不一样,对开发者是一个挑战。

基于源码的特征生成方法:

不同语言具有不同的特点,在考虑基于源码的特征生成方法时需要考虑到语言特点来采用针对性的方法来解决,这样可以起到事半功倍的作用。下面针对不同语言分别来说明对应的解决方法:

C语言:没有类的复杂性,在构建时只要用到的源码文件,该文件中的所有函数信息都会被一起编译进二进制文件中。

C++语言:引入了类的复杂性,在构建时只要引用了类的实例,该类信息才会被编译到二进制文件中,而不像C语言一个源代码文件是一个整体来处理的。另外类中的构造函数和析构函数会被编译器自动引入在二进制文件中,从而出现源代码和二进制文件不一致情况。

Java语言:也存在类的复杂性,特别是嵌套类和内部类的情况,这也导致源代码特征和二进制特征之间的处理难点。

Go语言:具备依赖管理机制,但编译出来的二进制文件却和C、C++一样具有PE、ELF格式,go语言的模块特性也带来了源码提取的特征和二进制之间的差别,此外go语言相比C、C++来说更容易生成对应源代码的抽象语法树AST。

Python语言:也具备依赖管理机制,但pyc和pyd之间差别很大,pyc是字节码格式可以很方便的进行反编译,但pyd则像C、C++一样是指令码式文件,因此特征提取方法完全不一样,同样也带来了源代码提取特征和二进制提取特征之间的不一致问题需要解决,比如:1. python源码在编译成pyc时有一些编译优化,在源码提取特征时要加入编译优化,且不同版本编译优化有差异,统一使用最多的编译优化提取源码特征并且pyc文件提取特征时也需要进行适当的优化;2. python不同版本同一代码翻译成的指令序列不一样,pyc提取特征时要兼容多个版本;3. py2、py3的pyc中字符串的编码方式不一样,而且unicode的支持范围不一样,需要保证字符串特征提取一致;同样Python源代码也相对容易的可以生成对应源代码的抽象语法树AST。

另外对于C、C++源代码由于存在依赖和构建环境的原因而导致源代码无法编译,而很多工具需要能编译成功才能获取到AST的,比如CDT、Clang等,在这种情况下就没法使用了,必须使用具备词法分析和语法分析能力的工具来获取特征相关一些数据,比如cppcheck工具。不管是基于AST还是词法、语法分析输出数据,都需要自己在此数据的基础上开发相应的数据分析工具来提取到最终的开源软件特征,并且该特征数据和从二进制文件中提取到的特征数据具有很好的一致性要求。

总结 :只有具备从源码中生成上述特征,才能充分利用源码特征提取优点,进行自动化的特征提取,提升特征提取效率,快速实现对新出现开源软件的检测能力。
审核编辑:汤梓红

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

    关注

    2

    文章

    808

    浏览量

    42383
  • SCA
    SCA
    +关注

    关注

    1

    文章

    37

    浏览量

    12246
  • 源码
    +关注

    关注

    8

    文章

    672

    浏览量

    30384
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    偏移二进制二进制补码如何和实际数据对应,如何转换?

    偏移二进制二进制补码如何和实际数据对应,如何转换,请哪位高手解惑
    发表于 01-16 06:01

    bcd编码的应用 bcd与二进制的区别

    BCD(Binary-Coded Decimal)编码是一种二进制编码形式,用于表示十进制数字。它将每个十进制数字(0-9)直接编码为一个四位二进制数。BCD编码的主要优点是易于阅读和
    的头像 发表于 12-20 17:11 ?3367次阅读

    hex格式和二进制的区别

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

    在线二进制编码器:数据转换的快捷通道

    在数字时代,数据的快速转换与处理至关重要。二进制编码,作为计算机内部数据表示的基础,将信息转化为0和1的序列,为数字世界构建了沟通的桥梁。然而,对于非专业用户来说,手动进行二进制编码既繁琐又易出错
    的头像 发表于 11-15 09:01 ?1878次阅读

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

    Base64是一种编码方法,用于将二进制数据转换为ASCII字符串。这种编码通常用于在不支持二进制数据的系统中传输数据,例如电子邮件或网页。将Base64字符串转换为二进制文件的过程相对简单,但需要
    的头像 发表于 11-10 10:55 ?2911次阅读

    ASCII码和二进制的转换关系

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

    二进制编码器的精度与分辨率

    在数字电子系统中,二进制编码器扮演着至关重要的角色。它负责将外部世界的模拟信号转换为计算机可以理解的数字信号。精度和分辨率是衡量二进制编码器性能的两个关键指标。 1. 二进制编码器的基本原理
    的头像 发表于 11-06 09:56 ?1289次阅读

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

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

    二进制编码器在机器人中的应用

    随着科技的不断进步,机器人技术已经成为现代工业、服务业乃至家庭生活中不可或缺的一部分。机器人的智能化程度不断提高,这在很大程度上依赖于其传感器系统。二进制编码器作为一种传感器,能够将物理量转换
    的头像 发表于 11-06 09:48 ?1209次阅读

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

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

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

    编码器是将信息从一种形式或格式转换为另一种形式的设备。在数字和模拟系统中,编码器扮演着至关重要的角色。二进制编码器和模拟编码器是两种常见的编码器类型,它们在不同的应用场景中有着各自的优势和局
    的头像 发表于 11-06 09:45 ?1316次阅读

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

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

    C语言生成可执行二进制文件的具体过程

    和产物。下面,小杜通过一个具体的例子详细讲述这个过程,以及如何通过反汇编(Disassembly)来查看汇编、链接产生的不可读二进制目标文件。
    的头像 发表于 10-21 14:30 ?1681次阅读
    C语言<b class='flag-5'>生成</b>可执行<b class='flag-5'>二进制</b>文件的具体过程

    二进制补码及与原码的互相转换方法

    大沙把一些基础的知识说清楚,本文介绍二进制补码及与原码的转换方法。 先说原码,原码?是一种计算机中对数字的二进制定点表示方法。在原码表示法中,数值前面增加了一位符号位,最高位为符号位,0表示正数,1
    的头像 发表于 09-19 22:25 ?1573次阅读

    计算机采用二进制的原因不包括什么

    计算机采用二进制的原因主要是基于其物理实现的简便性、逻辑运算的简化、以及电子元件的稳定性。然而,这个问题要求我们探讨计算机采用二进制的原因不包括什么,这实际上是一个反向思考的问题。在回答这个问题之前
    的头像 发表于 09-04 17:03 ?1319次阅读