tomnomnom/gf
GitHub: tomnomnom/gf
gf 是一个 grep 封装工具,通过将常用正则模式和参数保存为 JSON 配置文件,让复杂搜索命令变得简单可复用。
Stars: 2081 | Forks: 338
# gf
一个 grep 的封装工具,用于避免输入常见的模式。
## 是什么?为什么?
我 *大量* 使用 grep。在审计代码库时,查看 [meg](https://github.com/tomnomnom/meg) 的输出时,或者通常在处理大量数据时。我经常最终使用像下面这样相当复杂的模式:
```
▶ grep -HnrE '(\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))' *
```
输入所有这些内容时很容易出错,而且很难知道如果没有得到任何结果,是因为确实找不到,还是因为你把模式写错了或者选错了标志。
我编写了 `gf` 来为我经常使用的模式和标志组合命名。所以上面的命令就变成了简单的:
```
▶ gf php-sources
```
### 模式文件
模式定义存储在 `~/.gf` 中,作为可以进行版本控制的小型 JSON 文件:
```
▶ cat ~/.gf/php-sources.json
{
"flags": "-HnrE",
"pattern": "(\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)|php://(input|stdin))"
}
```
为了稍微减少模式的长度和复杂性,你也可以指定多个模式的列表:
```
▶ cat ~/.gf/php-sources-multiple.json
{
"flags": "-HnrE",
"patterns": [
"\\$_(POST|GET|COOKIE|REQUEST|SERVER|FILES)",
"php://(input|stdin)"
]
}
```
在 `examples` 目录中还有更多示例模式文件。
你可以使用 `-save` 标志从命令行创建模式文件:
```
▶ gf -save php-serialized -HnrE '(a:[0-9]+:{|O:[0-9]+:"|s:[0-9]+:")'
```
### 自动补全
包含了一个自动补全脚本,所以你可以按 'tab' 键来显示你的选项:
```
▶ gf
base64 debug-pages fw php-curl php-errors php-sinks php-sources sec takeovers urls
```
#### Bash
要启用自动补全,你需要在 `.bashrc` 或类似文件中 `source` `gf-completion.bash` 文件:
```
source ~/path/to/gf-completion.bash
```
#### Zsh
要启用自动补全,你需要使用 `autoload -U compaudit && compinit` 启用自动补全(如果你有 oh-my-zsh 则不需要),或者将其放入 `.zshrc` 中
然后在 `.zshrc` 或类似文件中 `source` `gf-completion.zsh` 文件:
```
source ~/path/to/gf-completion.zsh
```
注意:如果你正在使用 oh-my-zsh 或类似工具,你可能会发现 `gf` 是 `git fetch` 的别名。你可以将 gf 二进制文件别名化为其他名称,或者使用 `unalias gf` 来移除 `git fetch` 的别名。
### 使用自定义引擎
有一些很棒的代码搜索引擎可以作为 grep 的更好替代品。
一个很好的例子是 [the silver searcher](https://github.com/ggreer/the_silver_searcher)。
它更快(**快得多**)并且以更易于视觉消化的方式呈现结果。
为了使用不同的引擎,请在相关的模式文件中添加 `engine: `:
```
# 使用 the silver searcher 代替 grep 搜索 aws-keys pattern:
# 1. 添加 "ag" engine
# 2. 移除与 ag 无关的 E flag
{
"engine": "ag",
"flags": "-Hanr",
"pattern": "([^A-Z0-9]|^)(AKIA|A3T|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{12,}"
}
```
* 注意:不同的引擎使用不同的标志,因此在上面的示例中,必须从 `aws-keys.json` 文件中移除 `E` 标志,ag 才能成功运行。
## 安装
如果你已经安装并配置好了 Go,你可以使用以下命令安装 `gf`:
```
▶ go get -u github.com/tomnomnom/gf
```
如果你是使用 `go get` 安装的,你可以像这样向 `.bashrc` 启用自动补全:
```
▶ echo 'source $GOPATH/src/github.com/tomnomnom/gf/gf-completion.bash' >> ~/.bashrc
```
请注意,你必须重启终端,或者运行 `source ~/.bashrc` 才能使更改生效。
为了快速开始,你可以像这样将示例模式文件复制到 `~/.gf`:
```
▶ cp -r $GOPATH/src/github.com/tomnomnom/gf/examples ~/.gf
```
我作为示例包含的个人模式对你来说可能不太有用,但希望它们仍然是一个合理的参考点。
## 贡献
我其实对新的模式文件最感兴趣!如果你有一些经常 grep 的内容,欢迎提交 PR 将新的模式文件添加到 examples 目录中。
一如既往,也欢迎错误修复 :)
标签:Bash, EVTX分析, EVTX分析, Go语言, grep封装, Homebrew安装, 开发辅助, 效率工具, 数字取证, 日志审计, 模式匹配, 程序破解, 网络安全审计, 自动化脚本, 自动化资产收集