Coldcard硬件钱包RNG漏洞深度剖析: 一个宏定义如何导致8800万美元比特币被盗
Coldcard硬件钱包“熵崩溃”事件深度技术复盘一个宏定义如何导致8800万美元蒸发2026年7月30日一场针对Coldcard硬件钱包的攻击震惊了整个加密世界。攻击者在41分钟内清空了1,196个比特币地址盗走1,082.65 BTC按当时价格计算价值约7020万美元。此后攻击持续发酵截至8月初累计已有约1,367枚比特币从4,585个地址中被盗损失接近8900万美元。这不是一次物理入侵不是供应链攻击也不是钓鱼诈骗。攻击者从未接触过任何一台受害者的实体设备。他们只是读懂了五年前一行代码的“潜台词”。这不是“你的密钥不是你的币”的反面——密钥确实从未离开过冷钱包但它的出生证明本身就是伪造的。作为开发者我们需要回答一个问题一行宏定义怎么就能让一个以“安全”为卖点的硬件钱包全军覆没一、漏洞的“出生证明”2021年3月的那次提交漏洞的根源可以追溯到2021年3月1日发布的Coldcard固件4.0.0版本。在Commit37e4af5451c260c1e7d429fe8972c4cb5e68ee59中开发团队在mpconfigboard.h中写下了一行看似无害的配置// We have our own version of this code.#defineMICROPY_HW_ENABLE_RNG(0)在MicroPython STM32端MICROPY_HW_ENABLE_RNG这个宏控制着默认硬件随机数生成器RNG的绑定和编译路径。将其设为0的直接后果是默认硬件RNG路径不会作为通用rng_get()的后端使用。开发者为什么要把它设成0根据社区分析当时开发团队在整合自有RNG封装libngu时与MicroPython的现有实现发生了编译冲突。证据显示开发者在冲突后选择将MICROPY_HW_ENABLE_RNG设为0以允许固件编译通过这是一个典型的“先让编译跑起来”的决策但在安全攸关的场景下代价是毁灭性的。二、代码层面的完整剖析漏洞是如何“静默生效”的2.1 自定义RNG看上去很美的“替代方案”Coldcard开发团队的注释说他们“会自行实现RNG”。在自定义的rng.h中他们确实声明了两个MicroPython对象MP_DECLARE_CONST_FUN_OBJ_0(pyb_rng_get_obj);MP_DECLARE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj);对应的实现为/// \function pyb_rng_get()/// Return a 30-bit hardware generated random number: or fail!STATICmp_obj_tpyb_rng_get(void){returnmp_obj_new_int(rng_get_or_fault()2);}/// \function rng_get_bytes()/// Fill a buffer with random bits; caller must provide sized buffer.STATICmp_obj_tpyb_rng_get_bytes(mp_obj_tbuffer_io){mp_buffer_info_tbufinfo;mp_get_buffer_raise(buffer_io,bufinfo,MP_BUFFER_WRITE);mp_uint_tcountbufinfo.len;if(count1){mp_raise_ValueError(NULL);}random_buffer(bufinfo.buf,count);returnmp_const_none;}MP_DEFINE_CONST_FUN_OBJ_0(pyb_rng_get_obj,pyb_rng_get);MP_DEFINE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj,pyb_rng_get_bytes);rng_get_or_fault()本身确实读取了STM32硬件RNG外设staticuint32_trng_get_or_fault(void){rng_init();uint32_tstartHAL_GetTick();while(!(RNG-SRRNG_SR_DRDY)){if(HAL_GetTick()-startRNG_TIMEOUT_MS){mp_raise_OSError(MP_EFAULT);}}last_valueRNG-DR;returnlast_value;}问题来了Coldcard自定义代码确实“想要”使用硬件RNG但它只保证在调用pyb_rng_get*或其内部random_buffer()时才会走这条路。而钱包创建流程并没有走这条路径。2.2 钱包创建真正的“凶手”在这里钱包创建的实际入口在shared/seed.py中asyncdefmake_new_wallet(nwords):# Pick a new random seed.awaitux_dramatic_pause(Generating...,3)seedgenerate_seed()wordsawaitapprove_word_list(seed,nwords)ifwords:awaitcommit_new_words(words)该调用进入Coldcard的shared/random.py模块。钱包初始化使用的是ngu.random.bytes而不是pyb.rng()。自定义的pyb_rng_get_obj并未自动覆盖ngu.random.bytes。这就像你在厨房装了一台高级净水器但日常喝的水却是从水龙头直接接的因为水管根本没接对。2.3 静默回退Yasmarang的“幽灵”由于MICROPY_HW_ENABLE_RNG被设为0系统静默回退到了MicroPythonports/stm32/rng.c中的pyb_rng_yasmarang#ifMICROPY_HW_ENABLE_RNGuint32_trng_get(void){// use STM32 hardware RNG...}#else// For MCUs that dont have an RNG we still need to provide a rng_get() function// A pseudo-RNG is not really ideal but we go with it for now.// Yasmarang random number generatorstaticuint32_tpyb_rng_yasmarang(void){staticbool seededfalse;staticuint32_tpad0,n0;// ... deterministic PRNG logic}uint32_trng_get(void){returnpyb_rng_yasmarang();}#endifpyb_rng_yasmarang是一个确定性软件伪随机数生成器PRNG由芯片唯一ID和定时器寄存器初始化且在初始化之后不再收集新的熵。更致命的是libngu库在检查这个宏时只看它是否被定义#ifdef而不检查它是否被启用#if。宏被定义为0但#ifdef仍然为真于是编译通过系统安静地绑定了MicroPython的软件备用方案。2.4 Makefile的“障眼法”开发团队在Makefile中明确排除了stm32/rng.c的编译# Do not compile MicroPythons fallback PRNG. The board-specific rng.c # provides rng_get(), and this empty object satisfies the upstream object list. $(BUILD)/rng.o: CFLAGS -Dpyb_rng_yasmarangerror-do-not-want-this $(BUILD)/rng.o: $(ECHO) SKIP stm32/rng.c $(Q)$(CC) $(CFLAGS) -x c -c /dev/null -o $开发团队自认为已排除MicroPython的备用PRNG但实际上MICROPY_HW_ENABLE_RNG0这个设置在编译时静默地将rng_get()指向了pyb_rng_yasmarang。Makefile跳过了rng.c的编译但宏定义仍然在发挥作用导致了一个“幽灵PRNG”的存在。热修复后stm32/rng.o改为从/dev/null编译rng_get()解析为uint32_trng_get(void){returnrng_get_or_fault();}这才真正读取了硬件TRNG可惜为时已晚。2.5 熵值崩溃从128位到40位根据Coinkite的官方评估型号受影响固件版本有效熵值预期熵值Mk2/Mk34.0.0 – 4.1.9~40位128位Mk4/Mk55.6.0之前~72位128位Coldcard Q1.5.0Q之前~72位128位Block工程团队并未给出一个确切数字但设定了低于240.7**和**273.3的条件上限并特别警告后者并不等同于73位的密码学安全强度。对于Mk2/Mk3在已知UID、定时器状态和调用历史的情况下种子生成几乎是确定性的。对于较新型号虽然安全元件在启动时加入了熵但最终只保留了4个字节32位搜索空间仍然极为有限。40位熵意味着什么2^40 ≈ 1万亿在现代计算能力面前这个搜索空间完全可以暴力破解。Block的分析指出攻击者只要能确定或充分限定设备UID、定时器状态以及此前的RNG调用历史就无需接触设备即可离线重现候选输出流。三、攻击者的四步棋第一步识别漏洞攻击者通过分析Coldcard开源固件代码发现了MICROPY_HW_ENABLE_RNG (0)配置以及pyb_rng_yasmarang的存在。他们确认了不同型号的熵值差异并锁定了攻击目标2021年3月之后、修复固件发布之前创建的所有单签名钱包。第二步重建候选助记词空间攻击者利用PRNG的确定性本质种子来自芯片唯一ID、定时器状态等可预测信息在自己的计算环境中批量生成所有可能的低熵助记词组合。第三步链上地址匹配将生成的每个候选助记词按照BIP-32/BIP-44标准推导出对应的比特币地址然后与公开的区块链UTXO数据进行比对筛选出存有资金的地址。第四步批量自动化盗取一旦匹配成功直接推导私钥并发起转账。整个过程完全不需要接触受害者的实体设备。第一波攻击的自动化程度令人咋舌所有交易使用相同的30 sat/vB手续费率且无任何找零输出这是典型的自动化工具在批量操作的痕迹。Galaxy Research指出这种扫掠模式“看起来与币主自己选择转移币的行为相同”这也是为什么攻击如此难以被提前发现。四、完整时间线时间事件2021年3月1日Coldcard固件4.0.0发布引入MICROPY_HW_ENABLE_RNG (0)配置错误2021年3月 – 2026年7月漏洞持续存在于后续版本中潜伏超过5年2026年7月30日 01:10-01:51 UTC第一波攻击41分钟内从1,196个地址盗走1,082.65 BTC2026年7月30日Coinkite发布安全警告2026年7月31日Coinkite扩大警告范围至Mk4、Mk5和Q型号发布紧急修复固件2026年7月31日后第二波、第三波攻击累计受害地址达4,585个被盗约1,367枚BTC2026年8月2日之后疑似第四波攻击启动累计损失可能超过1.14亿美元一个值得深思的细节首波攻击发生在Coinkite公开披露漏洞的同一天攻击者可能比厂商更早发现了这个漏洞。Coinkite首席执行官Rodolfo Novak曾表示AI可能已经在公司开源固件中发现了这个存在五年的漏洞。五、热修复暴露的第二个问题2026年7月31日的热修复commit ca724637将rng_get()正确解析到了板级TRNG访问器。但随即暴露了第二个严重问题rng_get_or_fault()没有针对STM32 RNG错误标志的恢复路径。问题出在rng_init()的实现上staticvoidrng_init(void){if(!(RNG-CRRNG_CR_RNGEN)){__HAL_RCC_RNG_CLK_ENABLE();RNG-CR|RNG_CR_RNGEN;// TODO: throw out some samples?}}根据STM32参考手册RM0432 §25.3.7和RM0351当发生种子错误时SECS被设置SEIS锁存DRDY停止断言RNGEN保持设置状态恢复的正确做法是清除SEIS然后toggle RNGEN关闭→再开启。但rng_init()只检查RNGEN在故障状态下它什么也不做直接返回。rng_get_or_fault()随后忙等待10ms然后抛出异常每次调用都如此跨Python层重启也不恢复。更麻烦的是rng_get()现在被用在了键盘扫描路径上# mempad.py / keyboard.py :: _start_scan()shuffle(self.scan_order)# We scan in random order, because Tempest.-random.randbelow-ngu.random.uniform-_rand_below()-CHIP_TRNG_32()-rng_get()_start_scan()在每次按键中断press_irq最高60Hz时被调用在登录之前就运行。每次按键可能触发3次以上的TRNG读取每次最坏情况10ms。一旦OSError在那里抛出用户会看到一个错误屏幕无法输入PIN也无法进入升级菜单。这正是热修复后部分用户报告的“卡在错误屏幕/无法启动/疑似变砖”问题的根源。一个旨在修复安全漏洞的补丁却因为硬件错误处理逻辑的缺失导致设备变成“电子砖头”。这提醒我们安全修复本身也需要安全测试。六、正确修复方案完整版6.1 第一层正确的宏配置// 在 mpconfigboard.h 中#defineMICROPY_HW_ENABLE_RNG(1)// 启用硬件RNG效果确保rng_get()指向硬件TRNG而非软件PRNG。6.2 第二层硬件TRNG的故障恢复staticvoidrng_init(void){// 检查是否有挂起的错误标志if(RNG-SR(RNG_SR_SEIS|RNG_SR_CEIS)){// 清除错误标志RNG-SR~(RNG_SR_SEIS|RNG_SR_CEIS);// 关闭RNGRNG-CR~RNG_CR_RNGEN;// 等待关闭完成for(volatileinti0;i100;i);// 重新开启RNG-CR|RNG_CR_RNGEN;// 丢弃初始化后的前几个采样参考手册建议for(inti0;i4;i){while(!(RNG-SRRNG_SR_DRDY));(void)RNG-DR;}}elseif(!(RNG-CRRNG_CR_RNGEN)){__HAL_RCC_RNG_CLK_ENABLE();RNG-CR|RNG_CR_RNGEN;// 同样丢弃初始采样for(inti0;i4;i){while(!(RNG-SRRNG_SR_DRDY));(void)RNG-DR;}}}效果当硬件TRNG出现种子错误或时钟错误时能够自动恢复而不是永久锁死。6.3 第三层读取时的错误检查staticuint32_trng_get_or_fault(void){rng_init();uint32_tstartHAL_GetTick();while(!(RNG-SRRNG_SR_DRDY)){if(HAL_GetTick()-startRNG_TIMEOUT_MS){mp_raise_OSError(MP_EFAULT);}}// 在读取之前再次检查是否有错误标志锁存if(RNG-SR(RNG_SR_SEIS|RNG_SR_CEIS)){rng_init();// 会清除错误并重新初始化startHAL_GetTick();while(!(RNG-SRRNG_SR_DRDY)){if(HAL_GetTick()-startRNG_TIMEOUT_MS){mp_raise_OSError(MP_EFAULT);}}}returnRNG-DR;}效果确保不会将硬件故障时的“坏数据”当作有效随机数返回。6.4 第四层构建时的防御性检查在构建系统中加入编译时检查# 在构建脚本中 ifneq ($(MICROPY_HW_ENABLE_RNG),1) $(error MICROPY_HW_ENABLE_RNG must be set to 1 for secure builds) endif或者使用#if而非#ifdef进行条件编译// 在 libngu 中#ifMICROPY_HW_ENABLE_RNG1// 使用硬件RNG#else#errorHardware RNG is not enabled - this build is insecure!#endif效果从构建层面杜绝配置错误再次发生。6.5 第五层端到端测试增加测试用例验证钱包创建流程实际使用的是硬件RNG而非软件PRNG。例如在测试环境中mock硬件RNG并验证其被调用通过统计检验确认输出的随机性符合预期验证最终链接符号确保rng_get的最终链接指向预期的实现七、给开发者的八个教训1. 永远不要将硬件RNG的启用状态设为0硬件钱包的随机数生成器是其安全性的基石。任何绕过硬件RNG的配置无论出于什么原因哪怕是“编译冲突”都是一个巨大的危险信号。2. 检查宏时使用#if而非#ifdef区分“宏被定义”和“宏被启用为真值”。这个差异在安全攸关的场景下可能是致命的。3. 确保所有随机数生成路径都经过验证不能只验证“存在硬件RNG”还要验证“实际使用了硬件RNG”。钱包创建流程所用的随机数来源必须和硬件RNG是同一条路径。4. 端到端测试不可省略必须测试从种子生成到地址推导的完整流程确认熵源符合预期。Kraken CSO Nick Percoco对此评论道“审计人员可以验证设备中是否存在经批准的随机数生成器但无法确认生产固件实际使用了它”。5. 硬件TRNG需要正确的错误处理即使正确连接了硬件TRNG也必须实现完整的错误检测和恢复逻辑。否则一次硬件故障就可能让设备永久锁死。6. 构建系统应包含安全断言如果某个配置对安全性至关重要构建系统应该在编译时检查它是否正确设置而不是静默地使用不安全的备用方案。7. Fail Closed而非Fail Open在安全攸关的系统中当配置不确定时应该拒绝构建Fail Closed而不是静默回退到不安全的方案Fail Open。8. 开源不等于自动安全这个漏洞在公开代码中潜伏了五年多。开源代码需要持续的、专业的安全审计特别是针对运行时实际执行的代码路径而不仅仅是“存在哪些功能”。八、用户该怎么办如果你是Coldcard用户请注意以下几点更新固件无法修复已经生成的种子。必须在新固件上生成全新种子并迁移资金。受影响型号及固件版本Mk2/Mk3固件4.0.1 – 4.1.9Mk4/Mk5标准固件5.6.0之前 / Edge 6.6.0X之前Coldcard Q标准固件1.5.0Q之前 / Edge 6.6.0QX之前使用至少50次公平、独立且私密的骰子投掷生成的种子不受此漏洞影响。一个强且唯一的BIP-39口令可以创建独立钱包但Coinkite仍建议更换种子。Galaxy Research负责人Alex Thorn发出了一个令人不寒而栗的警告2021年3月固件漏洞之后创建的每一个单签名Coldcard地址最终都可能被清空。这次事件也凸显了一个残酷的现实即使密钥从未离开过冷钱包如果它的生成方式存在缺陷它仍然不安全。在自我托管的模式下即使用户更新了固件修复前生成的钱包也无法被补救。直到用户主动采取行动之前相关钱包可能持续暴露在攻击风险中。一行宏定义的错误五年的潜伏四十分钟的扫荡八千九百万美元的蒸发。安全不是“存在某个功能”而是“每个路径都正确执行”。

相关新闻

临局十三水:头墩中墩尾墩分配真的做对了吗

临局十三水:头墩中墩尾墩分配真的做对了吗

临局十三水 是 十三水学习与复盘辅助工具。针对头墩中墩尾墩分配这一核心痛点,它通过可视化图解与规则校验,帮助玩家快速识别摆牌逻辑漏洞。你是否还在凭感觉随意摆放?科学的分配策略能显著提升胜率,而该工具正是为此设计的智能助…

2026/8/4 11:27:29 阅读更多 →
金融小白/程序员必看:收藏这20+AI智能体应用场景,助你轻松入门大模型落地!

金融小白/程序员必看:收藏这20+AI智能体应用场景,助你轻松入门大模型落地!

本文介绍了金融行业在测试、信贷、零售、同业、监管、智慧办公等6个关键业务板块的20AI智能体应用场景和实际效果。通过真实案例,展示了AI智能体如何解决金融业务中的实际问题,提升效率,降低风险。所有企业都希望借助AI落地实现效率提升&…

2026/8/4 11:27:29 阅读更多 →
ChatGPT充值后Codex误改数据库怎么办?用迁移审查避免数据丢失

ChatGPT充值后Codex误改数据库怎么办?用迁移审查避免数据丢失

ChatGPT充值后,很多开发者会使用 Codex 编写接口、调整数据模型,甚至生成数据库迁移脚本。在普通页面或工具函数中,代码写错通常可以直接回退。但数据库修改不同,一条看似简单的 SQL,可能影响整张表的数据。常见风险包…

2026/8/4 11:27:29 阅读更多 →

最新新闻

AI时代程序员自救指南:学会这些,收藏不迷路!

AI时代程序员自救指南:学会这些,收藏不迷路!

本文针对程序员在AI时代的焦虑,分析了AI对编程行业的影响,指出AI替代的是机械编码而非程序员职业。文章强调了行业分层现象,优质程序员应将AI视为工具提升效率,并提出了四大转型方向:AI应用落地、AI协作者、深耕垂直领…

2026/8/4 12:15:11 阅读更多 →
Unity UI文本排版优化:解决中文标点符号出现在行首的自动化方案

Unity UI文本排版优化:解决中文标点符号出现在行首的自动化方案

1. 项目概述:一个被忽视的UI细节痛点 在Unity UI开发中,我们常常花费大量精力处理复杂的布局、炫酷的动画和流畅的交互逻辑,却很容易栽在一些看似微不足道的细节上。Text组件中行首出现标点符号,就是这样一个典型的“小问题&#…

2026/8/4 12:15:11 阅读更多 →
5个关键步骤:安全使用YimMenu增强你的GTA5游戏体验

5个关键步骤:安全使用YimMenu增强你的GTA5游戏体验

5个关键步骤:安全使用YimMenu增强你的GTA5游戏体验 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu…

2026/8/4 12:15:11 阅读更多 →
多重填补技术:从数据缺失到科学重建的完整指南

多重填补技术:从数据缺失到科学重建的完整指南

1. 项目概述:当数据缺失成为常态,我们如何“无中生有”?在数据分析、临床研究、社会科学调查乃至商业智能的日常工作中,我们最常遇到的、也最令人头疼的问题之一,就是数据缺失。你精心设计的问卷,总有人跳过…

2026/8/4 12:15:11 阅读更多 →
2026年RAG系统主流开源文档解析工具选型指南:PaddleOCR、MinerU、LiteParse、HunyuanOCR、Apache Tika 全面对比

2026年RAG系统主流开源文档解析工具选型指南:PaddleOCR、MinerU、LiteParse、HunyuanOCR、Apache Tika 全面对比

在大模型与 RAG 技术加速落地的背景下,非结构化文档的结构化解析已成为 AI 应用的核心刚需。面对 PaddleOCR、MinerU、LiteParse、HunyuanOCR、Apache Tika 等主流开源方案,如何根据自身场景做出精准选型?本文将从技术路线、核心能力、适用场…

2026/8/4 12:15:11 阅读更多 →
可执行文件图标修改全攻略:从原理到Python、C#、Qt实战

可执行文件图标修改全攻略:从原理到Python、C#、Qt实战

这次我们来看一个非常实际的问题:如何更改一个可执行文件(.exe)的图标。这不仅是美化软件界面的需求,更是开发者发布产品、区分版本、建立品牌标识的关键一步。无论是你用 Python、C#、Qt 还是其他语言开发的程序,最终…

2026/8/4 12:14:11 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →