最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

源代碼與二進制文件SCA檢測原理

2022-10-14 08:54 作者:段段段辭  | 我要投稿

源代碼與二進制文件SCA檢測原理

?

1、源代碼與二進制的關(guān)系和特點

SCA(Software Composition Analysis)軟件成分分析,通俗的理解就是通過分析軟件包含的一些信息和特征來實現(xiàn)對該軟件的識別、管理、追蹤的技術(shù)。SCA具體的檢測原理又是如何實現(xiàn)的,源代碼和二進制文件的SCA檢測又有哪些相同點和不同點,下面內(nèi)容就來回答一下上述疑問。

對應(yīng)編譯類型的語言(C/C++/Go/Rust),都是遵循:源代碼—>編譯—>鏈接—>二進制文件的過程。影響二進制文件的因素包括不同的CPU架構(gòu)(ARM、X86、PPC、MIPS…),不同的操作系統(tǒng)(Wndows、Linux、iOS、Android…),不同的編譯優(yōu)化選項(O0~O3),即使是同一套源代碼,最終編譯生成的二進制文件之間也是差別非常大的。注:上述影響因素不涉及java語言

從上面可知源代碼和二進制文件之間存在巨大的差別,源代碼是基于高階語言來編寫,是給人看的,人看了很方便理解其中語句的語義;而二進制是由流(指令流或字節(jié)流)來構(gòu)成的,是給計算機“看”的,對人來說是非常不友好,不好理解。

源代碼包含了變量符號類型、函數(shù)名稱、類名稱、代碼邏輯結(jié)構(gòu)等大量豐富的代碼信息,相反為保留二進制文件的緊湊性,編譯生成的二進制文件中會丟棄掉很多運行時用不到的信息,只保留程序正確運行必要的信息,比如被丟棄的信息有變量類型、變量名稱等符號信息,可能被保留的有類名稱、函數(shù)名稱等信息,一定會保留的有常量字符串?dāng)?shù)據(jù)。另外為了保證程序的正確運行,還會有保留一個相應(yīng)的配置信息,比如jar包中的manifest信息、POM信息、maven信息、資源文件等?;谶@些特點源代碼SCA和二進制SCA的檢測原理也存在很大的不同。

2、源代碼SCA檢測原理

由于源代碼中包含有豐富的程序信息,因此源代碼的SCA檢測既有大顆粒度的檢測方法,也有細(xì)顆粒度的檢測方法。
2.1 大顆粒度檢測方法:根據(jù)源代碼文件的相似度來判斷屬于什么組件和版本;文件相似度可以基于hash的嚴(yán)格匹配方法,也可以根據(jù)文本相似度匹配方法;這種匹配方法的優(yōu)點是效率高,匹配速度極快,確定是也很明顯,基于hash的容易漏報,基于文本相似度的準(zhǔn)確率低;
2.2 細(xì)顆粒度檢測方法:經(jīng)過源代碼—>詞法分析—>Token提取—>語法分析—>AST抽象語法樹—>語義分析過程來提取相應(yīng)的數(shù)據(jù),再通過機器學(xué)習(xí)、NLP、CFG調(diào)用圖、DFG數(shù)據(jù)流圖等等匹配算法進行代碼相似度的檢測,這種基于語義的代碼相似度檢測與基于文本相似度檢測相比準(zhǔn)確率高;
2.3 具備包管理機制的語言,比如Java、Go,可以通過引用的開源軟件包信息來實現(xiàn)開源軟件的關(guān)聯(lián)分析,這種方法可以幾乎可以100%準(zhǔn)確的分析出引用的開源軟件名稱。

3、二進制SCA檢測原理

3.1?雖然好多源代碼中具有的信息在二進制文件中不存在,但是對于常量字符串、部分類名稱、函數(shù)名稱、以及一些配置信息還是存在的,并且這些信息具備一定的不變性,即受cpu架構(gòu)、不同編譯優(yōu)化選項的影響很小,因此二進制SCA主要從二進制文件中提取這些方面的不同特征,再運用匹配算法進行相似度計算,并根據(jù)相似度門限來檢測出引用的開源軟件名稱和版本號。
3.2?結(jié)合分析二進制代碼中的CFG調(diào)用圖、DFG數(shù)據(jù)流圖等信息進行更加精準(zhǔn)的檢測,但由于這些分析需要對二進制文件進行指令反匯編,導(dǎo)致分析時間非常的長,分析效率低下,因此這種SCA檢測方法不適合對大規(guī)模二進制文件進行掃描。

4、源代碼SCA和二進制SCA功能對比

比較項

源代碼SCA

二進制SCA

備注

檢測對象

源代碼

二進制

?

檢測效率

?

檢測準(zhǔn)確率

稍高

檢測準(zhǔn)確率和目標(biāo)程序引用開源軟件功能多少相關(guān)

嵌套組件檢測能力

二進制中不會遺漏所有引入的開源軟件功能特征信息

檢測語言種類

二進制SCA只支持能夠編譯出指令流或字節(jié)流二進制文件的語言

文件格式

簡單

復(fù)雜

源代碼都可看作文本格式,二進制文件存在pe、elf、coff、jar、apk…

文件特點

一個開源軟件包含N源碼文件

一個二進制文件包含N個開源軟件

一個開源軟件由N>=1個源碼文件;一個二進制文件包含N>=1個開源軟件

檢測階段

開發(fā)階段

測試階段

?

檢測繞過

存在

不存在

源碼在構(gòu)建環(huán)境中引入或鏈接靜態(tài)庫引入的開源軟件存在繞過源代碼SCA檢測

樣本特征構(gòu)建難度

需要編譯構(gòu)建出二進制

人工確認(rèn)分析難度

源代碼人工對比分析容易

?


源代碼與二進制文件SCA檢測原理的評論 (共 條)

分享到微博請遵守國家法律
兴安县| 乳山市| 武清区| 奉贤区| 黄龙县| 黄山市| 保康县| 陵川县| 施秉县| 漳浦县| 辛集市| 海宁市| 松桃| 登封市| 南通市| 霍城县| 明光市| 全南县| 巨野县| 桃源县| 建水县| 霸州市| 阜宁县| 通榆县| 明水县| 海兴县| 凌云县| 焦作市| 五常市| 南乐县| 濉溪县| 贡觉县| 奈曼旗| 察隅县| 嘉兴市| 莲花县| 晋中市| 大竹县| 从江县| 玉溪市| 民权县|