什么是品味(taste)?- 以及如何获得品味

来自𝕏:https://x.com/jarodise/status/2024055647709569160

照片里是Rick Rubin,留着标志性的长胡子,戴着大耳机,姿态松弛地坐在电脑前。配文来自AI研究大神Andrej Karpathy:“There’s a new kind of coding I call ‘vibe coding’, where you fully give in to the vibes, embrace exponentials, and forget that the code even exists.”

他在描述一种新的工作方式:用自然语言告诉AI你想要什么,让AI处理技术实现,而人类只负责选择、判断。

但这张照片真正有趣的地方在于:Rubin不是程序员,他根本不会写代码。他是八届格莱美奖得主,Jay-Z、Adele、Johnny Cash、Red Hot Chili Peppers背后的制作人。

如果你问他如何操作混音台,他会摇头;问他什么是Dorian调式,他会茫然;问他如何演奏哪怕一种乐器,他会说:”Barely.”

“我没有任何技术能力,对乐器一无所知,”他在CBS《60 Minutes》采访中对Anderson Cooper说,”我靠的是对自己判断力的自信。”

这句话本身就是个悖论。传统认知里,制作人应该是技术专家——懂混音、懂编曲、懂声学。但Rubin证明了一种断裂:你可以不懂”如何做”,却深谙”什么是对的”。

这种极简主义的介入方式,在AI时代突然获得了新的相关性。当AI可以在几秒钟内生成一首完整的歌曲、一段复杂的代码、一张精美的图像时,”能做”已经不再是区分优秀与平庸的标准。那标准到底在哪呢?

Rubin的答案是:品味——那种无法被算法还原的判断力,那种知道”什么是好的”而不需要知道”如何做到”的能力。

这就引出一个更根本的问题:到底什么是”品味”(taste)?

关于品味的三个误解

“品味”是一个被滥用的词。人们用它来表达各种东西,从咖啡偏好到对古典音乐的傲慢宣言。在探讨品味是什么之前,必须先澄清它不是什么。

第一个误解:品味是个人偏好

当我们说”我喜欢这个”时,常常以为这就是品味。但Rubin的工作方式揭示了一个关键区别:他知道什么对艺术家有用,而不只是他个人喜欢什么。

他描述过自己的工作流程:听完一段音乐,做100条笔记,他知道其中5条将决定成败,但会分享全部100条,然后让艺术家自己选择。如果他只是在表达个人偏好,这种不强迫的姿态就没有意义。他是在指向某种存在于作品内部的东西。

康德在《判断力批判》中提出过一个看似矛盾的观点:审美判断是主观的,但美的对象呈现为具有普遍有效性。当我们说”这是美的”,不仅仅是在报告个人感受,也在声称其他人“应该”同意。这与纯粹的偏好不同:”我喜欢香菜”不需要他人认同,但”这幅画很美”隐含了一种可共享性。品味的真正含义,在于从”我喜欢这个”跨越到”这个值得被喜欢”。

第二个误解:品味是阶级区隔的工具

法国社会学家Pierre Bourdieu在《区隔》中提出了一个令人不安的洞见:品味远非中立的个人判断,它更像是社会竞争的武器。他说:”Taste classifies, and it classifies the classifier”(品味将世界分类,同时也对分类者进行分类)。

所谓”高级”品味与特定的教育背景、社会阶层密切相关。当一个人宣称喜欢古典音乐或抽象艺术时,可能在无意识中传递一个信号:”我受过良好教育,我有文化资本。”

Bourdieu的洞察力毋庸置疑。品味确实在社会层面扮演着区隔的角色——这一点不需要否认。但他的理论更擅长解释品味的社会分布(为什么不同阶层的人倾向于喜欢不同的东西),却不太能解释另一个顽固的现象:为什么有些作品能跨越文化、阶层和时代,被持续认可?莎士比亚最初是给伦敦市井小民写的,巴赫在世时只是一个教堂雇员,爵士乐诞生于被压迫的黑人社区。如果品味纯粹是阶级工具,这些”越界”就很难解释。

