Git泄露实战:从git log与git stash还原源码到CTF解题

1. 从一个被忽略的目录说起:Git泄露到底在泄露什么

很多人第一次接触Git泄露,是在CTF比赛或者授权渗透测试的靶场里。题目往往只给一个URL,打开一看是个普普通通的网站首页,源码里没有注释、没有隐藏链接、没有备份文件。这时候有经验的人会做一件事:在URL后面拼一个/.git/。如果服务器返回的不是404,而是目录列表或者某个文件的内容,那基本可以确定——这个站点的版本控制目录被直接暴露在了Web根目录下。

Git泄露(.git leakage)的本质,是开发者在部署网站时,把整个项目目录(包括隐藏的.git文件夹)一起上传到了Web服务器。.git目录里保存着这个项目从初始化到当前的所有版本信息:提交历史、分支、标签、暂存区、甚至开发者本地未提交的储藏(Stash)。攻击者或者CTF选手拿到这个目录,就等于拿到了项目的"时间机器",可以还原出源码、找到被删除的敏感文件、读取提交日志里的密码和密钥。

这篇文章面向三类人:正在打CTFHub Git泄露系列题目的选手、做Web安全入门学习的安全爱好者、以及需要检查自己项目部署是否规范的开发者。我会从git log和git stash这两个最容易被忽视的泄露点切入,把CTFHub整个Git泄露系列的解题思路完整拆一遍,同时补充大量实战中才会遇到的细节和坑。

先明确一个概念:.git目录不是普通文件夹,它有一套固定的内部结构。核心文件包括HEAD(指向当前分支)、config(仓库配置)、index(暂存区索引)、logs/HEAD(引用日志)、objects/(所有Git对象的存储目录)。理解这套结构,是后面所有操作的基础。

提示:本文所有操作均在授权靶场或自己搭建的本地环境中进行。未经授权对他人站点进行目录探测和源码还原属于违规行为。

2. .git目录的内部构造与还原逻辑

2.1 为什么光有目录列表还不够

很多人以为只要/.git/能访问就万事大吉,实际上服务器配置千差万别。有的服务器开启了目录浏览,你能直接看到objects、refs、logs等子目录;有的服务器关闭了目录浏览,但允许直接访问具体文件路径,比如/.git/HEAD能返回内容,/.git/objects/却返回403。这两种情况对应的还原策略完全不同。

还有一种更隐蔽的情况:服务器对.git路径做了重写或者拦截,返回一个自定义的404页面,状态码却是200。这时候如果只看状态码会误判,必须看响应体的实际内容。我在靶场里就遇到过返回"页面不存在"但状态码200的情况,差点以为是死路。

判断.git是否真实存在,最可靠的方法是请求/.git/HEAD。正常的Git仓库,这个文件的内容格式是ref: refs/heads/master或者ref: refs/heads/main。如果返回的是这个格式,说明目录真实存在且可读。

2.2 Git对象存储:松散对象与打包对象

.git/objects/目录下存放的是Git的所有数据。Git对象分四种类型:blob(文件内容)、tree(目录结构)、commit(提交记录)、tag(标签)。每个对象都有一个40位的SHA-1哈希值作为唯一标识。

对象在磁盘上有两种存储形式。一种是松散对象(loose object),路径规则是:哈希值前两位作为子目录名,后38位作为文件名。比如哈希a1b2c3...对应的路径是.git/objects/a1/b2c3...。另一种是打包对象(packed object),存放在.git/objects/pack/目录下,文件名形如pack-xxxx.pack和pack-xxxx.idx。

CTF题目里,如果服务器允许目录浏览,你能直接看到objects下的所有松散对象文件,那就好办——写个脚本把所有对象下载下来,按原路径放回本地,然后git checkout就能还原。但如果对象被打包了,或者服务器不允许列目录,就需要另一套工具。

2.3 常用还原工具的能力边界

目前社区里常用的Git泄露利用工具有几款,各有适用场景:

工具核心能力适用场景局限
GitHack自动爬取objects并还原目录可浏览、松散对象对packed对象支持弱
dvcs-ripper支持多种版本控制泄露通用场景配置稍复杂
git-dumper递归下载.git目录目录可浏览需要Python环境
手工脚本完全可控特殊路径、自定义逻辑需要自己写

我个人的习惯是:先用git-dumper跑一遍,它能自动识别目录结构并递归下载。如果跑不通,再手工分析。git-dumper的用法很简单:

pip install git-dumper git-dumper http://target/.git/ ./output_dir

跑完之后进入output_dir,执行git log看提交历史,git status看工作区状态,git stash list看储藏列表。这三条命令基本能覆盖CTFHub Git泄露系列的大部分考点。

注意:git-dumper下载的是.git目录本身,不是工作区文件。下载完成后需要执行git checkout .或者git reset --hard才能把文件还原到工作目录。

3. git log:从提交历史里挖出被删除的flag

3.1 提交历史为什么是信息金矿

git log展示的是仓库的提交记录,每条记录包含提交哈希、作者、日期、提交信息。在CTF场景里,出题人经常把flag放在某次提交里,然后在下一次提交中删除。如果你只看当前工作区的文件,flag已经没了;但git log能看到所有历史提交,git show能查看任意一次提交的完整内容。

CTFHub的Git泄露系列里,Log这道题就是典型。题目给一个站点,.git目录可访问。用工具还原后,执行git log会看到类似这样的输出:

commit 8a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b Author: developer <dev@example.com> Date: Mon Jan 1 12:00:00 2024 +0800 remove flag commit 1f2e3d4c5b6a7f8e9d0c1b2a3f4e5d6c7b8a9f0e Author: developer <dev@example.com> Date: Mon Jan 1 11:59:00 2024 +0800 add flag

看到"remove flag"和"add flag"这两条提交,答案就很明显了。执行git show 1f2e3d4c(前一次提交的哈希),就能看到那次提交里flag文件的内容。

3.2 还原后git log看不到东西怎么办

这是实战中最常见的问题。工具跑完了,目录里也有.git,但git log报错说"not a git repository"或者"your current branch does not have any commits yet"。原因通常有三种:

第一种,HEAD文件下载失败或者内容不对。检查.git/HEAD是否存在,内容是否是ref: refs/heads/master。如果HEAD指向的分支在refs/heads/下不存在,Git就找不到提交起点。

第二种,objects目录不完整。松散对象下载时可能因为网络问题漏了几个,导致Git无法解析提交链。这时候可以尝试git fsck --lost-found,它会扫描所有对象并尝试恢复。

第三种,仓库是空的,提交信息在logs/HEAD里。有些题目会把提交记录放在引用日志里,而不是正常的commit对象。logs/HEAD记录的是HEAD的移动历史,格式是"旧哈希 新哈希 作者 时间 操作"。即使commit对象丢失,从日志里也能看到提交哈希,再结合objects目录里的对象,有可能手工拼出提交内容。

3.3 用git show和git diff定位flag的实操

假设git log已经能看到提交历史,接下来就是定位flag。常用的命令组合:

# 查看所有提交的简要信息 git log --oneline # 查看某次提交的完整改动 git show <commit-hash> # 查看两次提交之间的差异 git diff <commit-hash-1> <commit-hash-2> # 查看所有分支的提交历史 git log --all --oneline # 查看被删除的文件在哪个提交里还存在 git log --all --diff-filter=D --name-only

git log --all这个参数特别重要。有时候flag不在当前分支上,而在另一个分支或者一个悬空的提交里。--all会展示所有引用能到达的提交,包括远程分支和标签。

还有一个技巧:如果提交信息里没有明显的"flag"字样,可以用git log -p直接看每次提交的补丁内容,配合grep过滤:

git log -p | grep -i "flag\|ctfhub\|key"

我在做这类题时,习惯先把所有提交的哈希列出来,然后逐个git show,同时用git diff对比相邻提交。这样即使出题人把flag拆散在多次提交里,也能拼出来。

4. git stash:藏在储藏区里的"临时保存"

4.1 Stash的工作原理与泄露风险

git stash是开发者常用的功能:当你正在改代码,突然需要切换到另一个分支处理紧急问题,但又不想提交半成品,就可以用git stash把当前工作区的改动"储藏"起来。储藏的内容包括暂存区和工作区的修改,保存成一个特殊的提交对象,然后工作区恢复到干净状态。

问题在于,git stash保存的内容同样存放在.git目录里。具体位置是.git/refs/stash(引用文件)和.git/logs/refs/stash(引用日志)。储藏的内容本身以commit对象的形式存在objects目录里。如果.git目录泄露,攻击者执行git stash list就能看到所有储藏记录,git stash show和git stash pop能查看和恢复储藏的内容。

CTFHub的Stash题目就是利用这一点。出题人把flag放在一次stash操作里,然后可能又做了其他提交,让当前工作区看起来很正常。但git stash list会暴露储藏记录。

4.2 还原stash的完整操作链路

假设已经用工具还原了.git目录,进入目录后:

# 查看储藏列表 git stash list # 输出示例: # stash@{0}: WIP on master: 1f2e3d4 add flag # 查看某个储藏的改动内容 git stash show -p stash@{0} # 恢复储藏内容到工作区 git stash pop stash@{0} # 或者只查看不恢复 git stash apply stash@{0}

