0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

二進制SCA指紋提取黑科技:go語言逆向技術(shù)

清歡科技 ? 來源:清歡科技 ? 作者:清歡科技 ? 2022-10-13 08:57 ? 次閱讀

什么是二進制SCA檢測

SCA(Software Composition Analysis)軟件成分分析,指通過對軟件源碼、二進制軟件包等的靜態(tài)分析,挖掘其所存在的開源合規(guī)、已知漏洞等安全合規(guī)風險,是一種業(yè)界常見的安全測試手段。

二進制SCA檢測技術(shù),檢測對象為二進制軟件包/固件,直接從二進制文件中提取常量字符串、部分類名稱、函數(shù)名稱等特征信息,再運用匹配算法進行相似度計算,根據(jù)相似度門限來檢測出引用的開源軟件名稱和版本號。

poYBAGNGp7GAAidMAABpNaV0YdI389.png

二進制SCA檢測對比源碼SCA檢測的優(yōu)勢

無需依賴源碼,操作方便

用戶只需上傳二進制軟件包/固件,服務會采用靜態(tài)檢測技術(shù),不用構(gòu)建運行環(huán)境,不用運行程序即可快速分析二進制軟件包/固件中存在的安全風險問題,并輸出一份專業(yè)的分析報告

poYBAGNGp7eAbEXPAABfGopaCeI930.png

圖:二進制成分分析-檢測處理流程

二進制SCA指紋提取黑科技:go語言逆向技術(shù)之---恢復函數(shù)名稱算法

在對程序做安全審計、漏洞檢測時,通常都需要對程序做逆向分析,我們在沒有符號表的情況下,提出了一種恢復函數(shù)名稱的算法,方便對go語言二進制文件進行逆向分析,提升分析效率。

go語言是最近幾年發(fā)展非?;鸬囊环N語言,它具備和C/C++一樣的運行速度快的優(yōu)點,同時又具備開發(fā)效率高,支持包管理機制高階語言特點。其編譯出來的二進制文件格式和C/C++一樣運行在Linux平臺下是elf格式,運行在windows平臺下是pe格式,但同時在二進制文件的內(nèi)部細節(jié)上go語言有自己特有的屬性,二進制逆向人員可以利用go語言這些特有屬性來實現(xiàn)對二進制文件進行更精準的逆向分析。

特性1:利用go語言中特有的節(jié)信息來判斷elf/pe文件的源代碼語言類型,是go語言還是C、c++語言

通過判斷二進制文件中是否存在“.noptrdata”、“.gopclntab”、“.data.rel.ro.gopclntab”確定源代碼,如果存在上述節(jié)名稱,則源代碼為go語言。

pYYBAGNGp72ABkAxAAH9AIyrFyc565.png

特性2:在沒有符號表的情況下如何恢復函數(shù)名稱

我們知道在C/C++編譯出來的二進制文件中,如果沒有符號表信息是沒法看到函數(shù)名稱的,在IDA工具中只能看到地址信息。

poYBAGNGp8KAQpo2AABb2CrtXZU135.png

go語言怎么來恢復函數(shù)名稱呢,可以通過從.data.rel.ro節(jié)來恢復函數(shù)名,具體查找定位算法如下:

poYBAGNGp8iAcxcGAAAjqgNE0-Y597.png

方法1:

解析頭信息可以獲取magic, quantum, ptr_size, func_tab_count數(shù)據(jù),當magic為’xfbxffxffxff’時,entry_size = 2 * ptr_size為entry結(jié)構(gòu)體大小,func_tab_count 為entry結(jié)構(gòu)體數(shù)量;解析entry結(jié)構(gòu)獲取到名稱信息結(jié)構(gòu)數(shù)據(jù)位置偏移(需要注意64位和32位go程序 func_info_offset位置相反),讀取名稱信息結(jié)構(gòu)體數(shù)據(jù),再從中獲取到名稱字符串位置偏移(name_offset),根據(jù)此偏移定位到函數(shù)名稱字符串起始位置偏移,從該位置解析得到函數(shù)名稱。

方法2:

另外1.16版本go語言結(jié)構(gòu)有些新變化,magic變?yōu)椤痻faxffxffxff’,解析頭信息獲取func_tab_cnt, file_cnt, func_name_off, cu_off, filetab_off, pctab_off, func_tab_off數(shù)據(jù),其中func_tab_off為entry數(shù)據(jù)起始位置,解析entry結(jié)構(gòu)獲取code_off, func_info_offset數(shù)據(jù),后續(xù)解析過程與magic=’xfbxffxffxff’一致。

通過上述兩個方法可以恢復函數(shù)真實名稱,從而方便對go語言二進制文件的逆向分析,提升分析效率。

總結(jié)

華為云DevCloud一直致力于為客戶提供端到端提效、全鏈路安全的研發(fā)環(huán)境,除無需依賴源碼的二進制成分分析外,即將陸續(xù)發(fā)布更多的新技術(shù)、新能力,敬請期待。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進制
    +關(guān)注

    關(guān)注

    2

    文章

    761

    瀏覽量

    41476
  • 華為云
    +關(guān)注

    關(guān)注

    3

    文章

    2343

    瀏覽量

    17105
  • go語言
    +關(guān)注

    關(guān)注

    1

    文章

    156

    瀏覽量

    8996
