当前位置: 首页 > news >正文

如何消除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)大致分为四步:

  1. 遍历 prnt.sc 图片 ID,逐张下载截图
  2. 用 Tesseract OCR 把图片转换成文本
  3. 匹配 keywords.txt 中的敏感关键词
  4. 对每个单词计算信息熵,并校验信用卡号(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_tokenclient_secret,才是真正值得关注的高熵字符串:

调优技巧三:信用卡检测的 OCR 分词与 Luhn 校验优化

信用卡检测逻辑在 shotlooter.py:要求单词为 16 位纯数字,再通过 Luhn 算法校验末位。这带来了两类误报:

  1. OCR 分词错乱:截图里的卡号常写成4111 1111 1111 1111这种带空格形式,OCR 会拆成多个词导致漏检;反过来,订单号等 16 位数字若碰巧通过 Luhn 校验,就成了误报。
  2. 号码格式多样:卡号可能带-或空格分隔,当前逻辑无法识别。

针对性的优化思路:

  • 预处理 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),仅供参考

http://www.cnnetsun.cn/news/4136963.html

相关文章:

  • AI生成人物如何摆脱僵硬感?Seedance2提示词撰写实战指南
  • 告别静态建模!镜像视界带你迈入实时三维重构的“时空计算”新纪元
  • 手写数字识别:线性判别分析与逻辑回归的模型对比与实践
  • 【storage】
  • 网络同步的奥秘:Jazz² Resurrection 在线多人架构深度解析(ENet/WebSocket/状态插值)
  • build2 构建语言进阶:函数、变量展开、条件与循环完全教程
  • 框架降级的实现路径
  • 043、RT-X开源跨机器人数据集:数据多样性与策略泛化能力
  • svelte-motion useSpring 弹性动画教程:为 Svelte UI 注入自然物理手感
  • 实测20个独立开发者开源项目:效率、创作、解压一次配齐
  • Luminus-template 配置管理最佳实践:cprop 与 mount 双剑合璧
  • rust-ctrlc 实战:如何用 10 行代码为 Rust 后台服务实现优雅退出
  • 基于多智能体强化学习的基站动态布署:提升TDOA定位精度与网络适应性
  • TOPSIS多准则决策原理与Python工业级实现
  • EKFiddle 是什么?恶意流量分析领域的终极瑞士军刀:完整入门指南
  • Filterizr 响应式画廊实战:移动端完美适配的完整方案
  • 不需要去官网下载cudnn和cuda,最新anaconda环境配置
  • 多智能体宪法学习(MAC):让AI通过辩论自我进化实现安全对齐
  • 手把手构建AI电商素材自动化工作流:从商品数据到图文视频全链生成
  • 编程随想(只是基于自己工作学习经历,不具备普适性)
  • C++模板高阶实战:SFINAE、CRTP与变参模板的工程应用
  • djangochannelsrestframework 实时推送核心原理:Observer 观察者模式如何让 WebSocket 数据自动更新
  • 软考 软件设计师 复习要点
  • 2 小时倒计时?Wand-Enhancer 免费解锁全功能
  • AMA Protocol的SolBloom与Freivalds:工作量证明校验的数学原理
  • AI社交网络架构解析:多智能体系统如何塑造对话与话题演化
  • androd签名apk笔记
  • djangochannelsrestframework 测试实战:pytest-asyncio 与 WebsocketCommunicator 全覆盖测试指南
  • 3 分钟上手 Gofile 批量下载工具 gofile-downloader:从单链接到整个清单一次搞定
  • 异步编程深度解析:awesome-nim 中的 asyncdispatch2 高性能方案