文章

2024年1024解题分析(codefather题库)

前言

本次题目从公众号看到的,抽空就做了一下。 没有广告嫌疑,只是单纯的想解题,鉴于这些题目的答案中包含大量的网站引流信息,此分析的大部分内容不提供答案,或只提供截图答案。 题目地址:https://1024.codefather.cn/

解题思路

第1题

level_1.png

1
2
72 101 108 108 111
87 111 114 108 100

看到数字,想到什么。还是100左右的数字,那第一反应肯定是ASCII码。

背一下 72 的 ASCII 码是 H。等等?最熟悉,也最陌生!

这不会就是 Hello World 吧。看下数字数量,5+5,不用想了肯定是 Hello World

(不会真有人挨着计算每个字母的 ASCII 码吧?)

就这?上点强度啊。

第2题

level_2.png

原谅我这关没加载出来图片,我还以为真上强度了呢,哈哈哈哈哈。

看到图片我就懂了,这不就是CV键盘吗,我也有图。

cv_keyboard.gif

所以,答案就是 CV

第3题

level_3.png

下次这种题直接放在第一题吧,真的提示全给了。

这题URL中有个参数:https://1024.codefather.cn/q/514cf185?answer=codefather

answer=codefather,那答案就是 codefather

第4题

level_4_1.png

鱼皮喜欢的颜色?

虽然我知道这是蓝色,但是这题的答案肯定不是 blue蓝色

第一反应是,F12看看有没有线索。

level_4_2.png

不会是这个rgb吧,直接复制粘贴试试。

(补充一句,到这一关之后,就没关过F12,因为我发现了不得了的东西,见下图)

level_4_3.png

至此,每道题应该能够得到了一个比较完美的提示,大大降低难度。

第5题

level_5.png

1
2
3
10 === 2
100 === 4
1000 === ?

这题直接秒了,一眼二进制,所以 1000 === 8

第6题

level_6.png

这题不是老梗图了吗,Php是最好的语言

但是我想说,大人,时代已经过去了。同样是P语言,我认为 Python是最好的语言。(虽然我知道这个是Php官方玩梗)

第7题

level_7.png

对,这题确实没有提示。

但是我想科普一下:1Byte = 8bit。

另外,额外科普一下,区分字节(Byte)和位(bit)的关键在于大小写。

问:64MBps 和 8Mbps 哪个速度更快呢?

第8题

level_8_1.png

又是颜色题?F12直接查,秒了。

level_8_2.png

等等,这是RGB,还得转换?太麻烦了,我选择直接调出取色器(嘿嘿嘿)。

level_8_3.png

#E37A3F秒了。

第9题

level_9_1.png 好巧,今天是1024,今天又是星期四。

另外这个数字(1729563911)看着怎么那么像时间戳?

转换一下看看:2024-10-22 10:25:11。这是出题时间?

level_9_2.png

意思是,给出周四的时间戳就是答案呗,刚好今天是周四,直接复制页面上的时间戳吧。

第10题

level_10_1.png

看到题目 "分量",我第一反应以为中分藏了什么东西呢,要上PS调色?太麻烦了,先看看F12能不能调出东西吧。

1
2
<p class="mb-4 text-2xl text-center text-gray-600">可惜你不是程序员,也不懂这张图的 "分量"</p>
<div class="h-auto"><img src="/assets/xiaoheizi-D7tntIe0.jpeg" alt="有趣的梗图" class="w-[110%] max-w-72 mx-auto mb-6 rounded-lg shadow-lg overflow-hidden"></div>

看到的关键词只有:xiaoheizi有趣的梗图w-[110%]

我以为答案可能是:小黑子有趣的梗图110%

可惜都不是。

再回到题目描述,分量,重点聚焦在字上。跟图片有关的

分辨率? 看了下图片的分辨率,是 204x192。也不是正确答案。

那关于图片的,还有什么呢?哦?!文件大小!

下载下来看字节大小:9128字节,终于结束了。 level_10_2.png

第11题

level_11.png

又是颜色?秒了。

