xsslize/hexed
GitHub: xsslize/hexed
一个基于 Dear ImGui 和 DirectX 11 的 C++ 逆向工程工具包,提供 PE 文件解析、x86/x86-64 反汇编、控制流图重构与十六进制编辑功能。
Stars: 0 | Forks: 0
# hexed




`hexed` 是一个从零开始构建的逆向工程工具包,基于 [Dear ImGui](https://github.com/ocornut/imgui) 和 DirectX 11 后端开发。它可以解析 PE 文件,利用 [Capstone](https://www.capstone-engine.org/) 反汇编 x86 / x86-64 指令,重构控制流图,并在一个简洁的 UI 背后提供交互式导航功能——包括跟踪引用、列出交叉引用、以及任意跳转。
## 截图
| 反汇编 | 控制流图 |
| --- | --- |
|  |  |
## 功能
### 二进制分析
- **导入** — 每个导入的模块(DLL)及其引入的函数,支持按名称或序号显示,并以可筛选的树状结构呈现。该解析器进行了全面的边界检查,对处理畸形或不受信任的输入非常安全。
- **导出** — 包含序号、RVA 和名称的导出函数;转发导出将被解析(例如 `AcquireSRWLockExclusive -> NTDLL.RtlAcquireSRWLockExclusive`)。双击即可在反汇编视图中查看导出。
- **字符串** — 扫描多种编码(严格的 7 位 ASCII、C 语言风格、UTF-16、UTF-32)的可打印字符串,支持实时搜索、按编码切换以及自定义最小长度。双击跳转到十六进制视图,或按 **X** 键查找该字符串在代码中的引用位置。
- **结构体** — 将一系列带类型的字段(`int8`…`int64`、`float`、`double`、`char[]`、`bytes[]`)覆盖到基础偏移处的字节上,并读取每个解析出的值——这是一个轻量级的结构模板/数据检查器。
### 反汇编与控制流
- **反汇编** — 基于 Capstone 详细模式驱动的 x86 / x86-64 代码列表,因此分支和 RIP 相对引用会被解析为绝对地址。支持对助记符/寄存器/立即数进行语法高亮,左侧边栏显示跳转箭头,并内嵌 `; "..."` 字符串注释。导航:
- **单击**操作数中的任何调用/跳转目标即可进行跟踪
- **G** — 跳转到任意地址 · **X** — 列出交叉引用 · **Esc** — 返回跳转历史
- **查找** — 在列表上进行增量文本搜索
- **图(当前位置)** — 将所选函数作为控制流图打开
- **控制流图** — 基本块按广度优先层级排列,具有根据类型(无条件跳转/条件成立/顺序执行)着色的直角流向边缘。拖动进行平移,使用滚轮缩放。
### 十六进制编辑
- **十六进制 / ASCII 视图** — 等宽的地址/十六进制/ASCII 列;每一帧仅渲染可见行(`ImGuiListClipper`),因此即使是数 GB 的文件也能平滑滚动。
- **模式搜索** — 支持带通配符(例如 `48 89 ?? 5C`)的字节模式或文本搜索,并在原处高亮显示,支持跳转到匹配项。
- **跳转到偏移量**,每行字节数可在 4–64 之间调整。
### 界面
- **选项卡式工作区**,顶部包含单行 PE 摘要标题(架构、格式、镜像基址、入口点、节/导入/导出数量)。
- **拖放** 任意文件到窗口即可打开,或通过 `Ctrl+O` 打开。
- **设置** — 重新绑定快捷键,选择 UI/等宽字体及字号(字体图集会实时重建),并编辑完整的主题(颜色、圆角、间距)。
- **命名配置** — 在磁盘上保存/加载/删除快捷键 + 字体 + 主题;启动时会恢复上次使用的配置。
## 构建
环境要求:Windows、CMake ≥ 3.16 以及 MSVC 工具链(Visual Studio 2019/2022 或 Build Tools)。
```
git clone --recursive https://github.com/xsslize/hexed.git
cd hexed
# 如果你忘记了 --recursive:
git submodule update --init --recursive
cmake -B build
cmake --build build --config Release
```
## 架构
平台/渲染层刻意设计得很薄,与编辑器逻辑完全隔离——`main.cpp` 对十六进制编辑一无所知,因此替换后端(例如为了跨平台切换到 OpenGL/GLFW)只需修改该文件。
```
src/
├── main.cpp # Win32 window + DX11 device + frame loop only
├── app/app.* # Menu bar, file dialog, summary header, tab layout
├── core/
│ ├── file-buffer.* # File I/O and byte storage
│ └── settings.* # Global config + named on-disk configurations
├── analysis/
│ ├── pe-parser.* # Bounds-safe PE header / import / export / section parser
│ ├── string-scanner.* # Multi-encoding printable-string scanner
│ ├── disassembler.* # Capstone x86 / x86-64 wrapper (resolved references)
│ └── control-flow-graph.* # Basic-block / CFG builder
└── ui/
├── hex-view.* # Hex widget: clipped rendering + pattern search
├── imports-panel.* # Imports tab
├── exports-panel.* # Exports tab
├── strings-panel.* # Strings tab: scan, search, jump-to-offset
├── disassembly-panel.* # Disassembly tab: listing + navigation + annotations
├── graph-panel.* # Graph tab: CFG layout + pan/zoom canvas
├── struct-panel.* # Struct tab: typed-field overlay
├── settings-panel.* # Settings tab: configs, keybinds, fonts, theme editor
└── theme.* # Style + font loading
```
## 技术与代码风格
C++17 · Dear ImGui (v1.91.5) · Capstone (5.0.9) · DirectX 11 · Win32 · CMake · MSVC
请参阅 [`.clang-format`](.clang-format)。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:Bash脚本, C++17, Dear ImGui, HTTP头分析, PE文件解析, SNI设置, Wayback Machine, 二进制分析, 云安全运维, 云资产清单, 反汇编, 逆向工程