介 绍
Owl
是一款开源我的项目依赖剖析工具,能够疾速在指定的我的项目目录下查找合乎某些特色的源代码文件或者依赖文件。为何开发了这款工具?例如很多时候咱们我的项目太大,我的项目文件夹下有很多依赖文件,如一个 Java
我的项目引入了 log4j
这个 jar
依赖,在我的项目中某文件存在循环依赖问题。当某个依赖包呈现了破绽时,本工具能疾速扫描我的项目目录下存在的可疑依赖文件,并且给出依赖文件所在的地址,帮忙开发者能疾速进行定位到可疑文件。
主仓地址:https://github.com/Tencent/CodeAnalysis/tools/owl
,代码也不多就 1000
行左右,感兴趣读者能够去看看,实现原理上面也介绍了,感觉不错的话你能够给按一个🌟
。
Owl🦉
A dependency module feature scanning detection tool for static analysis.
原 理
目前版本的性能比较简单,工作原理很简略,工具会对特定目录进行扫描通过内置的特色码算法匹配到特定文件,而后收集与其特色码匹配的文件地址,而后展现进去,也能够重定向到一个固定 json
文件中保留。
Owl
相似于杀毒软件一样,和杀毒软件的工作原理差不多,Owl
会依据依赖文件的特色码来扫描整个我的项目,和杀毒病毒库工作原理相似。当然如果严格依照杀毒软件那种规范做的话,可能波及一些汇编相干的,目前 owl
性能实现还没有那么简单,前面会版本会退出 codeql
代码剖析引擎,通过 codeql
的数据库来做动态剖析性能加强。
疾速开始
如何应用owl
?你能够克隆仓库而后通过如下命令:
git clone github.com:Tencent/CodeAnalysis.git
而后将目录切换到 tools\owl
下,如下:
cd CodeAnalysis/tools/owl
在仓库外部有一个 Makefile
文件能够疾速帮忙你构建相应平台的二进制文件,例如:
$: 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
目录找到曾经编译好的二进制可执行文件,下载对应平台的二进制文件即可。
如何应用
程序构建实现会失去一个二进制文件,程序名称为 owl
,如下为owl
执行成果,一些子命令参数都曾经列出:
$: ./owl
_____ _ _ __
(_)(\/\/)())(_)() ()(__
(_____)(__/\__)(____) 🦉 v0.1.3
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.
如果不晓得子命令如何应用,能够在对应的子命令前面参入 --help
参数,即可失去帮忙信息:
例如如果你要查找 log4j
,你首先要通过owl
计算 log4j
特色码,命令如下:
$: ./owl md5 --path=/Users/ding/Downloads/log4j-1.2.17.jar
留神这里的特色码计算必须应用 owl
程序的算法,因为 owl
外面的算法针对大文件我是采纳分数据块计划计算的,晋升程序运行速度,所以如果应用其他软件的算法那么就会呈现问题!
后果如下:
你也能够应用十六进制字符串特色去查找:
$: ./owl hex --path=/Users/ding/Downloads/log4j-1.2.17.jar
程序会将对应的文件转成十六进制字符串展现,如下图:
当初就能够应用扫描器进行扫描了,匹配模式能够指定为 md5
或者hex
,将来可能会增加跟多的模式,命令如下:
$: ./owl run --dir=/Users/ding/Downloads/ --mode=md5 --code=04a41f0a068986f0f73485cf507c0f40
搜寻失去具体依赖文件:
搜寻后果如果过多,能够通过 --out
参数将后果重定向保留到文件中保留,文件格式为json
!
SDK 形式
下面介绍完是 command line
形式进行的,owl
程序自身就是一个command line
,外围逻辑在 github.com/auula/owl/scan
这个包中编写的,如果想二次开发,那么就能够间接应用go get github.com/auula/owl
装置这个模块到你我的项目外面,而后间接通过硬编码的形式进行自定义编程;
一个简略实例,通过自定义代码形式进行依赖文件扫描和收集:
package main
import (
"fmt"
"github.com/auula/owl/scan"
)
func main() {
// 创立扫描器
scanner := new(scan.Scanner)
// 设置扫描器门路
scanner.SetPath("github.com/auula/owl")
// 返回对应门路所有文件特色码
res, _ := scanner.List()
fmt.Println(res)
// 设置指定的匹配器,其余匹配器查看 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)
// 将后果保留到指定文件中
scanner.Output(file, res)
}
以上就是通过 SDK
形式自定义编码实现依赖特色检测。
其余
有问题欢送提issue
,工具不错的话记得按一个⭐
,另外更强代码剖析工具应用:https://github.com/Tencent/CodeAnalysis
。
本文已参加「开源摘星打算」,欢送正在浏览的你退出,流动链接:https://github.com/weopenprojects/WeOpen-Star