从布尔到时间盲注:SQL注入无回显场景的完整实战指南
如果你在靶场里手动测过SQL注入一定会经历一个非常分裂的阶段刚开始觉得注入特别简单参数后面丢一个单引号看报错、看回显再union select一撞数据就哗啦啦全出来了像开卷考试。但很快你就会撞上一面墙——有些参数位无论你怎么试探页面都不报错、不回显好像SQL根本没执行一样。真正让SQL注入从“复制粘贴”走向“理解原理”的恰恰就是这种“看不见摸不着”的场景盲注。这篇文章要深入聊的是盲注里最经典的两种形态布尔盲注和时间盲注。行内常把它们称作SQL注入的“读心术”因为你不直接看得到数据库的答案只能通过影响页面行为、测量响应时间这些旁路信号一步步推测出数据库内部的信息。我会从判断逻辑、payload构造、字符提取、脚本加速到排错技巧完整过一遍也会附上在本地实验环境里实际跑通的代码片段。这篇内容适合已经懂联合查询注入、想往深水区走一步的Web安全学习者对想搞懂防御逻辑的开发者也有参考价值。1. 盲注是什么为什么“看不到”的注入点更值得研究1.1 三种盲注的底层逻辑与常见场景盲注之所以叫“盲”根源在于SQL查询结果没有被直接拼进响应页面。最常见的是两类情况一类是登录、找回密码、订单状态查询这类功能SQL执行完只返回一个布尔结果应用拿它决定流程走向另一类是接口设计成把数据经过二次处理后才返回比如先查数据再套一层缓存原始SQL的结果被中间层“吞”掉了。这种情况下注入者还能做什么核心思路是把一条“查询语句”转换成“条件判断语句”再通过能被外部观察到的副作用把判断结果带出来。按副作用类型不同业内通常分为三种报错盲注利用函数强制触发数据库报错把查询结果带进错误信息里。前提是应用没有关闭debug能看到数据库报错。布尔盲注构造逻辑表达式让查询结果为真或为假时页面的返回内容、状态码或跳转结果产生差异。有差异就能提取信息。时间盲注构造条件配合延时函数条件为真时数据库多睡几秒通过测量响应时间还原判断结果。即使页面内容完全无差别也能用所以它是盲注里的“兜底方案”。在很多实际业务里中小公司自研系统的登录框、搜索建议、订单查询这类“只做判断”的接口反而是盲注最常出现的点位。原因是开发者往往只对“直接回显数据”的查询做了防注入处理忽略了那些“只返回成功或失败”的查询同样在拼接用户输入。1.2 判断盲注的两个基本探针真假响应与延时响应判断一个参数位是否存在盲注不需要特别复杂的工具核心思想就是构造“恒真”和“恒假”两个条件看页面是否给出不同反馈。布尔盲注的经典探针是两组请求?id1 and 11 -- - ?id1 and 12 -- -第一组条件为真页面如果正常返回记录第二组条件为假页面如果变成空白、提示“无数据”或返回异常状态那就说明我们的条件确实影响了SQL执行结果。这个差异就是盲注可利用的“信标”。时间盲注的探针更直接?id1 and sleep(5) -- -如果这个请求真实等待了大概5秒才返回说明延时函数成功执行了时间维度上存在可用的注入通道。这里必须强调一个前提所有探测都要在你有权测试的本地实验环境或授权范围内进行不要拿线上业务随意测试。特别是时间盲注一条sleep(5)在正常业务里可能直接把别人的请求拖到超时影响很恶劣。1.3 为什么盲注值得专门研究有人觉得盲注效率太低一个字符一个字符猜太原始了。但换个角度理解盲注是“在完全无回显的情况下仍然能操控数据库查询并读出数据”的能力。即便开发者把报错关了、把数据回显藏了、把页面做成铁板一块只要存在SQL拼接攻击者依然能通过旁路把整库数据一步步搬走。你想真正防御SQL注入就必须理解攻击者在这种“无反馈通道”下是怎么持续提取数据的。学完盲注你对SQL注入的理解会完整很多对参数化查询为什么“必须做”也会有更深的体感。2. 布尔盲注用页面的“是或否”逐字符还原数据2.1 核心payload拆解闭合、注释与条件表达式布尔盲注的payload本质上是在注入位置拼接一条条件表达式让查询在条件为真时走正常分支条件为假时走异常分支。比如数字型参数直接用and连接?id1 and ascii(substring(database(),1,1))100 -- -如果注入点在字符串参数里情况就不同了。应用大概是这样拼SQL的select * from news where title$input你输入的内容被包在单引号之间所以要先把引号闭合掉再用注释符把后面多余的引号吞掉title and ascii(substring(database(),1,1))100 -- -这里有两个细节非常容易翻车。第一注释符的选择。MySQL下--后面必须跟一个空格或控制字符所以写-- -最稳#注释符也可以。PostgreSQL和SQL Server对--的要求没那么严格但为了通用我习惯统一用-- -。第二闭合符不一定是单引号也可能是双引号、右括号或者组合形式)。判断闭合符最笨但最有效的办法是逐个试先输入1看报不报错、再输入1看页面变化然后再试1)和1))直到找到一个能让页面产生差异的组合。2.2 字符提取方法SUBSTRING、ASCII与二分查找布尔盲注只能表达“真/假”但我们要提取的是字符串。怎么把一个字符变成真或假标准套路是用SUBSTRING截取目标字符串的某个位置再用ASCII函数把它转成数值最后与一个数字比较ascii(substring(database(),1,1)) 100这行表达式做了三件事取库名的第1个字符、转成ASCII码、与100比较。真假结果直接驱动页面差异。如果条件为真说明该字符的ASCII码大于100如果为假说明它小于等于100。这里就引出一个关键优化二分查找。ASCII码范围是0到127可打印字符一般在32到126之间。每次猜中间值根据真/假结果收缩搜索区间一个字符最多7到8次请求就能精确确定比挨个字符穷举快了近一个数量级。比如猜字符hASCII 104的过程大致是63为真、95为真、111为假、103为真、107为假、105为假、104为假最后再用104确认。整个判断链逻辑清晰手工用Burp也能跑但用脚本会舒服很多。用二分法提取一个20字符的库名大概需要160个请求左右对本地环境来说完全不是负担。但如果用穷举式逐个试20个字符可能要试几千次耐心就被磨没了。二分法是盲注提速最核心的一招。2.3 从手工到脚本写一个自动提取数据的Python小工具需要提取库名、所有表名、所有字段名甚至多条数据时手工请求完全不现实。我每次做实验都会写一个最简版的自动提取脚本核心逻辑只有两部分一个判断函数一个二分循环。下面这段模板只依赖requests模块把判断逻辑抽出来传进去用通用性很强import requests URL http://127.0.0.1/lab/index.php COOKIE {} HEADERS {} PROXY {http: http://127.0.0.1:8080, https: http://127.0.0.1:8080} def make_payload(condition): return -1 and ({condition}) -- -.format(conditioncondition) def is_true(payload): r requests.get(URL, params{id: payload}, headersHEADERS, cookiesCOOKIE, proxiesPROXY, timeout10) return 正常标识 in r.text def extract_string(prefix): result for pos in range(1, 32): low, high 32, 126 while low high: mid (low high) // 2 cond ascii(substring(({prefix}),{pos},1)) {mid}.format( prefixprefix, pospos, midmid) if is_true(make_payload(cond)): low mid 1 else: high mid - 1 cond ascii(substring(({prefix}),{pos},1)) {low}.format( prefixprefix, pospos, lowlow) if is_true(make_payload(cond)): result chr(low) else: break return result print(extract_string(select database()))这段代码我为了演示做了几处简化实际使用时要把“正常标识”替换成目标页面里出现的稳定正文片段也可以改成用状态码判断。把判断函数独立出来后将来遇到新的注入点只需要换is_true的实现提取逻辑可以完全复用这是我一直很推荐的习惯。3. 时间盲注当页面毫无区别时靠“读秒”传递信息3.1 时间盲注的适用场景与执行原理布尔盲注有一个致命前提应用必须根据查询的真假给出不同反馈。但如果应用的判断逻辑比较“钝”不管SQL结果是什么页面都返回同一句话布尔通道就彻底失效了。我见过不少接口就是这种表现条件为真返回“处理成功”条件为假也返回“处理成功”只是后台可能多写了一条日志。时间盲注就是在这种场景下强行打开的通道。核心原理是利用数据库服务端的时序副作用注入的SQL里带着延时函数条件为真时查询真的会停滞几秒条件为假时不延时不等待。外部观察者只需要记录响应耗时就能把真假信息解码出来。这个通道和页面内容完全无关所以几乎所有盲注场景都能用时间盲注兜底。3.2 SLEEP、IF与CASE构造稳定的延时条件在MySQL环境里最经典的写法是IF函数加SLEEP?id1 and if(ascii(substring(database(),1,1))100,sleep(3),0) -- -条件为真时执行sleep(3)响应时间约为3秒条件为假时执行0不做任何延时。另一种等价写法是把SLEEP包进IF表达式里?id1 and sleep(if(ascii(substring(database(),1,1))100,3,0)) -- -两种写法都用过效果一样。需要注意的是SLEEP的单位是秒且返回值是0所以and sleep(...)在某些写法里会被当作假值处理但这不影响延时本身发生只要响应时间变了就算成立。不同数据库的延时函数完全不同换库就得换payloadPostgreSQL常用pg_sleep(3)配合CASE WHEN使用。SQL Server用WAITFOR DELAY 0:0:3通常和IF语句配合。Oracle一般用DBMS_LOCK.SLEEP(3)但许多版本需要额外授权才能调用实际使用常有限制。MySQL中还有个容易踩的坑在UNION查询里SLEEP和GROUP BY、ORDER BY的相互作用可能会产生奇怪的结果。我的经验是遇到这种诡异情况把子查询包一层(select ...) as tmp很多坑就能绕过去。第一次做时间盲注时被这个细节卡了大半天记忆特别深。3.3 时间盲注的稳定性控制基线、阈值与重试策略时间盲注最怕的不是注入不成功而是响应时间波动导致误判。网络本身有几百毫秒延迟如果前端再套了CDN、加了缓存波动可能完全淹没延时信号。我把自己的经验总结成三条规则睡眠时长至少要3秒。低于2秒的延时在复杂网络环境下基本不可靠。每个条件至少请求2到3次取稳定结果。出现一快一慢时以时间更长的那次为准或者干脆重试一次再确认。请求超时时间一定要大于睡眠时长。比如猜测延时时长是3秒客户端超时至少设到10秒否则请求被超时掐断你会把“超时”误判成“条件为真”那整个提取过程就全乱了。写脚本时还要注意一个细节requests库默认会跟随重定向所以r.elapsed统计的是包含重定向时间的完整请求耗时。如果你只想测数据库延时可以把重定向关掉或者直接用一个自定义的计时函数包裹session.get用time.time()自己算时间差。测量起点应该是“发起请求”到“拿到响应”的全过程而不是只算解析响应头之前的阶段。4. 实操实录从探针判断到数据提取的完整链路4.1 实验环境准备与盲注点确认为了方便讲解我在本机搭了一个极简的授权测试环境接口就一个参数?id后端逻辑大致是select * from ft where id $id页面只显示两种状态查到记录时返回“OK:1”查不到时返回“NOT:FOUND”。不返回任何数据字段是典型的布尔判断场景。如果你也想跟着练建议在自己本机用容器或开源靶场搭一套类似环境千万不要在无授权的真实站点上做任何尝试这是底线。第一步先确认注入点。输入?id1 and 11 -- -页面返回OK:1再输入?id1 and 12 -- -页面变成NOT:FOUND。页面行为有差异说明and后面拼接的条件被SQL解析器接受了布尔盲注点成立。第二步确认数据库类型。用version()函数做个简单判断?id1 and substring(version(),1,1)8 -- -页面正常返回说明当前库是MySQL 8系列。确认类型很关键因为后面用到的SUBSTRING、SLEEP、information_schema这些语法都是依赖库类型的。4.2 布尔盲注提取库名、表名与数据的完整过程拿到布尔盲注点之后我按“库名→表名→字段名→数据”的层级顺序提取信息。手动测几轮验证逻辑然后交给脚本自动跑。提取库名。表达式是ascii(substring((select database()),1,1)) 100脚本大约发了40个请求确认库名是testdb。提取表名。MySQL的表名存在information_schema.tables里ascii(substring( (select table_name from information_schema.tables where table_schemadatabase() limit 0,1), 1,1)) 100这里有两个非常容易翻车的细节。第一information_schema里有大量系统表不限制table_schema的话提取到的第一个表很可能不是业务表。第二LIMIT的使用方式limit 0,1取第一行limit 1,1取第二行。如果你想要按顺序提取业务表最好配合表名长度排序把真正关心的表排到前面。提取字段名。字段信息在information_schema.columns里ascii(substring( (select column_name from information_schema.columns where table_schemadatabase() and table_nameusers limit 0,1), 1,1)) 100提取数据。最后一步就是具体的记录内容。这往往是最耗时的环节因为一条记录可能有多个字段、多条记录字段里还可能带中文或特殊符号。我的习惯是先把中文字段用hex()转成十六进制字符串再按字符位置截取可以避免编码错乱。4.3 时间盲注从判断到脚本复用的效果对比同一个环境里如果把页面逻辑改成不管查询结果是什么都返回“查询完成”布尔通道就废了。这时把探针换成?id1 and if(11,sleep(3),0) -- -我在脚本里用time.time()记录请求前后的时间差实测大约3.04秒说明时间盲注成立。接下来只需要把Python脚本里的is_true函数换成时间判断版本提取逻辑完全不用动import time def is_true(payload): start time.time() requests.get(URL, params{id: payload}, timeout10, proxiesPROXY) elapsed time.time() - start return elapsed 2这个替换方式几乎是在“偷懒”同一套二分提取逻辑从布尔盲注切到时间盲注只改一个判断函数其他代码一行都不用变。这也是我反复强调单独封装判断函数的原因初次写脚本时觉得多此一举遇到第二个注入点时就真香了。实测下来因为每次请求都要sleep 3秒提取一个字符平均要发14次请求7次二分加确认也就是每字符大约42秒。一台实验环境跑完20个字符的库名要十几分钟确实比布尔盲注慢得多但在页面无差异的场景里已经是唯一可行的路子。5. 盲注翻车现场与排错速查手册5.1 五个高频问题与排查思路我整理了一张速查表都是盲注实践中出现频率最高的问题现象可能原因排查方向加单引号后页面无任何变化注入点不在该参数或参数被过滤换其他参数位用数值型输入补测做简单模糊测试比较不同参数的响应布尔注入真假响应完全一致查询结果没有参与页面渲染只用于内部逻辑立刻切时间盲注探针用延时判断再造一条通道时间盲注毫无延时闭合符不对或延时函数被过滤逐一套用不同的闭合符再用if(11,1,sleep(5))这类变体探测二分脚本提取过程死循环ASCII区间边界处理错误或判断函数返回值搞反加参考值校验先手工验证字符’a’和’z’两个边界提取中文数据乱码字符集没有显式处理先对字段用hex()包裹再按位置截取十六进制串并还原5.2 让盲注更稳的几个实操习惯第一个习惯一切判断都基于基线。不管是布尔还是时间盲注先发正常请求记录“正常页面长什么样”“正常响应耗时多少”再发测试请求。没有基线任何差异判断都是拍脑袋。第二个习惯只依赖一个稳定特征。判断条件可以选“页面里是否包含某个关键词”也可以选“状态码是否为200”但别把多个条件混在一起。判断函数越简单脚本越不容易因为页面微调而失效。我见过有人把判断写成同时检查关键词和状态码结果页面有一次因为加了缓存头导致判断全部错乱排查了半天。第三个习惯让日志替你说真话。盲注受网络抖动影响很大如果脚本里带了请求日志翻日志看每个payload的真实耗时就能快速定位是网络问题、语法问题还是表达式本身写错了。日常调试里90%的“页面无反应”其实是语法问题不是注入不成立。5.3 防守端的终极解法参数化查询与纵深防御聊完攻总得落到防守。盲注的本质和所有SQL注入一样是“数据”与“SQL语句”没有分离。只要用了参数化查询SQL的骨架是提前定义好的用户的输入永远只是参数值不可能通过拼接改变SQL逻辑。布尔盲注、时间盲注、联合查询注入统统会在这一层失效。配合常用手段还有这些最小权限数据库账号只给业务需要的最小权限避免注入后还能读取information_schema甚至写文件、执行系统命令。输入校验对参数做类型和格式约束比如数字型参数直接强转int长度限制设到合理范围很多低级的拼接路径就堵死了。WAF与RASP作为补充拦截和运行时防御手段能拦掉一部分明显特征的payload但不能替代参数化查询。日志与告警监控包含and 11、sleep(、benchmark(等特征的异常请求在攻击早期就能发现并封禁。6. 个人体会与下一步怎么练6.1 盲注最锻炼的是什么盲注这段路走下来最深的体会并不是哪个payload写得漂亮而是它强制你建立“用一个微小外部信号还原系统内部状态”的思维方式。一个字符一个字符地去抠你被迫把SQL执行过程、字符编码、网络时序、HTTP交互机制全部串起来理解。现在再看普通的回显注入你会觉得那更像“开卷考试”而盲注才是真正训练“闭卷推断”能力的科目。6.2 三个递进式练习建议如果你想沿着这条线继续练我给三个具体建议手工盲注打底在本地靶场把布尔盲注整库手工提取一遍至少提一个库名加一张业务表的全量字段。这个过程很枯燥但能极大提升语法敏感度。写脚本强化把自己手工用的payload封装成脚本不要求复杂但一定要做到is_true独立可替换。将来遇到新注入点直接复用提取框架会非常顺手。对照自动化工具用自动化注入工具跑同一个靶场环境对比它自动生成的payload和你的脚本逻辑看看它在编码绕过、判断策略上做了哪些更细致的处理。盲目迷信工具不行完全不用工具也没必要。6.3 最后一个实用小技巧最后分享一个我用了很久的习惯写盲注脚本时把“判断函数”单独封装。布尔盲注就写一个is_true(payload)判断页面是否包含特征时间盲注就写同样的函数名内部换成比较请求耗时。将来换注入类型只改这一个函数其他提取代码一行都不用动。这个习惯帮我省下了大量重复劳动也希望你少走弯路。

