最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Go構(gòu)建一款靜態(tài)分析工具Owl詳解

 更新時間:2022年06月10日 14:56:45   作者:LeonDing  
Owl是一款開源項目依賴分析工具,可以快速在指定的項目目錄下查找符合某些特征的源代碼文件或者依賴文件,這篇文章主要介紹了使用Go構(gòu)建一款靜態(tài)分析工具,需要的朋友可以參考下

介 紹

Owl是一款開源項目依賴分析工具,可以快速在指定的項目目錄下查找符合某些特征的源代碼文件或者依賴文件。為何開發(fā)了這款工具?例如很多時候我們項目太大,項目文件夾下有很多依賴文件,如一個Java項目引入了log4j這個jar依賴,在項目中某文件存在循環(huán)依賴問題。當(dāng)某個依賴包出現(xiàn)了漏洞時,本工具能快速掃描項目目錄下存在的可疑依賴文件,并且給出依賴文件所在的地址,幫助開發(fā)者能快速進行定位到可疑文件。

原 理

目前版本的功能比較簡單,工作原理很簡單,工具會對特定目錄進行掃描通過內(nèi)置的特征碼算法匹配到特定文件,然后收集與其特征碼匹配的文件地址,然后展示出來,也可以重定向到一個固定json文件中保存。

Owl類似于殺毒軟件一樣,和殺毒軟件的工作原理差不多,Owl會根據(jù)依賴文件的特征碼來掃描整個項目,和殺毒病毒庫工作原理類似。當(dāng)然如果嚴(yán)格按照殺毒軟件那種標(biāo)準(zhǔn)做的話,可能涉及一些匯編相關(guān)的,目前owl功能實現(xiàn)還沒有那么復(fù)雜,后面會版本會加入codeql代碼分析引擎,通過codeql的數(shù)據(jù)庫來做靜態(tài)分析功能增強。

快速開始

如何使用owl?你可以克隆倉庫然后通過如下命令:

git clone git@github.com:auula/owl.git

在倉庫內(nèi)部有一個Makefile文件可以快速幫助你構(gòu)建相應(yīng)平臺的二進制文件,例如:

$: make help
make darwin	| Compile executable binary for MacOS platform
make linux	| Compile executable binary for Linux platform
make windows	| Compile executable binary for Windows platform
make clean	| Clean up executable binary

Owl起因也是為CodeAnalysis所編寫的特征檢測工具,所以你也可以在:https://github.com/Tencent/CodeAnalysis 這個項目下面的tools目錄找到已經(jīng)編譯好的二進制可執(zhí)行文件,下載對應(yīng)平臺的二進制文件即可。

如何使用

程序構(gòu)建完成會得到一個二進制文件,程序名稱為owl,如下為owl執(zhí)行效果,一些子命令參數(shù)都已經(jīng)列出:

$: ./owl
			 _____  _    _  __
			(  _  )( \/\/ )(  )
			 )(_)(  )    (  )(__
			(_____)(__/\__)(____) ?? v0.1.2
 A dependency module feature scanning detection tool for static analysis.

Usage:
  owl [command]
Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  hex         File hex encoding
  md5         Collection file md5
  run         Execute the scanner
  version     Version information
Flags:
  -h, --help   help for owl
Use "owl [command] --help" for more information about a command.

如果不知道子命令如何使用,可以在對應(yīng)的子命令后面參入--help參數(shù),即可得到幫助信息:

例如如果你要查找log4j,你首先要通過owl計算log4j特征碼,命令如下:

$: ./owl md5 --path=/Users/ding/Downloads/log4j-1.2.17.jar

注意這里的特征碼計算必須使用owl程序的算法,因為owl里面的算法針對大文件我是采用分?jǐn)?shù)據(jù)塊方案計算的,提升程序運行速度,所以如果使用其他軟件的算法那么就會出現(xiàn)問題!

結(jié)果如下:

你也可以使用十六進制字符串特征去查找:

$: ./owl hex --path=/Users/ding/Downloads/log4j-1.2.17.jar

程序會將對應(yīng)的文件轉(zhuǎn)成十六進制字符串展示,如下圖:

現(xiàn)在就可以使用掃描器進行掃描了,匹配模式可以指定為md5或者hex,未來可能會添加跟多的模式,命令如下:

$: ./owl run --dir=/Users/ding/Downloads/ --mode=md5 --code=04a41f0a068986f0f73485cf507c0f40

搜索得到具體依賴文件:

搜索結(jié)果如果過多,可以通過--out參數(shù)將結(jié)果重定向保存到文件中保存,文件格式為json

SDK方式

