NgoHuuLoc0612/PE-Visualizer
GitHub: NgoHuuLoc0612/PE-Visualizer
结合 C++20 高性能后端与 Next.js 可视化前端的 PE 静态分析平台,为恶意软件分析与二进制逆向工程提供全面的解析、反汇编、YARA 扫描与异常检测能力。
Stars: 2 | Forks: 0
# PE Visualizer v2.0
**Portable Executable (PE32/PE64) 静态分析平台**
一款恶意软件分析与二进制逆向工程工具,结合了高性能的 C++20 后端分析与直观的 Next.js/TypeScript 前端。支持全面的 PE 解析、x86/x64 反汇编、YARA 扫描、熵分析和异常检测。
## 📊 项目统计
| 指标 | 数值 |
|--------|-------|
| **总文件数** | 31 |
| **总代码行数** | 15,907 |
| **前端文件数** | 15 |
| **前端代码行数** | 11,457 |
| **后端文件数** | 16 |
| **后端代码行数** | 4,450 |
| **前端语言** | TypeScript/React (Next.js 14) |
| **后端语言** | C++20 |
## 🏗️ 架构
```
PE-Visualizer/
├── build.bat # Build automation script
├── README.md # Project documentation
│
├── frontend/ # Next.js 14 + TypeScript UI (11,457 LOC, 15 files)
│ ├── app/
│ │ ├── api/upload/route.ts # File upload API endpoint
│ │ ├── globals.css # Global styles
│ │ ├── layout.tsx # Root layout component
│ │ └── page.tsx # Main SPA application
│ ├── lib/
│ │ ├── api.ts # API client & utilities
│ │ ├── store.ts # Zustand state management
│ │ └── types.ts # TypeScript PE type definitions
│ ├── next.config.js # Next.js configuration
│ ├── package.json # Dependencies & scripts
│ ├── postcss.config.js # PostCSS configuration
│ ├── tailwind.config.ts # Tailwind CSS configuration
│ └── tsconfig.json # TypeScript configuration
│
└── server/ # C++20 High-Performance Backend (4,450 LOC, 16 files)
├── CMakeLists.txt # CMake build configuration
├── vcpkg.json # C++ dependency manifest
└── src/
├── main.cpp # Entry point & HTTP route handlers
├── pe_parser.hpp/.cpp # Comprehensive PE binary parser
├── disassembler.hpp/.cpp # x86/x64 disassembly engine (Zydis)
├── yara_scanner.hpp/.cpp # Threat intelligence rule engine
├── http_handler.hpp/.cpp # Boost.Beast HTTP server
├── anomaly_detector.cpp # Anomaly detection engine
├── entropy.cpp # Entropy calculation & analysis
├── string_extractor.cpp # String extraction & categorization
├── resource_parser.cpp # PE resource section parsing
└── rich_header.cpp # Rich header analysis
```
## ✨ 核心功能
### 🔍 PE 解析引擎
包含 20 多个子组件的完整 PE32/PE64 二进制分析:
| 组件 | 功能 |
|-----------|--------------|
| **DOS Header** | 完整的 IMAGE_DOS_HEADER 提取 + stub 分析 |
| **Rich Header** | XOR 解密、校验和验证、VS 版本检测(2002–2022) |
| **File Header** | 机器类型、时间戳解码、特征标志 |
| **Optional Header** | PE32/PE64 检测、所有标准字段、校验和验证 |
| **Data Directories** | 所有 16 个目录项及其 RVA/大小验证 |
| **Sections** | RWX 权限、熵指标、MD5/SHA-256 哈希计算、异常检测 |
| **Import Directory** | 完整的 INT/IAT 解析、绑定导入、序号解析、API 分类 |
| **Delay Imports** | 基于属性的解析、RVA/VA 转换、延迟加载树 |
| **Export Directory** | 函数枚举、转发器检测、序号跟踪 |
| **Resources** | 递归 3 级树状解析、每个资源的熵/格式分析 |
| **Debug Directory** | PDB 路径提取、GUID/年龄(CodeView RSDS)、所有调试类型 |
| **TLS Directory** | PE32/PE64 回调数组枚举 |
| **Load Config** | CFG/SEH 标志、/GS cookie 检测、保护防护标志 |
| **Exception Directory** | x64 RUNTIME_FUNCTION 展开信息 |
| **Base Relocations** | 逐块解析、重定位类型解码 |
| **CLR/.NET Header** | 运行时版本、托管代码标志、入口点 token |
| **Overlay Detection** | 文件尾部分析、熵分析、嵌入文件检测 |
| **Hashing** | MD5、SHA-1、SHA-256 (OpenSSL)、导入哈希 |
| **Signatures** | Authenticode 证书检测 |
### 🎯 异常检测
用于恶意软件识别的 15+ 项异常检查:
- RWX 节(可执行 + 可写)
- 入口点位于代码节之外
- 加壳/可疑节(如 UPX 等)
- 反调试 API 导入
- 进程注入模式
- 可疑的注册表访问
- 网络命令与控制(C2)模式
- 异常的导入链
### 🔧 反汇编程序 (x86/x64)
- **引擎:** Zydis 解码库
- **语法:** 强制段/大小前缀的 Intel 语法
- **功能:**
- 彩色指令分类(call、jmp、jcc、ret、nop、特权指令、syscall、栈操作、mov)
- 分支目标解析与绝对地址计算
- 交互式导航:点击跟随 call/jump
- 带有可配置视图的入口点自动跳转
- RVA/大小过滤
### 🛡️ YARA 威胁情报
内置包含 14 个规则类别的检测引擎:
- PE 文件结构验证
- 反调试 API 检测(IsDebuggerPresent、NtQueryInformationProcess 等)
- 进程注入检测(VirtualAllocEx、WriteProcessMemory、CreateRemoteThread)
- 网络与 C2 模式(InternetOpenUrl、WSAConnect、WinHttp)
- 加壳特征(UPX、MPRESS、ASPack、VMProtect、Themida)
- Shellcode 模式(PEB 访问、Metasploit stagers)
- 加密常量(AES S-box、SHA-256 init、RC4/RSA 字符串)
- 进程镂空序列
- 凭据收集与键盘记录器
- 嵌入式/投放器 PE 检测
- 持久化注册表键
- PowerShell/脚本执行
- 通过 Web UI 支持自定义规则
- 每个匹配字符串位置的十六进制/ASCII 转储预览
### 📊 熵分析
- 逐块熵计算(256 字节块)
- 节级熵指标
- 带有面积图的可视化熵图
- 加壳/压缩节检测
### 🔎 字符串提取
- ASCII + UTF-16LE 提取
- 自动分类:
- URL 与域名
- IP 地址 (IPv4/IPv6)
- 注册表键
- 电子邮件地址
- 文件路径
- 带有搜索/过滤的分页浏览器
## 🎨 前端 UI 组件
| 面板 | 描述 |
|-------|-------------|
| **Overview** | 执行摘要:文件哈希、PE 徽章、安全功能网格、节熵柱状图、安全配置雷达图、异常摘要 |
| **Headers** | 选项卡视图:DOS、Rich、File、Optional headers + 所有 Data Directories |
| **Sections** | 表格视图,包含 RWX 标志、熵条、哈希、快速启动反汇编程序/十六进制视图 |
| **Imports** | 带有函数列表的可折叠 DLL 树、绑定导入检测、搜索 |
| **Exports** | 目录元数据、可搜索函数表、转发器分析 |
| **Resources** | 递归树状视图、每个资源的熵指标、格式检测 |
| **Disassembler** | 带有彩色指令的完整列表、分支跟随、入口点导航 |
| **Hex View** | 16 字节宽的十六进制转储及 ASCII 列、基于 RVA 的导航 |
| **Strings** | 分页显示、类别过滤器、编码切换、搜索功能 |
| **YARA Matches** | 内置规则 + 自定义规则编辑器、带有字符串位置的匹配详情 |
| **Anomalies** | 按严重程度过滤的警报,带有类别徽章和描述 |
| **Entropy Map** | 可视化面积图(256 字节块)+ 节熵叠加 |
| **Debug Info** | 所有调试条目:PDB 路径、GUID、年龄、调试类型目录 |
## 🚀 快速开始
### 环境要求
- **后端:** C++20、CMake 3.20+、vcpkg、Boost、OpenSSL、Zydis
- **前端:** Node.js 18+、npm/yarn
### 构建与运行
```
# 执行 build 脚本
./build.bat
# 或手动 backend 构建
cd server && cmake -B build && cmake --build build --config Release
# 前端开发
cd frontend && npm install && npm run dev
```
## 📦 技术栈
### 后端
- **语言:** C++20
- **HTTP 服务器:** Boost.Beast
- **PE 解析:** 自定义实现
- **反汇编:** Zydis 库
- **威胁扫描:** YARA 引擎
- **加密:** OpenSSL
### 前端
- **框架:** Next.js 14
- **语言:** TypeScript
- **样式:** Tailwind CSS
- **状态管理:** Zustand
- **可视化:** Recharts
- **UI:** 自定义 React 组件
## 📝 许可证与致谢
为安全研究人员、恶意软件分析师和逆向工程师精心打造的专业级综合二进制分析平台。
| **TLS** | 目录字段 + 回调地址列表 |
| **Load Config** | CFG/SEH/Cookie 标志,已解码的 guard flags |
| **.NET CLR** | 运行时版本、标志 |
| **Overlay** | 偏移量、大小、熵、格式、十六进制预览 |
| **Relocations** | 块表:VA、大小、条目数 |
| **Signature** | 签名/验证状态 |
## 构建与运行
### 前置条件
**后端(Windows 环境使用 MSVC 或 MinGW,或交叉编译):**
```
- CMake 3.20+
- Boost 1.82+ (system, filesystem)
- OpenSSL 3.x
- nlohmann/json 3.11+
- YARA 4.4+ (libyara)
- Zydis 4.x
- C++20 compiler (MSVC 19.29+ / GCC 12+ / Clang 15+)
```
**前端:**
```
- Node.js 18+
- npm / yarn
```
### 后端构建
```
cd server
# 配置(以 vcpkg 为例)
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=x64-windows
cmake --build build --config Release
# 运行
./build/Release/pe_server.exe --host 127.0.0.1 --port 8765 --threads 8
```
**需要安装的 vcpkg 包:**
```
vcpkg install boost-beast boost-asio boost-filesystem openssl nlohmann-json yara zydis
```
**Linux/macOS(为 Windows 分析进行交叉编译):**
```
sudo apt install libboost-all-dev libssl-dev libyara-dev
# Zydis:从 https://github.com/zyantific/zydis 进行 cmake install
```
### 前端
```
cd frontend
npm install
npm run dev # Development: http://localhost:3000
npm run build && npm start # Production
```
## API 参考
所有 endpoint 均返回 `application/json`。开发环境下 CORS 完全开放。
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| `POST` | `/api/upload` | 上传 PE 文件 (base64),返回 `session_id` |
| `GET` | `/api/analyze?session=ID` | 完整的 PE 分析 JSON |
| `GET` | `/api/disasm?session=ID&rva=N&size=N&max=N` | 在 RVA 处进行反汇编 |
| `GET` | `/api/hexdump?session=ID&rva=N&size=N` | 十六进制转储行 |
| `POST` | `/api/yara` | `{session, rules}` — YARA 扫描 |
| `GET` | `/api/strings?session=ID&filter=CAT&q=QUERY&limit=N&offset=N` | 提取的字符串 |
| `GET` | `/api/section_data?session=ID&name=.text` | 原始节十六进制 |
| `GET` | `/api/entropy_map?session=ID` | 块 + 节熵 |
| `GET` | `/api/sessions` | 列出所有会话 |
| `DELETE` | `/api/session?id=ID` | 删除会话 |
| `GET` | `/health` | 服务器健康检查 |
### 上传请求
```
{
"filename": "malware.exe",
"data": ""
}
```
### 上传响应
```
{
"session_id": "1a2b3c4d5e6f7a8b",
"filename": "malware.exe",
"file_size": 102400,
"pe_type": "EXE",
"valid": true
}
```
## 异常检测规则
| 规则 | 严重程度 | 描述 |
|------|----------|-------------|
| 零时间戳 | MEDIUM | TimeDateStamp 被擦除 |
| 不合理时间戳 | HIGH | 过于未来的日期 |
| RWX 节 | HIGH | 可写 + 可执行 |
| 节熵值过高 | MEDIUM | >7.0 bits |
| 原始数据超出 EOF | HIGH | 畸形的 PE |
| 入口点在不可执行节 | HIGH | 加壳指示器 |
| 入口点在所有节之外 | CRITICAL | Shellcode/stub |
| 无导入 | HIGH | 已加壳/混淆 |
| 导入极少 | MEDIUM | 可能已加壳 |
| TLS 回调 | MEDIUM | 入口点前执行 |
| 无 Rich header | LOW | 非 MSVC 工具 |
| 无效的校验和 | MEDIUM | 构建后被修改 |
| Overlay 数据 | MEDIUM/HIGH | 追加的 payload |
| 文件熵值过高 | MEDIUM | >7.2 bits |
| 可疑的 API | MEDIUM | 发现注入/反调试 API |
## 会话管理
会话保存在服务器的内存中,不进行任何磁盘写入。每个会话存储:
- 原始文件字节
- 解析后的 PE 结构
- 预计算的 JSON 响应
会话将一直保留,直到被显式删除或服务器重启。建议的最大并发会话数:约 20(取决于内存 RAM)。
## 安全提示
该工具执行**只读静态分析**——它绝不执行、加载或映射 PE 文件。所有解析均在原始字节缓冲区上完成。可安全用于分析实战恶意软件样本。
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 后端语言 | C++20 |
| HTTP 服务器 | Boost.Beast 1.82 |
| PE 解析 | 自定义 (windows.h / winnt.h 结构体) |
| 反汇编程序 | Zydis 4.x |
| YARA | libyara 4.4 |
| 哈希计算 | OpenSSL 3.x (MD5/SHA1/SHA256) |
| JSON | nlohmann/json 3.11 |
| 前端框架 | Next.js 14 (App Router) |
| 语言 | TypeScript 5 |
| 状态管理 | Zustand |
| UI 组件 | shadcn/ui + Radix UI |
| 图表 | Recharts |
| 动画 | Framer Motion |
| 样式 | Tailwind CSS |
| 数据获取 | Axios + SWR |
| 文件上传 | react-dropzone |
##可证
MIT
标签:Bash脚本, C++20, DAST, DNS 反向解析, PE文件解析, Wayback Machine, YARA, 二进制逆向工程, 云资产可视化, 反汇编, 安全测试工具, 恶意软件分析