Paul Graham从另一个角度指向了同样的裂缝:如果品味完全是社会建构的,那么设计师就无法”做得更好”,只能”做得不同”。但事实是,设计师确实会进步,品味会随经验改变。这意味着品味中存在一个不完全被社会建构所覆盖的维度——某种可以通过训练来逼近的感知能力。

第三个误解:品味需要技术能力

这是最直观的误解,也是最容易被AI时代驳倒的。Rubin不会乐器,Jobs不会写代码,Paul Graham不是画家。技能回答”如何做”,品味回答”做什么”和”什么值得做”。

AI的出现使这个区分变得紧迫。当AI可以处理”如何做”时,”做什么”就成为人类的专属领域。更值得注意的是,技术能力有时甚至会妨碍品味——当你精通一种工具时,你倾向于用它解决所有问题。Rubin不懂混音台,这反而让他专注于音乐本身。

Noticing

Rick Rubin的工作室墙上没有金唱片,没有奖杯。”我把它们都寄给父母了,”他说,”这是干扰。”

在这个空间里,他通常躺着,赤脚,闭眼,有时在沙发上,有时直接在地板上。被问到如何使用混音台时,他回答:”我不会操作混音台,我只是听。”

“Creativity is acts of noticing,” Rubin说,”Nothing comes from us. The creator isn’t making the thing. The creator is recognizing the thing, noticing the thing, and then sharing it.”

这指向了品味最本质的维度:识别与辨认。他关注的从来不是技术指标,而是某种更难以言说的东西:”I’m listening to the feeling. I feel that melody awaken something in me.”

Rubin称自己为”reducer”而非producer。这个标签揭示了一个反直觉的真理:品味主要是一种减法能力。它的工作方式是剥离,一层一层,直到剩下不可再少的核心。在充满可能性的混沌中,品味是那只指出”这就是它”的手。

无限中的有限

2023年2月,科幻作家Ted Chiang在《纽约客》发表了一篇文章,用了一个令人难忘的比喻:大型语言模型是互联网的”模糊JPEG”(blurry JPEG)。

就像JPEG压缩会丢失细节以换取更小的文件大小,LLM通过”有损压缩”海量文本数据,学习的是统计模式而非真实理解。当你让ChatGPT写一首诗时,它所做的并非”创作”,更接近于生成一个概率上最”合理”的文本——基于它见过的数百万首诗的统计平均。

这意味着AI的默认输出趋向平庸。谈不上错误,也谈不上糟糕,只是安全、可预测、不会冒犯任何人。它总是倾向于”中间地带”,因为中间地带在统计上最可能出现。

品味与AI的根本差异正在于此。AI选择概率最高的选项;有品味的人选择概率上”不太可能”但在特定语境下”就是对的”选项。想象你在选择一张专辑封面:AI可以生成一万张图像,每一张都”专业”、都”美观”、都不会出错。但哪一张捕捉到了音乐的essence?这需要一种非概率的判断。

Chiang的比喻还揭示了另一个层面:当我们大量依赖AI生成内容时,我们消费的是一种压缩的现实。就像看一张过度压缩的JPEG,能辨认出大致形状,但细节已经丢失。在无限的内容流中,我们可能会丧失对”真实”的感知——这里说的不是事实层面的失真,而是存在层面的真实,那种只有人类判断才能触及的东西。

这就是”无限中的有限”的含义。AI给我们无限的可能性、无限的内容、无限的选项。但如果没有品味,无限等于虚无,在没有任何限制的情况下,选择就失去了重量。

品味是一种自我施加的限制。它说:这是对的,那个不是。这种限制带来的恰恰是解放——它赋予选择以意义。

在存在主义的意义上,这是人类自由的核心。

萨特说”存在先于本质”——人类没有预设的目的,必须通过选择来创造自己的本质。但这种自由是令人晕眩的,因为它没有指南。品味提供了一种导航工具:它帮助我们看见什么是值得选择的。