收藏 人收藏

    評論

    相關(guān)推薦

    二進制補碼及與原碼的互相轉(zhuǎn)換方法

    大沙把一些基礎(chǔ)的知識說清楚,本文介紹二進制補碼及與原碼的轉(zhuǎn)換方法。 先說原碼,原碼?是一種計算機中對數(shù)字的二進制定點表示方法。在原碼表示法中,數(shù)值前面增加了一位符號位,最高位為符號位,0表示正數(shù),1
    的頭像 發(fā)表于 09-19 22:25 ?21次閱讀

    二進制處理中的一些技巧

    二進制和十進制的處理中,有時候一些小技巧是很有用的。 1、把十進制數(shù)轉(zhuǎn)換成二進制數(shù) (1)在MATLAB中有一個函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2
    的頭像 發(fā)表于 07-05 11:51 ?353次閱讀

    進制和4位二進制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《十進制和4位二進制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-31 09:32 ?0次下載
    十<b class='flag-5'>進制</b>和4位<b class='flag-5'>二進制</b>計數(shù)器數(shù)據(jù)表

    二進制串行計數(shù)器工作原理是什么?

    在數(shù)字電路設計中,計數(shù)器是一種非常關(guān)鍵的組件,用于測量時間、計數(shù)事件或跟蹤狀態(tài)變化等。其中,二進制串行計數(shù)器作為一種常用的計數(shù)器類型,在多種應用場景中都發(fā)揮著重要作用。本文將對二進制串行計數(shù)器
    的頭像 發(fā)表于 05-28 15:52 ?493次閱讀

    如何實現(xiàn)二進制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變?

    如何實現(xiàn)二進制和BCD碼數(shù)據(jù)的相互轉(zhuǎn)變? 二進制碼是將十進制數(shù)字表示為二進制數(shù)和十進制數(shù)的一種表示方法。在計算機系統(tǒng)中,
    的頭像 發(fā)表于 02-18 14:51 ?2418次閱讀

    二進制與邏輯電平的變化范圍

    二進制中的兩個數(shù)字0和1稱為位(bit, 是二進制數(shù)字binary digit的縮寫)。在數(shù)字電路中,使用兩個不同的電平表示這兩個位。一般情況下,1 用高電平表示,0用低電平表示,這種邏輯體制稱為正邏輯。
    的頭像 發(fā)表于 02-04 16:54 ?901次閱讀
    <b class='flag-5'>二進制</b>與邏輯電平的變化范圍

    鴻蒙二進制數(shù)組創(chuàng)建

    背景 c++層數(shù)據(jù)都是二進制,需要轉(zhuǎn)換成arrayBuffer透傳到ets層給業(yè)務使用,但是鴻蒙的使用下面兩個api創(chuàng)建出來的二進制數(shù)組數(shù)據(jù)都是錯誤的。 接口
    的頭像 發(fā)表于 01-31 15:24 ?1123次閱讀

    二進制、八進制、十六進制在現(xiàn)實當中有什么意義?

    二進制、八進制、十六進制在現(xiàn)實當中有什么意義? 二進制、八進制和十六進制在現(xiàn)實生活中有著廣泛的應
    的頭像 發(fā)表于 01-16 11:14 ?1881次閱讀

    10進制轉(zhuǎn)換為二進制的算法

    進制轉(zhuǎn)換為二進制是計算機科學中非?;A(chǔ)且重要的概念之一。在理解和應用計算機科學的基礎(chǔ)知識時,掌握這個算法是至關(guān)重要的。 在開始講解十進制轉(zhuǎn)換為二進制的算法之前,讓我們回顧一下十
    的頭像 發(fā)表于 01-15 10:32 ?1437次閱讀

    10進制轉(zhuǎn)換為二進制的算法

    10進制轉(zhuǎn)換為二進制是計算機領(lǐng)域中非常重要的一個問題。在計算機中,所有的數(shù)據(jù)都是以二進制形式進行存儲和處理的。因此,我們常常需要將10進制數(shù)轉(zhuǎn)換為
    的頭像 發(fā)表于 01-11 09:14 ?1551次閱讀

    labview二進制字符串轉(zhuǎn)數(shù)值

    LabVIEW是一種圖形化編程環(huán)境,用于實時數(shù)據(jù)采集、信號處理以及自動化控制等領(lǐng)域。它采取了數(shù)據(jù)流編程的思想,用戶可以通過將各種功能模塊進行連接,輕松搭建起復雜的系統(tǒng)。 在LabVIEW中,二進制
    的頭像 發(fā)表于 01-05 16:20 ?2118次閱讀

    你知道十進制轉(zhuǎn)二進制如何進行轉(zhuǎn)換嗎?

    你知道十進制轉(zhuǎn)二進制如何進行轉(zhuǎn)換嗎? 當我們提到數(shù)字系統(tǒng)時,最常見的是十進制系統(tǒng)和二進制系統(tǒng)。十進制是基于10的系統(tǒng),而
    的頭像 發(fā)表于 12-20 17:05 ?1064次閱讀

    二進制DAC示例介紹

    電子發(fā)燒友網(wǎng)站提供《二進制DAC示例介紹.pdf》資料免費下載
    發(fā)表于 11-28 11:23 ?1次下載
    <b class='flag-5'>二進制</b>DAC示例介紹

    二進制最佳接收原理 二進制最佳接收機的實現(xiàn)形式有哪兩種?

    二進制最佳接收原理 二進制最佳接收機的實現(xiàn)形式有哪兩種? 二進制最佳接收原理是計算機通信中的重要概念,它是指在二進制通信中通過一定的方法,使接收機在信號傳輸過程中能夠準確、可靠地接收到
    的頭像 發(fā)表于 11-27 16:19 ?852次閱讀

    二進制數(shù)據(jù)及取值范圍的計算方法

    本文介紹二進制數(shù)據(jù)的相關(guān)知識,如定義、取值范圍計算、轉(zhuǎn)換為十進制的方法以及一些常見位數(shù)的二進制數(shù)據(jù)的取值范圍等。
    的頭像 發(fā)表于 11-08 15:48 ?1561次閱讀
    <b class='flag-5'>二進制</b>數(shù)據(jù)及取值范圍的計算方法