网络安全开发工具【免费下载链接】pyWhat Identify anything. pyWhat easily lets you identify emails, IP addresses, and more. Feed it a .pcap file or some text and itll tell you what it is! ♀️项目地址https://gitcode.com/gh_mirrors/py/pyWhat点击查看免费下载pyWhat 是一个开源的信息识别工具其核心使命只有一个告诉你某个东西到底是什么。无论是神秘字符串0x52908400098527886E0F7030069857D2E4169EE7、一段文件内容、整个目录、.pcap网络抓包还是文件中的十六进制字节喂给它一段输入它就能返回对应的类型、标签、稀有度与说明。本文以仓库 README.md 为主线结合 pywhat/ 目录下的源码与数据文件完整讲解 pyWhat 的安装、CLI 用法、过滤与排序机制、交互模式以及 Python API读完即可把 pyWhat 用于恶意样本分析、pcap 快速研判、Bug Bounty 自动化扫描等实战场景。一、pyWhat 是什么想象一下你遇到了一段神秘文本比如0x52908400098527886E0F7030069857D2E4169EE7或dQw4w9WgXcQ想知道它是什么。传统做法是复制到搜索引擎逐个试而 pyWhat 的做法是what 0x52908400098527886E0F7030069857D2E4169EE7它会直接告诉你这是Ethereum以太坊钱包地址。what的职责就是识别什么是什么——无论是文件、文本还是文件的十六进制内容。它还是递归的对于文本中的每一个可识别片段它都会找出来并且远超于此。从仓库数据可以直观感受它的识别覆盖面数据文件位于 pywhat/Data/regex.json154 条正则规则覆盖 129 个标签Tag包括加密货币钱包、邮箱、IP、URL、信用卡、SSN、各类云服务 API Key、CTF Flag、UNIX 时间戳、坐标等file_signatures.json181 条文件魔数Magic Number签名可识别 pcap、pcapng、SQLite、RPM、Kindle 固件包等文件类型mac_vendors.json43440 条 MAC 地址厂商数据phone_codes.json228 条电话号码区号数据mastercard_companies.json1175 条 Mastercard 发卡机构数据。二、安装pyWhat 支持 pip、Homebrew 与 MacPorts 三种方式当前仓库 pyproject.toml 声明版本为 5.1.0要求 Python 3.7核心依赖为click与rich。2.1 pip 安装最通用pip3 install pywhat安装后同时提供pywhat与what两个命令入口二者等价均由 pyproject.toml 的[tool.poetry.scripts]映射到 pywhat/what.py 的main函数。2.2 可选加速依赖# 安装可选依赖可能提升运行速度 pip3 install pywhat[optimize]optimize对应 pyproject.toml 中的 extras它引入orjson作为 JSON 解析器。从源码看pywhat/helper.py 会优先尝试导入orjson失败时回退到标准库json——orjson的 C 语言实现让正则数据库的加载更快。2.3 macOS 安装brew install pywhatMacPorts 用户则使用sudo port install pywhat2.4 验证安装pywhat --help # 查看完整帮助 pywhat --version # 查看版本号值得注意直接运行pywhat而不带任何参数时入口脚本 pywhat/main.py 会自动转为执行pywhat --help。三、典型使用场景3.1 恶意样本分析Wannacry 式勒索软件历史上有名的 Wannacry 勒索软件之所以被制止是因为研究人员在代码里发现了一个kill-switch杀手开关只要注册 Wannacry 硬编码的某个域名病毒就会停止传播。复刻这套思路用 pyWhat 识别恶意软件中所有域名通过域名注册商 API 把发现的域名全部注册下来。pyWhat 对这类从恶意样本中快速抽取 IOC威胁指标的场景非常顺手。3.2 网络攻击流量包快速研判拿到一个网络攻击产生的.pcap文件pyWhat 可以快速找出其中的所有 URL邮箱地址电话号码信用卡卡号加密货币地址社保号SSN以及其他大量结构化数据配合文件魔数识别pyWhat 能直接识别出 pcap 文件本身a1b2c3d4d4c3b2a1是 libpcap 文件头的十六进制签名见 file_signatures.json再逐条提取其中的可识别信息把原本需要数分钟的研判工作压缩到几秒钟。3.3 Bug Bounty 自动化扫描pyWhat 内置了一个Bug Bounty标签组专门用于扫描能变现的敏感信息API Keys、Webhooks、Credentials等。启用方式pywhat --include Bug Bounty TEXTGitHub 组织仓库 API Key 泄露排查# 下载某组织的全部仓库 GHUSERCHANGEME; curl https://api.github.com/users/$GHUSER/repos?per_page1000 | 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 支持的过滤器远不止 Bug Bounty运行pywhat --tags可以查看全部可用标签。四、文件、目录与多输入处理4.1 文件与目录直接把文件路径传给 pyWhat 即可它足够聪明能自动判断输入是文件还是文本what this/is/a/file/path传入目录时pyWhat 会递归搜索目录下的所有文件并输出全部识别结果——该逻辑位于 pywhat/identifier.py 的_files()方法它使用glob.iglob(text /**, recursiveTrue)展开目录树。4.2 多输入同时扫描一次可以传入多个文件、目录或文本what file1 file2 this/is/a/directory some text find . -name *.log -exec what {} 此时 pyWhat 会为每条匹配显示来源文件文本输入的匹配统一归在text键下使用--json时全部结果合并为一个 JSON 对象返回对应 identifier.py 中identify_inputs()的聚合逻辑。4.3 Unicode 支持传入或管道输入的文件与文本支持 UTF-8、UTF-16、UTF-32带 BOM 字节序标记例如 Windows 记事本保存的Unicode文本。此外pyWhat 还会搜索二进制文件中的UTF-16LE 字符串等价于strings -el因为 Windows 程序的大多数字符串都以 UTF-16LE 存储。终端无法显示的字符会以转义序列如\u20bf输出而不会崩溃。这套能力的实现位于 pywhat/unicode.pydecode()优先按 BOM 判定编码utf16_strings()用正则(?:[\t\x20-\x7e]\x00){4,}提取至少 4 个可打印 ASCII 字符的 UTF-16LE 字符串escape_unencodable()则把 stdout 的错误处理器切换为backslashreplace。五、过滤输出只看你想看的5.1 按稀有度rarity过滤what --rarity 0.2:0.8 --include Identifiers,URL https://skerritt.blog稀有度rarity表示一条匹配越不可能是误报的程度取值区间为0:1越大越稀有。pyWhat 的默认阈值是0.1见 pywhat/what.py 中--rarity的default0.1:1以及 pywhat/filter.py 中Filter的MinRarity默认值 0.1低于 0.1 的匹配通常被认为是误报而隐藏。典型例子单独的 YouTube 视频 ID如dQw4w9WgXcQ本质上是 11 个随机字符任何 11 位随机串都可能命中因此默认what dQw4w9WgXcQ找不到任何结果但放宽阈值后what --rarity 0: dQw4w9WgXcQ就能显示它。而完整的 YouTube 链接https://youtu.be/dQw4w9WgXcQ或youtube.com/watch?vdQw4w9WgXcQt42s因其结构足够具体默认就会显示。--rarity的边界可以省略0.5:表示只保留稀有度 0.5 以上的匹配:0.5表示只保留 0.5 以下的。5.2 按标签tags与名称names过滤pywhat --tags # 查看所有可用标签 pywhat --names # 查看每条正则的名称及其别名--include与--exclude支持逗号分隔的标签列表且正则的名称也可以当作标签使用很多正则还有更短的别名例如BTC Wallet是Bitcoin (₿) Wallet Address的别名ARN是Amazon Resource Name (ARN)的别名。组合示例# 查看所有加密货币钱包但排除 Ripple 钱包 pywhat --include Cryptocurrency Wallet --exclude Ripple Wallet 1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY # 只看比特币与以太坊钱包 pywhat --include BTC Wallet,ETH Wallet TEXT底层实现上pywhat/helper.py 的get_names()返回每条正则的Name及其Alternative Namespywhat/filter.py 的Filter.__contains__会同时比对标签、名称与稀有度区间Distribution则在构造时用过滤后的正则集合驱动整个识别流程。split_tags()还专门处理了括号内逗号不分割的情况例如名称EUI-48 Identifier (Ethernet, WiFi, Bluetooth, etc)可以整体作为过滤器传入。六、排序、Top 匹配与导出6.1 排序what -k rarity --reverse TEXT--key短参数-k支持的可排序键来自 pywhat/helper.py 的Keys枚举键名含义name按正则名称排序rarity按稀有度排序matched按匹配文本排序likely按最可能排序最可能优先none不排序默认6.2 Top 匹配结果太多时可以用--top只看最可能的若干条what --top 10 TEXT # 只显示最可能的 10 条最可能者在前 what --top 5% TEXT # 只显示最可能的 5%对于目录或多输入取的是全部输入中最可能的那些。判断最可能的依据是likelihood()pywhat/helper.py稀有度越高越可能而边界模式boundaryless找到的长词/长匹配片段可能性更低——例如0x52908400098527886E0F7030069857D2E4169EE7内部包含的卡号与 SSN 片段只是以太坊地址的子串所以what --top 1 0x52908400098527886E0F7030069857D2E4169EE7显示的是以太坊地址而不是其中的卡号。API 侧等价写法是pywhat.ranking.top_matches(identified, 10)pywhat/ranking.py每条匹配的Fragment键标识它是否为片段。what -k likely TEXT则以同样顺序显示全部匹配。被--top滤掉的条数会打印到 stderrprint_left_out()保证 stdout 输出如 JSON与不带--top时一致。6.3 导出 JSONwhat --json # 以 JSON 输出全部结果 what --json file.json # 直接重定向到文件6.4 进度条与流式输出搜索大文件或目录耗时较长时pyWhat 会显示两组进度条一是当前文件内正则扫描进度正在搜哪条正则二是目录/多输入场景下的文件扫描进度。进度条只在终端显示输出重定向到文件时转到 stderr搜索完成即消失--no-progress可关闭。实现见 pywhat/progress.py其内部通过threading.Timer延迟 0.5 秒才启动进度条避免短搜索的闪烁。流式输出让每条匹配一找到就打印而非等全部完成what --stream big.log # 边搜边打印 what --stream --json big.log matches.jsonl # 每条匹配一行 JSONJSON Lines由于不等全部匹配--stream无法排序--key、无法只看最可能--top其 JSON 输出也没有Fragment键片段属性要等整个文件搜完才能确定。这些限制在 pywhat/what.py 的main()中以显式报错的形式强制如--stream与--key并用会直接退出。6.5 边界模式BoundarylesspyWhat 有一个特殊模式用于匹配字符串内部的可识别信息如abcdTHM{hello}plze中的THM{hello}。CLI 中默认启用针对稀有度 0.1 以上的正则API 中默认禁用。相关参数--disable-boundaryless # 完全禁用边界模式 -br, --boundaryless-rarity # 同 --rarity但作用于边界模式 -bi, --boundaryless-include # 同 --include但作用于边界模式 -be, --boundaryless-exclude # 同 --exclude但作用于边界模式实现上pywhat/helper.py 的load_regexes()会为每条正则生成去掉首尾锚点^/$的Boundaryless Regexpywhat/regex_identifier.py 中按该正则是否属于 boundaryless 过滤器来选择用哪套模式匹配。6.6 自定义输出格式除了默认表格与 JSON--format还支持完全自定义的逐条打印模板该能力在 pywhat/printer.py 的format_print()中实现pywhat --format %m - %n google.com htb{flag}输出htb{flag} - HackTheBox Flag Format google.com - Uniform Resource Locator (URL)支持的占位符占位符含义%m匹配到的文本%n正则名称%d描述缺失时不输出%eExploit 利用说明缺失时不输出%r稀有度%l分析链接缺失时不输出%t标签tag1, tag2 ...格式如需输出字面%或\用\%、\\转义。另有--format pretty等价于默认表格输出。七、进阶处理时间戳、校验和、密钥验证与地图7.1 正则之后的处理Processing正则只能做模式匹配pyWhat 还提供了**处理器Processor**在匹配之后进一步加工pywhat/processors.py。例如UNIX 时间戳匹配后自动把日期时间追加进描述what --rarity 0: --include UNIX Timestamp 1637093119输出包含Date: November 16, 2021 8:05:19 PM UTC。实现上UnixTimestampProcessor用Decimal与timedelta精确换算避免浮点误差毫秒时间戳Recent Unix Millisecond Timestamp也支持。比特币钱包地址正则只能校验字符集与长度而BitcoinAddressProcessor会校验校验和把形如3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F的错误地址过滤掉。校验逻辑在 pywhat/bitcoin.pyP2PKH1.../P2SH3...地址走 Base58Check双 SHA-256 前 4 字节SegWitbc1.../tb1...地址分别按 Bech32BIP 173与 Bech32mBIP 350校验。关闭全部处理what --disable-processing--disable-processing仍然保留--verify与--map显式要求的处理器见 what.py 中asked_for的处理。7.2 密钥在线验证--verify--verify会调用服务商接口确认找到的 Key 是否有效并把结论追加到描述中例如what --verify AIzaSyA00000000000000000000000000000000输出Verification: invalid, Google rejected the key (API_KEY_INVALID)。目前验证的是Google API KeyGoogleAPIKeyVerifierprocessors.py向 YouTube Data API 的i18nLanguages接口发一次请求该接口免费、每次 1 单位配额Google 返回API_KEY_INVALID视为无效SERVICE_DISABLED等Key 有效但该 API 未启用的错误则报告为有效。每个 Key 只发送一次处理器对象内部用self.results缓存。验证默认关闭因为它会把 Key 发送给服务商走 HTTPS每个 Key 一次只应针对你有权测试的 Key。同时匹配项的 Exploit 字段中通常还附带了可自行curl验证的命令。7.3 坐标地图链接坐标匹配默认链接到 Google Maps切换到 OpenStreetMapwhat --map osm 52.6169586, -1.9779857输出Link: https://www.openstreetmap.org/search?query52.6169586,-1.9779857。底层OpenStreetMapProcessor还会把 Google Maps 的lat,lon,zoom记法如13.923404,101.3395163,17z转换成 OpenStreetMap 能理解的经纬度查询。八、交互模式大输入的内存级检索分析大对象时--interactive会把输入一次性识别并加载进内存之后你可以随意检索而无需重新扫描$ 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常用命令实现于 pywhat/interactive.py 的InteractiveShell基于 Python 标准库cmd命令作用tags显示当前匹配的标签及每个标签的命中数include TAG/exclude TAG收窄/排除带某标签的匹配top N只显示最可能的 N 条--top 10可开局生效more继续显示接下来 N 条load FILE/DIRECTORY/TEXT加载新的输入替换内存中的旧数据clear回到启动时的搜索条件quit/exit/ CtrlD退出交互模式搜索语法非命令的整行输入会被当作一次搜索可组合location:、include:、exclude:、rarity:与自由文本且每个条件都必须命中pywhat location:/, include:Bug Bounty, exclude:Credit Card, rarity:0.1:0.6location:PATH匹配文件的路径包含 PATH路径统一小写、\转/后比较include:TAG[,TAG...]至少含其中一个标签/名称exclude:TAG[,TAG...]不含任何这些标签/名称rarity:MIN:MAX稀有度在区间内默认0.1:10.5:、:0.5、0.1 - 0.6、单个0.5均可其余文本匹配文本或正则名称包含该词在 readline 可用的环境里Tab 键可以补全命令、搜索键、标签、稀有度与路径include:的值还支持带引号的补全如include:Bug补全为include:Bug Bounty。输入help可查看全部命令help search查看搜索语法。交互模式下输入靠--rarity/--include/--exclude给出的初始搜索作为起点--top同样生效。九、Python API把识别能力嵌入你自己的代码pyWhat 不仅提供 CLI还暴露了完整的 Python API核心类是 pywhat/identifier.py 中的Identifier并从包根导出见 pywhat/init.py。9.1 基础识别from pywhat import Identifier id Identifier() out id.identify(DANHz6EQVoWyZ9rER56DwTXHWUxfkv9k2o) # out[Regexes][text][0][Regex Pattern][Name] - Dogecoin (DOGE) Wallet Addressidentify(text, ...)识别单段文本only_textFalse时 text 可以是文件或目录路径identify_inputs(inputs, ...)一次识别多个输入文件/目录/文本返回结构与目录模式一致——每个文件的匹配按其路径归组文本匹配归在text键下iter_identify(text, ...)生成器一找到就产出(kind, location, value)三元组kind为File Signatures或Regexeslocation是文件路径或textvalue是文件签名或单条匹配identify()的返回结构为{File Signatures: {...}, Regexes: {...}}无匹配时对应键为None。9.2 自定义处理器Processor过滤误报处理器负责对指定正则的所有匹配做进一步处理可以返回修改后的匹配、返回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) # trashurl.it 的 URL 被过滤Identifier(processors[])或identify(text, processors[])可完全关闭处理default_processors()返回默认处理器集合UnixTimestampProcessorBitcoinAddressProcessor要像--verify那样在线验证 Key把验证器加入处理器Identifier(processors[*default_processors(), *verifiers()])verifiers同样来自pywhat.processors要像--map osm那样把坐标链接到 OpenStreetMap加入OpenStreetMapProcessor()。匹配项的Link就是地图链接pywhat.printer.get_link(match)可以取任意匹配的链接。9.3 进度回调identify()、identify_inputs()与iter_identify()都接受progress回调在搜索每条正则前、以及一个文件搜索完毕时会收到一个Progress对象from pywhat import Identifier id Identifier() for kind, location, value in id.iter_identify(big/directory, only_textFalse): if kind Regexes: print(location, value[Matched], value[Regex Pattern][Name]) def show(progress): # 正在搜哪个文件或 text、已完成多少文件、正则完成数与总数、当前正则完成时为 None print(progress.location, progress.files_done, progress.files, progress.regexes_done, progress.regexes, progress.regex) id.identify(big.log, only_textFalse, progressshow)Progress是NamedTupleidentifier.py字段包括location、files_done、files、regexes_done、regexes、regex。9.4 过滤、排序与 TopAPI 侧同样支持完整过滤链from pywhat import Identifier, Distribution, Filter # 只识别 Credentials 标签对应 tests/test_identifier.py 中的用法 r identifier.Identifier(distDistribution({Tags: [Credentials]})) out r.identify(fixtures/file, only_textFalse)配合pywhat.ranking.top_matches(identified, 10)保留最可能的 10 条。这些能力均有对应的测试覆盖见 tests/test_identifier.py过滤、排序、递归目录扫描、only_text等与 tests/test_processors.py。十、贡献自定义正则与稀有度10.1 添加一条新正则pyWhat 的识别规则全部集中在 regex.json每条规则包含Name、Regex、Description、Rarity、URL、Tags、Examples等字段。如果某条正则还有其他叫法如缩写应写入可选的Alternative Names字段如ETH Wallet而不要加为标签——标签用于归类正则组如Bug Bounty。每条正则都必须提供示例Examples这些示例会被当作测试运行关于如何构造不触发泄露扫描的假 API Key 示例参见 CONTRIBUTING.md。一个可复用的技巧是把假 Key 拆成字符串列表存放join_examples()会在加载时拼接这样 GitHub 推送保护与 SonarCloud 等密钥扫描器不会把它当作真实泄露。10.2 稀有度估算脚本不确定新正则该给多少稀有度仓库提供了基于正则本身的估算工具python scripts/rarity_score.py REGEX python scripts/rarity_score.py --database # 对比 regex.json 中已有稀有度与估算值 python scripts/rarity_score.py --help # 查看估算原理估算原理scripts/rarity_score.py统计一条正则要求匹配文本携带的信息量bits即log2(1 / 随机文本命中的概率)。20 bits约百万分之一命中概率对应稀有度 110 bits 对应 0.5四舍五入到一位小数。例如 GitHub Token 的前缀ghp_这类必须包含的特定字符越多越稀有。估算只是选值的起点不能替代人工判断——它只统计必须包含的字符无法知道某格式在真实文本中有多常见。十一、常见问题速查Q为什么what dQw4w9WgXcQ什么都找不到A默认稀有度阈值 0.1单独的 11 位随机串太容易误报。用what --rarity 0: dQw4w9WgXcQ或给完整的 YouTube 链接即可。Q--stream为什么不能和--key/--top一起用A流式模式不等全部匹配完成而排序和取 Top 需要完整结果集因此 CLI 会直接报错退出what.py。Q--verify会不会泄露我的 KeyA会——它会把找到的 Key 通过 HTTPS 发送给服务商每个 Key 一次来换取有效性结论默认关闭只应用于你有权测试的 Key。Q输入带空格怎么办ACLI 把每个参数都当作一个输入带空格的文本必须加引号或者用 POSIX 的--分隔符what -- 52.6169586, -1.9779857。Q如何查看当前版本支持的识别能力全貌Apywhat --tags列出全部标签pywhat --names列出每条正则及其别名含BTC Wallet这类简称数据本身维护在 pywhat/Data/regex.json 与 pywhat/Data/file_signatures.json。从恶意样本 IOC 提取、pcap 快速研判到 Bug Bounty 全量扫描与自定义 API 集成pyWhat 把识别任意内容这件高频琐事做成了一个命令、一个对象、一套数据驱动的完整方案。结合本仓库的源码与测试tests/ 目录覆盖了识别、过滤、排序、处理器、交互模式、Unicode、IPv6、URL、YouTube 等模块你可以放心地把它的识别链路直接嵌入自己的安全工具链。赞分享网络安全开发工具【免费下载链接】pyWhat Identify anything. pyWhat easily lets you identify emails, IP addresses, and more. Feed it a .pcap file or some text and itll tell you what it is! ♀️项目地址https://gitcode.com/gh_mirrors/py/pyWhat点击查看免费下载相关推荐3步掌握AI绘画模型训练kohya_ss图形化工具终极指南3步掌握AI绘画模型训练kohya_ss图形化工具终极指南 还在为复杂的AI模型训练命令行而头疼吗kohya_ss为你带来了革命性的解决方案——一个功能强大人工智能微调LoRA深度学习计算机视觉AI 应用PaddleOCR 训练与推理实战技巧指南主干网络替换、长文本识别与空格识别PaddleOCR 训练与推理实战技巧指南主干网络替换、长文本识别与空格识别 本文基于 PaddleOCR 官方整理的中文 OCR 训练与预测技巧 tric人工智能计算机视觉深度学习QtScrcpy 免root投屏实操10分钟点亮手机画面并实现键鼠控制QtScrcpy 免root投屏实操10分钟点亮手机画面并实现键鼠控制 QtScrcpy 是一款基于 C 与 Qt 的 Android 投屏控制工具手机桌面应用音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?