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,提取所有 `