Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Dna — 基于LLVM的静态二进制分析框架 | Kitploit
工具/GitHubGitHub/colton1skees/dna
静态分析漏洞分析代码分析漏洞利用逆向工程调试器二进制分析固件分析
GitHubcolton1skees/dna

Dna

基于LLVM的静态二进制分析框架

查看仓库
3653454个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Dna

Dna 是一个基于 LLVM 构建的静态二进制分析框架。值得注意的是,它几乎完全用 C# 编写,包括 LLVM、Remill 和 Souper 的托管绑定。

功能

Dna 实现了一种迭代控制流图重建,其灵感主要来自 SATURN 论文。它迭代地应用递归下降、提升(使用 remill)和路径求解,直到恢复完整的控制流图。对于跳转表,我们使用基于 Souper 和 z3 的递归算法来求解可能的跳转表目标集合。迭代探索算法可在此处找到,跳转表求解算法可在此处找到。

一旦控制流图被完全探索,就可以使用此处和此处的算法将其重新编译为 x86 并重新插入到二进制文件中。尽管编译后的代码绝不好看,但只要恢复的控制流图正确,它就应该能运行。话虽如此,它仍然是一个研究原型——错误和边缘情况是意料之中的。控制流图探索可能会在例如无界跳转表或无法提升的指令的情况下失败。

其他一些值得注意的特性:

  • 支持大多数跳转表,包括 MSVC 的嵌套或所谓的压缩跳转表。
  • 支持将包含 SEH 的代码提升到 LLVM IR。当存在 SEH 时,try/catch 语句和 filter 内嵌函数会被插入到控制流图中。不过,重新编译器(目前)还不支持 SEH(SEH 条目未被修复),因此异常会导致崩溃。
  • 包含一个强大的 API,用于在 C# 中原生编写 LLVM passes。我们提供了例如 MemorySSA、LoopInfo、支配树、pass 管道管理等的绑定。
  • 支持使用 graphviz 进行 LLVM IR 和二进制控制流图的图形可视化,或者为 Binary Ninja 生成脚本。

一些注意事项:

  • 仅支持 x86_64
  • 重新编译的代码不符合 CET 规范

依赖项

  • LLVM/LLVMSharp
  • Remill
  • Souper
  • AsmResolver
  • Rivers

请注意,Dna 目前基于 LLVM 17。

VMProtect

Dna 包含一个 VMProtect 去虚拟化插件,位于 Dna.BinaryTranslator/VMProtect。更多信息请参见此 PR。

构建

Dna 当前针对 LLVM 17,并期望在 Windows x64 上使用 Visual Studio 2022 构建。 在 Release 模式下构建 Dna.LLVMInterop;本地依赖树是 Release 构建的,不支持 Debug interop 构建。

先决条件

  • Visual Studio 2022(包含 C++/MSBuild 工具)
  • CMake
  • Ninja
  • 来自 VS 工具链的 clang-cl / LLVM 工具
  • Rust/Cargo,用于 EqSat 简化器 DLL
  • .NET SDK 8+

从 VS x64 开发者命令提示符,或另一个将 VS C++ 工具加入 PATH 的 shell 中运行以下命令。

1. 构建本地依赖项

依赖项超级构建将 LLVM 17、Remill、Z3、XED、gflags/glog 及相关本地库安装到 Dna.LLVMInterop/dependencies/install。

root@kitploit:~
cmake -S Dna.LLVMInterop/dependencies `
      -B Dna.LLVMInterop/dependencies/build `
      -G Ninja `
      -DCMAKE_BUILD_TYPE=Release `
      -DCMAKE_C_COMPILER=clang-cl `
      -DCMAKE_CXX_COMPILER=clang-cl

cmake --build Dna.LLVMInterop/dependencies/build

如果更改编译器、构建类型或 CRT 设置,请在重新配置前删除 Dna.LLVMInterop/dependencies/build 和 Dna.LLVMInterop/dependencies/install。

2. 构建 Rust 简化器 DLL

Dna.Example 和简化器项目会从 Cargo 发布输出中复制 eq_sat.dll。

root@kitploit:~
cargo build --manifest-path Simplifier/EqSat/Cargo.toml --release

3. 构建解决方案

root@kitploit:~
& "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" `
  Dna.sln `
  /restore `
  /p:Configuration=Release `
  /p:Platform=x64 `
  /m
下载工具