如何消除Shotlooter误报?高熵字符串与信用卡检测的3个调优技巧
如何消除Shotlooter误报?高熵字符串与信用卡检测的3个调优技巧
【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooter
Shotlooter 是一款开源的截图敏感信息嗅探工具,它通过 OCR 识别上传到 prnt.sc 的截图内容,并综合运用关键词匹配、高熵字符串检测和信用卡 Luhn 校验,帮你快速定位 API 密钥、私钥等敏感数据。不过很多新手在使用时会发现误报特别多:明明只是一段普通随机字符串,却被标记为高熵字符串;随便一个 16 位数字也可能触发信用卡检测。本文结合源码,分享消除 Shotlooter 误报的 3 个实用调优技巧,让你的扫描结果更精准。
为什么 Shotlooter 会产生误报?
Shotlooter 的完整检测流程(见 shotlooter.py)大致分为四步:
- 遍历 prnt.sc 图片 ID,逐张下载截图
- 用 Tesseract OCR 把图片转换成文本
- 匹配 keywords.txt 中的敏感关键词
- 对每个单词计算信息熵,并校验信用卡号(Luhn 算法)
误报的根源在于:信息熵只衡量字符串的随机程度,并不关心它是不是真正的密钥。任何随机生成的内容(验证码、订单号、UUID)熵值都接近满值,自然会被判定为敏感。下面这张截图里的比特币私钥,就是典型的高熵字符串目标:
信用卡检测同样如此——它只依赖「16 位数字 + Luhn 校验」,截图里的订单号、会员卡号很容易满足条件。理解了误报来源,下面的调优技巧就有了明确的发力点。
调优技巧一:提高熵值阈值,滤掉普通随机串
高熵检测的核心判断在 shotlooter.py:
if entropy(word) >= 4.5 and "http" not in word and "/" not in word and len(word) < 65:默认阈值是4.5(信息熵满值为 8),这个值对长密钥比较友好,但也会把验证码、乱码文本统统捞进来。推荐的调整方向:
| 扫描场景 | 建议阈值 |
|---|---|
| 抓 API 密钥 / 私钥 | 5.0 ~ 5.5 |
| 只抓高置信度密钥 | 5.5 ~ 6.0 |
| 宁多勿漏的广撒网 | 保持 4.5 |
把4.5改成5.0左右,误报率通常能下降 30% 以上。同时可以收紧长度条件,把len(word) < 65改为len(word) > 16 and len(word) < 65,进一步排除短随机串。
真实场景中,像 AWS 的 Access Key 这类目标本身就带有明显前缀(如AKIA开头),熵值高且不受阈值上调影响,放心加阈值即可:
💡 如果只想靠关键词抓敏感信息,可以直接跳过熵检测,用
--no-entropy参数,见技巧二。
调优技巧二:按场景使用 --no-entropy / --no-cc 排除检测
Shotlooter 内置三个「一键排除」参数,误报严重时是最快的兜底方案:
python3 shotlooter.py --code sjgmm5 --no-entropy # 跳过高熵字符串检测 python3 shotlooter.py --code sjgmm5 --no-cc # 跳过信用卡检测 python3 shotlooter.py --code sjgmm5 --no-keyword # 跳过关键词检测什么时候该用?当你的目标很明确(比如只关心 SMTP 密码、数据库连接串)时,直接加上--no-entropy --no-cc,让 keywords.txt 中的关键词成为唯一判定标准,输出会干净很多。
而做全量审计时,可以把熵检测当作线索而非结论:先用默认参数跑一遍,再人工复核 findings.csv 中entropy类型的记录。下图这类 Postman 截图中的access_token、client_secret,才是真正值得关注的高熵字符串:
调优技巧三:信用卡检测的 OCR 分词与 Luhn 校验优化
信用卡检测逻辑在 shotlooter.py:要求单词为 16 位纯数字,再通过 Luhn 算法校验末位。这带来了两类误报:
- OCR 分词错乱:截图里的卡号常写成
4111 1111 1111 1111这种带空格形式,OCR 会拆成多个词导致漏检;反过来,订单号等 16 位数字若碰巧通过 Luhn 校验,就成了误报。 - 号码格式多样:卡号可能带
-或空格分隔,当前逻辑无法识别。
针对性的优化思路:
- 预处理 OCR 文本:检测前先去掉空格与连字符,把
4111 1111 1111 1111还原成完整 16 位再校验; - 增加卡 BIN 前缀校验:如 4 开头为 Visa、5 开头为 MasterCard,可大幅减少随机数字误报;
- 结果二次确认:把
credit_card类型的结果单独导出,人工快速复核一遍。
很多用户喜欢把各种凭据存在 Excel 里,这类截图的误报率也偏高,调优时值得重点观察:
调优后的快速检查清单
- ✅ 根据目标把熵值阈值调整到 5.0 ~ 5.5,并加上长度下限
- ✅ 明确场景,善用
--no-entropy/--no-cc/--no-keyword参数 - ✅ 信用卡检测前先合并 OCR 拆分出的号码段
- ✅ 用 findings.csv 汇总结果,定期复盘误报类型
上手体验:先执行git clone https://gitcode.com/gh_mirrors/sh/shotlooter拉取项目,再按 requirements.txt 安装依赖(记得先装好 tesseract-ocr)。调优的核心思路其实很简单:工具负责发现,你负责判断——把阈值、排除参数和预处理三者结合,就能把 Shotlooter 误报率降到可接受的范围。
【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