算了,还是解释一下吧,这个数值一眼就是颜色的RGB值。

1
2
3
黑色 = 0,0,0
白色 = 255,255,255
红色 = 255,0,0

已经背了这些,实在不知道,去搜一下。

第12题

level_12_1.png 好明显的蒙版,但是,好像没蒙全(bushi)

看下F12

level_12_2.png

就是它了(看左边的大小与图片大小不一样的蒙版),直接删掉(Del键)!

level_12_3.png

好的,答案出来了。

第13题

level_13_1.png

看图识字,小学题,曲奇饼干(Cookie)

意思是让我看看浏览器的Cookie,F12,Application,Cookies,看看有没有线索。

level_13_2.png

看不见看不见,真的看不见,那就直接复制吧。

第14题

level_14_1.png

这题属实没看明白想表达什么,我还以为让我修改代码,让这个加载动画停止呢。不过鉴于难度略大,暂时没尝试。

看下提示:

level_14_2.png

Restart?懂了,原来是想表示,出现问题,重启就能解决。

那就刷新一下网页,通关。

第15题

level_15_1.png

就一个 Debug。看来这题想表达的是让我看下console的输出?或者让我下断点调试?

鉴于暂时不知道断点下在哪,就先看下console吧。

看到了一个不同寻常的错误:

level_15_2.png

点进代码看看:

level_15_3.png

1
console['error'](_0x4c0024(0x9ca));

像是故意抛出的错误,难道是这个错误字符串?connection error试试?

第16题

level_16_1.png

由于上一关停在了console界面,所以进入这一关的时候就在console界面看到了提示。

那就直接输出这两个变量吧。

level_16_2.png

好,答案来了:\x00

第17题

level_17_1.png

直接点击按钮,下载后是一个txt文本,打开看看。

level_17_2.png

虽然乱码,但是很容易看到关键的头文件,依据经验,这是个PNG文件。那就直接改后缀看答案吧。

答案是ctrl,就不贴图了。

第18题

level_18_1.png

没注释?那就是让我看注释,直接F12启动。

level_18_2.png

这是什么?直接复制粘贴,结束。

第19题

level_19_1.png

图片不显示?那肯定代码有问题,看代码:

level_19_2.png

直接把上面的文本拼接到data:image/jpeg;base64,后面,图片就显示了。

很简单。

level_19_ji.jpg

第20题

level_20.png

这题跟上一题一样,都是资源不显示(图片、音频)。

同理,看代码。一般音频都是MP3,改下后缀试试。可行。

但是我在公司摸鱼,不能开声音播放这个吧。

那就结合其他信息:音频时长2秒;文件名为:kunkun.mp3;上一题的答案是ji

那这题的答案大概率是ji鸡你太美之类的,直接猜答案吧。

最后,答案是ji(好像也对)。

第21题

level_21.png

对啊,答案已经给我过了。

第22题

level_22_1.png

这题从代码中就能看出,答案肯定在Base64上。

但是Base64就是图片啊,能有什么额外的信息吗?难道答案是这串Base64?

复制试试: level_22_2.png 我?! 进Network看看: level_22_3.png 好,直接复制。

第23题

level_23_1.png

一眼Unicode码的字符,那就直接算一下的Unicode码是什么。

level_23_2.png

复制粘贴,结束。

第24题

level_24.png

你又看不见什么了啊?!哦,又藏东西了。

第25题

level_25_1.png

第一眼,既然小的数字,等于大的数字,那肯定是进制转换,并且是高进制往低进制转换。

根据经验,先试下16进制转10进制。

level_25_2.png

结束,答案是4132

第26题

level_26_1.png

点一下会有请求,但是请求失败?

请求地址为/1024_status_code,所以这题考查的是状态码。

404 秒了。

第27题

level_27.png

这题一眼就看出来是分析复杂度。

我如果是个大学生,我就开始分析了,可是我现在不是大学生。

那我就直接从5开始试(因为第二段代码是5),所以答案是8

第28题

level_28_1.png

这题说实话,我真不会。

