The-SNEK-Initiative/SNEK_Reverse
GitHub: The-SNEK-Initiative/SNEK_Reverse
一款基于 Rust 的原生逆向工程工作台,通过编译器式分析管道(CFG→IR→SSA)提供从反汇编到伪代码生成的全流程静态分析能力。
Stars: 2 | Forks: 1
# SNEK Reverse
SNEK Reverse 是一个原生的 Rust 逆向工程工作台,拥有现代化的 GUI、分析管道 (CFG → IR → SSA) 以及脚本编写 + 补丁工作流。它的设计旨在保持强大功能的同时,不会让人感觉像是在操作复杂的飞机驾驶舱。
它的构建基于三个核心理念:
- 坚实的基础(图 + 语义),确保随着功能的增加分析依然准确。
- 友好的默认布局,让你在日常使用中无需在各种菜单中苦苦寻找。
- 完全免费。
## 亮点
- 带有标签/注释/书签和快速导航的反汇编视图
- 支持交互式节点拖拽 + DOT 导出的控制流图 (CFG) 视图
- IR + SSA 视图,以及额外的分析标签页(循环 / 类型推断 / 别名摘要)
- 反编译输出(C/C++ 和 Rust 风格的伪代码)
- 支持实时补丁和十六进制转储导出的 Hex 视图
- 带有预设和工作区脚本的 Python 控制台
- 跨所有标签页导出内容的全局搜索 (Ctrl+F),以及反汇编局部搜索 (Ctrl+Shift+F)
- SNEK Lab:科学计算器 + 自定义绑图器(基于表达式)
- 外观控制:暗色/亮色 + 主题色 + 可选的自定义调色板
## SNEK Reverse 是什么(不是什么)
SNEK Reverse 是一个逆向工程工作台:它加载二进制文件,对其进行分析,并为你提供各种视图,帮助你理解其行为并进行受控的编辑。
它(目前还)不是一个完整的调试器,也不试图掩盖逆向工程本身的难度。其目标是使核心工作流更加顺畅,同时保留高级功能的可用性。
## 核心管道
分析管道采用了类似编译器的设计:
1. 解码指令
2. 划分基本块
3. 构建 CFG(后继 + 前驱)
4. 提升为语义 IR
5. 转换为 SSA
6. 运行优化 / 清理遍
7. 渲染 IR / SSA 视图并生成伪代码
正是这一机制赋予了它诸如正确的控制流推理、基于 SSA 的转换以及更稳定的反编译输出等特性。
## 快速开始
### 构建
```
cargo build --release
```
### 运行
```
cargo run --release
```
(或者如果你觉得麻烦,也可以直接从 Releases 标签页下载最新的预构建 exe 文件)
## 支持的格式 / 架构说明
目前核心工作流主要集中在 PE + x86/x86\_64。加载器和反汇编器层采用了结构化设计,因此无需重写 GUI 即可添加其他格式/架构。
## 标签页和工具
应用使用可停靠/标签页布局。你可以关闭标签页,并通过 View 菜单重新打开它们。
### 核心标签页(默认布局)
- 反汇编
- 反编译 (C/C++)
- 反编译
- Hex 视图
- 图视图
- 函数
- 字符串
- 交叉引用
- Python 控制台
- 日志
- SNEK Lab
### 高级标签页(可用,但非强制)
- 分析数据
- IR
- SSA
- 循环
- 类型
- 别名
- 导入
- 导出
- 书签
- 符号树
- 寄存器
- 栈视图
- 熵图
- 资源
## UI 布局
默认布局刻意保持极简。高级视图依然存在,但被归类在以下菜单中:
- View → Advanced Tabs
- View → Reset Layout (Advanced)
这保持了极高的初次使用可用性,同时让深度工具只需一键即可访问。
布局是面向用户的选择:
- Reset Layout (Simple) 让日常工作流保持紧凑。
- Reset Layout (Advanced) 展现所有内容以供深入探究。
## 导航与搜索
- 全局查找:Ctrl+F(在多个标签页的导出文本中搜索)
- 反汇编中查找:Ctrl+Shift+F(在列表中基于地址的导航)
- 查找下一个 / 上一个:F3 / Shift+F3
- 后退 / 前进:Alt+Left / Alt+Right
- 跳转到地址:Navigate → Goto Address…
大多数视图都有一个 Export 部分,可以将当前内容转换为可选择的文本,以便进行 Ctrl+A / Ctrl+C 操作。
## 反汇编工作流
反汇编支持:
- 标签
- 注释
- 书签
- 跳转到目标
- 交叉引用
Export 面板设计用于将内容复制/粘贴到笔记或外部工具中。
## 图视图
图视图以交互方式渲染 CFG:
- 缩放 + 平移
- 拖动节点
- DOT 导出(复制到剪贴板)
## 反编译
SNEK Reverse 从提升的 IR/SSA 管道生成伪代码。
注意事项:
- 输出旨在具备可读性和稳定性,而不是追求“完美的 C 代码”。
- 类型推断是尽力而为的,并会随着更多分析的加入而不断改进。
## IR / SSA / 分析标签页
- IR:提升后程序操作的语义视图
- SSA:重命名的变量、phi 节点和优化形式
- 循环:循环头/尾及成员块(自然循环检测)
- 类型:每个 SSA 变量的尽力推断类型
- 别名:基本的内存位置分类及加载/存储摘要
## Hex 视图与补丁
Hex 视图支持:
- 光标导航
- 内联补丁(在光标处写入字节)
- 复制行 / 复制完整的十六进制转储
- 用于轻松复制/粘贴的导出面板
补丁会更新视图所使用的内存表示。
## 字符串 / 导入 / 导出
- 字符串视图包含在可用时快速导航到交叉引用的功能。
- 导入和导出是从 PE 表中提取的(尽力而为)。
## Python 控制台与脚本工作区
Python 控制台是一个内置的脚本空间,可以针对当前的分析上下文运行预设和工作区脚本。
用例:
- 快速分类脚本(指标、字符串搜索、xref 报告)
- 跨函数/块的自动化
- 自定义数据提取
标准输出/标准错误可见且可复制,某些脚本输出可以驱动 UI 操作(如 goto address / focus xrefs)。
## SNEK Lab(计算器 + 绘图器)
支持:
- 运算符:`+ - * / ^`(带一元 `-`)
- 变量:`ans`、`x`(用于绘图),常量 `pi`、`e`
- 函数:`sin cos tan asin acos atan sqrt abs ln log exp floor ceil round pow min max`
绘图导出:
- 复制 CSV (x,y)
## 外观与个性化
- 暗色 / 亮色 / 自定义主题模式
- 主题色(用于选中/链接样式)
- 可选的自定义调色板(背景/面板/文本)
- 简单与高级布局偏好
个性化设置会自动保存并在下次启动时恢复。
## 性能说明
SNEK Reverse 在后台执行分析工作,因此 GUI 能够保持响应。
一些重度视图被刻意设计为“导出驱动”(文本缓冲区),这样你就可以快速搜索/复制,而无需等待复杂的 UI 组件渲染数千行内容。
## 项目结构
仓库按层划分:
- formats:加载器 (PE/ELF/Mach-O)
- analysis:反汇编 + CFG + IR + SSA + 伪代码
- gui:工作台 UI(标签页、停靠、操作、脚本、导出)
- native:通过 C/C++ 实现的可选原生辅助工具
- threading:一个小型线程池模块(独立授权)
## 许可证
主项目遵循 SNEK Reverse Non-Resale License (SR-NR-1.0)。你可以自由使用、修改和重新分发,但不得将软件(原始或修改后的)作为产品转售。
位于 `src/threading/` 下的 threading 模块采用 MIT 许可证单独授权。详见 `LICENSE_THREADING`。
## 安全 / 安全性说明
逆向工程工具会处理不受信任的输入。请将二进制文件和提取的字符串视为恶意内容:
- 不要在沙箱之外执行未知的二进制文件。
- 将提取的字符串复制/粘贴到 shell 中时要小心。
- 处理恶意软件时最好在虚拟机中进行。
## 应用的未来
目前我们正在开发该应用的 2.0.0 版本,不久后将发布。目前大部分问题是由于 IR 中缺少 Phi 节点引起的,我们正致力于解决此问题。
### 免费软件万岁,**ATroubledSnake**
标签:C++伪代码, DAST, Rust, TLS抓取, UML, 中间表示, 二进制分析, 二进制发布, 二进制补丁, 云安全运维, 云资产清单, 反汇编工具, 反编译器, 可视化界面, 图形用户界面, 基础块, 安全分析工作台, 开源工具, 恶意软件分析, 控制流分析, 控制流图, 类型推断, 网络流量审计, 软件安全, 逆向工具, 逆向工程, 通知系统, 静态单赋值