相关新闻

diagram-design:从草图到可维护系统的图表设计实战指南

diagram-design:从草图到可维护系统的图表设计实战指南

1. 从一张草图到一套系统:diagram-design 到底在解决什么问题第一次看到 diagram-design 这个词,很多人会以为它只是一个画图工具的别名,或者某个设计模板库的代号。但真正在工程团队里待过几年的人会明白,它指向的是一套远比“画…

2026/10/19 5:53:33 阅读更多 →
DCMTK 3.6.5 Windows预编译包:开箱即用的DICOM工程解决方案

DCMTK 3.6.5 Windows预编译包:开箱即用的DICOM工程解决方案

简介:本资源是面向医学影像开发人员、生物医学工程研究人员及DICOM系统集成工程师的DCMTK 3.6.5 Windows 64位预编译工具包,专为免编译快速上手DICOM数据处理而优化,解决Windows环境下源码构建复杂、依赖配置繁琐等实际痛点。压缩包共238个文…

2026/10/19 5:53:33 阅读更多 →
基于最佳簇半径的无线传感器网络分簇路由算法详解

基于最佳簇半径的无线传感器网络分簇路由算法详解

做无线传感器网络这块也有几年了,前前后后调过不少路由协议,从最开始的洪泛、LEACH,到后来各种改进的PEGASIS、TEEN、EEUC都摸过一遍。说实话,分簇路由这个方向看着简单,就是把节点分成一组一组的,选个簇头…