这种判断是人类主体性的最后堡垒。

品味从哪来

最后,品味是天生的还是后天的?这个问题困扰了哲学家三百年。

休谟在《论品味的标准》中给出过一个精确的回答。他描述了一种”真正的裁判”(true judge)需要具备的五个条件:敏锐的感知(strong sense),精细的情感(delicate sentiment),通过实践提升(improved by practice),通过比较完善(perfected by comparison),清除所有偏见(cleared of all prejudice)。

这五条读起来像一份训练手册。它们暗示品味既有天赋的成分,即你需要某种基本的敏感性作为起点,但更主要的部分来自后天的磨练。

Rubin的四十年从业经历其实就是这份手册的活注脚。他躺在工作室里听了整整四十年,从Beastie Boys到Johnny Cash,从嘻哈到乡村。没有人天生就能横跨这么多风格做出判断。那是”通过实践提升”和”通过比较完善”的结果。

乔布斯生前在这个问题上跟伴侣Tina Redse有过一次争论。Redse认为审美品味根本上是个人的,因人而异。而乔布斯则坚持品味是普遍的,可以被教授。他们谁也没有说服对方。

但有一点两人可能都会同意:品味的培养中最难的部分,是休谟的最后一条——清除偏见

你以为自己在培养品味,很可能只是在加固已有的偏见。你反复接触自己喜欢的东西,不断确认自己的判断,最终建立的不是品味,而是一个自我封闭的回音室。真正的品味需要你主动走进让你不舒服的领域,去听你不喜欢的音乐,去看你不理解的艺术,然后诚实地问自己:我的抵触,是因为这东西真的不好,还是因为我还没学会怎么看它?

由此可见,这个过程没有终点。品味不是一个你达到的状态,而是一个你维持的习惯。

2025年给家人的一份礼物:AI使用手册

AI的声浪如此之大,早已大到不再只是影响科技界,身边的家人们都在谈论AI。但是,又有多少人真的利用好AI呢?

所以,我想在今日除夕,送一份不是金钱的礼物。

其实这是一份义务,一份让大家都能跟上时代脚步的义务;当然也是一份礼物,是一份让大家享受时代红利的礼物。

什么是AI

AI,是英文缩写

A:Artificial,中文译为人工的

I:Intelligence,中文译为智能

(当然马云也说,AI是“爱”,中文真是博大精深呐,机器人三大定律中,“不能伤害”是第一条定律,有“爱”才能让世界更美好。)

为什么现在都在说AI

AI,这词语从很早之前就提出了,也许和机器人应该是同一时代提出的。那为什么今天我们讨论特别多呢?

  • 1950年图灵测试提出
  • 1956年AI成为独立学科
  • ……
  • 1997年超级计算机“深蓝”战胜国际象棋冠军
  • ……
  • 2016年AlphaGo战胜围棋冠军
  • ……
  • 2023年,chatGPT、Grok、Gemini……AI大爆发

AI分为三个阶段

  • ANI:弱人工智能,只在某个领域有特定智能
  • AGI:强人工智能,通用领取都有智能
  • ASI:超人工智能,所有领取都超越人类很多很多

那么,我们现阶段在哪里?

弱人工智能

是的,即使AI爆发的今天,我们还处于弱人工智能。但是!科技的发展是“指数爆炸”形式,即越来越快,我们距离AGI应该不远了。

现在的AI能做什么

  1. 回答几乎你的所有问题,比过去你翻书本、百度搜索快很多,精准很多;
  2. 开始能通过其他形式了解你的问题:比如文件、语音、照片、视频等;

推荐一些AI工具

由于我们在中国大陆,存在一些网络环境问题,我这里就分开推荐:

国外的优秀产品

推荐一个分类导航:https://ai-bot.cn/

iOS双开微信的跳转授权问题

背景

最近TrollStore用得挺多,给自己也弄了两个微信。但是在微信读书授权的时候,唤起的微信登录,是A微信,不是B微信。目标是希望能唤起B微信。