git stash show -p会以补丁形式展示储藏的具体改动,flag通常就在这里面。如果git stash list是空的,但你知道应该有储藏,可以检查.git/logs/refs/stash文件是否存在。这个文件记录了stash的创建历史,即使refs/stash引用被删除,日志里可能还有线索。

还有一种情况:储藏对象存在,但引用被删了。这时候git stash list看不到,但git fsck --unreachable能列出所有不可达的对象,其中可能包含储藏提交。找到哈希后,用git show <hash>查看内容。

4.3 stash与log的组合考点

CTFHub系列里有些题目会把log和stash结合起来考。比如:当前分支的提交历史里flag被删了,但储藏区里还留着包含flag的版本。或者反过来,储藏区是空的,但某个悬空提交里有flag。

处理这类组合题,我的排查顺序是:

  1. 先git log --all --oneline看所有提交
  2. 再git stash list看储藏
  3. 然后git fsck --lost-found看悬空对象
  4. 最后检查.git/logs/下的所有日志文件

这个顺序的逻辑是:从最明显的线索开始,逐步深入到隐藏的角落。大部分题目在前两步就能解决,少数需要走到第三步。

提示:git fsck --lost-found会把悬空对象输出到.git/lost-found/目录下,commit对象放在commit/子目录,其他对象放在other/子目录。可以直接查看这些文件的内容。

5. CTFHub Git泄露系列题目的通用解题框架

5.1 信息收集阶段的判断清单

拿到一个Git泄露题目,不要急着上工具。先做一轮快速判断,能省很多时间:

  • 访问/.git/HEAD,确认目录是否存在且可读
  • 访问/.git/config,看仓库配置,有时能看到远程地址和分支信息
  • 访问/.git/logs/HEAD,看引用日志,能直接看到提交哈希
  • 尝试/.git/objects/,判断是否允许目录浏览
  • 检查/.git/refs/heads/和/.git/refs/stash,看分支和储藏引用

这五步做完,基本能确定用哪种还原策略。如果目录可浏览,直接上git-dumper;如果只能访问特定文件,就需要手工构造请求,逐个下载关键文件。

5.2 不同泄露程度的应对策略

根据服务器暴露的程度,我把Git泄露分成三个等级:

一级:完全暴露。/.git/目录可浏览,所有文件都能下载。直接用git-dumper或GitHack一键还原,然后git log、git stash list、git diff三板斧。

二级:部分暴露。目录不可浏览,但关键文件(HEAD、config、objects下的松散对象)可访问。需要先下载HEAD确定分支,再下载refs/heads/master获取最新提交哈希,然后根据哈希递归下载commit对象和tree对象,最后还原blob。这个过程可以写脚本自动化,也可以借助git-dumper的部分功能。

三级:仅日志暴露。只能访问/.git/logs/HEAD,看不到objects。这种情况下,日志里能拿到提交哈希,但拿不到提交内容。如果题目只考"找到提交哈希"或者"从日志里读flag",那直接看日志就行。CTFHub里有一道题就是把flag直接写在日志的提交信息里。

5.3 还原后的验证与flag提取

还原完成后,不要只盯着git log。我习惯做一轮全面检查:

# 查看当前工作区所有文件 ls -la # 查看所有分支 git branch -a # 查看所有标签 git tag # 查看所有引用 git show-ref # 查看引用日志 cat .git/logs/HEAD # 搜索所有对象里的flag关键词 git rev-list --all --objects | cut -d' ' -f1 | xargs -I{} git cat-file -p {} 2>/dev/null | grep -i "flag\|ctfhub"

最后那条命令会遍历所有Git对象,把内容打印出来并搜索关键词。虽然慢,但覆盖最全,适合前面几步都没找到flag的情况。

6. 实战中容易踩的坑与排查经验

6.1 工具跑完但git命令报错的排查

最常见的问题是git-dumper跑完了,进入目录执行git log却报"fatal: your current branch 'master' does not have any commits yet"。这通常是因为objects目录下载不完整,或者refs/heads/master文件缺失。

排查步骤:

  1. 检查.git/refs/heads/master是否存在,内容是否是一个40位哈希
  2. 检查.git/objects/下是否有对应的对象文件(前两位作为目录名)
  3. 如果对象是packed形式,检查.git/objects/pack/下是否有.pack和.idx文件
  4. 执行git fsck --full看具体报什么错

如果refs/heads/master缺失但logs/HEAD存在,可以从日志里提取最新的提交哈希,手工写入refs/heads/master:

