Shellghostt/De-Caffeinator

GitHub: Shellghostt/De-Caffeinator

De-Caffeinator是一个JavaScript逆向工程与资产分析流水线,用于安全审计中提取隐藏端点和秘密信息。

Stars: 1 | Forks: 1

# Blob 解包器 **一个面向安全审计的生产级JavaScript逆向工程与资产分析流水线。** Blob Unpacker 会爬取目标网站,下载所有能找到的 JavaScript 文件,使用强大的 webcrack 引擎对它们进行反混淆和反压缩处理,然后提取安全相关的产物——API 端点、密钥、开发者注释和配置值。所有输出都按主机名组织成清晰的目录结构,方便后续分析。 ## 目录 - [功能特性](#features) - [快速开始](#quick-start) - [安装说明](#installation) - [使用方法](#usage) - [交互式启动器](#interactive-launcher) - [直接使用 CLI](#direct-cli) - [CLI 选项](#cli-options) - [流水线架构](#pipeline-architecture) - [阶段一 — 摄取](#stage-1--ingestion) - [阶段二 — 源码映射检测](#stage-2--source-map-detection) - [阶段三 — 源码重建](#stage-3--source-reconstruction) - [阶段四 — 反混淆与反压缩](#stage-4--de-obfuscation--de-minification) - [阶段五 — 产物提取](#stage-5--artifact-extraction) - [阶段六 — 输出](#stage-6--output) - [输出结构](#output-structure) - [反混淆技术](#de-obfuscation-techniques) - [提取能力](#extraction-capabilities) - [项目结构](#project-structure) - [技术栈](#tech-stack) - [已知限制](#known-limitations) - [贡献指南](#contributing) - [许可证](#license) ## 功能特性 - **自动化 JS 发现** — 爬取 HTML 页面,跟踪同源链接,解析 Webpack chunk ID,并获取 Next.js `_buildManifest.js` 以找到目标站点上的所有 JavaScript 文件。 - **Webcrack 反混淆** — 由现代的 `webcrack` 引擎驱动,可自动解包 Webpack/Browserify 模块,解析 obfuscator.io 字符串数组,折叠常量,并移除死代码。 - **源码映射恢复** — 自动探测 `.map` 文件,当可用时重建原始 TypeScript/React 源代码。 - **安全产物提取** — 使用快速的 `acorn` AST 解析,发现 API 端点、硬编码的密钥、开发者注释和环境配置值。 - **清晰的按主机名输出** — 每个扫描的网站都有自己的输出目录。第三方资源被整齐地隔离到 `third-party/` 子文件夹中,以保持对主要目标分析的专注。 - **递归解包** — 如果代码在完整遍历后仍然被显式打包(例如,使用 `eval()` 或 dean edwards packing),阶段四会解包它并自动重新运行(可配置深度)。 - **误报过滤的密钥检测** — 基于熵的密钥检测,通过健壮的启发式方法进行调优,以过滤掉哈希值、CSS 类名和常见的误报。 - **基于内容哈希的去重** — 跨多个页面的相同 JS 文件只处理一次。 ## 快速开始 ``` # 克隆仓库 git clone https://github.com/addydude/De-Caffeinator.git cd De-Caffeinator/blob-unpacker # 安装依赖 npm install # 针对目标运行 npx ts-node src/index.ts https://example.com # 或使用 interactive launcher python run.py ``` ## 安装说明 ### 前置条件 - **Node.js** >= 18.x - **npm** >= 9.x - **Python** >= 3.8 (可选,用于交互式启动器) ### 设置 ``` cd blob-unpacker npm install ``` ## 使用方法 ### 交互式启动器 推荐的运行 Blob Unpacker 的方式是通过交互式 Python 启动器: ``` python run.py ``` 这将呈现一个带预设扫描配置文件的菜单驱动界面: | 配置文件 | 深度 | 页面数 | 并发数 | 适用场景 | |---------|-------|-------|-------------|----------| | **快速扫描** | 1 | 20 | 3 | 初步侦察 | | **完整扫描** | 3 | 100 | 5 | 彻底分析 | | **深度扫描** | 5 | 500 | 8 | 大型应用 | | **隐蔽扫描** | 2 | 50 | 2 | 有速率限制的目标 | ### 直接使用 CLI ``` npx ts-node src/index.ts [options] ``` ### CLI 选项 | 标志 | 简写 | 默认值 | 描述 | |------|-------|---------|-------------| | `--output ` | `-o` | `./output` | 输出目录 | | `--format ` | `-f` | `json` | 数据格式:`json` 或 `jsonl` | | `--depth ` | `-d` | `2` | 链接跟踪的最大爬取深度 | | `--pages ` | `-p` | `50` | 最大爬取页面数 | | `--concurrency ` | `-c` | `5` | 最大并发 HTTP 请求数 | | `--timeout ` | `-t` | `15000` | HTTP 请求超时(毫秒) | | `--delay ` | | `300` | 请求间的礼貌性延迟 | | `--deobf-depth ` | | `5` | 最大递归反混淆遍数 | | `--entropy ` | | `4.5` | 密钥检测的最小香农熵 | | `--no-chunks` | | | 禁用动态 chunk 发现 | | `--no-files` | | | 不写入源码/反混淆后的文件 | | `--user-agent ` | | | 自定义 User-Agent 字符串 | ## 流水线架构 Blob Unpacker 通过一个 6 阶段的流水线处理 JavaScript。每个资源独立地流经这些阶段,由一个内部队列管理并发。 ``` ┌─────────────────────┐ │ CLI / run.py │ │ src/index.ts │ └─────────┬───────────┘ │ ┌─────────▼───────────┐ │ PipelineContext │ │ (config, logger, │ │ state, results) │ └─────────┬───────────┘ │ ┌──────────────▼──────────────┐ │ Stage 1: Ingestion │ │ Discover & download JS │ └──────────────┬──────────────┘ │ AssetRecord[] ┌─────────▼───────────┐ │ AssetQueue │ │ (dedup, concur.) │ └─────────┬───────────┘ │ per asset ┌──────────────▼──────────────┐ │ Stage 2: Map Detection │ │ Check for .map files │ └──────┬──────────────┬───────┘ │ │ map found no map │ │ ┌──────────▼──────┐ ┌─────▼────────────┐ │ Stage 3: │ │ Stage 4: │ │ Reconstruction │ │ De-obfuscation │◄─┐ │ (source map) │ │ (webcrack) │──┘ recursive └──────┬──────────┘ └─────┬────────────┘ if still packed │ │ (e.g., eval wrappers) │ unmapped chunks │ │ ├─────────┘ │ │ ┌──────▼────────▼─────────┐ │ Stage 5: Extraction │ │ Endpoints, secrets, │ │ comments, configs │ └──────────┬──────────────┘ │ ┌──────────▼──────────────┐ │ Stage 6: Output │ │ Per-hostname dirs, │ │ JSON, reports, summary │ └─────────────────────────┘ ``` ### 阶段一 — 摄取 使用多阶段方法发现并下载目标站点上的所有 JavaScript 文件: | 阶段 | 功能 | |-------|-------------| | **1 — 入口页面** | 获取根 HTML,提取所有 `