具体过程

如果你不希望看原理,那么就直接跳到总结

顺带说下,A微信为官方的Bundle ID:com.tencent.xin

B微信是自己定义的一个:com.tencent.xinVan

Bundle ID是iOS App,唯一的身份标识,所以不能重复

  1. 结合第一性原理,去了解了一下iOS在开中是如何唤起另一个App的。找到了CFBundleURLSchemes这个参数。这个参数是被唤起的App,向iOS提交自己的资源名。

如果写wechat,那么wechat://xxx这样的schemes,就会请求唤起微信。

  1. 由于主动唤起的代码肯定是无法修改的(最多找到常量的配置地方,去修改,但是那样就需要静态分析什么的,比较麻烦),所以就想着简单点,直接修改被唤起App的scheme。
  2. 其实就是A、B两个App,都是同样的scheme,所以想着,把A的scheme配置去掉。于是乎,用Fliza找到A的info.plist文件,去掉了CFBundleURLSchemes相关的配置。

这个时候,我用Safari去调用B中写的任何一个scheme,都是可以成功唤起B,而不是A的。但是微信阅读依旧唤起的是A,而不是B……这个就很尴尬。

考虑到是不是系统缓存的问题,但是搜了一圈没搜到,也不想重启。于是乎,就卸载了A,修改了包中的info.plist文件,重新打包签名安装。

OK,搞定。

总结

对于多开应用的情况下,如果你想要唤起B,而不是A。

那么做如下几步:

  1. 安装签名后的B;
  2. 修改A的info.plist文件:找到CFBundleURLSchemes,删掉其中的数组配置;
  3. 打包安装签名后的A;

关于iOS15越狱修改字体

很有幸,用的是iPhone11,还保留了iOS15.0.1系统。这个系统被陆续爆出漏洞:TrollStore免费安装其他IPA、MacDirtyCow漏洞可以临时修改内存映射,再到XinaA15Rootless越狱。感觉这手机真是买对了!

越狱

  1. 安装TrollStore
  2. 安装XinA15
  3. 打开后点击“open Jailbreak”按钮
是的,就这么简单

修改字体

修改系统字体

替换字体路径:/var/jb/Library/Fonts/

系统字体路径:/System/Library/Fonts

其实只要看着需要替换的字体,按照对应的路径,放到jb下即可。

部分App没有变化

没有变化的App,基本上都是有自己的设定字体,而不是用了系统默认。

Twitter

Chirp

从Google上搜索,和询问Discord上的小伙伴,得知Twitter用了自研的字体Chirp。遂打算进入Twitter.app目录,看看如何替换掉。

用Filza找了一下,找到如下:

/private/var/containers/Bundle/Application/256324AA-3DC7-41F4-B4AB-C78A55B87C33/Twitter.app

这个一串数字、英文的路径应该大家都不一样,只要沿着前面的路径,到这个目录下去搜索,就能看到。

很幸运,直接就找到了Chirp目录。

然后把里面的文件都替换下,大功告成。

Bandit Level 32 → Level 33

After all this git stuff its time for another escape. Good luck!

解密

>>> $0
$ whoami
bandit33
$ cat /etc/bandit_pass/bandit33
c9c3199ddf4121b10cf581a98d51caee

知识点

  1. 作为脚本的第一个参数,都是当前执行文件名称,这里使用$0相当于执行了sh(看开头是一个$可以得出是sh而非bash);
  2. whoami发现是bandit33,那么直接看密码就行了;

Bandit Level 31 → Level 32

解密

bandit31@bandit:~$ mktemp -d
/tmp/tmp.UHFbV1v7DX
bandit31@bandit:~$ cd /tmp/tmp.UHFbV1v7DX
bandit31@bandit:/tmp/tmp.UHFbV1v7DX$ git clone ssh://bandit31-git@localhost/home/bandit31-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit31/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit31/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit31-git@localhost's password:
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4/4), done.
bandit31@bandit:/tmp/tmp.UHFbV1v7DX$ cd repo/
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ ls
README.md
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ cat README.md
This time your task is to push a file to the remote repository.

