CoCo五周年活动(CCDC26)解密攻略
CCDC 2026 - WA整理
做题时间:2026/7/22 13:00 ~ 2026/7/23 07:33
本次CCDC没有严格的关卡设定,本文大致根据【探索者笔记】进行分割
已经将所有材料一起打包在本仓库中。
本目录下是当时解题的工作目录
source目录是存档的请求
0100 ?
风云突变,风暴袭来。你未曾料到会遭如此变故。远处,模糊的轮廓,似是一个海岛。可它并不愿直接向你开放。
首先,本活动在语雀https://codemao-guide.yuque.com/bfiekm/sbo5kh/qnfoc6w4a0m76ek9报名。文本如下
🎬 CCDC 26(CoCo 五周年)CCDC 26 活动火热进行中!本次活动中,你将扮演一名远行的航海者,探索未知的奥秘。你一时兴起想要远航,备好了帆船开始乘风破浪。【开始航行】https://lab.cocotais.cn/【航道开放时间】2026-07-22 13:00:00 至 2026-07-28 23:59:59【探险宝藏】成功解密者,瓜分54.11元奖金(倒过来是 1145 哈哈)【注意事项】一、本次活动参与前需要报名,请填写https://cocotais.feishu.cn/share/base/form/shrcnqdYaMQR2P7JQBXZw1qzDk3。二、本次活动期间,不同单位间严禁传递答案或解密过程。三、如多个个人共同参赛,请以团队身份报名参赛。根据文本,我们来到 https://lab.cocotais.cn/
此时,直接点击【我要登陆】会跳转到一个编程猫社区作品,但会因为编程猫社区的安全更新而跳转走。我们需要直接查询API来获取作品信息。
在网页源代码中找到workId为323405197,通过常用的编程猫API拼接得到以下URL
https://api-creation.codemao.cn/coconut/web/work/323405197/load?channel=1访问后,可以得到作品BCMC文件的URL为
https://creation.bcmcdn.com/716/appcraft/JSON_kusSXzx9bW_1784693503773.json访问这个URL,我们得到了编译后的作品文件
0101 在作品文件中提取信息
你登上了海岛。四周荒芜,阴云遮天。一觉醒来,天已转晴,可你迷失了回家的方向。探索中,一个留声机吸引了你的目光。
源文件已存储在source目录下
以下是一些从文件中提取的线索
- Cocotais Lab.svg url:https://creation.bcmcdn.com/716/appcraft/IMAGE_XIsrPyJL-_1784638277532.svg
- Storyteller [ORIGINAL].mp3 url:https://creation.bcmcdn.com/716/appcraft/SOUND_9t9RDYQoc_1784634662133.mp3
我们查看Cocotais Lab.svg,并在这个SVG源文件的注释中找到
<!-- bilibili opus --><!-- 1080885759100059699 -->根据提示,拼接url得到:https://www.bilibili.com/opus/1080885759100059699
在其评论区,找到了评论
凝视中,你在杂散的意识里恍惚看到了什么。
3761254A8CD9BFE0
cdn?c??o???s.?n 492a0e8ae8056a16ff425797ba4273b7.png
顺着以上线索的指引,和lab.cocotais.cn的提示,我们将cdn?c??o???s.?n 492a0e8ae8056a16ff425797ba4273b7.png补全成以下url
https://cdn.cocotais.cn/492a0e8ae8056a16ff425797ba4273b7.png下载得到以下图片

我们可以隐约的看出这是一个DM码,对他重新拼接,可以得到:

