关于 Hallucina
Hallucina 是基于 LLVM 17 的编译工具,可对单个源文件或较大型项目应用代码混淆。它面向希望增加编译程序分析难度的开发者,也可用于涉及反汇编 MCP 服务的工作流程。
主要功能
- 01间接跳转混淆
- 02间接函数调用混淆
- 03间接全局变量引用混淆
- 04C 字符串加密
- 05控制流平坦化
适用场景
- 01混淆单个 C 源文件
- 02在项目构建中加入混淆标志
- 03提高编译代码的分析难度
MCP 相关
Hallucina 本身不是 MCP 服务,而是基于 LLVM 的混淆工具;项目说明其可与 Ghidra、IDA PRO 等反汇编器的自定义 MCP 服务配合使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Hallucina
Hallucina 是一款功能强大的混淆工具,旨在迷惑使用自定义 MCP 服务的 LLM 客户端。这些 MCP 服务用于 Ghidra 和 IDA PRO 等反汇编工具。
Hallucina 会强制进行人工主导的逆向工程。LLM 不会替我们做逆向工程!抱歉啦,小朋友们 :)
用法
Hallucina 提供了简单的界面,可应用混淆技术。以下是一些使用示例:
混淆单个文件
使用生成的 clang(LLVM 17)混淆单个源文件:
path_to_build/bin/clang -mllvm -irobf -mllvm --irobf-indbr test.c -o test_obfuscated
此命令会将标志 -mllvm -irobf 和 -mllvm --irobf-indbr 指定的混淆技术应用于 test.c 文件,并生成名为 test_obfuscated 的混淆输出文件。
以下是原始测试代码与混淆后代码之间的差异:

混淆项目
对于较大的项目,请将 Hallucina 集成到构建系统中:
CC=path_to_build/bin/clang
CFLAGS+="-mllvm -irobf -mllvm --irobf-indbr"
./configure
make
可用的混淆标志
- 混淆过程之间的关联。
- 间接跳转,对跳转目标进行加密(
-mllvm -irobf-indbr)。 - 间接函数调用,对目标函数地址进行加密(
-mllvm -irobf-icall)。 - 间接全局变量引用,对变量地址进行加密(
-mllvm -irobf-indgv)。 - C 字符串加密(
-mllvm -irobf-cse)。 - 与过程相关的控制流平坦化混淆(
-mllvm -irobf-cff)。 - 综合应用上述所有功能(
-mllvm -irobf-indbr -mllvm -irobf-icall -mllvm -irobf-indgv -mllvm -irobf-cse -mllvm -irobf-cff)。
构建 Hallucina
Hallucina 支持使用 LLVM 17 构建。请按照以下说明设置构建环境。
前置条件
Windows
- 安装 Ninja,并确保其位于 PATH 中。
- 安装带有 C++ 开发工具的 Visual Studio 2022。
Linux
运行以下命令安装前置条件:
sudo apt update && sudo apt install -y build-essential cmake ninja-build python3
构建说明
Windows
- 打开适用于 VS 2022 的 x64 Native Tools 命令提示符。
- 运行以下命令:
mkdir build
cd build
cmake -DCMAKE_CXX_FLAGS="/utf-8" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" -G "Ninja" ../llvm
ninja
Linux
- 运行以下命令:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb" -G "Ninja" ../llvm
ninja
常见问题排查
编译错误
如果编译时遇到错误,例如缺少头文件或 GCC 特有的问题,请确保:
- 在报告缺少
std::ifstream的文件中添加#include <fstream>。 - 使用最新版本的 GCC 或 Clang,以确保兼容性。
构建期间的内存问题
如果构建过程中遇到内存问题,可以按以下方式增加交换内存:
Linux
运行以下命令可临时增加交换内存:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
要永久生效,请将以下行添加到 /etc/fstab:
/swapfile none swap sw 0 0
重要说明
构建完成后,请使用位于 build/bin 目录中的生成版 clang 二进制文件。此版本的 clang 基于 LLVM 17,并包含 Hallucina 提供的混淆功能。
为 Hallucina 贡献
欢迎贡献!有关设置开发环境和提交拉取请求的详情,请参阅 DEVELOPMENT.md。
许可证
本项目采用 GNU v3 License 许可。详情请参阅 LICENSE 文件。
参考资料
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。