当前位置:网站首页>二进制SCA指纹提取黑科技: go语言逆向技术
二进制SCA指纹提取黑科技: go语言逆向技术
2022-08-05 18:55:00 【华为云】
什么是二进制SCA检测
SCA(Software Composition Analysis)软件成分分析,指通过对软件源码、二进制软件包等的静态分析,挖掘其所存在的开源合规、已知漏洞等安全合规风险,是一种业界常见的安全测试手段。
而二进制SCA检测技术,检测对象为二进制软件包/固件,直接从二进制文件中提取常量字符串、部分类名称、函数名称等特征信息,再运用匹配算法进行相似度计算,根据相似度门限来检测出引用的开源软件名称和版本号。

二进制SCA检测对比源码SCA检测的优势
无需依赖源码,操作方便
用户只需上传二进制软件包/固件,服务会采用静态检测技术,不用构建运行环境,不用运行程序即可快速分析二进制软件包/固件中存在的安全风险问题,并输出一份专业的分析报告
.png)
图:二进制成分分析-检测处理流程
二进制SCA指纹提取黑科技: go语言逆向技术之---恢复函数名称算法
在对程序做安全审计、漏洞检测时,通常都需要对程序做逆向分析,我们在没有符号表的情况下,提出了一种恢复函数名称的算法,方便对go语言二进制文件进行逆向分析,提升分析效率。
go语言是最近几年发展非常火的一种语言,它具备和C/C++一样的运行速度快的优点,同时又具备开发效率高,支持包管理机制高阶语言特点。其编译出来的二进制文件格式和C/C++一样运行在Linux平台下是elf格式,运行在windows平台下是pe格式,但同时在二进制文件的内部细节上go语言有自己特有的属性,二进制逆向人员可以利用go语言这些特有属性来实现对二进制文件进行更精准的逆向分析。
特性1:利用go语言中特有的节信息来判断elf/pe文件的源代码语言类型,是go语言还是C、c++语言
通过判断二进制文件中是否存在“.noptrdata”、“.gopclntab”、“.data.rel.ro.gopclntab”确定源代码,如果存在上述节名称,则源代码为go语言。
.png)
特性2:在没有符号表的情况下如何恢复函数名称
我们知道在C/C++编译出来的二进制文件中,如果没有符号表信息是没法看到函数名称的,在IDA工具中只能看到地址信息。
.png)
go语言怎么来恢复函数名称呢,可以通过从.data.rel.ro节来恢复函数名,具体查找定位算法如下:
.png)
方法1:
解析头信息可以获取magic, quantum, ptr_size, func_tab_count数据,当magic为’\xfb\xff\xff\xff’时,entry_size = 2 * ptr_size为entry结构体大小,func_tab_count 为entry结构体数量;解析entry结构获取到名称信息结构数据位置偏移(需要注意64位和32位go程序 func_info_offset位置相反),读取名称信息结构体数据,再从中获取到名称字符串位置偏移(name_offset),根据此偏移定位到函数名称字符串起始位置偏移,从该位置解析得到函数名称。
方法2:
另外1.16版本go语言结构有些新变化,magic变为’\xfa\xff\xff\xff’,解析头信息获取func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off数据,其中func_tab_off为entry数据起始位置,解析entry结构获取code_off, func_info_offset数据,后续解析过程与magic=’\xfb\xff\xff\xff’一致。
通过上述两个方法可以恢复函数真实名称,从而方便对go语言二进制文件的逆向分析,提升分析效率。
总结
华为云DevCloud一直致力于为客户提供端到端提效、全链路安全的研发环境,除无需依赖源码的二进制成分分析外,即将陆续发布更多的新技术、新能力,敬请期待。
边栏推荐
- RHCE 作业七(ansible基础配置详解)
- PBX与VoIP:它们之间有什么区别?
- Orchestrator 对 MGR MySQL Group Replication的支持
- Alibaba billion-level concurrent system design manual has been open source (2022 latest version)
- Master the technology of Dachang in one class Commission and reflection
- Docker安装Mysql5.7
- 云渲染平台是互联网和云计算的发展产物
- 【开源教程1】疯壳·开源编队无人机-开机测试
- #yyds干货盘点#【愚公系列】2022年08月 Go教学课程 002-Go语言环境安装
- RHCE 作业一
猜你喜欢

IDEA代码注释模板

一节课掌握大厂技术 委托和反射

abaqus不同网格类型生成代码

MatrixDB v4.6.0 发布,查询性能和图形化操作界面全面升级!

From the sequence with the sequence structure binary tree traversal sequence

现在的Android 开发面试都会问到一些什么?

npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead.

Analysis of the advantages and disadvantages of LED transparent screen VS conventional display

RHCE 作业二

零基础学黑客,该怎么学?
随机推荐
Kubernetes微服务Pod 影响力
让你的「文件传输助手」歇一歇吧,你完全有更实用的备忘录工具选择
[ACTF2020 新生赛]Upload 1
How to correctly access the real-time recording interface of the national standard video cloud service EasyGBS?
pgsql数据库手写自动生成雪花id函数教程
RHCE 作业五(DNS解析流程详解)
分布事务和分布式锁
2022年下半年软件设计师知识集锦
元器件选型实例(一、如何选一款合适的 DC-DC )
抗量子计算简述
1. Reporting platform planning
Pure enjoy (22) alibaba billionaire concurrent system design manual is open source
TiUP Cluster
1.报表平台规划
有主键索引cpu 还是100%
IDEA运行参数配置
2022NepCTF Partial WP
LVS load balancing cluster
模型风险管理简述
jd试用h5st参数探索