(拼接使用了split.py进行拼图,这个脚本本来只是用来裁剪的其实)
(正常的做出此题,应该使用3761254A8CD9BFE0的顺序进行拼图,但是其实手动拼也能拼出来)
扫码得到以下url
https://cocotais.cn/prophecy0102 找不同
人影浮现。「抉择就在眼前,结局早已注定。」
【倾听】倾听与众不同的,§ꮏөгұꮏєłłєг的故事。
【讲述】你没有选择。
点击第二行,下载到一个音频文件
https://cdn.cocotais.cn/§ꮏөгұꮏєłłєг [ⱮΘĐƗ₣ƗΣĐ].mp3使用vbindiff工具,比较§ꮏөгұꮏєłłєг [ⱮΘĐƗ₣ƗΣĐ].mp3和Storyteller [ORIGINAL].mp3的不同。最终,从文件的差异部分,可以拼接成以下url
https://lab.cocotais.cn/2026/storytel.ler下载得到storytel.ler
(其实这个url后面还有用,暂且不表)
在这里,你是否忘记了什么
0201 storytel.ler
对storytel.ler进行binwalk分析,结果如下
❯ binwalk '/mnt/c/Data/CCDC2026/storytel.ler'
DECIMAL HEXADECIMAL DESCRIPTION--------------------------------------------------------------------------------0 0x0 PNG image, 400 x 400, 8-bit/color RGBA, non-interlaced5425 0x1531 Zip archive data, at least v2.0 to extract, name: storytel.ler-unzipped/5477 0x1565 Zip archive data, encrypted at least v2.0 to extract, compressed size: 2486796, uncompressed size: 2486784, name: storytel.ler-unzipped/IDEA FILTER.exe2492340 0x2607B4 Zip archive data, encrypted at least v2.0 to extract, compressed size: 513283, uncompressed size: 513271, name: storytel.ler-unzipped/RECREATION.png3006030 0x2DDE4E End of Zip archive, footer length: 22首先,修改后缀为PNG,得到一个二维码,扫码得到线索
REVERSE
注意,以下做题过程是错误的,正确路径应该会更简单
binwalk -e提取zip文件
注意到文件使用了不安全的ZipCrypto算法,加上文件中包含一个文件头确定的exe文件。
遂使用bkcrack进行明文攻击
bkcrack -C ..\storytel.e.zip -c "storytel.ler-unzipped/IDEA FILTER.exe" -x 0 4d5a90000300000004000000ffff0000很快就可以得到内部密钥,并且对zip进行解密
X:\CCDC2026\bkcrack-1.8.1-win64>bkcrack -C ..\storytel.e.zip -c "storytel.ler-unzipped/IDEA FILTER.exe" -x 0 4d5a90000300000004000000ffff0000bkcrack 1.8.1 - 2025-10-25[15:04:04] Z reduction using 9 bytes of known plaintext100.0 % (9 / 9)[15:04:04] Attack on 749350 Z values at index 6Keys: da34e2e8 ad3021e2 75147a5848.2 % (361150 / 749350)Found a solution. Stopping.You may resume the attack with the option: --continue-attack 361150[15:07:48] Keysda34e2e8 ad3021e2 75147a58
X:\CCDC2026\bkcrack-1.8.1-win64>bkcrack -C ..\storytel.e.zip -D ..\storytel.d.zip --keys da34e2e8 ad3021e2 75147a58解压storytel.d.zip得到两个文件
-
IDEA FILTER.exe -
RECREATION.png
正确做法
还记得https://lab.cocotais.cn/2026/storytel.ler吗?之前访问的时候,他的headers中有一句Prophecy-Set-Header: encounter=anonymous。
向https://cocotais.cn/prophecy发送请求,并且在headers中,将encounter设置成anonymous。
在html中即可获得密码ehsvnty92tqb8和2435712(空格的数量)
0202 IDEA FILTER.exe
错误做法(也很正确)
以下做法依然怀疑存在错误的流程。。没事,反正结果是好的
我们一不小心掏出了一个IDA
使用IDA64反编译此文件,发现这是个go语言编写的native程序,我们找到main_main函数,开始分析。我们重点分析以下语句:

v1 = *(_QWORD *)(os_Args + 24); if ( v1 != 7 || (((unsigned __int64)*(unsigned int *)(*(_QWORD *)(os_Args + 16) + 3LL) << 32) | **(unsigned int **)(os_Args + 16)) != 0x3231373535333432LL ) { if ( v1 == 23 && (unsigned __int8)runtime_memequal() ) { fmt_Fprintln(); os_Exit(); return; } goto LABEL_14; }我们可以借助LLM等工具帮助我们分析,以下是分析结果
os_Args 是 os.Args 底层字符串数组的指针。在 64 位下,每个 string 占 16 字节(8 字节数据指针 + 8 字节长度)。
os_Args + 0:os.Args[0].ptr
os_Args + 8:os.Args[0].len
os_Args + 16:os.Args[1].ptr
os_Args + 24:os.Args[1].len
因此 v1 = len(os.Args[1]),获取第 1 个命令行参数的长度。
检查 len(os.Args[1]) == 7,且通过拼接字符串前 4 字节与偏移 3 处 4 字节的方式,得到一个 64 位无符号整数,与 0x3231373535333432 比较。
拼接逻辑:
**(unsigned int **)(os_Args + 16) 读取 os.Args[1] 数据的前 4 字节作为低 32 位。
_(unsigned int _)(ptr + 3) 读取偏移 3 处的 4 字节作为高 32 位。
该常数按小端字节序对应字符串 “2435712”。因此条件为:os.Args[1] 恰好等于 “2435712”。
因此,我们向参数1传入2435712
X:\CCDC2026\storytel.ler-unzipped>"IDEA FILTER.exe" 2435712惊醒。视线清晰,你发现天已转晴。一片纸出现在你身边程序在目录创建了key.txt,内容如下
秘密与路途被摆上天平,摇晃之间价码已被定下。讲述人已离去,前路未知而富有吸引力。这是给勇敢者的奖励:https://c3n98.cocotais.cn/(纸的背面隐秘处写了一串密文)5539E6426D369936C55E43D88E8C01BC3E1E1B68EB81B510558EB2FBFDC2A34DC4A5A94EBBCF5BD90EC88073BB7AAB512456DE346FBAAC7B5F0E48B2B5067A1F24F991C77FF0030343C48567A52FD6B9正确做法
略。上一步空格的数量。
0203 RECREATION.png 与 ???

