• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Timk
V2EX  ›  程序员

[缺陷] BaiduNetdisk.exe 句柄泄漏, 8.8.3.101 最新版仍复现(已定位 YunLogic.dll)

  •  
  •   Timk · Sep 16 · 2389 views

    长话短说:百度网盘主进程 BaiduNetdisk.exe 有个句柄泄漏,以约 6 个/分钟的恒定速率泄漏 Process 类型句柄且从不释放。已逆向定位到具体模块和函数,三个版本(含当前最新的 8.8.3.101 )全部复现。

    现象

    项目 实测
    泄漏对象 Process 类型句柄,全部指向同一个 BaiduNetdiskUnite.exe 子进程
    速率 约 6 个/分钟 = 360/小时 ≈ 8600/天,恒定,从不回落
    累积 连续运行 96.7 小时累积 37021 个,占全系统句柄总数 16.2%
    后果 句柄表膨胀导致整机明显卡顿;结束该进程后立即恢复,一次性释放 61726 个

    自己验证(约 10 分钟)

    1. 启动百度网盘并登录,保持待机(不需要任何上传/下载任务)
    2. 用微软官方 Sysinternals 的 handle64.exe(免安装,live.sysinternals.com 可取)
    3. 管理员命令行执行,记下 Process 那行的数字:
    handle64.exe -accepteula -s -p <BaiduNetdisk.exe 的 PID>
    

    隔 5 分钟再跑一次,会涨约 30 。

    1. 再看这些句柄指向谁:
    handle64.exe -accepteula -a -p <PID> | findstr Process
    

    结果全部是同一个 BaiduNetdiskUnite.exe(某个 PID)。

    已定位到代码

    • 模块:YunLogic.dll
    • 最新版 8.8.3.101:函数 RVA 0xE6950 - 0xE6CF8
    • OpenProcess 调用点 RVA 0xE69AA,期望访问权限 SYNCHRONIZE (0x00100000)
    • 该函数唯一调用者 RVA 0xE9B10 - 0xE9BEE;这条调用链内 CloseHandle 出现 0 次

    即:句柄被打开后,链路上没有任何关闭路径。请求的权限只有 SYNCHRONIZE 这一位,也印证了用途 —— 典型是"等这个进程退出"的存活判定循环。

    版本

    版本 Process 句柄速率
    8.5.5.103 +6.1 /分钟
    8.6.0.102 +6.3 /分钟
    8.8.3.101 (当前最新) +6.06 /分钟

    三个版本速率完全一致,升级无用。

    为什么容易被漏掉

    这不是崩溃类问题 —— 进程全程正常运行、不产生 dump ,所以不会进任何崩溃统计,也容易被"请提供日志 / 请提供 dmp"挡回去。实际影响集中在 7×24 运行的机器(云桌面、NAS 、挂机),按 8600/天算一周累积约 6 万句柄。

    顺带一提

    已通过官方渠道提交过工单,也在客户端内置反馈里提了。发在这里是希望研发能看到 —— 模块名和函数地址都给了,有 PDB 的话应该几分钟就能定位。

    临时办法:重启百度网盘即可清空已泄漏句柄,一天一次基本无感。

    Supplement 1  ·  Sep 18

    Snipaste 2026 09 16 16 17 52 截止到目前为止 百度方没有任何回应

    Supplement 2  ·  Sep 18
    第 2 条附言:
    今日下午约 15:30 左右有百度官方人员电话联系我 告知 BUG 已修复
    8.8.6.102 ( 2026-09-18 更新)为上面定位的那个调用点补上了
    缺失的 CloseHandle 。复测证据见下方回复。
    16 replies  •  2026-09-18 15:44:00 +08:00
    a1428265354
        1
    a1428265354  
       Sep 16   ❤️ 1
    没人管 之前有人百度网盘 挖到可以提权 system 的都不管了
    woodfizky
        2
    woodfizky  
       Sep 16
    傻逼百度网盘,挡不住用的人多,感觉像网盘界的微信,嫌弃但是又扔不掉。
    jasonyang9
        3
    jasonyang9  
       Sep 16 via Android
    @woodfizky 容器里跑个 openlist 得了
    413420
        4
    413420  
       Sep 16 via iPhone
    百度什么时候能做个人
    BifrostNetwork
        5
    BifrostNetwork  
    PRO
       Sep 16
    卡卡的
    PrinceofInj
        6
    PrinceofInj  
       Sep 16 via Android
    @woodfizky 能扔掉的,我遇到发百度盘的要么不下载,要么让别人换个方式发我。已经好多年不用百度盘了。
    neetz
        7
    neetz  
       Sep 16 via iPhone
    用 clouddrive2 吧,支持挂载百度网盘的
    yyyyyyyhb
        8
    yyyyyyyhb  
       Sep 16
    还有内存泄露的 bug ,他们早就知道了,没人管
    belike ,“重启一下就好了”⬅️之前问内部人员的回复
    malusama
        9
    malusama  
       Sep 16
    百度的产品好像都没人管了。。
    idealhs
        10
    idealhs  
       Sep 16
    垃圾产品最好还是尽量远离
    googlefans
        11
    googlefans  
       Sep 16
    这个产品在黄了就真黄了
    这个产品用的人很多的
    yafoo
        12
    yafoo  
       Sep 16 via Android
    阿里云盘也一样,啥都没做,占 cpu ,卸载就好了
    sir283
        13
    sir283  
       Sep 16 via Android
    我都在手机上下载好,然后复制到电脑里,虽然麻烦,但是没办法
    yulon
        14
    yulon  
       Sep 17
    还好我沙盒里跑的。之前夸克不会有后台还不错,自从变成划词也被我塞进沙盒了。
    catazshadow
        15
    catazshadow  
       Sep 17 via Android
    国产软件都只配在虚拟机里跑
    Timk
        16
    Timk  
    OP
       Sep 18
    复测结果:8.8.6.102 已修复。

    [动态]
    修复前 8.8.3.101 运行 77 分钟后 Process 句柄 ≈ 475 ,总句柄 ≈ 1310
    修复后 8.8.6.102 运行 77 分钟后 Process 句柄 = 18 ,总句柄 = 851

    18 个是稳定值( 15 个指向自身、3 个指向 BrowserEngine 子进程),不再随时间增长。

    [静态,字节级]
    YunLogic.dll 里那个 OpenProcess(SYNCHRONIZE) 调用点还在原地( RVA 0xE69AA ),
    但它所在的函数恰好长了 9 字节:

    0xE6950-0xE6CF8 -> 0xE6950-0xE6D01

    该函数内 CloseHandle 调用数:0 -> 1

    反汇编 call [OpenProcess] 之后的指令:

    RVA 0xE69AA FF 15 88 8A 10 00 call [OpenProcess]
    RVA 0xE69B0 48 85 C0 test rax, rax
    RVA 0xE69B3 74 E1 jz <失败则重试>
    RVA 0xE69B5 48 8B C8 mov rcx, rax <- 新增 3 字节
    RVA 0xE69B8 FF 15 E2 88 10 00 call [CloseHandle] <- 新增 6 字节
    RVA 0xE69BE 33 DB xor ebx, ebx

    3 + 6 = 9 字节,和函数增长量对得上。

    原来的逻辑:OpenProcess 拿到句柄、test/jz 判空,然后用完就扔,没关。
    现在补上了 mov rcx, rax / call [CloseHandle]。

    那个 jz 往回跳 -0x1F 是个重试循环(目标进程没起来就重试),
    所以每成功一次就漏一个句柄,6 次/分钟就是这么来的。

    [时间线]
    8.5.5.103 / 8.6.0.102 / 8.8.3.101 三个版本都漏; 9/16 更新到 8.8.3.101 时复测
    仍是 +6.06/分钟。9/18 更新到 8.8.6.102 才修掉。
    (只是陈述时间,不确定是否有关联。)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2333 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 07:27 · PVG 15:27 · LAX 00:27 · JFK 03:27
    ♥ Do have faith in what you're doing.