但是,程序员另一个必备技能就是:搜索。

level_28_2.png

看到第一个中文网页,跟计算机相关,点开看看吧。

level_28_3.png

好,答案又有了。

第29题

level_29.png

好家伙,又藏了。

第30题

level_30_1.png

1
2
coder_yupi + mysecretis123456 => ArocnwrBiWMQVw== 
 ? + mysecretis654321 => ntPc4wO4v/Y=

文本 + secretis => Base64

那说明coder_yupi被加密的文本,mysecretis123456是加密密钥,得到的结果是ArocnwrBiWMQVw==

由于没有公私钥的概念,所以,肯定是对称加密。

那就去挨着尝试是哪种加密算法吧。

level_30_2.png

经过一番尝试,是RC4加密,那就按照这个解密一下第二个的原文本。

level_30_3.png

you_good

第31题

level_31_1.png

既然图片里藏着二维码,那就下载下来看看。

文件名为:hideQrcode-DCIkxdZo.jpg。很敏感的jpg,感觉像是压缩包,改下后缀试试(这里有个小知识,jpg文件可以藏压缩包,就不科普了)。

level_31_2.png

扫码之后得到答案: level_31_3.png

第32题

level_32_1.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1111111001000101111111111
1000001001110010000001001
1011110101010110110101011
1011110101001001000001111
1011110101000100110101111
1000001000000000000001001
1111111001001010101111111
0000000000001100000000000
1110111111111110001100001
1011000001111010111100011
0001111011111111111111111
1000000000000100000000000
1110111100000011000000000
0000000000001010111111100
1111111010111100000011100
1011110101001011101010110
1011110101010101111011111
1011100101001110111111100
1111111001010101111100010
1000001000000000010000010
1111111111111000111111111

这题卡了我很久,真的服了。

鉴于上题的经验,立马就想到了这题是二维码。所以,需要将1 0转换成黑白块,然后扫码。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
import matplotlib.pyplot as plt

# 二维码数据
data = '''1111111001000101111111111
1000001001110010000001001
1011110101010110110101011
1011110101001001000001111
1011110101000100110101111
1000001000000000000001001
1111111001001010101111111
0000000000001100000000000
1110111111111110001100001
1011000001111010111100011
0001111011111111111111111
1000000000000100000000000
1110111100000011000000000
0000000000001010111111100
1111111010111100000011100
1011110101001011101010110
1011110101010101111011111
1011100101001110111111100
1111111001010101111100010
1000001000000000010000010
1111111111111000111111111'''

data = data.split('\n')

# 转换为numpy数组
qr_array = np.array([[0 if char == '1' else 1 for char in row] for row in data])

# 绘制二维码
plt.imshow(qr_array, cmap='gray', interpolation='nearest')
plt.axis('off')  # 不显示坐标轴
plt.show()

我以为要得到答案了,你也以为是吧?

level_32_2.png

这是啥?又像又不像?

到这里线索就完全断了,我怀疑是出错题了。

然后就只有另外一个方法,调试js,看下这题答案是啥。但是这不是太暴力了吗?而且很费时。

翻下评论,找到了答案,先拿走吧,后面再研究:yupi_thanks_you

这里补充一下后面根据答案反推的过程:

首先,已知答案,然后生成二维码,然后转换成10矩阵,对比矩阵差异。

但是二维码具有容错性和版本,不同的参数,生成的二维码是不一样的。这里只是碰碰运气,没想到生成了一张比较像的:

level_32_3.png

用代码将二维码转换成10矩阵,然后对比:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import cv2


def qr_image_to_matrix(image_path):
    # 读取二维码图像
    image = cv2.imread(image_path)

    # 创建QRCodeDetector对象
    detector = cv2.QRCodeDetector()

    # 检测并解码二维码,返回二维码的内容、矩形坐标和二值化二维码图像
    data, points, qr_code_image = detector.detectAndDecode(image)

    if qr_code_image is not None:
        # 将二维码图像转为二值矩阵(0 和 1 的形式)
        _, binary_qr = cv2.threshold(qr_code_image, 127, 1, cv2.THRESH_BINARY)

        # 反转矩阵中的 0 和 1
        inverted_qr_matrix = 1 - binary_qr

        return inverted_qr_matrix
    else:
        print("未检测到二维码")
        return None


