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

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

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

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

工具目录

分类

查看所有分类
Loading categories
dynmx — 基于Windows API调用序列的恶意软件特征签名检测。就像沙箱API追踪的YARA! | Kitploit
工具/GitHubGitHub/0x534a/dynmx
动态分析 (沙盒)恶意软件分析
GitHub0x534a/dynmx

dynmx

基于Windows API调用序列的恶意软件特征签名检测。就像沙箱API追踪的YARA!

查看仓库
856703年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

dynmx 原型

dynmx(读作 dynamics)是一种基于签名的检测方法,用于基于Windows API调用序列的行为恶意软件特征。简而言之,你可以将dynmx视为用于API调用跟踪(所谓的函数日志)的YARA,这些跟踪来自恶意软件沙箱。因此,检测方法的数据基础不是静态分析的恶意软件样本本身,而是在恶意软件沙箱中对恶意软件样本进行动态分析期间生成的数据。目前,dynmx支持以下恶意软件沙箱的函数日志:

  • VMRay(函数日志,文本和XML格式)
  • CAPEv2(report.json文件)
  • Cuckoo(report.json文件)

该检测方法在硕士论文《基于Windows API调用的行为恶意软件特征签名检测》中有详细描述。本项目是该方法的原型实现,并在硕士论文期间开发。签名由恶意软件分析师在dynmx签名DSL中手动定义,并可通过此工具在函数日志中检测。dynmx签名DSL的功能和语法也可在硕士论文中找到。此外,你可以在仓库dynmx-signatures中找到示例dynmx签名。除了基于API调用检测恶意软件特征外,dynmx还可以提取恶意软件使用的操作系统资源(所谓的访问活动模型)。这些资源通过检查API调用并重构对操作系统资源的操作来提取。目前,模型中考虑了文件系统、注册表和网络类别的操作系统资源。

示例

以下部分展示了恶意软件特征检测和资源提取的示例。

检测

对于此示例,我们选择SHA-256哈希和为c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3的恶意软件样本。根据MalwareBazaar,该样本属于恶意软件家族Amadey。有一个公开的VMRay分析报告可用,其中还提供了VMRay跟踪的函数日志。此函数日志将是我们用于检测的数据基础。

如果我们想知道恶意软件样本是否使用了名为Process Hollowing的注入技术,我们可以尝试在函数日志中检测以下dynmx签名。```yaml dynmx_signature: meta: name: process_hollow title: Process Hollowing description: Detection of Process hollowing malware feature detection: proc_hollow: # Create legit process in suspended mode - api_call: ["CreateProcess[AW]", "CreateProcessInternal[AW]"] with: - argument: "dwCreationFlags" operation: "flag is set" value: 0x4 - return_value: "return" operation: "is not" value: 0 store: - name: "hProcess" as: "proc_handle" - name: "hThread" as: "thread_handle" # Injection of malicious code into memory of previously created process - variant: - path: # Allocate memory with read, write, execute permission - api_call: ["VirtualAllocEx", "VirtualAlloc", "(Nt|Zw)AllocateVirtualMemory"] with: - argument: ["hProcess", "ProcessHandle"] operation: "is" value: "$(proc_handle)" - argument: ["flProtect", "Protect"] operation: "is" value: 0x40 - api_call: ["WriteProcessMemory"] with: - argument: "hProcess" operation: "is" value: "$(proc_handle)" - api_call: ["SetThreadContext", "(Nt|Zw)SetContextThread"] with: - argument: "hThread" operation: "is" value: "$(thread_handle)" - path: # Map memory section with read, write, execute permission - api_call: "(Nt|Zw)MapViewOfSection" with: - argument: "ProcessHandle" operation: "is" value: "$(proc_handle)" - argument: "AccessProtection" operation: "is" value: 0x40 # Resume thread to run injected malicious code - api_call: ["ResumeThread", "(Nt|Zw)ResumeThread"] with: - argument: ["hThread", "ThreadHandle"] operation: "is" value: "$(thread_handle)" condition: proc_hollow as sequence

基于签名,我们可以发现一些使 *dynmx* 强大的 DSL 特性:
* 定义带有可选路径的 API 调用序列
* 使用正则表达式匹配 API 调用函数名
* 使用多个运算符匹配参数和返回值
* 存储变量,例如在 API 调用序列中跟踪句柄
* 使用布尔运算符(`AND`、`OR`、`NOT`)定义检测条件

如果我们使用上述签名对样本 `c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3` 的函数运行 *dynmx*,则会得到以下输出,表明签名已被检测到。```
$ python3 dynmx.py detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml


    |
  __|         _  _    _  _  _
 /  |  |   | / |/ |  / |/ |/ |  /\/
 \_/|_/ \_/|/  |  |_/  |  |  |_/ /\_/
          /|
          \|
            
 Ver. 0.5 (PoC), by 0x534a


[+] Parsing 1 function log(s)
[+] Loaded 1 dynmx signature(s)
[+] Starting detection process with 1 worker(s). This probably takes some time...

[+] Result
process_hollow	c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3.txt

通过将输出格式设置为 detail,我们可以获得更详细的信息。现在,我们可以在函数日志中看到检测到的精确 API 调用序列。此外,我们还可以看到签名在进程 51f0.exe 中被检测到。``` $ python3 dynmx.py -f detail detect -i 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json -s process_hollow.yml

|

__| _ _ _ _ _ / | | | / |/ | / |/ |/ | // _/|/ _/|/ | |/ | | |_/ /_/ /| |

Ver. 0.5 (PoC), by 0x534a

[+] Parsing 1 function log(s) [+] Loaded 1 dynmx signature(s) [+] Starting detection process with 1 worker(s). This probably takes some time...

[+] Result Function log: c0832b1008aa0fc828654f9762e37bda019080cbdd92bd2453a05cfb3b79abb3.txt Signature: process_hollow Process: 51f0.exe (PID: 3768) Number of Findings: 1 Finding 0 proc_hollow : API Call CreateProcessA (Function log line 20560, index 938) proc_hollow : API Call VirtualAllocEx (Function log line 20566, index 944) proc_hollow : API Call WriteProcessMemory (Function log line 20573, index 951) proc_hollow : API Call SetThreadContext (Function log line 20574, index 952) proc_hollow : API Call ResumeThread (Function log line 20575, index 953)

### 资源
为了从函数日志中提取访问的操作系统资源,我们可以简单地针对函数日志运行 *dynmx* 命令 `resources`。以下显示了SHA-256哈希和为 `601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9` 的样本的详细输出示例。这是一个CAPE沙箱报告,属于[Avast-CTU Public CAPEv2 Dataset](https://github.com/avast/avast-ctu-cape-dataset)。```
$ python3 dynmx.py -f detail resources --input 601941f00b194587c9e57c5fabaf1ef11596179bea007df9bdcdaa10f162cac9.json


    |
  __|         _  _    _  _  _
 /  |  |   | / |/ |  / |/ |/ |  /\/
 \_/|_/ \_/|/  |  |_/  |  |  |_/ /\_/
          /|
          \|

 Ver. 0.5 (PoC), by 0x534a


[+] Parsing 1 function log(s)
[+] Processing function log(s) with the command 'resources'...
下载工具