谜面
解谜方法
获取 zip 文件
2024 解谜红包仅提供一张图片,和 “Check the image file!” 的提示。
根据提示,我们使用二进制编辑器检查图片文件:这里使用 010 Editor 打开图片文件,010 Editor 内置了很多文件格式的解析器,可以结构化地查看文件内容。
易发现,文件末尾存在标记为 unknownPadding 的数据,从未知部分的开头 PK\3\4 猜测,这是一个 zip 文件。
将 unknownPadding 的数据保存为 zip 文件,并使用解压缩软件打开。
部分解压缩软件如 WinRAR/Bandizip 等,支持直接读取从文件中间部分开始的 zip 文件,此时只需要直接改扩展名为 zip 即可。
解密 zip 文件
打开 zip 文件后,发现其中文件均加密,但从注释中可以看到密码提示:
易发现这是 Base64 编码,解码易得:
Python 3.11.0 (main, Oct 24 2022, 18:26:48) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import base64
>>> base64.b64decode("cmVhZHRoZWRlc2NyaXB0aW9u")
b'readthedescription'
使用 readthedescription 作为密码解压缩 zip 文件,失败,但易发现该注释为如下英文:
Read the description
考虑到 zip 文件中的其它数据已经被加密,因此易猜测该描述是指图片文件的描述。继续分析图片文件,检查图片 EXIF 信息。
使用 exiftool 查看图片文件的 EXIF 信息,发现其中存在如下信息:
易发现两个信息:
- doubtisthekeytoknowledge
- RedPacket2024
测试易得第一个信息为密码,使用 doubtisthekeytoknowledge
作为密码解压缩 zip 文件,成功解压缩。
运行 get_code 代码
这一部分提供了 Python 和 Node.js 两种代码,功能完全一致,均为获取下一步信息。
直接运行要求我们提供一个密钥,查看代码(以 Python 为例)发现如下逻辑:
key = input("Press your key: ").encode("utf-8")
if xor_bytes(key, b"red-packet") != b"alampy.com":
print("Key error")
quit()
易发现,我们需要找到一个密钥 ,使得 成立。
由于异或运算的性质,我们可以得到 。
代入后运行代码,得到如下输出:
TXT: redpacket2024.alampy.com
通过域名获取数据
打开浏览器,访问 redpacket2024.alampy.com,发现重定向到了 RFC1035 规范文档,易推测该域名需要使用非常规方法使用。结合上一步提示的 TXT
,我们使用 nslookup
命令获取该域名的 TXT
记录:
> nslookup -q=txt redpacket2024.alampy.com 8.8.8.8
服务器: dns.google
Address: 8.8.8.8
非权威应答:
redpacket2024.alampy.com text =
"red-packet-2024-38206469676974732c20313937312d30352d32335430373a31373a30335a"
Linux 下可以使用 dig
命令获取:
$ dig TXT redpacket2024.alampy.com
; <<>> DiG 9.18.18-0ubuntu0.22.04.1-Ubuntu <<>> TXT redpacket2024.alampy.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22995
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;redpacket2024.alampy.com. IN TXT
;; ANSWER SECTION:
redpacket2024.alampy.com. 298 IN TXT "red-packet-2024-38206469676974732c20313937312d30352d32335430373a31373a30335a"
;; Query time: 0 msec
;; SERVER: 127.0.0.42#53(127.0.0.42) (UDP)
;; WHEN: Sat Feb 10 20:42:42 CST 2024
;; MSG SIZE rcvd: 131
易得到数据
red-packet-2024-38206469676974732c20313937312d30352d32335430373a31373a30335a
解密 TXT 记录获得口令
易发现该数据在去除前缀 red-packet-2024-
后是一个十六进制字符串,解码后得到如下数据:
8 digits, 1971-05-23T07:17:03Z
提示中的 8 digits
表明我们需要一个 8 位数字,但后续的数据却是一个 RFC3339 格式的时间。考虑到 1971 并不是一个常见的年份,且与 Unix Epoch 接近。而时间的一种常规表示方法是 Unix 时间戳,因此我们猜测口令为 Unix 时间戳。
将 1971-05-23T07:17:03Z 转换为 Unix 时间戳,得到 43831023
,即为口令。
进入支付宝红包页面,输入口令,即可获得红包。