image_path = 'img.png'  # 替换为你的二维码图片路径
matrix = qr_image_to_matrix(image_path)

if matrix is not None:
    # 打印反转后的二维码矩阵
    for row in matrix:
        print(''.join(str(int(i)) for i in row))

level_32_4.png

拿两个矩阵对比:

level_32_5.png

对比结果发现,两矩阵相似度很高,然后这题就这样了,我也不知道具体怎么解,就这样吧。

第33题

level_33_1.png

又是图片,估计又藏了什么东西,下载出来记事本打开看看吧。

level_33_2.png

一堆乱码中藏着明文,直接复制粘贴。

第34题

level_34_1.png

既然移动不了页面的元素,那就让整个页面都变成海洋吧。

level_34_2.png

好了,终于结束了。

第35题

level_35_1.png

从这题开始上强度了,有个按钮,每次点击都会移动,移动玩之后又循环移动,所以我们要让它停止。

最开始的思路是找到对应的代码,然后从代码里跳过这里的循环。

后来想到有个输入框,所以,答案应该是个字符串,所以尝试了break,成功了。

第36题

level_36.png

很简单的题目,就是一个复杂度计算,这里是一个斐波那契数列的计算,用到了递归。

所以这个题目的答案是2^n

第37题

level_37_1.png

图片是一个硬盘,暗示我们数据存在本地。所以我们需要找本地的数据。

没有弹出下载,则可能是在本地的缓存中,那就去找缓存。

缓存路径:F12 -> Application -> Local Storage

可以直接看到答案

level_37_2.png

第38题

level_38_1.png

题目一个是程序员,一个是产品经理。在职场上产品经理肯定是拿刀干程序员的,所以刀肯定刀程序员。

我们只需要调整网页结构就行。

但是,我不是前端,根本不会这里,我尝试修改了以下方案:

1
2
3
4
5
6
7
8
9
10
11
<div class="flex justify-between items-center mb-6  w-full sm:w-1/2 min-w-[543px]">
  <div class="flex flex-col gap-4 items-center">
    <img src="/assets/coder-BNscreTj.png" alt="程序员" class="w-40 h-auto mr-2">
    <span>程序员</span>
  </div>
  <div class="flex flex-col gap-4 items-center relative">
    <img src="/assets/producer-DxFkZ3ZN.jpeg" alt="产品经理" class="w-24 h-auto">
    <span class="text-5xl rotate-[255deg]" style="position: absolute; left: -20%; bottom: 25px; transition: left 0.3s;">🔪</span>
    <span> 产品经理</span>
  </div>
</div>

level_38_2.png

我真的服了,尝试了各种方案,调整角度,都没成功。

后来,从社区找到了大佬的答案,直接将程序员的right的-15%改成-215%就行。

level_38_3.png

怎么说呢,思路肯定是对的,只是,技术栈不匹配,没办法。

第39题

level_39_1.png

这题直接秒,404,直接访问站内的一个404网站就能找到答案:

level_39_2.png

所以这题答案就是 3679

第40题

level_40.png

图片是Pornhub的logo,我们访问不了,所以得挂梯子。

所以答案就是 VPN

(有一说一,不应该用Pornhub的图片样式,这个是不合规的,可以使用谷歌之类的样式)

第41题

level_41.png

这题是解谜题的常规套路了,就是键盘字母正上方的按钮。

所以YUPI之上的按钮就是 6708

第42题

level_42_1.png

这题更简单了,一段字母,一个秘钥:3。里面就应该反应过来,是凯撒密码。

直接解答就行:

level_42_2.png

就在写这个攻略的时候,前文没有提到凯撒密码,Copilot自动就提醒我用凯撒密码解答。这么说,是不是很简单

level_42_3.png

本文由作者按照 CC BY 4.0 进行授权