網(wǎng)站首頁 編程語言 正文
介 紹
Owl
是一款開源項(xiàng)目依賴分析工具,可以快速在指定的項(xiàng)目目錄下查找符合某些特征的源代碼文件或者依賴文件。為何開發(fā)了這款工具?例如很多時(shí)候我們項(xiàng)目太大,項(xiàng)目文件夾下有很多依賴文件,如一個(gè)Java
項(xiàng)目引入了log4j
這個(gè)jar
依賴,在項(xiàng)目中某文件存在循環(huán)依賴問題。當(dāng)某個(gè)依賴包出現(xiàn)了漏洞時(shí),本工具能快速掃描項(xiàng)目目錄下存在的可疑依賴文件,并且給出依賴文件所在的地址,幫助開發(fā)者能快速進(jìn)行定位到可疑文件。
原 理
目前版本的功能比較簡單,工作原理很簡單,工具會對特定目錄進(jìn)行掃描通過內(nèi)置的特征碼算法匹配到特定文件,然后收集與其特征碼匹配的文件地址,然后展示出來,也可以重定向到一個(gè)固定json
文件中保存。
Owl
類似于殺毒軟件一樣,和殺毒軟件的工作原理差不多,Owl
會根據(jù)依賴文件的特征碼來掃描整個(gè)項(xiàng)目,和殺毒病毒庫工作原理類似。當(dāng)然如果嚴(yán)格按照殺毒軟件那種標(biāo)準(zhǔn)做的話,可能涉及一些匯編相關(guān)的,目前owl
功能實(shí)現(xiàn)還沒有那么復(fù)雜,后面會版本會加入codeql
代碼分析引擎,通過codeql
的數(shù)據(jù)庫來做靜態(tài)分析功能增強(qiáng)。
快速開始
如何使用owl
?你可以克隆倉庫然后通過如下命令:
git clone git@github.com:auula/owl.git
在倉庫內(nèi)部有一個(gè)Makefile
文件可以快速幫助你構(gòu)建相應(yīng)平臺的二進(jìn)制文件,例如:
$: 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 這個(gè)項(xiàng)目下面的tools
目錄找到已經(jīng)編譯好的二進(jìn)制可執(zhí)行文件,下載對應(yīng)平臺的二進(jìn)制文件即可。
如何使用
程序構(gòu)建完成會得到一個(gè)二進(jìn)制文件,程序名稱為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
計(jì)算log4j
特征碼,命令如下:
$: ./owl md5 --path=/Users/ding/Downloads/log4j-1.2.17.jar
注意這里的特征碼計(jì)算必須使用owl
程序的算法,因?yàn)?code>owl里面的算法針對大文件我是采用分?jǐn)?shù)據(jù)塊方案計(jì)算的,提升程序運(yùn)行速度,所以如果使用其他軟件的算法那么就會出現(xiàn)問題!
結(jié)果如下:
你也可以使用十六進(jìn)制字符串特征去查找:
$: ./owl hex --path=/Users/ding/Downloads/log4j-1.2.17.jar
程序會將對應(yīng)的文件轉(zhuǎn)成十六進(jìn)制字符串展示,如下圖:
現(xiàn)在就可以使用掃描器進(jìn)行掃描了,匹配模式可以指定為md5
或者hex
,未來可能會添加跟多的模式,命令如下:
$: ./owl run --dir=/Users/ding/Downloads/ --mode=md5 --code=04a41f0a068986f0f73485cf507c0f40
搜索得到具體依賴文件:
搜索結(jié)果如果過多,可以通過--out
參數(shù)將結(jié)果重定向保存到文件中保存,文件格式為json
!
SDK方式
上面介紹完是command line
方式進(jìn)行的,owl
程序本身就是一個(gè)command line
,核心邏輯在 github.com/auula/owl/scan 這個(gè)包中編寫的,如果想二次開發(fā),那么就可以直接使用go get github.com/auula/owl
安裝這個(gè)模塊到你項(xiàng)目里面,然后直接通過硬編碼的方式進(jìn)行自定義編程;
一個(gè)簡單實(shí)例,通過自定義代碼方式進(jìn)行依賴文件掃描和收集:
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") // 打開一個(gè)文件描述符 file, _ := os.OpenFile("res.json", os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0666) // 將結(jié)果保存到指定文件中 scanner.Output(file, res) }
以上就是通過SDK
方式自定義編碼完成依賴特征檢測。
其他
有問題歡迎提issue
,工具不錯(cuò)的話記得按一個(gè)?
,倉庫github.com/auula/owl。
原文鏈接:https://juejin.cn/post/7106770143589433352
相關(guān)推薦
- 2022-11-28 Flutter?Widgets之標(biāo)簽類控件Chip詳解_IOS
- 2022-08-04 python設(shè)置Pyplot的動態(tài)rc參數(shù)、繪圖的填充_python
- 2022-10-28 React中使用react-file-viewer問題_React
- 2022-11-25 PostgreSQL自增主鍵用法及在mybatis中的使用教程_PostgreSQL
- 2023-01-15 利用Python實(shí)現(xiàn)讀取Word文檔里的Excel附件_python
- 2023-01-17 怎樣保存模型權(quán)重和checkpoint_python
- 2023-05-31 python升級pip及失敗處理方式_python
- 2022-05-15 C++?Clock類模擬實(shí)現(xiàn)鬧鐘運(yùn)行_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支