
深入解析Shotlooter高熵检测算法如何用Shannon熵从截图文字中揪出API密钥【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooterShotlooter 是一款开源截图敏感信息嗅探工具通过 OCR 提取 prnt.scLightShot 截图平台上公开截图中的文字再利用基于 Shannon 熵的高熵检测算法自动识别隐藏在其中的 API 密钥、访问令牌与私钥。本文将从零讲解 Shotlooter 高熵检测算法的数学原理、4.5 阈值的由来以及完整检测流程带你理解从截图文字里揪出 API 密钥背后的技术细节。Shotlooter 是什么专盯公开截图的敏感信息嗅探工具prnt.sc 是 LightShot 截图工具生成的短链接平台其图片 ID 是可枚举的——从sjgmm5加 1 就得到sjgmm6一路递增下去shotlooter.py中的next_code()用 base36 进制实现。也就是说任何人上传到平台的截图理论上都能被按序遍历到。Shotlooter 正是利用这一点从指定 ID 开始逐个下载截图用 tesseract OCR 把图片转成文字再通过四层检测找出敏感信息关键词匹配扫描keywords.txt中预置的dbpass、secret_key、mongodbsrv等敏感词高熵字符串检测用 Shannon 熵找出 API 密钥这类随机性极强的字符串本文主角信用卡号校验通过 Luhn 算法验证 16 位数字️模板匹配用 OpenCV 在截图中查找 LastPass 等小图标。命中结果会写入findings.csv含敏感数据的截图则保留在output目录供人工复核。为什么 API 密钥会躺在公开截图里很多开发者习惯在测试、演示时把云控制台或客户端界面截图保存再随手传到图床分享。问题是AWS Access Key、Google API Key、数据库密码这类凭证一旦出现在截图里就成了公开的秘密。上图是 Shotlooter 作者在测试中发现的真实案例——Google Cloud 凭证页面被完整截下AIzaSy开头的 API 密钥清晰可见。这种密钥如果被恶意爬取攻击者就能盗用你的云资源配额甚至直接产生账单费用。而 Shotlooter 的使命就是提前替你把这类风险嗅出来。Shannon 熵高熵检测算法的数学内核信息论之父克劳德·香农在 1948 年提出信息熵概念用来量化一个字符串的随机程度。Shotlooter 的高熵检测算法正是建立在 Shannon 熵公式之上H - Σ p(x) · log₂ p(x)其中p(x)是某个字符在字符串中出现的概率。熵的单位是bit/字符它的直觉含义是字符串全是同一个字符如aaaaaa没有任何随机性熵 0字符串字符种类丰富且分布均匀如aZ9xKpQ4随机性强熵接近最大值。而 API 密钥恰好是高随机性的代表AWS Secret Access Key、Google API Key、JWT 令牌大多经过 Base64 / Base58 等编码字符分布非常均匀。高熵 ≈ 可能藏有密钥这就是 Shotlooter 高熵检测算法能够揪出 API 密钥的根本原因。深入 entropy() 函数Shotlooter 如何计算熵值Shotlooter 的核心熵计算只有短短几行位于shotlooter.py第 151~154 行的entropy()函数def entropy(string): prob [float(string.count(c)) / len(string) for c in dict.fromkeys(list(string))] entropy - sum([p * math.log(p) / math.log(2.0) for p in prob]) return entropy逐行拆解dict.fromkeys(list(string))取出字符串中的所有不同字符对每个字符统计出现次数并除以总长度得到概率probmath.log(p) / math.log(2.0)把自然对数换算成以 2 为底的对数保证熵单位是 bit最后按公式-Σ p·log₂ p累加求和。这段代码是教科书级的 Shannon 熵实现理解起来毫无负担——字符分布越均匀返回的熵值越大。从截图文字到命中密钥高熵检测的完整流程光有熵函数还不够Shotlooter 在action()函数shotlooter.py第 193~199 行中完成了一整套文字 → 高熵判断的流水线if entropy(unicodedata.normalize(NFKD, word).encode(ascii,ignore).decode(utf-8)) 4.5 \ and http not in word and / not in word and len(word) 65: print(colored(High Entropy Detected: word,magenta))完整流程如下OCR 提取用 pytesseract 把截图转为文本分词按空格把文本拆成一个个单词word预处理先做 NFKD 规范化再转 ASCII 并忽略非 ASCII 字符——这样中英文混排、带音标的字符串不会干扰统计计算熵值调用entropy()若结果≥ 4.5判定为高熵字符串三重过滤排除含http的字符串URL 不算密钥、排除含/的路径、排除长度超过 65 的超长字符串降低误报记录结果命中的字符串连同截图 ID 写入findings.csv。一条隐藏在截图文字里的 AWS Secret Access Key往往就是这么被揪出来的。阈值 4.5 的秘密为什么选这个数字细心的读者会问为什么阈值恰好是 4.5这要从字符集上限说起。Shannon 熵的最大值等于log₂(字符集大小)。Shotlooter 遍历的截图 ID 使用 36 字符集26 个小写字母 10 个数字对应最大熵约log₂(36) ≈ 5.17。而常见 API 密钥的编码字符集更大理论上限可达 5~6 bit。取 4.5 作为阈值意味着字符串的字符分布必须相当均匀随机才会被命中——既覆盖了真实的 API 密钥又把普通英文单词熵通常在 2~3 之间挡在门外。过滤规则同样值得玩味。很多 URL 末尾会带auth_key、token之类的参数看起来很像密钥但它们本质是链接的一部分如果不过滤http这类带随机参数的网址会刷屏误报。加上len(word) 65的限制则是为了避开整段连续的无空格长文本。实际战果2 周挖出 300 张敏感截图高熵检测算法不是纸上谈兵。据项目README.md记录作者运行 Shotlooter 两周就从公开截图中识别出300 张包含敏感数据的图片覆盖了各类典型场景从 AWS 控制台的 Access Key、Postman 请求里的access_token到 Excel 表格中整列的数据库密码再到比特币钱包导出的私钥——高熵检测算法把散落在截图文字里的敏感凭证一网打尽。其中比特币私钥案例尤其触目惊心一旦私钥截图外泄整个钱包都可能被清空。小结高熵检测算法的局限与启发Shotlooter 的高熵检测算法并非万能。项目文档也坦诚指出任何随机性强的字符串都会触发高熵判定例如验证码、随机生成的测试数据都会带来大量误报而纯十六进制短密钥、纯数字密钥因熵值偏低可能漏检。好在 Shotlooter 提供--no-entropy参数可以按需关闭高熵检测只保留关键词匹配。从安全的角度看这篇算法解析也给我们提了个醒截图本身就是一种容易被忽视的泄密渠道。无论是云控制台、密码管理器还是钱包界面截图前请先确认画面上有没有不该出现的高熵字符串——毕竟你的密钥可能正躺在某个公开图床上等着被熵值超过 4.5 的那一瞬间发现。【免费下载链接】shotlootera recon tool that finds sensitive data inside the screenshots uploaded to prnt.sc项目地址: https://gitcode.com/gh_mirrors/sh/shotlooter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考