典型的高度隐藏问题,修改png文件头,把高度改的更高,就可以得到

从图片中读出解密的配置
使用Rabbit算法解密,Key为16个1
解密key.txt中的密文,即可得到以下文本
0106040D465755500646445809015453014C583B60617501050309127D6167656265127A716B0204 c3n98.cocotais.cn
你已不知身处何地。只见栅栏层层叠叠。你按照纸上的指引探险,误入了不安全的角落。思索着,你耳畔传来一阵声音: 命运所指的开头,需要由你自行谱写。工具放在了你眼前最明显的位置,不知你能否利用好这个突兀的机会,寻找遭遇过的秘密。疑问不解是正常的,但你已具备了一以贯之的解决的条件,剩下的便是试错了。
直接访问c3n98.cocotais.cn,首先我们会注意到证书错误,我们发现证书是自签名的,可以从中提取出如下信息:
生效日期: Jul 21 11:45<14>14> 2025 GMT 失效日期: Jul 21 19:08<10>10> 2025 GMT
RSA2048公钥
-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAskKu+i8zgNyDOC8OEBlkzjHkn4k+duibtF11DL+WNEF6WQwcG7c+5J9wINjpbM5dTQjKBP4XTwhQJi9oRs8IUQCMFKm0hbDxOJrIFepo7zVFmMti94hJHXgfZ6Luj1ZDuuG+b3xriYKwbYkDu0gGJpzNtVXBRTQZHQ3odYiYJzVKt60jbZKKNeIM/NYt+scI8E3mvvkQXwvVHNMxxCKQ/99kyC1Hj6LVPRX0ccPl4L4aYZRtVIfMWhRpBrQD9Mjj8S1+hkQOwv5CHNK4FGQURLv7j/MzdyZg7PbBlS94icV6lmqWoJ0uVw2kK0Qea2ibR9PAsqlw0hyetYHkTKWDpwIDAQAB-----END PUBLIC KEY-----并且,我们从Headers中找到了不寻常的东西
decrypt-method-2:xor
这提示我们,上一步没有完成的解密,可能需要使用异或算法。
我们对上一步没有解密完全的密文使用异或算法解密,密钥为2435712 (就是之前exe中的密码),解得
3278qfgb2uqo83fg2yoRSA2048 OUTPUT HEX这提示我们使用RSA2048对3278qfgb2uqo83fg2yo进行加密
我们使用c3n98.cocotais.cn的TLS证书中的RSA公钥,对其进行加密(模式为RSAES-PKCS1-V1_5。。这个是出题的问题)
得到flag1
611bc26eeacc8135311760fa4b9209b41b07e50788684b453e30510e9044176861d2bbb3d7a6d201edbf08966dce74d92c0b517899a46115f80a014df7bb928444eb4d15d8a7e0cf5eabf46cffa6e139f7a768b7974f985d8940881cc4c43b8e9b41a0dce220064dbe2cb247f361405fee03f75a02d235db54ad1fcbb1ba668c1fd7f53270e6d2b99abfdd8c183d6e8d28af2551f2b38be0c002ec8ae3b40306c28fb6089321b9d05ec26883f02bf12eacee1467cebefe980c8e278c2260ad6a6a01e9751ddf2847061e1b4fcc913c58f4df89b446afda32012a1257d42bf78059f505381ec77f0b03037e7896776be3e8eac3a8114727dbeecee596638460a5前辈们说,无论发生了什么改变,有些东西是不会变的。
有什么出现了呢…又有什么可以不变呢…?
逆向思维是我们常常忽略的。反其道而行之,或许会有好的结果。
问题是,利用之后的结果何处存放呢…
还记得https://lab.cocotais.cn/2026/storytel.ler吗?之前访问的时候,他的headers中有一句Prophecy-Set-Header: encounter=anonymous。我在做题的时候,都没有注意到这一点,因此使用了错误的方法破解Zip加密。
其实,这里让我们设置的Header并没有变。我们需要向https://cocotais.cn/prophecy发送请求,并且在headers中,将encounter设置成flag1 !
0301 前路何向?所指何方?
上一步的请求,我们得到了一个页面。从他的源代码中,可以直接得到以下信息
“https://github.com/cocotais-lab/studious-doodle” “2b42cb33ebd414de7520b8802f2154feaf7c84b2”
这把我们引向了一个github commit
https://github.com/cocotais-lab/studious-doodle/commit/2b42cb33ebd414de7520b8802f2154feaf7c84b2迷雾消散。你意识到讲述者从未离开,TA一直相伴在你身边。人影浮现,TA正对着你,你却看不清TA的面庞。 一阵低语传来:你得到的够多了。
填写其中指向的飞书表格https://cocotais.feishu.cn/share/base/form/shrcnGZPVwxYL08RocF1FooLYFc
我们可以收到一封邮件。
0302 豁然开朗。一扇紧闭着的门出现。「抉择就在眼前,结局早已注定。」
注意,这个地方非常的坑,因为大部分邮件查看工具可能会吞掉你的空格,所以,必须要下载邮件源文件进行查看。以下是得到的消息
INFORMATION BELOW ARE ENCRYPTEDGROUP: 748309147STORY: A'ilnecis monIneuennocgessImfnlyo h eevn ieo ifrue a e orraosadyu lnydmn. a trigdfst,csy s ri o查询群号查无此群,根据之前REVERSE的指示,反向成741903847找到群聊。