# 从logs/HEAD提取最新哈希 tail -1 .git/logs/HEAD | cut -d' ' -f2 > .git/refs/heads/master

然后重新执行git log。

6.2 对象哈希对不上与pack文件处理

有时候git fsck会报"missing blob"或者"broken link",说明某些对象没下载全。如果对象是松散形式,可以根据报错里的哈希值,构造URL重新下载:/.git/objects/ab/cdef...。

如果对象是packed形式,处理起来麻烦一些。.pack文件是二进制格式,包含了多个对象的压缩数据;.idx文件是索引,记录了每个对象在pack文件中的偏移量。要还原pack里的对象,需要把.pack和.idx都下载下来,放到.git/objects/pack/目录,然后执行:

git index-pack .git/objects/pack/pack-xxxx.pack

或者直接用git verify-pack查看pack内容。如果.idx文件缺失,可以用git index-pack从.pack文件重建索引。

我在一次靶场练习中遇到过只有.pack没有.idx的情况,当时用git index-pack重建索引后成功还原了所有对象。这个命令会读取pack文件,重新计算索引并生成.idx文件。

6.3 服务器返回200但内容不对的识别

有些服务器配置了URL重写,把所有不存在的路径都重定向到首页,返回200状态码。这时候请求/.git/HEAD会返回首页的HTML,而不是Git的HEAD内容。识别方法是看响应体的特征:Git的HEAD文件内容很短,格式固定为ref: refs/heads/xxx;而HTML首页通常有<html>、<head>等标签。

还有一种情况是服务器返回了自定义的404页面,但状态码是200。这时候不能只看状态码,要看内容长度和内容特征。我通常会用curl -I看响应头,再用curl看响应体前几百个字符,综合判断。

# 只看响应头 curl -I http://target/.git/HEAD # 看响应体前200字符 curl http://target/.git/HEAD | head -c 200

如果响应头里的Content-Type是text/html而不是text/plain,基本可以判断返回的不是Git文件。

6.4 关于授权与合规的提醒

最后必须强调一点:Git泄露利用技术只应该在授权环境下使用。CTF靶场、自己搭建的测试环境、明确授权的渗透测试项目,这些都没问题。但未经授权对真实站点进行目录探测、源码下载、数据还原,属于违法行为,后果严重。

作为开发者,也应该检查自己的部署流程:确保.git目录不会被上传到Web根目录,在Nginx或Apache配置里加上对.git路径的拒绝规则,使用CI/CD工具自动部署而不是手工上传整个项目目录。这些措施能从源头上避免Git泄露。

# Nginx拒绝访问.git目录的配置示例 location ~ /\.git { deny all; return 404; }
# Apache拒绝访问.git目录的配置示例 <DirectoryMatch "^/.*/\.git/"> Require all denied </DirectoryMatch>

这两段配置可以直接抄到自己的服务器配置里,能挡住绝大多数自动化扫描工具。

7. 从CTF到真实场景:Git泄露的延伸思考

CTFHub的Git泄露系列题目设计得很巧妙,把log、stash、index、HEAD等不同泄露点拆成独立题目,让选手逐个掌握。但真实场景里的Git泄露往往更复杂:可能同时存在多个泄露点,可能对象被打包且索引缺失,可能服务器只暴露了部分日志文件。

我的建议是,做完CTFHub系列后,自己搭一个本地Git仓库,模拟各种泄露场景:删除分支后看悬空对象、创建stash后删除引用、打包对象后删除索引文件。把这些场景都跑一遍,比单纯刷题收获大得多。

另外,git log和git stash只是Git泄露的冰山一角。.git/config里可能藏着远程仓库地址和凭证,.git/index里可能包含未提交的文件路径,.git/COMMIT_EDITMSG里可能有上一次提交的完整信息。这些文件在特定场景下都可能成为信息泄露的入口。

我在实际检查自己项目部署时,养成了一个习惯:部署完成后,用浏览器访问/.git/HEAD、/.git/config、/.git/logs/HEAD这几个路径,确认返回404。这个简单的自检动作,能避免很多低级但危险的问题。毕竟,Git泄露的代价不是丢一个flag那么简单,而是整个项目的源码和历史都可能被完整还原。

相关新闻

Linux分区表热重载:不重启也能让内核识别新分区

Linux分区表热重载:不重启也能让内核识别新分区

某个深夜给服务器加完新分区&#xff0c;fdisk /dev/sda退出前屏幕弹出一行提示&#xff1a;内核还在使用旧分区表&#xff0c;新表将在重启后生效&#xff0c;或者你可以运行partprobe(8)或partx(8)。如果这是台测试机&#xff0c;直接重启就完事了&#xff0c;但摆在面前的是…

2026/10/20 19:47:40 阅读更多 →
CSMA/CD、交换机与VLAN:局域网从一根线到一张网的演进与实战

CSMA/CD、交换机与VLAN:局域网从一根线到一张网的演进与实战

很多人学计算机网络都有过这么一段拧巴的经历&#xff1a;CSMA/CD、交换机、VLAN&#xff0c;单个拎出来都能说上两句&#xff0c;可真要往深里问一句"这三者到底是怎么演过来的、为什么局域网最终长成了现在这个样子"&#xff0c;就卡壳了。不怪你。教材是分章讲的&…

2026/10/20 19:47:40 阅读更多 →
SolidWorks二次开发模板:基于.NET 6的工程化插件架构

SolidWorks二次开发模板:基于.NET 6的工程化插件架构

简介&#xff1a;本资源是面向机械设计工程师与CAD二次开发初学者的SolidWorks C#插件开发实战模板&#xff0c;聚焦Windows平台下基于.NET的COM Add-in定制化扩展。资源提供开箱即用的完整VS解决方案&#xff08;.sln&#xff09;&#xff0c;含99个文件、10.24MB&#xff0c;…

2026/10/20 19:46:36 阅读更多 →

最新新闻

AI工具断供两天,我的产出为什么没塌?

AI工具断供两天,我的产出为什么没塌?

1. 当主力工具突然停摆&#xff0c;我的第一反应不是慌前两天早上照常打开电脑&#xff0c;准备把积压的几个文案任务清一清&#xff0c;结果发现平时用得最顺手的那款AI助手登不上去了。页面转圈、提示服务不可用&#xff0c;换了网络环境、清了缓存、重启了路由器&#xff0c…

2026/10/21 0:54:40 阅读更多 →
多智能体总调度设计指南:从混乱协作到稳定编排的落地避坑方案

多智能体总调度设计指南:从混乱协作到稳定编排的落地避坑方案

做多智能体的人&#xff0c;大概都经历过这么一段心路&#xff1a;最开始只有两三个 Agent&#xff0c;大家各干各的&#xff0c;配合得像模像样&#xff1b;等到数量慢慢涨到七八个、十几个&#xff0c;系统就开始“闹鬼”了。我在做某模拟项目X的时候&#xff0c;曾经把智能体…

2026/10/21 0:54:40 阅读更多 →
2025-2026 AI办公工具真实测评:提升效率的五大类神器与选型指南

2025-2026 AI办公工具真实测评:提升效率的五大类神器与选型指南

这两年我陆续上手过的AI办公工具&#xff0c;少说也有几十款&#xff0c;真正留下来、几乎每天都会打开的&#xff0c;其实不超过五个。原因很直接&#xff1a;新工具带来的新鲜感只能撑两周&#xff0c;之后考验的全是稳定性、顺手程度和能不能真正融进现有工作流。所以这份20…

2026/10/21 0:53:39 阅读更多 →
ChaosToolbox:轻量级混沌工程框架实战指南

ChaosToolbox:轻量级混沌工程框架实战指南

简介&#xff1a;本资源是陆振波老师开发的「混沌工具箱」MATLAB实现包&#xff0c;面向混沌理论初学者、高校理工科师生及科研人员&#xff0c;提供李雅普诺夫指数计算、经典混沌系统建模与混沌序列生成等核心分析能力&#xff0c;有效降低混沌动力学实验门槛。压缩包共136个文…

2026/10/21 0:53:39 阅读更多 →
图像闪烁修复:周期性与方向性双维度协同方法

图像闪烁修复:周期性与方向性双维度协同方法

1. 从"双人舞"这个比喻说起&#xff1a;为什么闪烁修复需要两个维度同时发力第一次看到这个标题的时候&#xff0c;我盯着"It Takes Two"愣了几秒。做图像修复的人都知道&#xff0c;闪烁问题是个老难题&#xff0c;但大多数方案要么只盯着时间轴上的周期性…

2026/10/21 0:53:39 阅读更多 →
基于Matlab的RRT迷宫路径规划:从原理到实战

基于Matlab的RRT迷宫路径规划:从原理到实战

做迷宫类路径规划项目&#xff0c;很多人的第一反应都是上A*或者把地图栅格化之后用Dijkstra。在规整的网格环境里&#xff0c;这些确定性搜索算法确实好用&#xff0c;可一旦迷宫变得极其困难——通道比车辆自身宽度大不了多少、U形死角一个接一个、障碍物还是随机生成的——传…

2026/10/21 0:53:39 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →