dinosn/leaklens

GitHub: dinosn/leaklens

LeakLens 是一款具备 Web 感知能力的密钥扫描器,专注于在代码、Git 历史及现代 Web 应用的 JavaScript 资产中发现泄露的敏感信息。

Stars: 45 | Forks: 4

# LeakLens LeakLens 是一款具备 Web 感知能力的密钥扫描器,适用于源代码、Git 提交历史、本地文件、直接 URL 以及现代重度依赖 JavaScript 的 Web 应用程序。 该项目的想法源于最初的 [Praetorian Titus](https://github.com/praetorian-inc/titus) 代码库。LeakLens 保留了高性能的密钥扫描引擎和规则谱系,随后将这一基础扩展为围绕爬取、JavaScript 发现、source map 恢复、JS 情报产物以及 AI 辅助审查的 Web 应用工作流。 LeakLens 的爬取功能基于 [ProjectDiscovery Katana](https://github.com/projectdiscovery/katana),并在其上叠加了 LeakLens 特有的发现与修复逻辑。爬虫现在通过直接的 HTML 资产提取、JavaScript bundle 扩展、懒加载分块发现、同源 URL 修复、转义路径标准化以及下载资产镜像(在扫描前)来增强 Katana 的输出。JS 情报仍然是一个独立的信息层;LeakLens 的密钥发现依然来自于扫描器规则引擎。 请仅在您获得授权测试的代码库、存储库和网站上使用 LeakLens。 ## 当前重点 - 针对文件、目录、Git 存储库、直接 URL 和爬取网站的 CLI 扫描。 - 带有可选实时验证的密钥检测。 - 基于 Katana 的 Web 爬取,具备 LeakLens 特有的 JS/JSON/source map 发现和 URL 修复功能。 - 针对被爬虫解析得过深的同源 JS 路径进行 URL 修复。 - 针对端点、source map、云 URL、子域名、依赖项的 JS 情报,以及可选的依赖混淆检查。 - 作为 Go 库使用,以便将扫描器嵌入其他内部工具。 ## 安装 LeakLens 支持两种安装途径: - 通过 `go install` 从源码安装。 - 使用可选的 Vectorscan/Hyperscan 加速进行本地构建。 ### Go 安装 `go install` 直接从 GitHub 存储库安装,并将二进制文件写入 `$(go env GOPATH)/bin`。 请确保该目录在您的 `PATH` 中。 使用 `@main` 安装最新经过测试的 LeakLens 分支。 纯 Go 安装: ``` go install github.com/dinosn/leaklens/cmd/leaklens@main ``` 使用 Vectorscan/Hyperscan 加速安装: ``` CGO_ENABLED=1 go install -tags vectorscan github.com/dinosn/leaklens/cmd/leaklens@main ``` ### 本地构建 构建可移植的纯 Go 二进制文件: ``` make build-pure ``` 二进制文件将写入: ``` dist/leaklens ``` 使用 Vectorscan/Hyperscan 加速构建: ``` make build ``` 默认的 `make build` 目标使用 CGO 和 `vectorscan` 构建标签。它要求具有兼容的本地库和 `pkg-config`。 安装本地依赖: ``` # macOS brew install vectorscan pkg-config # Ubuntu/Debian sudo apt-get update sudo apt-get install -y pkg-config libhyperscan-dev # Fedora/RHEL sudo dnf install -y pkgconf-pkg-config hyperscan-devel ``` 在 macOS 上,Homebrew 将 Vectorscan 安装在当前活动的 Homebrew 前缀下。如果 `pkg-config` 找不到 `libhs`,请导出包配置路径: ``` export PKG_CONFIG_PATH="$(brew --prefix vectorscan)/lib/pkgconfig:$PKG_CONFIG_PATH" ``` 为 Go 和本地库使用匹配的架构。例如,x86_64 的 Go 工具链无法链接 arm64 的 Homebrew Vectorscan 库。如果架构不匹配,请安装匹配的 Go 工具链/本地库组合,或者使用 `make build-pure`。 在 Apple Silicon 上,如果出现此链接器错误,表示 Go 正以 `amd64` 运行,而 Homebrew Vectorscan 是 `arm64`: ``` ld: warning: ignoring file '/opt/homebrew/.../libhs.dylib': found architecture 'arm64', required architecture 'x86_64' Undefined symbols for architecture x86_64: "_hs_*" ``` 首选修复方案:使用 arm64 的 Go 工具链配合 arm64 的 Homebrew 库: ``` brew install go vectorscan pkg-config export PATH="/opt/homebrew/bin:$PATH" go env -u GOARCH go env -u GOOS export PKG_CONFIG_PATH="$(brew --prefix vectorscan)/lib/pkgconfig:$PKG_CONFIG_PATH" CGO_ENABLED=1 go install -tags vectorscan github.com/dinosn/leaklens/cmd/leaklens@main ``` 无本地加速的回退方案: ``` CGO_ENABLED=0 go install github.com/dinosn/leaklens/cmd/leaklens@main ``` ## 版本与更新 检查已安装的构建版本: ``` leaklens version ``` 检查 GitHub 上最新的 `main` 分支构建: ``` leaklens update ``` LeakLens 还会在命令启动时执行简短的 `main` 分支检查。自动通知会写入 stderr,因此扫描输出仍保持可解析状态。这与文档中记载的 `go install ...@main` 安装路径相匹配,并报告已安装的二进制文件是否基于最新的 `main` commit 构建。如果当前构建无法映射到某个 commit,常规扫描将保持静默,而 `leaklens update` 会明确报告该状态。 对于脚本化运行,禁用自动检查: ``` leaklens --no-update-check scan path/to/source LEAKLENS_NO_UPDATE_CHECK=true leaklens scan path/to/source ``` ## 快速开始 ``` # 扫描文件 leaklens scan path/to/file.txt # 扫描目录 leaklens scan path/to/source # 扫描 Git history leaklens scan --git path/to/repo # 扫描直接 URL leaklens scan https://example.com/static/app.js # 从文件扫描 URL leaklens scan --url-file urls.txt # 爬取网站并扫描发现的 JS/JSON/source-map 文件 leaklens scan --crawl https://example.com # 使用 JS intelligence 进行爬取 leaklens scan --crawl --js-intel https://example.com # 通过 provider APIs 验证检测到的 secrets leaklens scan path/to/source --validate ``` 默认情况下,扫描结果以 human 格式打印并保存在内存中。当您需要数据存储以供后续报告使用时,请使用 `--output leaklens.ds` 或其他路径。 ## 网站测试 默认的 Web 应用爬取配置: ``` leaklens scan --crawl https://example.com ``` 此默认配置将启用: - 不启动 Chrome 的标准爬取 - `--crawl-js-crawl=true` - `--crawl-depth=3` - `--crawl-concurrency=2` - `--crawl-rate-limit=3` - `--crawl-timeout=2m` - `--crawl-extensions=js,json,map` - `--crawl-scope=rdn` 要在扫描时将爬取的文件保存为可读的网站风格目录树: ``` leaklens scan --crawl https://example.com/app/ --download-dir downloaded-site ``` 下载的 URL 内容保存在 `downloaded-site//` 下。查询字符串会保留在文件名中,因此 `app.js` 和 `app.js?v=63` 会分开存储。 仅在标准爬虫遗漏了浏览器渲染的资产时,才使用无头爬取: ``` leaklens scan --crawl --crawl-headless https://example.com ``` 以获取更丰富的 Web 应用分类结果: ``` leaklens scan --crawl --js-intel https://example.com ``` 对于 JavaScript 发现的相对路径被解析到错误目录下的应用程序,请显式设置应用程序根目录: ``` leaklens scan --crawl --js-intel \ --crawl-base-url https://example.com/app/ \ https://example.com/app/static/js/main.js ``` LeakLens 将爬虫发现的 URL 作为首选候选对象,然后尝试同源修复的候选对象。当回退成功时,human 格式的输出会显示 `repaired:` 行。 ## JS 情报 通过以下方式启用 JS 情报层: ``` leaklens scan --crawl --js-intel https://example.com ``` 此层报告辅助性的产物。它不会替换正常的 LeakLens 密钥规则。 | 产物 | 行为 | | --- | --- | | 端点 | 从 `fetch`、`importScripts`、HTTP 方法调用和 URL/路径属性中提取类似 URL 的值。 | | 云 URL | 查找常见的 S3、GCS、Azure Blob 和 DigitalOcean Spaces URL。 | | 子域名 | 从 JS/JSON 内容中提取类似域名的 host。 | | 依赖项 | 从 `package.json`、lockfile 包路径、import、require 和 `node_modules` 引用中提取包名。 | | Source map | 爬取模式会发现外部的 `.map` 文件,并为发现的 JavaScript 资产探测同级的 `.js.map` 文件。独立的 map 文件和内嵌的 `sourcesContent` 条目会使用正常的 LeakLens 规则重新扫描。启用后,JS 情报也会解码内联的 source map。 | | 通用密钥启发式检测 | 可选的低置信度 JS 赋值启发式检测。值在 JS 情报输出中会被掩码处理。 | | 依赖混淆候选对象 | 可选的主动 npm registry 检查。报告从配置的 registry 中返回 `404` 的包。 | 实用示例: ``` # 包含屏蔽的低置信度通用 JS assignments leaklens scan --crawl --js-intel --js-intel-generic-secrets https://example.com # 主动检查发现的 npm packages 是否在 public-registry 中缺失 leaklens scan --crawl --js-intel --js-intel-npm-check https://example.com # 禁用 inline source-map 解析,同时保留其他 JS intelligence leaklens scan --crawl --js-intel --js-intel-source-maps=false https://example.com ``` 对于 `json` 和 `sarif` 扫描输出,源自 source map 的密钥匹配会通过正常的结果路径包含在内。信息性的 JS 情报目前仅在 human 输出中打印,因此机器可读的密钥输出保持稳定。 ## 扫描命令 ``` leaklens scan [target] [flags] ``` 目标可以是: - 本地文件或目录。 - 本地 Git 存储库。 - 直接的 HTTP(S) URL。 - GitHub 存储库引用,例如 `github.com/org/repo`。 - GitLab 项目引用,例如 `gitlab.com/group/project`。 ### 核心标志 | 标志 | 默认值 | 描述 | | --- | --- | --- | | `--output` | `:memory:` | 输出数据存储路径。当您需要持久化数据存储时,请使用诸如 `leaklens.ds` 的路径。 | | `--format` | `human` | 输出格式:`human`、`json` 或 `sarif`。 | | `--rules` | | 自定义规则文件或目录的路径。 | | `--rules-include` | | 包含匹配正则表达式模式的规则,以逗号分隔。 | | `--rules-exclude` | | 排除匹配正则表达式模式的规则,以逗号分隔。 | | `--git` | `false` | 将目标视为 Git 存储库并枚举提交历史。 | | `--max-file-size` | `10485760` | 要扫描的最大文件大小(以字节为单位)。 | | `--include-hidden` | `false` | 包含隐藏文件和目录。 | | `--context-lines` | `3` | 匹配项前后的上下文行数。使用 `0` 禁用。 | | `--incremental` | `false` | 跳过已扫描的 blob。 | | `--validate` | `false` | 针对 provider API 验证检测到的密钥。 | | `--validate-workers` | `4` | 并发验证 worker 数。 | | `--workers` | CPU 核心数 | 并行扫描 worker 数。 | | `--store-blobs` | `false` | 将文件内容存储在数据存储 blob 目录下。 | | `--download-dir` | | 将下载的 URL 内容写入保留网站路径结构的目录中。 | | `--url-file` | | 包含要扫描的 URL 的文件,每行一个。使用 `-` 表示 stdin。 | | `--sqlite-row-limit` | `1000` | 启用提取功能后每个 SQLite 表的最大行数。使用 `0` 表示无限制。 | ### 提取标志 | 标志 | 默认值 | 描述 | | --- | --- | --- | | `--extract` | | 从二进制文件中提取文本。支持的值包括 `xlsx`、`docx`、`pdf`、`zip` 或 `all`。 | | `--extract-max-size` | `10MB` | 每个提取文件的最大解压大小。 | | `--extract-max-total` | `100MB` | 从单个归档中提取的最大总字节数。 | | `--extract-max-depth` | `5` | 最大嵌套归档深度。 | ### 爬取标志 | 标志 | 默认值 | 描述 | | --- | --- | --- | | `--crawl` | `false` | 启用爬取模式。 | | `--crawl-depth` | `3` | 最大爬取深度。 | | `--crawl-concurrency` | `2` | 并发爬取 worker 数。 | | `--crawl-rate-limit` | `3` | 每秒最大爬取请求数。 | | `--crawl-host-rate-limit` | `0` | 每个 host 每秒的最大请求数。`0` 使用 `--crawl-rate-limit`。 | | `--crawl-timeout` | `2m` | 最大爬取持续时间。 | | `--crawl-headless` | `false` | 对重度依赖 JS 的网站使用无头浏览器。 | | `--crawl-js-crawl` | `true` | 解析 JavaScript 文件以发现额外的端点。 | | `--crawl-extensions` | `js,json,map` | 要收集和扫描的文件扩展名。 | | `--crawl-scope` | `rdn` | 范围:`rdn`、`dn` 或 `fqdn`。 | | `--crawl-base-url` | | 用于修复 JS 发现的相对路径的应用程序基础 URL。 | | `--crawl-max-domain-pages` | `0` | 每个域名要爬取的最大页面数。`0` 表示无限制。 | | `--crawl-chrome-data-dir` | | 用于保留会话的 Chrome user-data-dir。 | | `--crawl-chrome-ws-url` | | 用于连接到现有浏览器的 Chrome DevTools websocket URL。 | | `--crawl-system-chrome-path` | | Chrome 或 Chromium 的二进制文件路径。 | | `--crawl-use-installed-chrome` | `false` | 使用已安装的 Chrome,而不是由 Katana 管理的 Chrome。 | | `--crawl-no-incognito` | `false` | 在非隐身上下文中运行无头爬取。 | | `--crawl-no-sandbox` | `false` | 使用 `--no-sandbox` 运行无头 Chrome。当 LeakLens 以 root 用户身份启动无头 Chrome 时会自动启用。 | | `--crawl-automatic-form-fill` | `false` | 启用 Katana 的自动表单填充和提交功能。 | | `--crawl-auth` | | 用于 Katana 自动登录的 `username:password`。 | ### JS 情报标志 | 标志 | 默认值 | 描述 | | --- | --- | --- | | `--js-intel` | `false` | 提取 JS 情报产物并重新扫描内联 source map 源。 | | `--js-intel-source-maps` | `true` | 当启用 `---intel` 时,解析内联 source map 并扫描内嵌的源码。 | | `--js-intel-generic-secrets` | `false` | 启用低置信度的 JS 风格通用密钥启发式检测。 | | `--js-intel-npm-check` | `false` | 主动检查发现的 npm 包在公共 registry 中是否存在缺失。 | ### AI 辅助 JS 审查 LeakLens 可以在正常的确定性扫描之后运行可选的 AI 辅助审查。这旨在用于针对 JavaScript、TypeScript、JSON 和 source map 产物的授权验证和修复工作。扫描器规则仍然首先运行,并且依然是密钥发现的确定性来源。AI 层是一个第二阶段的分析师,负责审查收集到的文件、解释应用程序行为、提出额外的密钥候选对象,并编写面向所有者的测试计划。 AI 审查适用于爬取的网站、直接 URL 扫描、URL 文件扫描、本地文件、本地目录、本地 Git 存储库以及克隆的 GitHub/GitLab 目标。对于 URL 和爬取扫描,`--ai` 会自动启用下载文件存储。如果未提供 `--download-dir`,LeakLens 将在 AI 报告目录下创建一个。 Provider 配置仅通过环境变量进行,以确保 API 密钥不会在命令行中暴露: ``` export LEAKLENS_AI_PROVIDER=openai # openai or anthropic export LEAKLENS_AI_MODEL=your-model-name export LEAKLENS_OPENAI_API_KEY=... export LEAKLENS_ANTHROPIC_API_KEY=... export LEAKLENS_AI_TIMEOUT=5m # optional per provider request timeout export LEAKLENS_AI_RETRIES=3 # optional transient provider retry count export LEAKLENS_AI_CHUNK_CHARS=60000 # optional max redacted characters per AI chunk export LEAKLENS_AI_CONCURRENCY=3 # optional parallel AI chunk reviews ``` 示例: ``` leaklens scan --crawl --ai https://example.com leaklens scan --ai --ai-mode secrets path/to/downloaded-site leaklens scan --ai --ai-mode appsec --ai-report-dir reports/example path/to/app leaklens scan --crawl --ai --ai-cloud-redaction expanded https://example.com ``` AI 标志: | 标志 | 默认值 | 描述 | | --- | --- | --- | | `--ai` | `false` | 在扫描后运行 AI 辅助的 JS/JSON/source map 分析。 | | `--ai-mode` | `all` | AI 分析模式:`secrets`、`appsec` 或 `all`。 | | `--ai-report-dir` | | AI 产物的目录。默认值:`leaklens-ai/-`。 | | `--ai-cloud-redaction` | `standard` | 云脱敏模式:`standard` 或 `expanded`。目标 URL 和 host 在两种模式下均会被脱敏。 | | `--ai-progress` | `text` | AI 进度输出:`text` 或 `quiet`。始终会写入一个 JSON-lines 进度产物。 | | `--ai-resume` | `false` | 从相同的 `--ai-report-dir` 重用已完成的 AI 响应检查点。 | AI 产物: | 文件 | 描述 | | --- | --- | | `leaklens-ai-report.md` | 包含范围、覆盖率、AI 发现、curl 风格验证思路、位置和修复说明的 Markdown 报告。 | | `corpus-manifest.json` | 每个被选中进行 AI 审查的文件的本地清单,包含其经过云脱敏的路径、大小、行数和分块数。 | | `ai-progress.ndjson` | 用于长时间运行 AI 分析的机器可读进度事件。 | | `ai-redaction-map.json` | 仅限本地的映射,将脱敏后的云占位符映射回真实的来源、host 和文件路径。请勿将此文件上传给第三方。 | | `ai-chunks/` | 用于已完成的概述和文件分块审查的带有检查点机制的 provider 响应。这些会被 `--ai-resume` 重用。 | AI provider 弹性机制: - 诸如请求超时、HTTP 408、HTTP 429 和 HTTP 5xx 响应之类的瞬时 provider 失败,会根据 `LEAKLENS_AI_RETRIES` 进行重试。 - 在构建本地语料库之后,失败的概述或文件分块不再会导致整个扫描中止。LeakLens 会写入一份部分 Markdown 报告,将失败的阶段记录在 `AI Failures` 中,并将成功的响应保留在 `ai-chunks/` 中。 - 要继续长时间的运行,请使用相同的 `--ai-report-dir --ai-resume` 重新运行相同的扫描。已完成的检查点会被重用,只有缺失的分块才会被发送给 provider。 - 文件分块会根据 `LEAKLENS_AI_CONCURRENCY` 并行审查。如果 provider 对运行进行了速率限制,请将其设置为 `1` 以进行串行 provider 调用或降低该值。 - 使用 `--ai-progress=text` 时,来自已完成的概述和分块响应的高价值 AI 观察结果将在完整报告仍在构建期间作为 `AI insight:` 行立即打印出来。 - 对于响应缓慢的 provider,请使用 `LEAKLENS_AI_TIMEOUT`;对于在大分块时会超时的模型或网络,请使用 `LEAKLENS_AI_CHUNK_CHARS` 来减小请求大小。默认的分块大小为 `60000` 个字符,与最初的 AI 分块行为保持一致。 云脱敏行为: - 目标 URL 和 host 在提交给 provider 之前总是会被脱敏。这无法通过标志绕过。 - URL 路径会被保留,以便 AI 仍然可以对端点进行推理。例如,`https://www.example.com/api/admin/config` 将作为 `TARGET_ORIGIN_1/api/admin/config` 发送。 - 第三方来源也会被脱敏,例如 `https://cdn.vendor.com/lib.js` 将变为 `EXTERNAL_ORIGIN_1/lib.js`。 - 本地绝对路径在提交给 provider 之前会被替换为文件占位符。 `--ai-cloud-redaction standard` 会在提交给 provider 之前,对明显的凭证、Authorization header、cookie 值、携带密钥的查询值以及通用的商熵字符串进行脱敏。它保留了变量名、函数名、端点路径、HTTP 方法和结构上下文。 `--ai-cloud-redaction expanded` 依然会对目标来源、host、本地文件系统路径、Authorization header、cookie 值和明显的凭证赋值进行脱敏,但保留了 URL 端点路径以及更多非 URL 的 JavaScript 上下文。例如,`https://www.example.com/api/files/upload` 会作为 `TARGET_ORIGIN_1/api/files/upload` 发送和报告,而不是作为通用的已脱敏上传端点。当需要对 config 和字符串字面量进行更深入的 AI 推理时,请使用此模式。它不会禁用对目标来源或 host 的脱敏。 LeakLens 不会执行 AI 生成的 curl 命令。报告仅包含验证计划。后续可能会在一个单独的显式选项后添加主动测试功能。 ## GitHub 和 GitLab 直接的存储库引用通过 `scan` 工作: ``` leaklens scan github.com/org/repo leaklens scan gitlab.com/group/project ``` 对于组织、用户、群组和基于 token 的工作流,请使用专用命令: ``` # GitHub repository leaklens github org/repo # GitHub organization leaklens github --org my-org --token "$GITHUB_TOKEN" # GitLab project leaklens gitlab group/project # GitLab group leaklens gitlab --group my-group --token "$GITLAB_TOKEN" ``` 重要标志: | 标志 | GitHub | GitLab | 描述 | | --- | --- | --- | --- | | `--token` | 是 | 是 | API token。对于公开项目是可选的。 | | `--git` | 是 | 是 | 扫描完整的 Git 提交历史。 | | `--no-clone` | 是 | 是 | 通过 API 获取文件而不是克隆。需要 token 且不会扫描 Git 提交历史。 | | `--org` | 是 | 否 | 扫描 GitHub 组织中的所有存储库。 | | `--user` | 是 | 是 | 扫描某个用户的存储库/项目。 | | `--group` | 否 | 是 | 扫描一个群组中的所有 GitLab 项目。 | | `--url` | 否 | 是 | GitLab 的基础 URL。默认值为 `gitlab.com`。 | | `--output` | 是 | 是 | 输出数据库路径。默认值为 `leaklens.db`。 | | `--format` | 是 | 是 | 输出格式:`human` 或 `json`。 | ## 报告和探索 除非将 `--output` 设置为数据存储路径,否则扫描结果将保留在内存中。 ``` # 来自 leaklens.ds 的人类可读报告 leaklens report # JSON 报告 leaklens report --format json # SARIF 报告 leaklens report --format sarif # 来自特定 datastore 的报告 leaklens report --datastore path/to/leaklens.ds # TUI 探索 leaklens explore --datastore path/to/leaklens.ds ``` ## 规则 ``` # 列出内置 rules leaklens rules list # 仅使用匹配的 rules 进行扫描 leaklens scan path/to/source --rules-include "aws,gcp" # 排除嘈杂的 rules leaklens scan path/to/source --rules-exclude "generic" # 使用自定义 rules leaklens scan path/to/source --rules path/to/rules.yaml ``` ## Go 库 ``` go get github.com/dinosn/leaklens ``` ``` package main import ( "fmt" "log" "github.com/dinosn/leaklens" ) func main() { scanner, err := leaklens.NewScanner() if err != nil { log.Fatal(err) } defer scanner.Close() matches, err := scanner.ScanString(`aws_access_key_id = AKIAIOSFODNN7EXAMPLE`) if err != nil { log.Fatal(err) } for _, match := range matches { fmt.Printf("%s at offset %d\n", match.RuleName, match.Location.Offset.Start) } } ``` ## 输出格式 LeakLens 支持: - `human`:按文件分组的输出并带有摘要。 - `json`:机器可读的匹配结果。 - `sarif`:工具名称为 `leaklens` 的 SARIF 2.1.0 输出。 示例: ``` leaklens scan path/to/source --format json leaklens scan path/to/source --format sarif ``` ## 验证 验证默认处于禁用状态。启用后,LeakLens 会针对支持的密钥类型尝试特定于 provider 的检查: ``` leaklens scan path/to/source --validate --validate-workers 8 ``` 验证可能会向 provider API 发出出站请求。仅在此行为适用于当前业务场景时才使用它。 ## 构建和测试 ``` # Pure-Go 便携二进制文件 make build-pure # 安装兼容的 Vectorscan/Hyperscan 时加速构建 make build # 静态二进制文件 make build-static # Tests go test ./... ``` 如果在受限环境中 macOS 阻止了默认的 Go 缓存,请使用显式缓存: ``` GOCACHE=/private/tmp/go-build-leaklens \ GOMODCACHE=/private/tmp/go-mod-leaklens \ go test ./... ``` ## 鸣谢 LeakLens 基于以下项目并在此致谢: - [Praetorian Titus](https://github.com/praetorian-inc/titus):最初的扫描器基础和 Go 实现谱系。 - [NoseyParker](https://github.com/praetorian-inc/noseyparker) 和 [Kingfisher](https://github.com/mongodb/kingfisher):检测规则谱系。 - [ProjectDiscovery Katana](https://github.com/projectdiscovery/katana):`--crawl` 使用的爬取引擎。 - [PortSwigger js-miner](https://github.com/PortSwigger/js-miner):JS 情报概念的灵感来源,例如端点、依赖项、source map 和 JavaScript 产物发现。 LeakLens 在此存储库中独立维护。 ## 许可证 本项目遵循此存储库的许可证。在重新分发衍生作品时,请保留上游的署名。
标签:EVTX分析, Go语言, StruQ, Web安全, 实时处理, 敏感信息扫描, 日志审计, 程序破解, 蓝队分析