注意群聊中存在一个新线索。
关注STORY,加上你已不知身处何地。只见栅栏层层叠叠的指示,我们大致能猜测出是栅栏加密。
直接爆破即可,得到解密的明文。(flag2)(脚本zhalan.py)
As I'm finally on the receiving side of misfortune, I can see your reasons and your clingy demons.根据QQ群信息中的线索,查看github仓库的custom-properties,得到
Encounter y3cbqqoybq2依旧,向https://cocotais.cn/prophecy发送请求,并且在headers中,将encounter设置成y3cbqqoybq2。
得到的页面中,多了以下代码
window.location.href = "https://c3n98.cocotais.cn/?story=UNKNOWN×tamp=" + Date.now()0303 未知的时间,未知的故事。
直接打开上述url是不行的,因为不知道timestamp。 story参数就是flag2。
关于timestamp,解谜中就在c3n98.cocotais.cn的TLS证书中出现过。我们在这个时间段里面随便选择一个时间,就可以得到可用的时间戳了。
https://c3n98.cocotais.cn/?story=As I'm finally on the receiving side of misfortune, I can see your reasons and your clingy demons.×tamp=1753069524000最终得到以上url。
访问后,我们发现其Headers中多了一项
x-yuque-note:754819df-b72d-43ce-b8db-25d7bee81def直接拼接出语雀笔记的url
https://www.yuque.com/r/note/754819df-b72d-43ce-b8db-25d7bee81def得到以下信息
civilight_eterna.png@cdnyour_name@new_host:tenfold_heightENCRYPTED new_host BELOWHAPPYCOCOANNIVERSARYOHHWSAPQJGQBEQBBHGUMNUMHJU0304 Civilight Eterna
“��的�■”…?
用�的维■■亚����
是你!讲述者,你看这张��的■��
(记录似乎被人为损坏了)
上方信息的第一行,我们根据之前的经验,拼出url,https://cdn.cocotais.cn/civilight_eterna.png。
tenfold_height指的是10倍的图片高度。也就是32500。
your_name根据【探索者笔记】中的提示已经很明显了,就是storyteller
至于加密的信息,根据Civilight Eterna可以联想到
从名字含义(“永恒之光”)联想:维吉尼亚密码 (Vigenère Cipher) 在16世纪被提出时,曾因其强大的加密能力被认为是“不可破解的密码”(le chiffre indéchiffrable),在当时也被看作一种牢不可破的“永恒”加密法。
后注:
Civilight Eterna应译为文明的存续(对应探索者笔记中的“��的�■”),仅是对游戏《明日方舟》角色的捏他(neta)。维吉尼亚密码可直接自探索者笔记中维■■亚联想到。
使用维吉尼亚密码对WSAPQJGQBEQBBHGUMNUMHJU解密,密钥为HAPPYCOCOANNIVERSARYOHH,得到PSLASHSONEDOTMCDUNDOTCN
即PSLASHSONE.MCDUN.CN。但此处,lyx失误了,

…很好,我们拼出了完整的ssh参数!
ssh -p 32500 -l storyteller p-s1.mcdun.cn但是,还需要密码。
再次检查civilight_eterna.png,我们发现图片Exif信息中存在license:password=theresa。
这次,我们可以登录了。
0305 门打开了。传出了应答声:静候求索者的到来
❯ ssh -p 32500 -l storyteller p-s1.mcdun.cnstoryteller@p-s1.mcdun.cn's password:Received disconnect from 198.18.0.7 port 32500:11: prophecy encounter:kazdelDisconnected from 198.18.0.7 port 32500我们终于得到了最终的encounter
和之前一样,传入prophecy。
<meta charset="utf-8"><p>门打开了。传出了应答声:静候求索者的到来</p>静候求索者的到来
即为TA的应答,发送QQ入群申请即可。
至此,你已经完成了CCDC 2026。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
