2026/10/19 5:52:33 阅读更多 →

最新新闻

AI教育智能体开发:八成工作量在聊天之外

AI教育智能体开发:八成工作量在聊天之外

1. 一个反直觉的真相:聊天只是冰山一角很多人对 AI 教育智能体的想象,大概都停留在这样一个画面:学生打开对话框,输入一道题,AI 秒回一段讲解,然后学生恍然大悟。这个画面很美好,也很符合大众对…

2026/10/19 6:22:47 阅读更多 →
深入理解controller-runtime Manager:启动流程、核心组件与生产实践

深入理解controller-runtime Manager:启动流程、核心组件与生产实践

1. Manager到底是个什么角色1.1 一句话理解Manager做过Kubernetes Operator开发的读者,大概率都跟controller-runtime打过照面。这个库几乎是现代Operator项目的默认底座,而Manager则是整个controller-runtime的顶层入口。我见过不少刚接触这个库的开发者…

2026/10/19 6:22:47 阅读更多 →
controller-runtime Manager 核心原理与常见坑位解析

controller-runtime Manager 核心原理与常见坑位解析

你刚开始用 controller-runtime 写 controller,最绕不开的就是它那个叫 Manager 的入口。很多同学拉完 kubebuilder 生成的项目代码,看到一个manager.New和一大堆 Options,往往直接照抄,却说不清这个对象到底做了什么。这篇是 con…

