ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Shotlooter源码精读:从action主循环到模板匹配,看懂这款Python安全工具的完整实现

Shotlooter源码精读:从action主循环到模板匹配,看懂这款Python安全工具的完整实现 Shotlooter源码精读从action主循环到模板匹配看懂这款Python安全工具的完整实现【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooterShotlooter 是一款基于 Python 的开源敏感信息嗅探工具专门针对截图托管平台 prnt.scLightShot 软件默认上传站点上公开的截图进行自动扫描借助 OCR 文字识别、高熵字符串检测、信用卡号校验与 OpenCV 模板匹配等图像处理技术批量挖掘隐藏在截图中的 API 密钥、数据库口令、会话凭证等敏感数据。这篇源码精读将从参数解析、action 主循环、三大检测引擎到模板匹配算法带你完整看懂这份不到 250 行的核心实现。Shotlooter是什么为公开截图设计的敏感信息嗅探工具要理解这款工具先要了解它的背景很多人使用 LightShot 等截图软件后图片会被自动上传到 prnt.sc 并生成一个公开链接。关键点在于这些截图 ID 并不是随机生成的而是按照固定字符集a-z、0-9顺序递增比如sjgmm5的下一个 ID 就是sjgmm6。这意味着任何人都能顺着 ID 一路扫描下去翻看海量公开截图——而截图里往往藏着用户不经意间暴露的敏感信息。Shotlooter 正是抓住这一特性把整个扫描流程自动化下载从起始截图 ID 开始逐个下载图片到本地识别用 Tesseract OCR 把图片中的文字提取出来检测依次执行关键词匹配、高熵字符串检测、信用卡号校验增强检测可选地对小 Logo如 LastPass、phpMyAdmin 图标做模板匹配输出命中结果写入findings.csv可疑图片保存到output/目录。核心逻辑全部集中在主程序 shotlooter.py 中全文含注释不到 250 行非常适合作为 Python 安全工具源码精读的入门教材。官方文档 README.md 中还附带了完整的处理流程图。环境准备Shotlooter安装教程与依赖清单作为新手也能轻松上手的 Python 工具Shotlooter 的安装非常简洁。前提是装好 Python3 和 pip3另外还需要系统级 OCR 引擎 TesseractmacOS 用brew install tesseractDebian 系用apt install tesseract-ocr。克隆仓库并安装依赖git clone https://gitcode.com/gh_mirrors/sh/shotlooter cd shotlooter pip3 install -r requirements.txt依赖清单在 requirements.txt 中声明主要包含依赖库用途requests / beautifulsoup4抓取 prnt.sc 页面并解析真实图片地址pytesseract PillowOCR 文字识别opencv-python-headless imutils numpy图像模板匹配colorama / termcolor彩色终端输出核心原理为什么prnt.sc截图ID可以被批量枚举源码精读的第一步先看 ID 递增机制。shotlooter.py 定义了字符集与进制code_chars list(string.ascii_lowercase) [0, 1, 2, ...] base len(code_chars)这相当于一套 36 进制编号系统。next_code()函数shotlooter.py把当前 ID 解析为整数、加 1 后再转回字符串从而得到下一个 ID。整个过程类似汽车里程表进位sjgmm5 → sjgmm6 → … → sjgmmz → sjgm10因此扫描可以无死角地覆盖相邻 ID 区间。源码精读第一步命令行参数与检测开关主程序通过 argparse 定义了一组很实用的参数shotlooter.py--code必填起始截图 ID--imagedir可选指定存放小 Logo 的目录以启用模板匹配--no-entropy/--no-cc/--no-keyword分别关闭高熵、信用卡、关键词检测。这套开关设计让用户能按场景灵活组合例如只想做纯关键词扫描时一条命令即可完成python3 shotlooter.py --code sjgmm5 --no-entropy --no-cc源码精读第二步action主循环的完整工作流整款工具的灵魂是action()函数shotlooter.py它以while True死循环驱动每一轮迭代处理一个截图 ID调用get_img_url()请求https://prnt.sc/{code}用 BeautifulSoup 提取真实图片地址调用get_img()把图片下载到output/目录用pytesseract.image_to_string()对图片执行 OCR得到文本依次执行关键词、信用卡号、高熵字符串三重检测若启用--imagedir再对每张小 Logo 执行模板匹配任一检测命中就把结果写入findings.csv并保留图片全部未命中则删除图片继续下一个 ID。值得一提的细节OCR 结果会统一转小写后与关键词比对避免大小写差异导致漏检命中项会以绿色、黄色、品红、青色等彩色字体在终端高亮输出扫描过程一目了然。三大检测引擎详解关键词、高熵与信用卡号关键词匹配从keywords.txt到命中输出关键词列表存放在 keywords.txt 中全部小写、每行一个覆盖了DB_PASSWORD、Access key ID、Secret access key、mongodbsrv、AIzaSyGoogle API 密钥前缀、postgresql://等典型敏感标识。检测逻辑非常直接把 OCR 文本整体转小写后逐个in判断命中即把关键词与截图 ID 写入 CSV。高熵字符串检测揪出随机生成的API密钥API 密钥、私钥这类数据通常由随机字符组成信息熵极高。entropy()函数shotlooter.py基于香农熵公式计算字符串的信息熵当熵值 ≥ 4.5、长度小于 65 且不含http与/时就判定为可疑的“高熵字符串”。这一招能有效捕捉 AWS Secret Key、GitHub Token 这类没有固定格式的随机凭证。信用卡号校验Luhn算法的妙用针对截图里可能出现的信用卡号工具内置了 Luhn 校验算法shotlooter.py先提取 OCR 文本中的连续数字再验证其是否符合 Luhn 规则从而过滤大量随机数字串、降低误报。作者在 README 中也坦诚提醒高熵与信用卡检测天然存在误报因为任何随机字符串都可能“长得像”密钥或卡号。进阶功能基于OpenCV的模板匹配图像搜索模板匹配是本工具最具技术含量的一环。很多敏感信息不一定是文字而是某个软件的 Logo——比如截图里出现了 LastPass 或 phpMyAdmin 的图标基本可以断定对方在使用密码管理器。template_match()函数shotlooter.py的实现思路相当精巧先把模板图与目标图都转成灰度并用 Canny 边缘检测提取轮廓在 0.2 到 1.0 之间按 20 个尺度缩放目标图做多尺度匹配解决“小图出现在大图中且尺寸未知”的问题先用TM_CCORR_NORMED快速粗筛锁定候选区域再对候选区域用TM_CCOEFF_NORMED精匹配相关系数 ≥ 0.48 即判定命中输出命中文件名与截图 ID。这种“粗筛 精匹配”的两段式策略兼顾了速度与准确率是 OpenCV 模板匹配工程化的典型写法。实战效果Shotlooter能嗅探到哪些敏感数据作者曾连续运行该工具两周发现 300 张包含敏感信息的截图下面几张官方示例图非常有代表性均来自项目的 examples 目录。1. Postman 请求中的令牌—— 开发者把 Postman 界面截图发到群里client_secret、access_token一览无余2. 云厂商 API 密钥—— Google Cloud 控制台与 AWS 凭证界面直接暴露了未受限的 API Key 和 Secret Access Key3. URL 中的会话凭证—— 某些网站把auth_key等敏感参数直接挂在 GET 请求里截图一旦公开便会泄露会话4. Excel 当密码本—— 有人把数据库密码整理在 Excel 表格里并随手截图被工具轻松嗅探5. 比特币私钥—— 最严重的一类钱包私钥一旦泄露整个钱包都可能被清空使用建议与合规提醒误报率与使用边界最后给新手两点建议其一高熵与信用卡检测误报率较高若只关心明确的敏感关键词建议加上--no-entropy --no-cc参数其二这是一把“双刃剑”——请仅在获得授权或用于自身安全审计的范围内使用扫描并留存他人截图中的敏感信息可能涉及隐私与法律风险。总的来说Shotlooter 用不到 250 行 Python 代码把 OCR、信息论、Luhn 校验和 OpenCV 模板匹配四类技术有机融合是理解“安全嗅探工具”如何从零落地的高质量源码样本。希望这篇源码精读能帮你彻底看懂它的完整实现。【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表