Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
obfuscation_detection — 用于识别混淆代码和其他有趣代码结构的 Binary Ninja 插件 | Kitploit
工具/GitHubGitHub/mrphrazer/obfuscation_detection
静态分析逆向工程恶意软件分析二进制分析固件分析
GitHubmrphrazer/obfuscation_detection

obfuscation_detection

用于识别混淆代码和其他有趣代码结构的 Binary Ninja 插件

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

混淆检测 (v2.4)

作者:Tim Blazytko

自动检测混淆代码及其他有趣的代码结构

描述:

Obfuscation Detection 是一个 Binary Ninja 插件,用于检测二进制文件中的混淆代码和有趣的代码结构(例如状态机)。给定一个二进制文件,该插件通过识别在逆向工程中可能值得仔细查看的代码位置来简化分析。

基于各种启发式规则,该插件定位包含复杂或罕见代码结构的函数。此类代码结构可能实现:

  • 混淆代码
  • 状态机和协议
  • C&C 服务器通信
  • 字符串解密例程
  • 加密算法

以下博客文章提供了有关底层启发式规则的更多信息并展示了它们的用例:

  • 自动化检测控制流平坦化
  • 自动化检测混淆代码
  • 统计分析检测不常见代码
  • 二进制文件中 API 函数的识别

一些用例示例可以在 examples 中找到。此外,REcon 讲座 "Unveiling Secrets in Binaries using Code Detection Strategies" 演示了一些用例。幻灯片可以在 这里 找到;录制视频可以在 这里 找到。

核心功能

  • 识别大型二进制文件中的有趣代码结构
  • 在 Binary Ninja 的图视图中高亮显示未对齐指令
  • 高效且架构无关的实现
  • 作为后台任务运行
  • 自动使用相应的启发式规则或工具标记已识别的函数
  • 可在 UI 和无头模式下使用

安装

工具可通过 Binary Ninja 的插件管理器安装。

对于无头版本,请遵循以下步骤:

git clone https://github.com/mrphrazer/obfuscation_detection.git
cd obfuscation_detection

# 安装 obfuscation_detection
pip install .

使用

插件可在用户界面和无头模式下使用。

用户界面

选择 Plugins -> Obfuscation Detection 运行单个启发式规则,或选择 Plugins -> Obfuscation Detection -> Utils 运行单个工具检测。Plugins -> Obfuscation Detection -> All 命令同时运行所有启发式规则和所有工具。

插件菜单

结果会显示在日志窗口中:

Binary Ninja 日志

通过点击已识别的函数地址,Binary Ninja 会导航到所选函数。

无头模式

要在无头模式下使用插件,运行 scripts/detect_obfuscation.py:

$ python3 scripts/detect_obfuscation.py <binary>

这会运行所有启发式规则和所有工具。要获得机器可读的输出,请使用 --json:

$ python3 scripts/detect_obfuscation.py --json <binary>

JSON 负载包含 detections 键下的所有结果。每个检测都有一个稳定的 id 用于自动化,以及一个人类可读的 name。每个标记的函数发现包括 Binary Ninja 插件使用的标签类型和描述。

要仅运行无头模式下的状态机启发式规则,请使用 scripts/detect_state_machine.py:

$ python3 scripts/detect_state_machine.py [--json] <binary>

检测启发式规则

插件实现了多种检测启发式规则来检测不同的代码结构。下面,我们简要描述各个启发式规则并说明其用法。

大型基本块

大型基本块启发式规则识别每个基本块平均指令数最大的前 10% 函数。它可以检测:

  • 展开的代码
  • 加密实现
  • 初始化例程
  • 算术混淆 / 混合布尔算术

复杂函数

复杂函数启发式规则识别控制流图最复杂的前 10% 函数(基于圈复杂度)。它可以识别:

  • 复杂的调度例程和协议
  • 状态机
  • 使用不透明谓词混淆的函数

状态机