2026/10/19 6:22:47 阅读更多 →
无标题文档如何起步:从需求挖掘到内容落地的完整方法

无标题文档如何起步:从需求挖掘到内容落地的完整方法

有次我打开一个项目文档,标题栏只写了四个字符:“【无标题】”。正文空白,关键词空白,摘要空白。刚开始我也以为是对方手滑没填完,差点直接回一句“请补全需求”。后来想想,这种状态其实比一堆空话更有意思…

2026/10/19 6:22:47 阅读更多 →
水下图像质量评价:UICM核心原理与Python复现指南

水下图像质量评价:UICM核心原理与Python复现指南

做水下图像增强和复原的朋友,十有八九在论文、开源代码里撞见过UIQM和UICM这两个词。我第一次看到它们的时候,脑子里有两个疑问:一是这套“水下图像质量评价指标”和普通图像那套 PSNR、SSIM 到底差在哪;二是UICM明明只是UIQM的一…

2026/10/19 6:22:47 阅读更多 →
Linux I2C驱动开发实战:从内核框架到设备树与调试

Linux I2C驱动开发实战:从内核框架到设备树与调试

做嵌入式Linux开发的朋友,肯定绕不开I2C这个总线。不管你是接了个温度传感器、触摸屏、音频Codec,还是EEPROM存储芯片,I2C都是最常见的外设通信方式之一。做Linux嵌入式驱动开发,I2C驱动这块属于入门必修课,它既不像GP…

2026/10/19 6:21:47 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →