格式修复
English | 中文
基于 MoonBit 的终端十六进制编辑器与二进制文件分析工具,支持交互式 TUI 界面、20 种文件格式解析、通配符搜索与完整编辑功能。支持 Windows、Linux,同时编译为 Native 和 Wasm-GC 目标。
项目目标 使用 MoonBit 从零构建一个功能丰富的十六进制编辑器,覆盖二进制查看、编辑、搜索、多格式解析、隐写检测、编解码等场景。 选题意义:十六进制编辑器处于系统编程、二进制分析与交互 UI 的交汇处,是检验新语言实践能力的理想领域。本项目证明 MoonBit 能够在一个统一代码库中实现 C FFI 互操作、裸终端控制、跨平台适配、算法优化、多目标编译(Native + Wasm-GC)。 使用场景:二进制结构分析、CTF 隐写挑战、安全取证、通用 hex 编辑。 技术亮点:Gap Buffer O(1) 编辑、Aho-Corasick 多模式扫描、Shift-Or 位并行通配符搜索、香农熵查找表优化、20 种文件格式解析器、书签持久化、复合撤销系统、一套代码双目标编译。
项目目标
使用 MoonBit 从零构建一个功能丰富的十六进制编辑器,覆盖二进制查看、编辑、搜索、多格式解析、隐写检测、编解码等场景。
选题意义:十六进制编辑器处于系统编程、二进制分析与交互 UI 的交汇处,是检验新语言实践能力的理想领域。本项目证明 MoonBit 能够在一个统一代码库中实现 C FFI 互操作、裸终端控制、跨平台适配、算法优化、多目标编译(Native + Wasm-GC)。
使用场景:二进制结构分析、CTF 隐写挑战、安全取证、通用 hex 编辑。
技术亮点:Gap Buffer O(1) 编辑、Aho-Corasick 多模式扫描、Shift-Or 位并行通配符搜索、香农熵查找表优化、20 种文件格式解析器、书签持久化、复合撤销系统、一套代码双目标编译。
git clone https://github.com/R00TK17/moonbit-HexEditor.git cd moonbit-HexEditor
搭建脚本自动处理全部流程:GCC → MoonBit → 依赖 → 构建 → 测试。
chmod +x setup.sh && ./setup.sh
PowerShell -ExecutionPolicy Bypass -File .\setup.ps1
如果一键脚本无法使用,按以下步骤手动操作。
1. 安装 GCC
sudo apt install gcc
yum
pacman
2. 安装 MoonBit
# Linux curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash export PATH="$HOME/.moon/bin:$PATH" # Windows PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser; irm https://cli.moonbitlang.com/install/powershell.ps1 | iex $env:PATH = "$env:USERPROFILE\.moon\bin;$env:PATH"
验证安装:moon version
moon version
如果没有立即生效,重启终端再次输入验证
3. 安装依赖
moon update
4. 构建(两个目标)
moon build moon build --target wasm-gc cmd/wasm
5. 运行测试
moon test # 177 个测试
6. 启动
# TUI 模式 moon run cmd/main -- testfile/test.png # CLI 命令 moon run cmd/main -- view <文件> moon run cmd/main -- struct <文件> moon run cmd/main -- scan <文件> moon run cmd/main -- help # Wasm-GC CLI(轻量,无 TUI) moon run --target wasm-gc cmd/wasm -- struct <文件>
7. 运行演示
# Linux / macOS chmod +x demo.sh && ./demo.sh # Windows PowerShell .\demo.ps1
自动运行 6 个代表性命令(struct、scan、view、entropy、encode、search),使用项目自带的测试文件。
moon add R00TK17/hex_editor
// 解析二进制文件结构(20 种格式自动识别) let fields = @R00TK17/hex_editor.parse_structure(bytes) // 签名扫描(18 种格式验证器,Aho-Corasick 自动机) let matches = @R00TK17/hex_editor.scan_signatures(bytes) // 香农熵分析(256 字节块,查找表优化) let blocks = @R00TK17/hex_editor.entropy_scan(bytes) // 通配符搜索 let result = @R00TK17/hex_editor.find_hex_pattern(bytes, "FF ?? ?? EE") // 编解码:Base64 / URL / Unicode / Hex let b64 = @R00TK17/hex_editor.base64_encode(bytes)
↑↓
←→
g #N
/
f
n
N
??
*
*N
FF ?? 00
89 *3 0D 0A
?
\
He*ld
\?
Ins
Ctrl+Z
Ctrl+R
Ctrl+X
Ctrl+Y
Ctrl+N
Ctrl+L
Ctrl+B
#N
~/.hexedit/
w
s
h
x
e
c
m
Enter
Tab
o
moon run cmd/main -- view [-b 8|16] <文件> 快速十六进制查看 moon run cmd/main -- info <文件> 文件信息与类型识别 moon run cmd/main -- search [-x|-a] <f> <p> 搜索(hex/文本) moon run cmd/main -- struct <文件> 结构解析 moon run cmd/main -- strings <文件> 字符串提取 moon run cmd/main -- entropy <文件> 熵分析 moon run cmd/main -- scan <文件> 签名扫描 moon run cmd/main -- hash <文件> 哈希/校验和 (MD5/SHA1/SHA256/SHA224/SM3) moon run cmd/main -- encode <类型> <文件> 编码 (base64/url/unicode/hex) moon run cmd/main -- decode <类型> <文件> 解码 (base64/url/unicode/hex) moon run cmd/main -- base64 <文件> Base64 编码(别名) moon run cmd/main -- unbase64 <文件> Base64 解码(别名)
moon run --target wasm-gc cmd/wasm -- view <文件> Hex dump(前 256 字节) moon run --target wasm-gc cmd/wasm -- struct <文件> 结构解析 moon run --target wasm-gc cmd/wasm -- scan <文件> 签名扫描 moon run --target wasm-gc cmd/wasm -- hash <文件> 哈希/校验和 moon run --target wasm-gc cmd/wasm -- search <文件> <模式> 搜索 moon run --target wasm-gc cmd/wasm -- strings <文件> 字符串 moon run --target wasm-gc cmd/wasm -- entropy <文件> 熵分析 moon run --target wasm-gc cmd/wasm -- encode <类型> <输入> 编码 moon run --target wasm-gc cmd/wasm -- decode <类型> <输入> 解码
$ moon run cmd/main -- struct testfile/test.png File: testfile/test.png (1.8 MB) 0x00000000 Signature = 89 50 4E 47 0D 0A 1A 0A -- PNG signature 0x00000008 IHDR = 13 bytes -- Image Header: 3178x1334, 8bpp 0x00000021 pHYs = 9 bytes -- Physical dimensions 0x00000530 IDAT = 1048576 bytes -- Image data block 0x001D0E32 IEND = 0 bytes -- Image end $ moon run cmd/main -- scan testfile/hidden.jpg 0x00000000 JPEG image (83.8 KB) 0x0000A41A Trailing data (82 B) 2 signatures found $ moon run cmd/main -- encode base64 Hello SGVsbG8=
解析详情:图像/视频尺寸、音频采样率/声道、压缩方法与文件名、可执行文件段表、ZIP/RAR加密检测。
构建完成后,日常开发可使用以下命令:
# 代码修改后重新构建 moon build # 运行测试 moon test # 启动 TUI moon run cmd/main -- 文件.bin moon run cmd/main # 空编辑器 # CLI 一次性命令(不进入 TUI) moon run cmd/main -- view 文件.bin moon run cmd/main -- struct 文件.bin moon run cmd/main -- scan 文件.bin
q
Esc
↑↓←→
0-9 a-f
Home/End
g
Del
p
t
b
结构视图模式:↑↓←→ 滚动、t/Esc 返回十六进制视图、q 退出。
书签列表:↑↓ 选择、Enter 跳转、d 删除、b/Esc 关闭、q 退出、Ctrl+B 设置。
d
签名扫描:↑↓←→ 导航、Enter 跳转、x 提取、w/Esc 关闭,未编辑时结果缓存。
熵分析:↑↓←→ 导航、Enter 跳转、h/Esc 关闭。
字符串提取:↑↓←→ 导航、Enter 跳转+高亮、s/Esc 关闭。
编解码:←→ 切换类型(Base64/URL/Unicode/Hex)、Tab 切换编码/解码、直接输入文本、Esc 关闭。
哈希:↑↓ 选择、Enter 复制到状态栏、m/Esc 关闭。
文件浏览器(o):↑↓ 导航、Enter 打开文件/进入目录、o 输入路径、Esc 取消。
文件列表(Tab):↑↓ 选择、Enter 切换、d 关闭文件、Tab/Esc 返回。
CreateFileMapping
write()
mmap
hex_editor/ ├── hex_editor.mbt # HexBuffer 数据模型、文件 I/O、编辑基本操作 ├── hex_view.mbt # 十六进制格式化、尺寸显示 ├── hex_search.mbt # 搜索:BMH 精确、通配符(?? * *N)、文本模式(? * \) ├── hex_struct.mbt # 20 种文件格式解析器 + JSON 导出 ├── hex_scan.mbt # 签名扫描(18 种格式)、Aho-Corasick 自动机 ├── hex_strings.mbt # 可打印 ASCII 字符串提取 ├── hex_entropy.mbt # 香农熵分析(256 字节块) ├── hex_codec.mbt # 编解码:Base64、URL、Unicode、Hex ├── hex_hash.mbt # 哈希/校验和:MD5、SHA1、SHA256、SHA224、SM3 ├── hex_editor_test.mbt # 177 个单元 + 集成测试 ├── cmd/main/ │ ├── main.mbt # CLI 入口(view/info/struct/strings/entropy/scan) │ ├── helpers.mbt # CLI 参数解析、文件加载、类型检测 │ ├── helpers_wbtest.mbt # 白盒测试:parse_int、detect_type、CLI 辅助函数 │ ├── helpers_native.mbt # Native 平台辅助函数(hex/ASCII 转换) │ ├── tui.mbt # TUI 主循环、FFI 声明、mmap 加载 │ ├── tui_key.mbt # 所有模式的按键分发、TuiState 结构体 │ ├── tui_bookmark.mbt # 书签功能(21 槽位)、设置/跳转/删除 │ ├── tui_files.mbt # 文件浏览器、多文件管理、书签持久化 │ ├── tui_files_wbtest.mbt # 白盒测试:UTF-8 解码器、路径辅助函数 │ ├── tui_draw.mbt # 屏幕渲染(hex dump、弹窗、状态栏/帮助栏) │ ├── tui_edit.mbt # TUI 编辑模式、基于 UndoOp 的撤销/重做 │ ├── tui_edit_wbtest.mbt # 白盒测试:撤销/重做全部 5 种操作类型 │ └── tui_stub.c # C 桩(终端、mmap、目录列表、UTF-8) ├── cmd/wasm/ │ └── main.mbt # Wasm-GC CLI 入口(轻量版,无 FFI) ├── testfile/ # 25 个测试文件(覆盖所有支持格式) ├── .github/workflows/ci.yml # CI:检查 → 格式 → info+diff → 构建 (native+wasm) → 测试 (Linux+Win) ├── setup.sh / setup.ps1 # 一键搭建脚本 ├── demo.sh / demo.ps1 # 运行 6 个 CLI 演示命令 └── TECHNICAL_REPORT.md # 初赛技术说明文档
代码规模: 6,202 行 MoonBit(3,127 共享核心库 + 2,874 Native CLI/TUI + 201 Wasm CLI)+ 458 行 C FFI + 1,577 行测试。
Apache-2.0
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
English | 中文
MoonBit 十六进制编辑器
基于 MoonBit 的终端十六进制编辑器与二进制文件分析工具,支持交互式 TUI 界面、20 种文件格式解析、通配符搜索与完整编辑功能。支持 Windows、Linux,同时编译为 Native 和 Wasm-GC 目标。
环境要求
快速开始
一键搭建
搭建脚本自动处理全部流程:GCC → MoonBit → 依赖 → 构建 → 测试。
chmod +x setup.sh && ./setup.shPowerShell -ExecutionPolicy Bypass -File .\setup.ps1手动搭建
如果一键脚本无法使用,按以下步骤手动操作。
1. 安装 GCC
sudo apt install gcc(或yum/pacman)2. 安装 MoonBit
验证安装:
moon version如果没有立即生效,重启终端再次输入验证
3. 安装依赖
4. 构建(两个目标)
5. 运行测试
6. 启动
7. 运行演示
自动运行 6 个代表性命令(struct、scan、view、entropy、encode、search),使用项目自带的测试文件。
作为库使用
功能特性
交互式 TUI 界面
↑↓逐行、←→翻页)、Home/End跳转、Goto定位 / 书签跳转(g #N)/十六进制模式搜索、fASCII文本搜索、n/N上下匹配??任意字节、*任意长度、*N跳过 N 字节(如FF ?? 00、89 *3 0D 0A)?任意字符、*任意长度、*N跳过 N 字符、\转义(如He*ld、\?)Ins切换插入/覆写、删除、撤销/重做(Ctrl+Z/Ctrl+R)、保存(Ctrl+X)Ctrl+Y开始选区、Ctrl+N复制、Ctrl+L粘贴(复合撤销)Ctrl+B设置,#N跳转,持久化(自动保存/加载到~/.hexedit/)w键,18 种格式,每格式独立验证,置信度过滤,去重,结果缓存w/s/h重新打开时保持上次位置,编辑后自动清除h键,256 字节块,香农熵色彩柱状图s键,可打印 ASCII 序列(>=4 字节),支持缓存、跳转高亮x键提取选中段,尾部数据自动告警e键在结构/字符串视图 — 结构为 JSON,字符串为纯文本c键,交互式 Base64/URL/Unicode/Hex 编解码,实时预览m键,MD5/SHA1/SHA256/SHA224/SM3(国密),Enter复制到状态栏Tab文件列表弹窗,独立切换/关闭o键打开目录浏览,Enter打开/进入,o输入路径,支持中文文件名~/.hexedit/,下次打开自动恢复CLI 命令
Wasm-GC CLI(轻量版,无 TUI,无 FFI)
输出示例
文件结构解析(20种格式)
解析详情:图像/视频尺寸、音频采样率/声道、压缩方法与文件名、可执行文件段表、ZIP/RAR加密检测。
日常使用
构建完成后,日常开发可使用以下命令:
TUI 快捷键
qEsc↑↓↑↓←→←→0-9 a-fHome/EndTabgIns/DelfCtrl+ZnCtrl+RpCtrl+XeCtrl+YtCtrl+NbCtrl+LwCtrl+BhscmoTab结构视图模式:
↑↓←→滚动、t/Esc返回十六进制视图、q退出。书签列表:
↑↓选择、Enter跳转、d删除、b/Esc关闭、q退出、Ctrl+B设置。签名扫描:
↑↓←→导航、Enter跳转、x提取、w/Esc关闭,未编辑时结果缓存。熵分析:
↑↓←→导航、Enter跳转、h/Esc关闭。字符串提取:
↑↓←→导航、Enter跳转+高亮、s/Esc关闭。编解码:
←→切换类型(Base64/URL/Unicode/Hex)、Tab切换编码/解码、直接输入文本、Esc关闭。哈希:
↑↓选择、Enter复制到状态栏、m/Esc关闭。文件浏览器(
o):↑↓导航、Enter打开文件/进入目录、o输入路径、Esc取消。文件列表(
Tab):↑↓选择、Enter切换、d关闭文件、Tab/Esc返回。平台说明
CreateFileMappingmmapwrite(),mmap(系统调用)项目结构
代码规模: 6,202 行 MoonBit(3,127 共享核心库 + 2,874 Native CLI/TUI + 201 Wasm CLI)+ 458 行 C FFI + 1,577 行测试。
依赖
许可证
Apache-2.0