状态机启发式规则使用图论属性来识别实现状态机的函数。通常,此类状态机可以表示为在循环中调度的 switch 语句。该启发式规则可以识别:

  • 网络协议调度
  • 文件解析逻辑
  • C&C 服务器通信 / 命令调度
  • 控制流平坦化

不常见指令序列

不常见指令序列启发式规则执行统计分析,以识别其代码模式与预计算基准偏离最大的前 10% 函数。这样,该启发式规则可以识别:

  • 加密实现
  • 浮点运算的密集使用
  • 算术混淆 / 混合布尔算术
  • 通用混淆模式

重叠指令

重叠指令启发式规则识别包含未对齐指令的函数(指令字节被两条不同的指令共享)。该启发式规则识别:

  • 破损的反汇编(例如,被标记为代码的数据)
  • 跳转到其他指令内的不透明谓词

如果在 Binary Ninja 的用户界面中使用该启发式规则,重叠指令也会在图视图中高亮显示。

最常调用函数

最常调用函数启发式规则识别被不同函数调用次数最多的前 10% 函数。这样,该启发式规则可以识别:

  • 字符串解密例程
  • 静态链接二进制文件中的库函数

循环频率

该启发式规则识别具有大量循环的函数。这类函数可能实现:

  • 结构化数据格式的复杂解析逻辑
  • 密集的算法计算

该启发式规则还有助于定位潜在的性能瓶颈。

不可约循环

该启发式规则识别具有罕见且复杂循环结构的函数,通常表明:

  • 激进的编译器优化
  • 手写汇编
  • 使用 goto 语句
  • 混淆代码

XOR 解密循环

该启发式规则识别在循环内使用常量执行 XOR 操作的函数。这样,该启发式规则可以识别:

  • 字符串解密例程
  • 代码解密存根
  • 加密实现

复杂算术表达式

该启发式规则识别表达式中同时包含多个算术运算和布尔运算的函数。这样,该启发式规则可以识别:

  • 混合布尔算术混淆
  • 初始化例程
  • 加密实现

重复子图

该启发式规则使用迭代上下文哈希方法来检测每个函数控制流图内重复的多块结构。通过比较每个块的操作码签名及其后继签名,该启发式规则识别单个函数中重复或近似重复的子图。这有助于定位:

  • 混淆存根,如多次克隆的小型状态机或调度器块
  • 编译器优化引入的展开或内联循环
  • 多路分支逻辑,如范围划分器和决策树
  • 重复的加密或校验和存根

工具

插件还包含针对有趣函数和代码区域的更窄用途的工具。它们仍然在 Utils 子菜单下可用;All 命令将它们与更广泛的启发式规则一起运行。

入口函数

该助手识别没有已知调用者的函数。这些函数可能是:

  • 二进制文件中的入口点
  • 反汇编器无法恢复调用层次结构的间接跳转目标

叶子函数

该助手识别不调用其他函数的函数。这类函数可能是:

  • 编译器外联以实现跨多个代码位置使用的功能
  • 到其他函数的跳板
  • 代码混淆方案的一部分(例如,控制流混淆的外联计算)

递归函数

该助手识别递归函数——直接或间接调用自身的函数。递归函数可能表明:

  • 算法实现,如树或图遍历
  • 旨在使静态分析复杂化的混淆代码
  • 数学算法或复杂解析例程的实现
  • 由于深度递归导致的潜在堆栈溢出漏洞

节熵

该助手评估每个节的熵。熵是随机性的统计度量,值介于 0 和 8 之间。接近 8 的节的熵表明高度随机性,可能暗示:

  • 加壳或压缩的代码
  • 加密的数据或代码
  • 随机数据

RC4

该助手通过使用通常与 RC4 的密钥调度算法 (KSA) 和伪随机生成算法 (PRGA) 相关的启发式标记来检测潜在的 RC4 算法实现。RC4 在恶意软件中广泛用于以下目的:

  • 解密字符串和其他数据负载
  • 混淆命令与控制 (C&C) 通信

联系

更多信息请联系 @mr_phrazer。

下载工具