本文根据 tmp.0ut 第五期中 Binary Golf Association 的文章编译整理,非逐字翻译;文中观点均属于原作者。
原文:BGGP6 Recap
文章内容来自 tmpout.sh,本译文依原站 CC BY-NC-SA 4.0 许可作为改编内容发布。如有侵权请通知,我会下架文章。 全文字符数:3220
引言
今年(BGGP6)的主题是 RECYCLE:让参赛者探索往年 BGGP 挑战的各种组合;作品每满足一项 BGGP 挑战标准就额外加分。参赛者也可以选择最简单的路线:找出能以某种方式打印或显示数字 6 的最小东西。
按挑战统计,今年共有 36 份作品:
| 挑战 | 作品数 |
|---|---|
| 1 Palindromes(回文) | 6 |
| 2 Polyglots(多格式) | 15 |
| 3 Crashes(崩溃) | 8 |
| 4 Self Rep(自复制) | 11 |
| 5 Download(下载) | 16 |
| 6 Print 6(打印 6) | 33 |
1. 回文
回文文件是 BGGP 的第一个挑战,也是最难的之一,需要作者做到字节级精确。6 份作品是回文,其中包括 BGGP6 得分最高的几份。mattpass 的 5 字节 shell 脚本展示了优雅的回文加载器——利用命令行参数执行额外代码;dominikr 的 ELF/COM 多格式回文作品还因在赛期内合并了修复 bug 的 PR 而获得加分。
| 大小 | 作者 | 类型 | BGGP | 得分 | Issue |
|---|---|---|---|---|---|
| 0223 | dominikr | ELF COM | 1 2 3 4 5 6 | 6433 | 170 |
| 0179 | mattpass | .sh, .sql, .zip | 1 2 3 4 5 6 | 5453 | 165 |
| 0005 | mattpass | .sh | 1 . . . 5 6 | 4859 | 151 |
| 0055 | mauke | COM, .pl, .sh, Make | 1 2 . . . . | 4553 | 146 |
| 0472 | xcellerator | ELF, DICOM Image | 1 2 . . . 6 | 4392 | 167 |
| 0228 | febnug | ELF | 1 . . . . 6 | 4380 | 157 |
2. 多格式
15 份作品满足 BGGP2 多格式挑战标准。自 BGGP2 以来,多格式已成为 BGGP 作品的常见特征。单份作品包含文件类型最多的是并列 4 种:deluks 做了 ELF、PDF、RAR、Zip 多格式;mauke 做了 COM、Make、Perl、Shell 多格式,而且它同时也是回文!按文件类型分布(COM、deb、DICOM、ELF、js、make、pbm、pdf、pl、ps1、rar、sh、sql、txt、zip 等均有出现),更多信息见仓库的 polyglot 板块。
3. 崩溃
8 份作品满足 BGGP3 崩溃挑战标准。最小的是 q3w3e3 的 24 字节 shell 脚本;第二小还是 q3w3e3 的 26 字节 shell/Perl 多格式;第三小仍是 q3w3e3 的 44 字节 shell/Perl 多格式。
- q3w3e3 找到多种让 curl 崩溃的方式:sh 24 字节(169)、sh/pl 26 字节(171)、sh/pl 44 字节(172);
- dominikr 有 3 个崩溃作品:perl 29 字节(168)、无 CLI 参数的 elf32 154 字节(177)、elf/com 223 字节(170);
- bah 用 126 字节通过 inputrc 按键绑定让 bash 崩溃(166);
- mattpass 的 179 字节 Shell/Zip 多格式在满足全部 6 项挑战的同时把自己搞崩了(165)。
4. 自复制
11 份作品满足 BGGP4 自复制挑战标准。最小前三名再次都是 q3w3e3:24 字节 shell、26 字节 shell/Perl 多格式、44 字节 shell/Perl 多格式。
- bah:curlrc 62 字节(154)、inputrc 126 字节(166);
- dominikr:带 CLI 参数的 elf32 45 字节(174)、无 CLI 参数的 elf32 154 字节(177)、deb/sh 182 字节(175;原页另一节写作 223 字节,两处不一致)、elf/com 223 字节(170);
- ilya:elf/pdf 512 字节(180);
- mattpass:sh/zip 179 字节(165);
- q3w3e3:三个 sh/pl 作品(169/171/172)。
5. 下载
16 份作品满足 BGGP5 下载挑战标准。最小的是 mattpass 的 5 字节 shell 脚本(用 CLI 参数);不带 CLI 参数的最小是 q3w3e3 的 24 字节 shell 脚本。
- bah:curlrc 62 字节(154)、inputrc 126 字节(166);
- dominikr:带参数的 elf32 45 字节(174)、无参数 elf32 71 字节(173)、自定义编译器构建的 elf32 154 字节(177)、tar 148 字节(178)、deb/sh 223 字节(175)、elf/com 223 字节(170);
- febnug:elf64 1696 字节;
- mattpass:带参数的 sh 5 字节(151)、sh/zip 179 字节(165)、sh/sql/zip 159 字节(164);
- q3w3e3:三个 sh/pl 作品(169/171/172);
- x0:带参数的 sh 86 字节(155)。
6. RECYCLE / 打印 6
33 份作品满足 BGGP6 主挑战——用尽量小的作品打印 6。这是最受欢迎的赛道,具体作品请直接查看仓库。
特别致谢
没见过的文件类型
每年参赛者都会探索 BGGP 里没出现过的文件类型:
- curlrc:bah 的作品展示如何用 curlrc 执行命令;
- DICOM:xcellerator 把 DICOM 医学图像与 RISC-V ELF 结合;
- erofs:bilger 利用空闲空间在 base64 里加入了漂亮图案;
- inputrc:bah 又带来一个能把命令注入 bash 的有趣 rc 文件;
- NetPBM:ackmage 研究 NetPBM 格式变体,做了在 macOS 上工作的多格式;
- Python Pip:dtm 展示了 pip 包一些只能形容为“纯邪恶”的能力;
- RDOFF:netspooky 复活了 nasm 使用过的失落目标文件格式;
- Wireshark Dissector:netspooky 做了一个不断刷 6 的又小又烦人的解析器。
最酷的视觉 payload
- bilger 的 EROFS base64 里用 “6” 拼出了 “BGGP” 字样(原页有完整 ASCII 图案);
- x0 的加载器与 xcel 的 DICOM 作品见仓库。
最受诅咒的代码
OwOday 的作品充分展示了 6 的力量:用一堆宏把 AArch64 机器码硬编码出来,只靠数字 6 及其算术组合构造每个 .inst(例如 0xd2800020、0x100000c1、0xd2800042 等),内联汇编定义一个 __6 标签并打印 "6\n",最后 main 调用它并返回 ssssss6(即 0)。完整宏清单见原页。
最小四强
最小作品由 int0x80 与 squiblydoo 并列第一,都是 1 字节。squiblydoo 还证明单字节 “6” 本身是合法 PowerShell 脚本,额外拿下 256 分打破平局。continue 的 Forth 作品只有 3 字节,展示了用 Forth 打印的最小方式;mattpass 的 5 字节 shell 则是优雅的回文加载器。
| 大小 | 作者 | 类型 | BGGP | 得分 | Issue |
|---|---|---|---|---|---|
| 0001 | squiblydoo | .ps1, .txt | . 2 . . . 6 | 4351 | 153 |
| 0001 | int0x80 | .txt | . . . . . 6 | 4095 | 145 |
| 0003 | continue | .forth | . . . . . 6 | 4349 | 150 |
| 0005 | mattpass | .sh | 1 . . . 5 6 | 4859 | 151 |
最高分三强
dominikr 的 ELF/COM 多格式得分最高:满足全部 6 项 BGGP,还因在赛期内合并了修复 radare2 ELF bug 的 PR 而加分。mattpass 的 Shell/SQL/ZIP 多格式同样满足全部 6 项挑战。
| 大小 | 作者 | 类型 | BGGP | 得分 | Issue |
|---|---|---|---|---|---|
| 0223 | dominikr | ELF COM | 1 2 3 4 5 6 | 6433 | 170 |
| 0179 | mattpass | .sh, .sql, .zip | 1 2 3 4 5 6 | 5453 | 165 |
| 0026 | q3w3e3 | .sh, .pl | . 2 3 4 5 6 | 5350 | 171 |
结语
感谢今年所有提交 BGGP 作品的参赛者!全新的 binary.golf 网站将于今年晚些时候上线。也感谢所有帮忙分诊作品、为 BGGP6 造势的人。社交账号:@binarygolf(twitter)、@binary.golf(bsky)、@binarygolf@haunted.computer(fedi)。
Peace,netspooky // Binary Golf Association