Details:
    File name: key.txt
    Content: 'May I come in?'
    Branch: master

bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ echo 'May I come in?' > key.txt
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git add -A
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ cat .gitignore
*.txt
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ :>.gitignore
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        key.txt

no changes added to commit (use "git add" and/or "git commit -a")
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git add -A
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git commit -m 'Try to resolve it.'
[master e515574] Try to resolve it.
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 key.txt
bandit31@bandit:/tmp/tmp.UHFbV1v7DX/repo$ git push
Could not create directory '/home/bandit31/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit31/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit31-git@localhost's password:
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 339 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: ### Attempting to validate files... ####
remote:
remote: .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
remote:
remote: Well done! Here is the password for the next level:
remote: 56a9bf19c63d650ce78e6ec0354ee45e
remote:
remote: .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.
remote:
To ssh://localhost/home/bandit31-git/repo
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'ssh://bandit31-git@localhost/home/bandit31-git/repo'

知识点

  1. git工具使用add将所有工作区改动存储到暂存区;
  2. commit命令将暂存区内容存储到索引区;
  3. push命令将本地差异内容提交到远端;
  4. 这里有一个.gitignore文件,用于正则匹配不被git察觉到文件;

Bandit Level 30 → Level 31

There is a git repository at ssh://bandit30-git@localhost/home/bandit30-git/repo. The password for the user bandit30-git is the same as for the user bandit30.

Clone the repository and find the password for the next level.

解密

bandit30@bandit:~$ mktemp -d
/tmp/tmp.UkNUXze0ar
bandit30@bandit:~$ cd /tmp/tmp.UkNUXze0ar
bandit30@bandit:/tmp/tmp.UkNUXze0ar$ git clone ssh://bandit30-git@localhost/home/bandit30-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit30/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit30/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit30-git@localhost's password:
remote: Counting objects: 4, done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4/4), done.
bandit30@bandit:/tmp/tmp.UkNUXze0ar$ cd repo/
bandit30@bandit:/tmp/tmp.UkNUXze0ar/repo$ ls
README.md
bandit30@bandit:/tmp/tmp.UkNUXze0ar/repo$ git tag
secret
bandit30@bandit:/tmp/tmp.UkNUXze0ar/repo$ git show secret
47e603bb428404d265f59c42920d81e5

知识点

  1. git tag

Bandit Level 29 → Level 30

There is a git repository at ssh://bandit29-git@localhost/home/bandit29-git/repo. The password for the user bandit29-git is the same as for the user bandit29.

Clone the repository and find the password for the next level.

解密

bandit29@bandit:~$ mktemp -d
/tmp/tmp.5vEfTyPY8r
bandit29@bandit:~$ cd /tmp/tmp.5vEfTyPY8r
bandit29@bandit:/tmp/tmp.5vEfTyPY8r$ git clone ssh://bandit29-git@localhost/home/bandit29-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit29/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit29/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit29-git@localhost's password:
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 16 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (16/16), done.
Resolving deltas: 100% (2/2), done.
bandit29@bandit:/tmp/tmp.5vEfTyPY8r$ cd repo/
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git log
commit 84abedc104bbc0c65cb9eb74eb1d3057753e70f8
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    fix username

commit 9b19e7d8c1aadf4edcc5b15ba8107329ad6c5650
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    initial commit of README.md
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git tag
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git branch
* master
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
  origin/sploits-dev
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git checkout dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ git log
commit 33ce2e95d9c5d6fb0a40e5ee9a2926903646b4e3
Author: Morla Porla <morla@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    add data needed for development

commit a8af722fccd4206fc3780bd3ede35b2c03886d9b
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    add gif2ascii

commit 84abedc104bbc0c65cb9eb74eb1d3057753e70f8
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    fix username

commit 9b19e7d8c1aadf4edcc5b15ba8107329ad6c5650
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:41 2018 +0200

    initial commit of README.md
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ ls
code  README.md
bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ cat code/gif2ascii.py

bandit29@bandit:/tmp/tmp.5vEfTyPY8r/repo$ cat README.md
# Bandit Notes
Some notes for bandit30 of bandit.

## credentials

- username: bandit30
- password: 5b90576bedb2cc04c86a9e924ce42faf

知识点

  1. git命令存在多个分支branch,分支只是历史树上的一个游标;

Bandit Level 28 → Level 29

There is a git repository at ssh://bandit28-git@localhost/home/bandit28-git/repo. The password for the user bandit28-git is the same as for the user bandit28.

Clone the repository and find the password for the next level.

解密

bandit28@bandit:~$ mktemp -d
/tmp/tmp.0HXHG7V3Lt
bandit28@bandit:~$ cd /tmp/tmp.0HXHG7V3Lt
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt$ git clone ssh://bandit28-git@localhost/home/bandit28-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit28/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit28/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit28-git@localhost's password:
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (9/9), done.
Resolving deltas: 100% (2/2), done.
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt$ cd repo/
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ ls
README.md
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ cat README.md
# Bandit Notes
Some notes for level29 of bandit.

## credentials

- username: bandit29
- password: xxxxxxxxxx

bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ git log
commit 073c27c130e6ee407e12faad1dd3848a110c4f95
Author: Morla Porla <morla@overthewire.org>
Date:   Tue Oct 16 14:00:39 2018 +0200

    fix info leak

commit 186a1038cc54d1358d42d468cdc8e3cc28a93fcb
Author: Morla Porla <morla@overthewire.org>
Date:   Tue Oct 16 14:00:39 2018 +0200

    add missing data

commit b67405defc6ef44210c53345fc953e6a21338cc7
Author: Ben Dover <noone@overthewire.org>
Date:   Tue Oct 16 14:00:39 2018 +0200

    initial commit of README.md
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ git checkout b67405defc6ef44210c53345fc953e6a21338cc7
Note: checking out 'b67405defc6ef44210c53345fc953e6a21338cc7'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at b67405d... initial commit of README.md
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ ls
README.md
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ cat README.md
# Bandit Notes
Some notes for level29 of bandit.

## credentials

- username: bandit29
- password: <TBD>

bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ git checkout 186a1038cc54d1358d42d468cdc8e3cc28a93fcb
Previous HEAD position was b67405d... initial commit of README.md
HEAD is now at 186a103... add missing data
bandit28@bandit:/tmp/tmp.0HXHG7V3Lt/repo$ cat README.md
# Bandit Notes
Some notes for level29 of bandit.

## credentials

- username: bandit29
- password: bbc96594b4e001778eee9975372716b2

知识点

  1. git作为版本追踪工具,查看历史log
  2. 检出(checkout)到某个SHA历史点;

Bandit Level 27 → Level 28

There is a git repository at ssh://bandit27-git@localhost/home/bandit27-git/repo. The password for the user bandit27-git is the same as for the user bandit27.

Clone the repository and find the password for the next level.

解密

bandit27@bandit:~$ mktemp -d
/tmp/tmp.RG0BBbh379
bandit27@bandit:~$ cd /tmp/tmp.RG0BBbh379
bandit27@bandit:/tmp/tmp.RG0BBbh379$ git clone ssh://bandit27-git@localhost/home/bandit27-git/repo
Cloning into 'repo'...
Could not create directory '/home/bandit27/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/home/bandit27/.ssh/known_hosts).
This is a OverTheWire game server. More information on http://www.overthewire.org/wargames

bandit27-git@localhost's password:

remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
bandit27@bandit:/tmp/tmp.RG0BBbh379$ cd repo/
bandit27@bandit:/tmp/tmp.RG0BBbh379/repo$ ls
README
bandit27@bandit:/tmp/tmp.RG0BBbh379/repo$ cat README
The password to the next level is: 0ef186ac70e04ea33b4c1853d2526fa2

知识点

  1. git版本追踪工具基本命令clone