binwalk.zip固件分析实战:扫描原理、提取参数与五大避坑指南
简介在信息安全与CTF竞赛中binwalk是二进制分析、固件逆向与隐藏文件挖掘的常用利器但原生依赖Linux环境Windows用户常为此头疼。这份81.74MB的资源包正是围绕这一痛点整理面向CTF选手与安全分析人员提供Windows环境下运行binwalk的多套实用方案涵盖Cygwin环境配置、WSL部署思路及FLOSS等替代工具的使用要点。资源共包含189个文件以Python源码文件为主同时收录大量固件、镜像、文件系统及各类签名识别样本外加head头文件、binwalk脚本与使用说明文档便于读者对照源码理解扫描原理并借助真实样本动手验证。目前已有3022人学习下载内容贴近实战既能辅助快速搭建Windows下的binwalk工作环境也能帮助深入掌握文件签名识别、数据恢复与固件解包技巧适合具有一定基础并希望在MISC方向进阶的安全爱好者。1. 一次固件提取就敢用 binwalk.zip 的人基本都翻过车第一次拿 binwalk.zip 去拆一个路由器固件时我以为把压缩包解压完、对着 .bin 文件按一下回车就能列出一整个文件系统。结果等了十分钟屏幕上先是一堆 gzip 和 data 的偏移解压目录里全是几十个几百字节的碎片真正想要的 JFFS2 镜像连影子都没看到。后来才明白binwalk.zip 的价值不在那个命令本身而在于它是否匹配了正确的签名库、依赖和提取顺序。这篇文章从原理讲到操作把扫描逻辑、最小命令、参数组合和五个最常见翻车点一次说透。适合刚接触固件分析的研发也适合已经用坏过好几次 -e 的运维。2. 固件扫描到底在扫什么binwalk.zip 的签名库与熵检测逻辑2.1 魔数签名是固件分析的第一个抓手固件本质上是一段连续二进制里面往往不止一个文件系统。设备厂商会把 bootloader、kernel、rootfs、配置分区一次性拼进一个镜像但每个分区文件都有自己的“身份证明”——魔数。比如 SquashFS 的开头通常是“hsqs”JFFS2 会有特定的十六进制标记PNG 固定以89 50 4E 47开头。binwalk 的扫描过程就是拿着签名库里的这些特征沿着偏移逐个比对。找到匹配后它会输出起始偏移、文件类型和描述信息。签名匹配是穷举不保证绝对正确。遇到过一些厂商在固件里塞了伪造的文件头binwalk 识别成某种已知格式实际提取出来根本没办法解包。所以我会把扫描结果看作候选清单而不是最终结论。真正能拍板的是后续的解包、熵检查和文件系统挂载。一个好的分析流程应当先让 binwalk 把候选点拉出来再用其他手段交叉验证。2.2 从 binwalk.zip 解出运行环境后先别急着扫描很多人拿到 binwalk.zip 之后第一件事就是把固件丢进去跑命令结果要么报错要么全是 data。其实 binwalk 对运行环境相当挑剔。一个干净的 zip 解包流程是这样的先解压到独立目录检查签名库和动态链接库是否存在再执行扫描。下面这组命令我每次都会跑一遍。unzip binwalk.zip -d ~/binwalk-portable cd ~/binwalk-portable find . -iname *magic* -type f ldd ./binwalk | grep not found第一行unzip指定了解压目标目录避免把便携包里的文件散落到当前路径。find用来确认签名库文件是否完整比如常见的magic或*.magic。ldd是 Linux 下检查依赖的命令grep not found会把所有缺失的共享库过滤出来。如果在 Windows 上使用对应的是检查 DLL 依赖的耗时功夫但思路一样。如果当前系统缺少 Python 解释器、libmagic 或某些编译运行时binwalk 的识别能力会大幅缩水。签名库决定它能认出多少文件类型依赖决定这些识别规则能否真正生效。我见过最典型的情况是Windows 上缺了 VC 运行库导致 tar、gzip 全被识别成 data。所以每到一个新工作环境我会先把这一步跑完确认环境是干净的再谈后续。2.3 自定义签名当默认库不认识你的私有文件格式默认签名库覆盖了常见格式但设备厂商经常自造头部。某次我在某实验室接触一个模拟项目X用的是一块定制开发板。binwalk 扫完整片镜像只报了一段 gzip 数据可是明明能解出 rootfs。我对比了另一台正常工作的设备镜像发现 BootLoader 头部以CA FE BA BE开头后面紧跟版本号和分区表而这个偏移处的原始数据被厂商用 XOR 处理过导致魔数变了。解决办法是给 binwalk 加自定义签名。可以写一个很简单的文本签名文件格式是偏移、类型、数值、描述。下面是一个例子。0 string \xCA\xFE\xBA\xBE Custom Boot Header 256 string \x68\x73\x71\x73 Overridden SquashFS第一列是偏移第二列是签名类型第三列是对应字节第四列是展示名。写好后在扫描时通过-m参数把自定义签名文件叠加到默认签名库上。./binwalk -m custom.magic slicer.bin-m不会替换默认库而是追加。这很适合在不修改原签名库的前提下扩展识别范围。自定义签名看起来不起眼但对私有固件格式经常是决定性的。3. 把 binwalk.zip 用起来最小命令与首次提取流程3.1 最小扫描命令先看偏移再决定提取解压完并检查完依赖后第一次扫描我不加任何提取参数先让 binwalk 把候选区域列出来。最小命令长这样cd ~/binwalk-portable ./binwalk firmware.bin输出会分成几列分别是偏移地址、十六进制文件头、描述信息。比如5922 0x3E2A SquashFS filesystem, little endian, version 4.0就是在偏移0x3E2A位置发现了一个 SquashFS。这个预览结果非常重要它能让你知道镜像是单一文件系统还是多个分区拼在一起。如果固件文件很大几百 MB直接跑全量扫描会耗时间。可以使用--length限制扫描范围比如只扫前 100MB./binwalk --length 104857600 firmware.bin--length后面的数字是字节数104857600正好是 100MB。这样能先把优先区域看一遍而不是让命令在杂乱的镜像里跑十分钟。第一次扫描通常不放任何过滤条件因为你想知道全貌。3.2 第一次 -e 提取先做单层别急着递归当扫描结果里出现明确的可识别类型后我会执行一次正常的提取使用-e参数。这个参数会尝试把所有识别到的文件头跟踪并切出来存到以_固件名.extracted结尾的新目录里。./binwalk -e firmware.bin ls -ld _firmware.bin.extracted指令-e的全称是--extract。它不只截取数据段还会尝试对 zlib 等压缩流做简单解压。执行完以后ls能看到新生成的目录。打开目录里面会有命名成偏移号的文件比如3E2A.squashfs或5922。这些就是 binwalk 根据签名切出来的原始块。这里有一个原则第一次提取不要加-M。-M表示递归提取它会从已提取的文件里继续找嵌套固件。如果原镜像里有一个 JFFS2 文件系统-e提取出这个 JFFS2 文件但不会自动解开 JFFS2 的内部结构。这时候需要手动对提取出的 JFFS2 再执行一次-e或者用-M让工具自动往下层走。问题在于一旦遇到循环结构或者可识别类型特别多的联合体递归会爆炸。我通常先做单层提取查看产物判断哪些需要二次拆解再决定是否开递归。3.3 用 Python 调用 binwalk.zip 里的模块适合自动化除了命令行binwalk.zip 在正确安装后也可以作为 Python 模块调用。这对批量处理几十个固件很有用因为命令行进程每次启动都要重新加载签名库。import binwalk module binwalk.Module() results module.scan(firmware.bin, signatureTrue, extractTrue) for result in results: print(result.file_offset, result.description)上面的代码通过binwalk.Module()拿到扫描入口scan函数的signatureTrue开启签名匹配extractTrue开启提取。返回的results是一个包含多条记录的结构每条记录里有file_offset和description。转成循环打印你就能在脚本里拿到所有命中的偏移和类型。模块调用的好处是不用反复加载依赖缺点则是接口和命令行参数有些差异。比如命令行里的-M在 Python API 里可能叫递归开关不同版本名字不完全一样。如果你只想快速处理一批文件先写一个这样的循环脚本比在 shell 里重复跑命令稳定很多。4. 必调参数与自动化组合-e、-M、-D、-A 怎么配才不翻车4.1 参数表-e、-M、-D、-A 在什么场景下才值得开很多教程把-e和-M直接绑在一起实际上盲目的组合会给你制造大量无意义文件。下面这张表是我常用的参数清单可以对照场景来选择。参数作用什么时候用-e自动提取所有可识别文件第一次拿到镜像想看到候选产物-M递归提取嵌套文件系统分析已确认存在多级镜像的固件-D按自定义类型提取指定文件只想要某类文件比如只抽压缩包-A扫描 CPU 架构指纹需要判断固件运行在 MIPS、ARM 还是 RISC-V-T限制熵值阈值在高噪声区域里找压缩或加密数据-y只显示你会关心的类型输出刷屏时缩小范围-e是基础-M是进阶-D是精细化控制-A则是独立于文件系统提取的架构识别。这几个参数不是必须同时出现得看当前阶段。第一次接触未知固件时我只跑-e保存提取结果再结合-A判断平台。4.2 一个可复用的组合命令提取筛选一次完成在已经确定固件包含嵌套压缩数据的情况下我常用的组合是下面这一条。./binwalk -e -M -D zip:zip:extracted -A firmware.bin-e做常规提取-M允许递归提取子文件中的新镜像-D zip:zip:extracted的意思是凡是描述类型为 zip 的文件都强制扩展名使用 zip并把它们放到一个名为extracted的子目录里。最后一个-D经常被人忽略但它能避免所有提取文件都叫一个无扩展名的十六进制数字。-A单独跑一个架构扫描。它会分析提取过程中的可执行代码片段尝试识别 CPU 架构。这个参数不是 100% 准确但能提供一个很强的先验信息。比如我在某项目中拿到了一个无头设备固件-A判断为 ARM Cortex-M后来解包 bootloader 时确实看到的是 Thumb 指令方向完全没跑偏。4.3 熵阈值与过滤让输出不再刷屏固件里的最坑情况是 binwalk 把每个随机数据段都报成 data输出刷屏到根本找不到文件系统。这时可以借助熵值来做约束。./binwalk -T 0.8 -y squashfs -y jffs2 firmware.bin-T 0.8表示只输出熵值大于 0.8 的区域。熵值在 0.8 以上通常意味着压缩数据、加密数据或高强度伪随机。-y squashfs的意思是只显示描述中带 squashfs 的结果-y jffs2再叠加一个 JFFS2 过滤。多个-y是并集关系而不是交集。这样做有个明显好处如果你的目标是找文件系统就可以绕过大量琐碎的 data 报告快速定位到熵值高且类型匹配的偏移。在分析从路由器抓出来的复杂镜像时这个组合让我少看了至少三分之二的无效输出。5. 避坑集中营5 个让 binwalk.zip 变玄学的常见原因5.1 命令找不到解压了却跑不起来的依赖救赎现象把 binwalk.zip 解压后执行./binwalk报binwalk: command not found或者报 Python 相关模块缺失。原因便携包里的可执行文件依赖系统环境包括 Python、libmagic 和其他动态链接库。zip 只打了内容没有打运行环境。解决先检查依赖再运行。在 Linux 上就是之前提过的ldd ./binwalk | grep not found。在 Windows 上用dumpbin /dependents binwalk.exe或者直接试着运行缺失的 DLL 会明显报错。我遇到过最离谱的一次是binwalk.zip 里带着一个自带的libmagic.so但它编译的动态库版本和系统 glibc 冲突导致 binwalk 一启动就报段错误。最终解决方式是把系统的 libmagic 卸载掉让工具使用自带库然后用虚拟环境隔离。如果条件允许更推荐直接在干净的虚拟环境里重新安装依赖别强行修系统库。5.2 扫出来全是 data文件系统明明就在固件里现象binwalk 扫描结果里清一色data没有任何 SquashFS 或 JFFS2 的迹象但你通过其他方式确认固件里确实有文件系统。原因厂商在打包前对固件做了 XOR 加密、压缩后再加密或者使用私有魔数。签名库认不出被混淆的头部。解决先用熵图判断高熵区间。如果镜像整体熵值都很高大概率是加密了。如果只有局部熵高说明是压缩数据只是签名没匹配上此时尝试自定义签名或者用-E找熵突变点。我曾经在某实验室里拿到过一个模拟项目X的镜像binwalk 全程只报 data但镜像是可以启动的。后来发现厂商对前 1KB 做了 XOR魔数全丢了。补上自定义签名后JFFS2 立刻浮现。所以“全是 data”不代表里面没东西只代表你的签名库还没认识它。5.3 提取出来的文件一到手就 CRC 报错现象-e正常提取生成的文件用unsquashfs或mount挂载时报 CRC error或者提示数据长度不匹配。原因binwalk 的签名提取只按文件头定位了起点但文件尾有时识别不准。有些文件系统在尾部有填充、校验块或擦除块binwalk 把填充也一块儿截进去了。解决把提取出来的文件做一次“头部 尾部修剪”。先用binwalk -A看架构再用十六进制编辑器确认文件结束偏移。如果 SquashFS 解包报 CRC多截掉最后一个擦除块再试。另一类 CRC 报错是因为固件本身有压缩后的长度字段而 binwalk 切出来的长度和真实长度不一致。这种情况我会手动用dd按偏移重新截取。比如看到偏移0x3E2A处是 SquashFS 头部并从描述里读到文件长度就执行dd iffirmware.bin ofrootfs.squashfs bs1 skip$((0x3E2A)) countlength。这种手工会比自动提取可靠得多。5.4 -M 递归把目录膨胀成雪球现象一条./binwalk -e -M firmware.bin跑了半小时磁盘占用多了几个 GB目录层级深到不敢打开。原因-M会从每个提取结果里继续提取。有些固件包含大量小碎片识别为 gzip 或 zip 后继续递归产生大量重复文件。解决递归前先做单层提取看清楚类型。真正需要递归时用-D限制只提取想要的类型比如只对 squashfs 递归。还有一个控制手段是给-M加-x排除规则。比如./binwalk -e -M -x gzip:zip:data firmware.bin-x后面跟的实际上是可执行路径或类型匹配模式这里表示排除 gzip、zip 和 data 类型的递归。这样只对真正需要的文件继续拆解噪音少很多。5.5 Windows 上路径分隔符和大小写问题现象在 Windows 上使用 binwalk.zip 时解包后脚本找不到magic文件或者提取的目录名因为大小写不同而冲突。原因部分签名文件路径用/分隔Windows 的命令行工具和文件系统不区分大小写导致同一个文件被识别成两个不同目标。解决将整个便携包放在全英文路径下避免中文目录和空格。解压时关闭 Windows 的“自动替换文件名非法字符”选项改用 7-Zip 手工解压。在处理固件时还要留意 binwalk 生成的提取目录名_firmware.bin.extracted如果固件文件名本身包含特殊字符Windows 可能创建失败。我会把固件重命名为单纯的fw.bin再丢进去跑能规避绝大多数路径问题。6. 用熵图给 binwalk 的结论盖章一个验证提取结果的习惯6.1 熵图当隐蔽文件让 binwalk 失效时Binwalk 提取完之后我还会做一步验证熵图分析。熵在这里可以理解为数据的混乱程度。纯文本文件的熵值很低压缩文件熵值通常在 0.8 以上加密文件则几乎接近 1.0。生成熵图非常简单。./binwalk -E -q firmware.bin entropy.txt-E会让 binwalk 走一遍块扫描计算每个块的香农熵-q表示只输出熵数据和偏移不打印额外信息。重定向到文本文件后用任意图表工具把偏移和熵值画成曲线。曲线平坦且熵值低说明该区域是空数据或普通代码一旦熵值突然拔高说明这段可能藏着压缩分区或加密分区。这个习惯帮我发现过隐藏分区。一次在某公司提供的模拟项目X固件里binwalk 提取完所有可识别内容后剩余空间看起来全是0xFF填充。但熵图显示在接近镜像末尾的位置有一段高熵区域偏移正好在分区表描述的空白处。手动切出那一段后发现是一个被隐藏的 OTA 备份分区常规扫描完全没有暴露它。从那以后我的固定流程变成先扫描再对照熵图再提取最后再跑一次熵图确认没有漏网之鱼。熵图不直接给出文件系统类型但它会告诉你“还有东西”。把这块信息和 binwalk 的签名结果叠加提取结论才真正可靠。希望这个习惯能帮你在处理陌生镜像时少走一趟弯路也希望上面的命令和避坑经验能让你少被 binwalk.zip 的隐藏脾气折磨。本文还有配套的精品资源点击获取

相关新闻

启发式搜索与A*算法:从曼哈顿距离到最优路径规划

启发式搜索与A*算法:从曼哈顿距离到最优路径规划

1. 先搞懂“搜索”在人工智能导论课里的位置这是人工智能导论课里“搜索”模块的第二节。如果你刚上完无信息搜索那节课,头脑里对广度优先、深度优先还有一点印象,但又被八数码、迷宫寻路这一类问题搞得有点乱,那这次要讲的“启发式搜索”就是…

2026/10/14 18:56:12 阅读更多 →
零壹教育:Python 流行背后:是语言本身强大,还是时代需求推波助澜

零壹教育:Python 流行背后:是语言本身强大,还是时代需求推波助澜

近十年编程领域,没有任何一门语言的热度能超越Python。从零基础入门教学到企业项目开发,从数据分析办公自动化到人工智能深度学习,Python的身影无处不在,长期霸占编程语言排行榜前列。很多人默认Python的爆火,是因为语…

2026/10/14 18:56:12 阅读更多 →
探矿业务RAG文本清洗:从TXT/Word/PDF到高精度检索的实战指南

探矿业务RAG文本清洗:从TXT/Word/PDF到高精度检索的实战指南

从乱码到高精度检索:探矿业务中 TXT、Word、PDF 与网页的 RAG 清洗之道上个月,知识库上线后内部同事反馈最多的一句话是:"明明有这份报告,怎么搜不到?"刚开始我还以为是 embedding 模型选得不对,…

2026/10/14 18:56:12 阅读更多 →

最新新闻

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

笑脸与口罩识别的工业级落地:从像素统计到人机意图理解

1. 这不是玩具项目:笑脸与口罩识别背后的真实业务切口“笑脸识别,口罩识别”——光看标题,很多人第一反应是:这不就是个课堂Demo?调用OpenCV读个摄像头,加两行cv2.CascadeClassifier,再套个预训…

2026/10/15 3:08:36 阅读更多 →
2026,程序员的时代拐点到了

2026,程序员的时代拐点到了

1. 引言 2026 年,注定是程序员职业生涯中一个无法回避的坐标点。这一年,AI 编程助手从「玩具」变成了「同事」,大模型从「聊天机器人」变成了「需求分析师」,而程序员这个职业本身,也站在了前所未有的十字路口。有人焦…

2026/10/15 3:08:36 阅读更多 →
TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

TensorFlow Lite集成实战:从模型转换、量化到端侧推理加速

到这里,前几章我们讲了模型怎么训、怎么调,该轮到最“落地”的一步了:TensorFlow Lite集成。这章我想用一次完整的实操视角,把从训练好的模型到真正跑在端侧设备上的全流程讲透——包括模型转换、量化、Delegate加速、端侧推理API…

2026/10/15 3:08:36 阅读更多 →
Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径

Rope 免费换脸教程:从安装到导出第一条视频的 10 分钟路径 【免费下载链接】Rope GUI-focused roop 项目地址: https://gitcode.com/GitHub_Trending/ro/Rope Rope 是一款免费的图形化人脸交换工具,基于 insightface 的 inswapper_128&#xff08…

2026/10/15 3:08:36 阅读更多 →
金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

金蝶Cloud销售模块参数配置全攻略:从流程打通到信用风控

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 3:08:36 阅读更多 →
免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下

免费广告拦截插件 uBlock Origin:默认 5 份过滤列表,请求发出前就拦下 【免费下载链接】uBlock uBlock Origin - An efficient blocker for Chromium and Firefox. Fast and lean. 项目地址: https://gitcode.com/GitHub_Trending/ub/uBlock 很多…

2026/10/15 3:07:36 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →