🐸 识别任何内容。pyWhat 能轻松识别邮箱、IP地址等。给它一个 .pcap 文件或一些文本,它就会告诉你是什么!🧙♀️
➡️ Discord ⬅️
识别任何内容的最简单方法
pip3 install pywhat && pywhat --help
是什么?
想象一下:你遇到了一些神秘的文本 🧙♂️ 0x52908400098527886E0F7030069857D2E4169EE7 或 dQw4w9WgXcQ,你想知道它是什么。你会怎么做?
有了 what,你只需问 what "0x52908400098527886E0F7030069857D2E4169EE7",what 就会告诉你!
what 的工作是识别某个东西_是什么_。 无论是文件还是文本!甚至是文件的十六进制!那文件_内部_的文本呢?我们也支持!what 是递归的,它会识别文本中的一切,甚至更多!
$ pip3 install pywhat
或
# 安装可选依赖项,可能会提高速度
$ pip3 install pywhat[optimize]
$ brew install pywhat
或者对于我们的 MacPorts 粉丝:
$ sudo port install pywhat

你遇到了一种名为 WantToCry 的新恶意软件。你回想起 Wannacry,并记得它之所以被阻止,是因为一位研究人员在代码中发现了一个终止开关。
当 Wannacry 中硬编码的某个域名被注册时,病毒就会停止。
你使用 What 来识别恶意软件中的所有域名,并使用域名注册商 API 注册所有域名。

假设你有一个来自网络攻击的 .pcap 文件。What 可以识别它并快速为你找到:
使用 what,你可以在几秒钟内(而不是几分钟)识别出 pcap 中的重要内容。
你可以使用 PyWhat 扫描能通过漏洞赏金为你赚钱的内容,例如:
使用以下命令运行 PyWhat:
pywhat --include "Bug Bounty" TEXT
即可实现。
以下是一些示例 👇
# 下载所有仓库
GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone
# 找到内容时会打印。
# 循环遍历当前目录中的所有文件。
find . -type f -execdir pywhat --include 'Bug Bounty' {} \;
# 递归下载某个网站的所有网页
wget -r -np -k https://skerritt.blog
# 找到内容时会打印。
# 循环遍历当前目录中的所有文件。
find . -type f -execdir pywhat --include 'Bug Bounty' {} \;
附注:我们支持的过滤器不止漏洞赏金!运行 pywhat --tags
任何时候你有一个文件,并想在其中找到有用的结构化数据,What 都适合你。
或者如果你遇到某段文本而不知道它是什么,What 会告诉你。
文件打开 你可以通过 what 'this/is/a/file/path' 传入文件路径。What 足够智能,能识别出它是一个文件!
那整个目录呢?What 也能处理!它会递归搜索文件并输出你需要的一切!
多个输入 你可以一次传入多个文件、目录或文本,例如 what file1 file2 this/is/a/directory 'some text' 或 find . -name '*.log' -exec what {} +。What 会显示每个匹配项所在的文件,文本中的匹配项位于 text 下,而 --json 会以单个 JSON 对象返回所有内容。
Unicode 通过管道传入 What 的文件和文本可以是 UTF-8,或带字节顺序标记的 UTF-16 或 UTF-32,例如 Windows 保存的“Unicode”文本文件。What 还会搜索二进制文件中的 UTF-16 字符串(类似于 strings -el),这是 Windows 程序存储其大部分文本的方式。你的终端无法显示的字符会以转义序列(如 \u20bf)打印,而不是导致崩溃。
有时,你只关心查看与 AWS 相关的内容。或者漏洞赏金,或者加密货币!
你可以使用 what --rarity 0.2:0.8 --include Identifiers,URL https://skerritt.blog 来过滤输出。使用 what --help 获取更多信息。
默认情况下,what 只显示稀有度(rarity)为 0.1 或更高的匹配项,因为稀有度较低的匹配项通常是误报。例如,单独的 YouTube 视频 ID,如 dQw4w9WgXcQ,可能是任意 11 个随机字符,因此 what dQw4w9WgXcQ 找不到任何内容,但 what --rarity 0: dQw4w9WgXcQ 会显示它。YouTube 链接,如 https://youtu.be/dQw4w9WgXcQ 或 youtube.com/watch?v=dQw4w9WgXcQ&t=42s,默认会显示。
要查看所有过滤器,请运行 pywhat --tags!你还可以组合它们,例如要查看所有加密货币钱包但排除 Ripple,你可以这样做:
pywhat --include "Cryptocurrency Wallet" --exclude "Ripple Wallet" 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY
正则表达式的名称像标签一样工作,许多正则表达式也有更短的替代名称,例如 BTC Wallet 对应 Bitcoin (₿) Wallet Address,或 ARN 对应 Amazon Resource Name (ARN)。要只查看比特币和以太坊钱包:
pywhat --include "BTC Wallet,ETH Wallet" TEXT
运行 pywhat --names 查看每个正则表达式的名称及其替代名称。
排序 你可以使用 what -k rarity --reverse TEXT 对输出进行排序。使用 what --help 获取更多信息。
最佳匹配 找到的太多了?what --top 10 TEXT 只显示最可能的 10 个匹配项,最可能的排在最前面,而 what --top 5% TEXT 显示其中最可能的 5%。对于目录或多个输入,这些是所有输入中最可能的匹配项。最可能的匹配项具有最高的稀有度,但较长单词或匹配项的片段(无边界模式会找到它们)可能性较低:what --top 1 0x52908400098527886E0F7030069857D2E4169EE7 显示以太坊地址,而不是其中的卡号和社保号码。what -k likely TEXT 按此顺序显示所有匹配项。在 API 中,pywhat.ranking.top_matches(identified, 10) 保留 Identifier.identify() 返回结果中最可能的 10 个匹配项,而匹配项的 "Fragment" 键表示它是否为片段。
导出 你可以使用 what --json 导出为 json,结果可以直接发送到文件,使用 what --json > file.json。JSON 打印在一行上,因此也可以管道传输到其他程序,例如 what --json TEXT | jq。
进度与流式输出 当搜索需要一段时间时,例如对大文件或目录进行搜索,进度条会显示 What 的进度:它已为该文件搜索了多少个正则表达式,以及当前正在搜索哪一个;对于目录或多个输入,则显示已搜索了多少个文件。它们仅在终端上显示(如果输出重定向到文件,则显示在 stderr 上),并在搜索完成后消失,--no-progress 可关闭它们。使用 --stream 时,What 会在找到每个匹配项时立即打印,而不是在搜索完成后:what --stream big.log,或 what --stream --json big.log > matches.jsonl 以每个匹配项一个 JSON 对象、每行一个的形式输出。由于它不等待所有匹配项,--stream 无法对它们排序(--key)或只显示最可能的那些(--top),并且其 JSON 没有 "Fragment" 键。
无边界模式 What 有一种特殊模式,可以在字符串中匹配可识别信息。默认情况下,它在 CLI 中启用,但在 API 中禁用。使用 what --help 或参阅 API 文档 获取更多信息。
处理 一旦正则表达式找到了某些内容,What 可以进一步处理它,超越正则表达式的能力。例如,Unix 时间戳的日期会被添加到其描述中:what --rarity 0: --include "UNIX Timestamp" 1637093119 显示 Date: November 16, 2021 8:05:19 PM UTC。比特币钱包地址有校验和,因此校验和错误的匹配项,如 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F,会被过滤掉。使用 what --disable-processing 关闭此功能。
验证密钥 what --verify 会询问服务它找到的密钥是否有效,并将答案添加到其描述中。目前它会验证 Google API 密钥:what --verify AIzaSyA00000000000000000000000000000000 显示 Verification: invalid, Google rejected the key (API_KEY_INVALID)。一个有效但无法使用所测试 API 的密钥(例如 SERVICE_DISABLED)会被报告为有效。验证默认关闭,因为它会将密钥发送到服务(通过 HTTPS,每个密钥一次),因此仅对你被允许测试的密钥使用它。密钥的 Exploit 还包含用于自行验证的 curl 命令。
地图 坐标会链接到 Google Maps。使用 what --map osm 将它们改为链接到 OpenStreetMap:what --map osm '52.6169586, -1.9779857' 显示 Link: https://www.openstreetmap.org/search?query=52.6169586,-1.9779857。
要分析很大的内容?使用 --interactive 将其一次性加载到内存中,然后可以随意搜索 What 找到的内容,而无需再次扫描:
$ pywhat --interactive .
pywhat> tags
pywhat> include Bug Bounty
pywhat> top 10
pywhat> more
pywhat> location:"/src", include:"Bug Bounty", exclude:"Credit Card", rarity:"0.1:0.6"
pywhat> load another/directory
tags 显示当前匹配项的标签以及每个标签有多少个匹配项,include TAG 和 exclude TAG 缩小搜索范围。top 10 只显示一次搜索中最可能的 10 个匹配项(--top 10 从一开始就执行此操作),more 显示接下来的 10 个。一次搜索组合 location:、include:、exclude:、rarity: 和要查找的文本,其每一部分都必须匹配。在 readline 可用的地方,Tab 会补全命令、搜索键、标签、稀有度和路径。在交互模式下输入 help 查看所有命令。
PyWhat 有一个 API!点击此处 https://github.com/bee-san/pyWhat/wiki/API 了解它。
你还可以用自己的代码处理匹配项,例如过滤掉误报。处理器会接收 names 中命名的正则表达式的每个匹配项,并返回它(可能已更改,如其描述、稀有度等),或返回 None 将其过滤掉。它是一个对象,因此可以在匹配项之间保持状态:
from pywhat import Identifier, Processor
from pywhat.processors import default_processors
class URLProcessor(Processor):
names = ["Uniform Resource Locator (URL)"]
def process(self, match):
if "trashurl.it" in match["Matched"]:
return None
return match
id = Identifier(processors=[*default_processors(), URLProcessor()])
id.identify("https://trashurl.it/page")
Identifier(processors=[]) 或 identify(text, processors=[]) 会关闭处理。
要使用 API 验证密钥,如 --verify,请将验证器添加到处理器中:Identifier(processors=[*default_processors(), *verifiers()]),其中 verifiers 来自 pywhat.processors。