0Rafas/RvSpy
GitHub: 0Rafas/RvSpy
RvSpy 是一个使用 Rust 构建的独立逆向工作站,专为分析打包的 Python 可执行文件而设计,解决传统工具慢、泛用且依赖运行时的问题。
Stars: 3 | Forks: 0

**Advanced Python Executable Reverse Engineering Suite**
*Built entirely in Rust — fast, native, no compromises.*
[](https://www.rust-lang.org/)
[](https://www.microsoft.com/windows)
[](https://github.com/emilk/egui)
[]()
[]()
## 什么是 RvSpy?
RvSpy 是一个独立、完整的逆向工程工作站,专门用于分析 **Python 编译的可执行文件** — 特别是使用 **PyInstaller**、**Nuitka**、**cx_Freeze**、**py2exe** 等打包工具打包的程序。
与通用逆向工具不同,RvSpy 是有明确设计目标的:界面中的每个引擎、每个分析模块都针对理解二进制层面的 Python 可执行文件而校准 — 从 PE 结构到字节码解析、字符串提取、网络 IoC 探测,以及实时 x64 调试。
无需 Python 运行时。不依赖 .NET 或 Java。一个二进制文件,零依赖。
## 目录
- [为什么选择 RvSpy?](#why-rvspy)
- [功能概览](#features-overview)
- [架构](#architecture)
- [核心模块](#core-modules)
- [PE 解析器](#pe-parser)
- [Python 字节码解析器](#python-bytecode-parser-pyc)
- [反汇编引擎](#disassembler-engine)
- [伪 C++ 反编译器](#pseudo-c-decompiler)
- [Nuitka 恢复引擎](#nuitka-recovery-engine)
- [行为特征扫描器](#behavioral-signature-scanner)
- [熵分析器](#entropy-analyzer)
- [字符串与 IoC 提取器](#string--ioc-extractor)
- [控制流图 (CFG) 引擎](#control-flow-graph-cfg-engine)
- [原生 x64 调试器](#native-x64-debugger)
- [x64 沙箱模拟器](#x64-sandbox-emulator)
- [启发式引擎](#heuristics-engine)
- [原生挂钩引擎 (C/ASM)](#native-hooking-engine-casm)
- [高级功能工具栏](#advanced-power-toolbar)
- [GUI 概览](#gui-overview)
- [载荷浏览器 (左侧面板)](#payload-explorer-left-panel)
- [主编辑区 (标签页)](#main-editor-area-tabs)
- [输出与分析面板 (底部)](#output--analysis-panel-bottom)
- [调试器视图 (右侧面板)](#debugger-view-right-panel)
- [主题](#themes)
- [本地化](#localization)
- [十六进制查看器与补丁器](#hex-viewer--patcher)
- [系统要求](#requirements)
- [从源码构建](#building-from-source)
- [运行 RvSpy](#running-rvspy)
- [使用指南](#usage-guide)
- [键盘快捷键](#keyboard-shortcuts)
- [配置与持久化](#configuration--persistence)
- [路线图](#roadmap)
- [致谢](#credits)
## 为什么选择 RvSpy?
大多数逆向工程工具要么:
1. **过于通用** — 为 C/C++ 二进制文件设计,对 Python 打包器内部机制毫无理解。
2. **过于缓慢** — 基于 Electron、Java 或解释型语言构建,每个操作都带来数百毫秒延迟。
3. **过于碎片化** — 你需要 6 个不同工具才能完成 RvSpy 在一个窗口内实现的功能。
RvSpy 从零开始用 **Rust** 编写,采用原生 **egui** UI,最终编译为单个 `.exe` 文件,无需安装即可启动,分析大型可执行文件时内存占用极低。
```
┌─────────────────────────────────────────────────────────────┐
│ RvSpy Architecture │
│ │
│ [Drag & Drop EXE] ──► [PE Parser] ──► [Packer Detection] │
│ │ │
│ ┌─────────┴──────────┐ │
│ │ │ │
│ [Nuitka Engine] [PyInstaller Engine] │
│ │ │ │
│ [PYC Extractor] [OVERLAY Extractor] │
│ │ │ │
│ [Bytecode Parser] ──► [Symbol Recovery] │
│ │ │
│ [Disassembler] ──► [Pseudo-C++ Output] │
│ │ │
│ [CFG Generator] ──► [Graph Visualization] │
│ │
└─────────────────────────────────────────────────────────────┘
```
## 功能概览
### 分析引擎
| 功能 | 描述 |
|---|---|
| **深度 PE 解析** | 完整的 DOS/NT/文件/可选头解析,包含节表、导入表、导出表 |
| **Nuitka 资源恢复** | 从 Nuitka 编译的 EXE 中提取 `.pyc`、`.pyi`、`.so` 及嵌入式资源文件 |
| **PyInstaller 覆盖层提取器** | 定位并提取 PyInstaller 包中的 CArchive/PKG 覆盖层 |
| **Python 字节码解析器** | 读取 `.pyc` 魔数、标志、时间戳及原始 `co_code` 缓冲 |
| **x64 反汇编器** | 基于 Capstone 的快速 x86/x64 反汇编,支持 `.text` 段与任意内存区域 |
| **伪 C++ 反编译器** | 将 x64 指令提升为可读的 C 风格伪代码,含类型提示 |
| **控制流图 (CFG)** | 三阶段 CFG 构建:领袖识别 → 块构建 → 边链接 |
| **Graphviz DOT 导出** | 将任意 CFG 导出为 `.dot` 文件,便于外部图形化工具可视化 |
| **熵分析器** | 按节计算 Shannon 熵,用于检测加密/压缩数据 |
| **行为特征扫描器** | 基于内置签名数据库的静态分析(网络、持久化、加密等) |
| **字符串提取器** | 支持宽字符与 ASCII 字符串提取,可配置最小长度 |
| **网络 IoC 猎手** | 提取 IP、域名、URL 及可疑 DNS 模式 |
| **文件路径 IoC 猎手** | 识别硬编码的 Windows 路径、注册表键、C2 风格路径 |
| **自定义特征猎手** | 使用 SIMD 加速的字节模式扫描,支持用户定义十六进制签名 |
| **十六进制查看器与补丁器** | 完整十六进制编辑器,支持地址导航与磁盘打补丁 |
| **内存补丁器** | 将变更实时注入运行中进程的虚拟内存 |
### 调试
| 功能 | 描述 |
|---|---|
| **原生 x64 调试器** | 通过 Windows Debug API 实现断点、单步、继续、分离 |
| **实时寄存器视图** | 实时显示 RAX、RBX、RCX、RDX、RIP、RSP、RFLAGS |
| **实时反汇编** | 当前指令流的实时展示 |
| **调用栈追踪器** | 每线程的层次化调用栈重建 |
| **内存搜索** | 在进程内存中搜索模式或字符串 |
| **进程附加** | 通过 PID 附加任意运行中的进程 |
| **Unity/Python 专用附加流程** | 针对 Python 运行时的特定附加工作流 |
| **x64 代码沙箱** | 基于 Unicorn Engine 的隔离沙箱,可模拟任意 shellcode |
### UI 与工作流
| 功能 | 描述 |
|---|---|
| **26 套主题** | 从 Dracula 到 Catppuccin、Synthwave、血红等多种风格 |
| **三语言 UI** | 英语、法语、俄语 |
| **载荷浏览器** | 层次化文件树,展示 PE 子结构(DOS/可选头/节) |
| **多标签编辑器** | 支持同时打开多个分析标签页 |
| **自动换行/高亮当前行** | 编辑器基础舒适功能 |
| **持久化设置** | 通过 egui 的 eframe 持久化层自动保存偏好 |
| **拖放支持** | 直接将 `.exe` 文件拖入窗口进行分析 |
## 架构
RvSpy 采用清晰的模块分离设计,无循环依赖:
```
src/
├── main.rs — Entry point, eframe bootstrap
├── gui/
│ └── mod.rs — Entire UI: menus, panels, popups, tabs, toolbar
├── core/ — Pure analysis engines (no UI imports)
│ ├── pe_parser.rs — PE structure parsing
│ ├── strings.rs — String + IoC extraction
│ ├── entropy.rs — Shannon entropy calculation
│ ├── heuristics.rs — Packer detection heuristics
│ ├── behavioral_scanner.rs — Static behavioral signature matching
│ ├── nuitka_recovery.rs — Nuitka archive extraction
│ ├── cfg.rs — Control Flow Graph engine
│ ├── debugger.rs — Native x64 debugger (Windows API)
│ └── emulation.rs — Unicorn Engine sandbox interface
└── python/
├── mod.rs — Python EXE top-level analysis orchestrator
├── pyc_parser.rs — .pyc magic number + bytecode parsing
├── nuitka_mod.rs — Nuitka-specific extraction pass
├── disasm.rs — Capstone disassembly pipeline
├── disassembler.rs — Disassembler config + output types
└── pseudo_cc.rs — x64 → Pseudo-C++ lifter
c_src/
└── hook.c — Native inline trampoline (for future live hook injection)
asm_src/
└── scanner.asm — SIMD-accelerated byte pattern scanner (x64 NASM)
```
GUI 层(`gui/mod.rs`)拥有应用状态(`RvSpyApp`),通过触发标志分发分析任务,并使用即时模式 egui 渲染界面。所有重型任务运行于后台线程,通过 `Arc
>` 状态与 GUI 通信。
## 核心模块
### PE 解析器
`src/core/pe_parser.rs` — 基于 `goblin` 库构建,提供 Windows PE(Portable Executable)文件的深度结构解析。
**能力:**
- 完整 DOS 头(`e_magic`、`e_lfanew`)解析
- NT 头分解:签名、文件头、可选头(32/64 位)
- 节表枚举,包含原始/虚拟地址映射
- 导入描述符表:解析 DLL 名称与导入函数名
- 导出目录:列出导出符号的 RVA
- 通过节名称启发式检测编译器/打包器
- 魔数校验:识别 MZ、PE32、PE32+
**输出字段:**
```
pub struct PeInfo {
pub file_type: String, // "PE32", "PE32+", "Unknown"
pub entry_point: u64,
pub image_base: u64,
pub sections: Vec,
pub imports: Vec,
pub exports: Vec,
pub packer_hint: Option, // "PyInstaller", "Nuitka", "UPX", etc.
pub md5: String,
pub sha256: String,
pub file_size: usize,
}
```
### Python 字节码解析器(.pyc)
`src/python/pyc_parser.rs` — 解码 Python `.pyc` 文件格式头部。
Python 编译字节码文件始终以 4 字节魔数开头,用于编码 Python 版本:
```
Magic bytes ──► Python version map:
0x0D0D0A33 ──► Python 3.8
0x0D0D0A55 ──► Python 3.9
0x0D0D0A6F ──► Python 3.10
0x0D0D0A80 ──► Python 3.11
```
魔数之后是 4 字节标志字段、8 字节时间戳/哈希、4 字节源大小,最后是原始的 `co_code` 序列化流。
RvSpy 的解析器验证头部,提取这些字段,并为后续分析准备原始代码对象缓冲。
### 反汇编引擎
`src/python/disasm.rs` — 封装 **Capstone** 反汇编框架,支持 x86/x64 二进制分析。
处理流水线:
1. 通过 PE 解析器定位 `.text` 段
2. 提取段内原始字节
3. 以 x64 模式传入 Capstone,支持 AT&T 或 Intel 语法
4. 为每条指令标注:偏移、字节、助记符、操作数
5. 检测函数序言(`push rbp; mov rbp, rsp`)以自动识别函数边界
**输出格式:**
```
0x00001000 55 push rbp
0x00001001 48 89 E5 mov rbp, rsp
0x00001004 48 83 EC 20 sub rsp, 0x20
0x00001008 E8 F3 00 00 00 call 0x00001100
```
### 伪 C++ 反编译器
`src/python/pseudo_cc.rs` — 多阶段 x64 指令提升器,将原始反汇编转换为可读的 C 风格伪代码。
**提升策略:**
| 汇编模式 | 提升输出 |
|---|---|
| `mov [rbp-0x8], rax` | `var_8 = rax;` |
| `call 0x1234` | `func_1234();` |
| `cmp rax, 0x0` + `je 0x5678` | `if (rax == 0) goto loc_5678;` |
| `push rbp` / `pop rbp` | 函数序言/尾声标记 |
| `ret` | `return;` |
提升器支持变量名合成、类型宽度推断(BYTE/WORD/DWORD/QWORD)、基于栈偏移的局部变量追踪,以及基础控制流重建。
### Nuitka 恢复引擎
`src/core/nuitka_recovery.rs` + `src/python/nuitka_mod.rs` — 针对 Nuitka 编译可执行文件的原生 C++ 加速提取引擎。
Nuitka 将 Python 代码编译为 C++ 并链接为原生二进制。嵌入式资源(`.pyc`、`.py`、数据文件)以 PE 资源目录项或带有自定义头的 PE 覆盖层形式存储。
**提取流水线:**
```
EXE File
│
├─► Scan PE resource directory for Python-typed entries
│ └─► Extract .pyc / .pyd blobs
│
├─► Scan PE overlay for Nuitka onefile marker
│ └─► Decompress zlib/zstd blob
│ └─► Walk temp archive tree
│
└─► Write extracted artifacts to user-selected output folder
```
C++ 原生分析桥接(`c_src/nuitka_analyzer.cpp`)在构建时通过 `build.rs` 使用 `cc` crate 编译,并直接链接至 Rust 二进制。
### 行为特征扫描器
`src/core/behavioral_scanner.rs` — 静态分析引擎,将提取的字符串标记与内置签名数据库匹配,识别可疑或恶意行为模式。
**严重等级:**
```
┌────────────┬───────────────────────────────────────────────────┐
│ CRITICAL │ Known C2 patterns, shellcode markers │
│ HIGH │ Registry persistence, process injection strings │
│ MEDIUM │ Network socket calls, crypto library usage │
│ LOW │ Temp file paths, common packer artifacts │
└────────────┴───────────────────────────────────────────────────┘
```
**示例签名(子集):**
| 签名 | 类别 | 严重度 |
|---|---|---|
| `WinExec`、`ShellExecuteA` | 执行 | 高 |
| `CreateRemoteThread` | 注入 | 严重 |
| `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run` | 持久化 | 高 |
| `socket`、`connect`、`bind` | 网络 | 中 |
| `CryptEncrypt`、`CryptDecrypt` | 加密 | 中 |
| `IsDebuggerPresent`、`CheckRemoteDebuggerPresent` | 反调试 | 高 |
每条发现包含:匹配字符串、上下文偏移、严重度及描述其指示的行为。
### 熵分析器
`src/core/entropy.rs` — 在 PE 节上实现 Shannon 熵公式。
```
H(X) = -Σ p(xᵢ) · log₂(p(xᵢ))
```
接近 **8.0** 的值表示高度随机化(加密/压缩)数据;低于 **5.0** 通常为明文。RvSpy 在 UI 中对熵值进行颜色编码:
- `> 7.2` → 红色(可能已打包/加密)
- `5.5 – 7.2` → 黄色(混合)
- `< 5.5` → 绿色(明文)
### 字符串与 IoC 提取器
`src/core/strings.rs` — 三种专用提取函数:
**`extract_strings(data, min_len)`**
扫描长度至少为 `min_len` 的连续可打印 ASCII 序列,适用于快速查找嵌入密码、版本字符串、Python 代码片段及硬编码路径。
**`extract_network_ioc(data)`**
使用正则模式检测:
- IPv4 地址(校验八位组范围)
- IPv6 地址
- 域名(至少一个点及有效 TLD 模式)
- URL(`http://`、`https://`、`ftp://`)
- 可疑 DNS 模式(DGA 类似:高辅音/数字比率)
**`extract_filepath_ioc(data)`**
搜索 Windows 风格文件路径:
- `C:\Windows\...`
- `%APPDATA%\...`
- `%TEMP%\...`
- 注册表键路径(`HKEY_*\...`)
- 命名管道模式(`\\.\pipe\...`)
### 控制流图 (CFG) 引擎
`src/core/cfg.rs` — 基于三阶段的算法,用于从反汇编函数体构建控制流图。
**阶段 1:领袖识别**
标记起始基本块的地址:
- 函数第一条指令
- 任意跳转目标
- 任意条件/无条件跳转后的下一条指令
**阶段 2:块构建**
将领袖之间的连续非分支指令分组为 `BasicBlock` 节点。
**阶段 3:边链接**
分析每块终止符:
- 无条件跳转 → 1 个后继
- 条件跳转 → 2 个后继(跳转/落出)
- 调用 → 视为透明(仅落出)
- 返回 → 无后继
**输出:** `ControlFlowGraph` 结构体,包含 `BasicBlock` 节点与类型化的 `Edge` 连接。支持导出为 **Graphviz DOT 格式**:
```
digraph CFG {
node [shape=box, fontname="monospace"]
"0x1000" -> "0x1040" [label="jne taken"]
"0x1000" -> "0x1010" [label="fall-through"]
"0x1040" [label="0x1040\ncmp rax, 0\njne 0x1000"]
}
```
### 原生 x64 调试器
`src/core/debugger.rs` — 基于 Windows `DebugActiveProcess` / `WaitForDebugEvent` API 的完整调试事件循环。
**特性:**
- 启动目标进程并置于调试器控制下
- 通过 PID 附加至已运行进程
- 处理 `EXCEPTION_DEBUG_EVENT`(断点、单步、访问违规)
- 通过 INT3(`0xCC`)设置/移除软件断点(按虚拟地址)
- 使用 `ContinueDebugEvent` 恢复执行
- 捕获线程上下文(`CONTEXT_ALL`)每次调试中断:全部 16 个通用寄存器、RIP、RFLAGS
- 干净分离(不终止目标进程)
调试器运行于 **独立后台线程**,通过 `DebuggerCommand` 通道与 GUI 通信,使用共享的 `Arc>`。
```
GUI Thread Background Debug Thread
│ │
│── Send(Launch("target.exe")) ──►│── CreateProcess (DEBUG_ONLY)
│ │── WaitForDebugEvent loop
│◄── Mutex update (registers) ───│── On EXCEPTION_EVENT: capture context
│ │── ContinueDebugEvent
│── Send(Detach) ───────────────►│── DebugActiveProcessStop
```
### x64 沙箱模拟器
`src/core/emulation.rs` — 与 **Unicorn Engine** 交互,模拟任意 x64 shellcode 的隔离虚拟环境。
沙箱流程:
1. 分配 2MB 虚拟栈 +4MB 代码页
2. 在基地址 `0x400000` 加载提供的 shellcode 字节
3. 从活动调试上下文(或零)初始化寄存器
4. 执行至 `ret` 或由 Hook 定义的停止条件
5. 返回最终寄存器状态用于对比
**寄存器对比视图** 显示前后值,变更的寄存器以绿色高亮。
### 启发式引擎
`src/core/heuristics.rs` — 模式化打包器检测引擎,在初始 PE 分析阶段运行。
检测目标包括:
- **PyInstaller**:`MEI` 字符串标记、`_MEIPASS` 引用、CArchive `PYZ` 头
- **Nuitka**:`_Py_InitializeFromConfig`、`__compiled__`、Nuitka 运行时 DLL 导入
- **cx_Freeze**:资源节中的 `cx_freeze` 目录标记
- **UPX**:`UPX0` / `UPX1` 段名
- **MPRESS**:`MPRESS1` / `MPRESS2` 段名
- **Obsidium**:特征节名称模式
- **PyArmor**:`pytransform` 字符串标记、`armor` 引导代码
### 原生挂钩引擎 (C/ASM)
`c_src/hook.c` + `asm_src/scanner.asm`
两个在构建时编译的低级原生组件:
**hook.c** — 实现 14 字节绝对 x64 跳转跳板,用于内联函数挂钩:
```
typedef struct { uint8_t opcode[2]; uint32_t offset; uint64_t address; } JMP_ABS64;
// Layout: FF 25 00000000 = jmp [rip+0] ;
```
`InstallNativeHook(target, detour, &original)` 将任意函数的前 14 字节修补为跳转到 `detour`,同时将原始序言保存至 `original`。
**scanner.asm** — 使用 x64 NASM 实现的定制特征搜索算法,旨在利用 SIMD 指令以接近内存带宽的速度扫描大型二进制块。
## 高级功能工具栏
功能工具栏位于菜单栏正下方,提供一键访问最强大的分析操作,按四个上下文分组组织:
```
┌──────────────────┬──────────────────┬───────────────────┬──────────────────┐
│ [!] Security │ Reverse Engine │ [P] Dynamic Debug │ Advanced Hunters │
│ Analysis │ │ │ │
├──────────────────┼──────────────────┼───────────────────┼──────────────────┤
│ Behavioral Scan │ Packer Exploits │ Attach Process │ Sig Hunter │
│ Live Mem Strings │ Deep PE Metadata │ Python Attach │ Code Sandbox │
│ Network IoC │ Nuitka Recovery │ F5 Continue │ Auto-Decrypt │
└──────────────────┴──────────────────┴───────────────────┴──────────────────┘
```
每个按钮展开一个 **下拉子菜单**,保持工具栏紧凑的同时暴露最大功能。
## GUI 概览
### 载荷浏览器(左侧面板)
左侧面板(`[+] 载荷浏览器`)为每个加载的可执行文件渲染层次化文件树。每个 EXE 节点展开以显示其内部 PE 结构:
```
▼ [A] TargetApp.exe
▼ [P] PE
[-] DOS Header
[-] File Header
[-] Optional Header
▼ [+] Sections (5)
[-] Section #0: .text
[-] Section #1: .rdata
[-] Section #2: .data
[-] Section #3: .rsrc
[-] Section #4: .reloc
▼ [+] Nuitka Resources (12)
[+] dist/
[-] main.pyc
[-] utils.pyc
```
**右键点击任意节** 打开上下文菜单,包含:
- 十六进制视图
- 反汇编(x86_64)
- 反编译为伪 C++
- 原始内存视图
- 计算信息熵
- 恢复 Nuitka 资源
- 提取字符串
- 生成控制流图 (CFG)
### 主编辑区(标签页)
中心区域托管多个分析标签页。每个标签页包含单个分析操作的结果,例如:
- `.text` 的反汇编
- `.data` 的十六进制转储
- 选定函数的伪 C++ 输出
- 字符串提取结果
- CFG 的 DOT 导出
标签页可单独关闭。所有内容在内存中保留,直到显式关闭标签页。
### 输出与分析面板(底部)
底部面板包含四个标签页:
| 标签页 | 内容 |
|---|---|
| **输出** | 引擎日志:文件加载、分析事件、错误及调试消息 |
| **断点** | 活跃断点列表(地址、命中次数、启用/禁用) |
| **局部变量** | 当前调试帧的局部变量 |
| **[!] 行为** | 行为扫描器发现项及严重度徽章 |
输出标签页右侧还提供“全部复制”和“保存日志”按钮。
### 调试器视图(右侧面板)
激活时,右侧面板显示:
- **[P] CPU 寄存器 (x64)**:实时更新的寄存器文件
- **实时反汇编**:RIP 周围的当前指令流
- **调用栈**:活跃调用链
- **内存浏览器**:在任意地址检查/编辑虚拟内存
## 主题
RvSpy 内置 **26 套手工调优主题**,通过 `视图 → [T] 主题` 访问:
| 主题 | 风格 |
|---|---|
| 标准(深色) | 默认深灰,干净中性 |
| 经典(浅色) | 干净白色,带柔和阴影 |
| Matrix(黑客) | 纯黑背景绿色终端 |
| Dracula | 深炭紫粉 |
| Monokai | 土色调配酸绿高亮 |
| Solarized Dark | 青蓝基调 |
| Solarized Light | 米白基调,学术感 |
| Nord | 北欧蓝灰调色板 |
| Oceanic | 深海蓝 |
| Cherry Pink | 深粉霓虹,最大对比 |
| Deep Blue | 午夜蓝配电光蓝高亮 |
| Cyberpunk | 深紫配霓虹黄 |
| Synthwave | 80s 蒸汽波美学 |
| Gruvbox | 暖色复古终端 |
| Midnight | 纯黑白高亮 |
| Material Dark | Google Material Design 深色变体 |
| Material Light | Google Material Design 浅色变体 |
| Ayu Dark | 深墨配暖橙高亮 |
| Ayu Light | 柔和配暖色高亮 |
| Night Owl | 深海军蓝配紫高亮 |
| Rose Pine | 柔和紫配玫瑰色高亮 |
| Catppuccin | 浅摩卡调色板 |
| Vampire | 深红配近黑 |
| Sunset | 暖黑配橙色高亮 |
| Neon Blue | 黑配青色霓虹 |
| Blood Red | 深红配炭黑 |
## 本地化
RvSpy 支持 3 种 UI 语言,通过 `视图 → [L] 语言` 访问:
| 代码 | 语言 | 覆盖范围 |
|---|---|---|
| `English` | 英语 | 100%(默认) |
| `French` | 法语 | 菜单、标签、弹出框 |
| `Russian` | 俄语 | 菜单、标签、弹出框 |
所有翻译内置于二进制文件,无需外部区域设置文件。
## 十六进制查看器与补丁器
十六进制查看器提供经典三面板布局:
```
Offset Hex Bytes (16 per row) ASCII
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 MZ..............
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 ........@.......
```
**特性:**
- 可配置每行字节数(8 至 64)
- 偏移量以十六进制或十进制显示
- 通过绝对地址或节名称导航
- **十六进制补丁**:直接在十六进制窗格编辑字节
- **解析十六进制并应用补丁到磁盘**:将修补后的字节写回文件
- **恢复为原始值**:从内存恢复预修补状态
## 系统要求
### 运行时要求
| 组件 | 最低要求 |
|---|---|
| **操作系统** | Windows 10 x64 或更高版本 |
| **架构** | 仅 x86_64 |
| **内存** | 256 MB(分析大型目标建议 512 MB) |
| **磁盘** | ~20 MB 用于二进制文件 |
### 可选组件
| 组件 | 用途 | 安装方式 |
|---|---|---|
| **LLVM** | 代码沙箱模拟器(Unicorn Engine) | `winget install LLVM.LLVM` |
### 构建要求
| 组件 | 版本 |
|---|---|
| **Rust** | 1.75+(2021 edition) |
| **MSVC 工具链** | Visual Studio Build Tools 2019+ |
| **NASM** | 用于 `asm_src/scanner.asm` 编译 |
| **Cargo** | 随 Rust 安装 |
## 从源码构建
### 1. 安装 Rust
```
winget install Rustlang.Rustup
rustup install stable-x86_64-pc-windows-msvc
rustup default stable-x86_64-pc-windows-msvc
```
### 2. 安装 Visual Studio 构建工具
从 [Microsoft](https://visualstudio.microsoft.com/visual-cpp-build-tools/) 下载并安装:
- **MSVC v143 编译器**
- **Windows 11 SDK**
###3. 安装 NASM(用于 ASM 扫描器)
```
winget install NASM.NASM
```
### 4. 克隆并构建
```
git clone https://github.com/YourUsername/RvSpy.git
cd RvSpy
cargo build --release
```
输出二进制文件位于:
```
target\release\rvspy.exe
```
### 5. 可选:启用 Unicorn 沙箱
安装 LLVM 后:
```
winget install LLVM.LLVM
```
取消注释 `Cargo.toml` 中的:
```
unicorn-engine = "2.1.5"
```
然后重新构建。
## 运行 RvSpy
**开发模式**(带实时日志输出):
```
cargo run
```
**发布构建**(最快,推荐生产使用):
```
cargo run --release
```
或直接运行编译后的二进制文件:
```
.\target\release\rvspy.exe
```
## 使用指南
### 加载目标
**方法 1**:拖放 — 将任意 `.exe` 文件拖至 RvSpy 窗口。
**方法 2**:菜单 — `文件 → [F] 打开... (Ctrl+O)` 并选择目标。
**方法 3**:多文件加载 — `文件 → 打开列表...` 一次加载多个文件。
### 运行分析
文件加载后:
1. **快速分析** — PE 解析器、启发式引擎与字符串提取器自动运行。
2. **深度 PE 查看** — 点击 `[P] 深度 PE 元数据分析` 或右键 EXE 节点。
3. **反汇编** — 展开 PE 树 → 右键 `.text` → `反汇编 (x86_64)`。
4. **行为扫描** — 点击 `[!] 安全分析 → [B] 运行行为扫描`,结果显示在 `[!] 行为` 标签页。
5. **Nuitka 恢复** — 点击 `逆向工程 → [R] 恢复 Nuitka 资源`,提取文件显示在载荷浏览器。
6. **IoC 提取** — 点击 `[!] 安全分析 → [N] 提取网络/DNS IoC`。
### 调试进程
1. 加载目标 EXE。
2. `调试 → |> 启动 (F5)` — 在调试器下启动进程。
3. 右侧调试器视图激活。
4. 使用 `|> 继续 (F9)`、`步入 (F7)`、`步过 (F8)` 进行导航。
5. 附加至运行中进程:`调试 → [*] 附加到进程...` 并从列表选择。
### 十六进制打补丁
1. 通过右键打开任意节的十六进制视图。
2. 直接在十六进制或 ASCII 列编辑字节。
3. 点击 `[P] 解析十六进制并应用补丁到磁盘` 写入文件。
4. 点击 `恢复为原始值` 撤销。
## 键盘快捷键
| 快捷键 | 操作 |
|---|---|
| `Ctrl+O` | 打开文件 |
| `Ctrl+Shift+O` | 从 site-packages 打开文件 |
| `Ctrl+Shift+S` | 保存所有标签页 |
| `Ctrl+Shift+F` | 搜索字符串 |
| `Ctrl+G` | 跳转到方法/偏移 |
| `F5` | 启动/继续调试 |
| `F7` | 步入 |
| `F8` | 步过 |
| `F9` | 继续(从断点) |
| `Alt+2` | 切换输出面板 |
| `Alt+F4` | 退出 |
## 配置与持久化
RvSpy 自动使用 **eframe 的持久化层**(基于 `serde` JSON 序列化)保存并恢复完整工作空间配置。持久化内容包括:
- 主题与语言
- UI 缩放因子
- 字体偏好
- 十六进制查看器:每行字节数、偏移显示模式
- 编辑器:自动换行、高亮当前行
- 分析选项:目标 Python 版本、启发式激进度、最大反编译深度
- 面板可见性状态
- 打开文件列表与活动标签索引
配置文件存储路径:
```
%APPDATA%\rvspy\app.json
```
## 路线图
- [ ] **符号服务器集成** — 从 Microsoft 符号服务器拉取 Windows API 符号
- [ ] **PyArmor 剥离器** — 自动剥离 `pytransform` 混淆头
- [ ] **Python 3.12/3.13 字节码** — 更新 PYC 解析器以支持新魔数与操作码
- [ ] **深色模式精细化语法高亮** — 反汇编视图的基于词法分析器的着色
- [ ] **函数重命名** — 持久化名称注释,生命周期跨会话保留
- [ ] **Unicorn 完整集成** — 含系统调用钩子与网络模拟的完整沙箱
- [ ] **IDA 风格注释** — 反汇编编辑器中的内联标注支持
- [ ] **多架构支持** — ARM64 反汇编目标(用于分析交叉编译目标)
- [ ] **插件 API** — 提供分析钩子供社区编写分析器
- [ ] **CFG 图形渲染器** — 内置图形化图可视化,替代仅导出 DOT 文件
## 致谢
### RvSpy — 高级 Python 可执行文件逆向工程套件
以精确、专注与无数个深夜构建而成。
**核心开发者与架构师**
| 姓名 | 角色 |
|---|---|
| **0Rafas** | 首席开发者 — 架构、核心引擎、GUI、原生代码 |
**开源基础**
| 项目 | 用途 | 许可证 |
|---|---|---|
| [Rust](https://www.rust-lang.org/) | 系统编程语言 | MIT / Apache-2.0 |
| [egui](https://github.com/emilk/egui) | 即时模式 GUI 框架 | MIT / Apache-2.0 |
| [eframe](https://github.com/emilk/egui/tree/master/crates/eframe) | egui 应用启动器 | MIT / Apache-2.0 |
| [Capstone Engine](https://www.capstone-engine.org/) | 多架构反汇编 | BSD |
| [goblin](https://github.com/m4b/goblin) | 二进制格式解析器(PE/ELF/Mach-O) | MIT |
| [Unicorn Engine](https://www.unicorn-engine.org/) | 多架构 CPU 模拟 | GPL-2 |
| [rfd](https://github.com/PolyMeilex/rfd) | 原生文件打开/保存对话框 | MIT |
| [serde](https://serde.rs/) | 序列化/反序列化 | MIT / Apache-2.0 |
| [regex](https://github.com/rust-lang/regex) | 正则表达式引擎 | MIT / Apache-2.0 |
| [sha2 / md-5](https://github.com/RustCrypto/hashes) | 加密哈希函数 | MIT / Apache-2.0 |
| [flate2](https://github.com/rust-lang/flate2-rs) | Zlib/DEFLATE 压缩 | MIT / Apache-2.0 |
| [sysinfo](https://github.com/GuillaumeGomez/sysinfo) | 系统进程枚举 | MIT |
| [winapi](https://github.com/retep998/winapi-rs) | Windows API 的 Rust 绑定 | MIT / Apache-2.0 |
“理解一切。信任无物。”
© 2026 P1 — 保留所有权利。
*RvSpy 是私有工具,不得分发。*
标签:cx_Freeze, DAST, egui, Nuitka, Nuitka恢复引擎, PE解析, py2exe, PyInstaller, Python可执行文件, Rust开发, URL提取, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 反混淆, 反编译, 可执行文件恢复, 可视化界面, 字符串提取, 恶意软件分析, 熵分析, 独立工具, 端点可见性, 网络IOC, 行为特征扫描, 调试, 逆向工作站, 逆向工程, 通知系统, 零依赖, 静态分析