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

    文章

    809

    浏览量

    43201
  • SCA
    SCA
    +关注

    关注

    1

    文章

    37

    浏览量

    12583
  • 源码
    +关注

    关注

    8

    文章

    689

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SN系列4位二进制全加器:快速进位的高效之选

    SN系列4位二进制全加器:快速进位的高效之选 引言 在电子电路设计领域,加法器是实现算术运算的基础组件,其性能直接影响到整个系统的运算速度和效率。TI的SN系列4位二进制全加器(SN54283
    的头像 发表于 04-23 13:05 110次阅读

    4位二进制全加器:SN54/74系列的技术剖析与应用指南

    4位二进制全加器:SN54/74系列的技术剖析与应用指南 在电子设计领域,加法器是实现数字运算的基础组件,而4位二进制全加器在众多数字电路设计中扮演着重要角色。今天,我们就来深入探讨德州仪器(TI
    的头像 发表于 04-23 13:05 117次阅读

    SN54F283和SN74F283:4位二进制全加器的技术解析

    SN54F283和SN74F283:4位二进制全加器的技术解析 在电子电路设计中,加法器是实现算术运算的基础组件。今天我们来深入了解一下德州仪器(TI)的SN54F283和SN74F283 4位
    的头像 发表于 04-23 10:15 142次阅读

    高速CMOS逻辑4位二进制全加器CDx4HC283和CDx4HCT283的技术解析

    高速CMOS逻辑4位二进制全加器CDx4HC283和CDx4HCT283的技术解析 今天来深入探讨一下德州仪器(TI)的CD54HC283、CD74HC283、CD54HCT283
    的头像 发表于 04-18 14:50 133次阅读

    CD4089B:高性能CMOS二进制速率乘法器的设计与应用

    CD4089B:高性能CMOS二进制速率乘法器的设计与应用 在电子设计领域,对于能够实现精确脉冲速率控制和多样化运算功能的器件需求始终存在。CD4089B作为一款高性能的CMOS二进制速率乘法器
    的头像 发表于 04-18 14:45 103次阅读

    74HC283 4位二进制全加器:设计利器深度解析

    74HC283 4位二进制全加器:设计利器深度解析 作为电子工程师,在数字电路设计中,加法器是我们经常会用到的基础元件。今天就来深入探讨一下74HC283 4位二进制全加器,它在诸多数字电路设计场景
    的头像 发表于 04-08 16:15 197次阅读

    CDx4HC283与CDx4HCT283:4位二进制全加器的技术解析与应用指南

    CDx4HC283与CDx4HCT283:4位二进制全加器的技术解析与应用指南 在数字电路设计领域,加法器是实现数值运算的基础元件之一。今天我们要深入探讨的CDx4HC283和CDx4HCT283
    的头像 发表于 01-30 17:20 843次阅读

    德州仪器4位二进制全加器:SN54/74系列的技术剖析

    德州仪器4位二进制全加器:SN54/74系列的技术剖析 在数字电路设计中,加法器是实现算术运算的基础组件。德州仪器的SN54283、SN54LS283、SN54S283、SN74283
    的头像 发表于 01-28 17:05 758次阅读

    CDx4HC283和CDx4HCT283:高速CMOS逻辑4位二进制全加器的详细解析

    和CDx4HCT283系列包含4位二进制加法器,其中HCT设备具有与TTL电压兼容的输入。这些器件能够将两个4位二进制数相加,并在和超过15时生成
    的头像 发表于 01-19 14:50 491次阅读

    解析CD54/74AC283与CD54/74ACT283:4位二进制加法器的卓越之选

    CD54/74AC283和CD54/74ACT283是采用先进CMOS逻辑技术的4位二进制加法器,具备快速进位功能。这些器件能够将两个4位二进制数相加,并在和超过15时产
    的头像 发表于 01-08 16:55 739次阅读

    SN54F283与SN74F283:4位二进制全加器的技术剖析

    SN54F283与SN74F283:4位二进制全加器的技术剖析 在数字电路设计中,加法器是最基础且关键的组件之一。今天我们要深入探讨的是德州仪器(TI)的SN54F283和SN74F283这两款4位
    的头像 发表于 12-29 16:20 1109次阅读

    二进制查找(Binary Search)介绍

    二进制查找(Binary Search)用于在已排序的数组中执行二进制查找的函数。 int binary_search(int arr[], int size, int target
    发表于 12-12 06:54

    如何在vivado上基于二进制码对指令运行状态进行判断

    在扩展指令时我们常常需要一些手段来帮助我们判断指令是否能够成功运行、运行状态是否正确。一方面,我们可以通过模拟器来实现,另一方面,在没有模拟器的情况下,我们可以通过将所扩展指令的二进制代码导入
    发表于 10-24 06:46

    在vivado上基于二进制码对指令运行状态进行判断

    在扩展指令时我们常常需要一些手段来帮助我们判断指令是否能够成功运行、运行状态是否正确。一方面,我们可以通过模拟器来实现,另一方面,在没有模拟器的情况下,我们可以通过将所扩展指令的二进制代码导入
    发表于 10-24 06:31

    二进制数据处理方法分享

    时,我们如何去解析数据并且应用它们。本次的技术分享文章,我们就从如何传输数据和解析二进制数据来一步一步剥丝抽茧,搞清楚他的运作原理和二进制数据的数据结构。
    的头像 发表于 07-30 15:41 2598次阅读
    <b class='flag-5'>二进制</b>数据处理方法分享