上面介紹完是command line方式進行的,owl程序本身就是一個command line,核心邏輯在 github.com/auula/owl/scan 這個包中編寫的,如果想二次開發(fā),那么就可以直接使用go get github.com/auula/owl 安裝這個模塊到你項目里面,然后直接通過硬編碼的方式進行自定義編程;

一個簡單實例,通過自定義代碼方式進行依賴文件掃描和收集:

package main
import (
    "fmt"
    "github.com/auula/owl/scan"
)
func main() {
    // 創(chuàng)建掃描器
    scanner := new(scan.Scanner)
    // 設(shè)置掃描器路徑     
    scanner.SetPath("github.com/auula/owl") 
    // 返回對應(yīng)路徑所有文件特征碼
    res, _ := scanner.List() 
    fmt.Println(res)
    // 設(shè)置指定的匹配器,其他匹配器查看API文檔
    scanner.SetMatcher(new(scan.Md5Matcher))
    // 搜索包含特征碼文件,返回文件記錄集合
    res, _ = scanner.Search("xxxx")
    // 打開一個文件描述符
    file, _ := os.OpenFile("res.json", os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0666)
    // 將結(jié)果保存到指定文件中
    scanner.Output(file, res)
}

以上就是通過SDK方式自定義編碼完成依賴特征檢測。

其他

有問題歡迎提issue,工具不錯的話記得按一個?,倉庫github.com/auula/owl

到此這篇關(guān)于使用Go構(gòu)建一款靜態(tài)分析工具的文章就介紹到這了,更多相關(guān)Go靜態(tài)分析工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang?recover函數(shù)使用中的一些坑解析

    golang?recover函數(shù)使用中的一些坑解析

    這篇文章主要為大家介紹了golang?recover函數(shù)使用中的一些坑解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 提高golang源碼閱讀效率的六個高級技巧

    提高golang源碼閱讀效率的六個高級技巧

    隨著業(yè)務(wù)的發(fā)展,自己對代碼的審美的改變,我們不斷的迭代這些代碼,代碼量可以說是與日俱增,代碼的某些結(jié)構(gòu)也會發(fā)生大大小的改變,這些都要求我們在閱讀代碼的時候,需要更快的效率和技巧
    2024-01-01
  • Go語言學(xué)習(xí)教程之反射的示例詳解

    Go語言學(xué)習(xí)教程之反射的示例詳解

    這篇文章主要通過記錄對reflect包的簡單使用,來對反射有一定的了解。文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定幫助,需要的可以參考一下
    2022-09-09
  • Go語言中錯誤處理實例分析

    Go語言中錯誤處理實例分析

    這篇文章主要介紹了Go語言中錯誤處理,實例分析了Go語言中針對錯誤處理的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    Go語言實現(xiàn)并發(fā)控制的常見方式詳解

    這篇文章主要為大家詳細介紹了Go語言實現(xiàn)并發(fā)控制的幾種常見方式,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • golang 內(nèi)存對齊的實現(xiàn)

    golang 內(nèi)存對齊的實現(xiàn)

    在代碼編譯階段,編譯器會對數(shù)據(jù)的存儲布局進行對齊優(yōu)化,本文主要介紹了golang 內(nèi)存對齊的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    這篇文章主要為大家介紹了Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Go指針數(shù)組和數(shù)組指針的具體使用

    Go指針數(shù)組和數(shù)組指針的具體使用

    go語言跟c語言一樣,指針數(shù)組和數(shù)組指針概念容易搞混,本文主要介紹了Go指針數(shù)組和數(shù)組指針的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Golang中unicode碼和中文的互相轉(zhuǎn)換函數(shù)使用

    Golang中unicode碼和中文的互相轉(zhuǎn)換函數(shù)使用

    這篇文章主要為大家介紹了Golang中unicode碼和中文的互相轉(zhuǎn)換函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Golang實現(xiàn)單元測試中的接口層

    Golang實現(xiàn)單元測試中的接口層

    接口層主要負責(zé)的就是請求的處理,最常見的就是?HTTP?請求的處理。這篇文章主要為大家介紹了Golang如何實現(xiàn)單元測試中的接口層,需要的可以參考一下
    2023-03-03

最新評論

罗源县| 怀集县| 卢氏县| 阜城县| 惠来县| 察哈| 湖口县| 昌都县| 汾阳市| 沂源县| 策勒县| 怀安县| 景宁| 方山县| 罗城| 泽州县| 清徐县| 乐都县| 文山县| 华阴市| 隆德县| 北碚区| 南岸区| 杨浦区| 涟水县| 新沂市| 滦平县| 大关县| 六盘水市| 东兰县| 进贤县| 如皋市| 呼图壁县| 弥勒县| 金山区| 神木县| 安庆市| 准格尔旗| 金昌市| 桓台县| 上林县|