MISC部分
real check in
题目给了一串base32,随波逐流一把梭
手速比较快,抢了个三血(第一次拿血是签到,哭死!)
begin{WELCOMe_to_B3GinCTF_2024_H0Pe_YOU_wiL1_11ke_i7}
Tupper
题目给的压缩包里有很多txt文件,直接打开最后一个发现有=,先把文件数据读取下来
import os
path = "C:/Users/Xia/Desktop/tupper/tupper" #文件夹目录
files= os.listdir(path) #得到文件夹下的所有文件名称
files.sort(key=lambda x: int(x.split('.')[0]))
txts = []
for file in files: #遍历文件夹
position = path+'\\'+ file #构造绝对路径,"\\",其中一个'\'为转义符
print (position)
with open(position, "r",encoding='utf-8') as f: #打开文件
data = f.read() #读取文件
txts.append(data)
txts = ''.join(txts)#转化为非数组类型
print (txts)
跑完得到文件里的数据
MTQyNzgxOTM0MzI3MjgwMjYwNDkyOTg1NzQ1NzU1NTc1MzQzMjEwNjIzNDkzNTI1NDM1NjI2NTY3NjY0Njk3MDQwOTI4NzQ2ODgzNTQ2NzkzNzEyMTI0NDQzODIyOTg4MjEzNDIwOTM0NTAzOTg5MDcwOTY5NzYwMDI0NTg4MDc1OTg1MzU3MzUxNzIxMjY2NTc1MDQxMzExNzE2ODQ5MDcxNzMwODY2NTk1MDUxNDM5MjAzMDAwODU4MDg4MDk2NDcyNTY3OTAzODQzNzg1NTM3ODAyODI4OTQyMzk3NTE4OTg2MjAwNDExNDMzODMzMTcwNjQ3MjcxMzY5MDM2MzQ3NzA5MzYzOTg1MTg1NDc5MDA1MTI1NDg0MTk0ODYzNjQ5MTUzOTkyNTM5NDEyNDU5MTEyMDUyNjI0OTM1OTExNTg0OTc3MDgyMTkxMjY0NTM1ODc0NTY2MzczMDI4ODg3MDEzMDMzODIyMTA3NDg2Mjk4MDAwODE4MjE2ODQyODMxODczNjg1NDM2MDE1NTk3Nzg0MzE3MzUwMDY3OTQ3NjE1NDI0MTMwMDY2MjEyMTkyMDczMjI4MDg0NDkyMzIwNTA1Nzg4NTI0MzEzNjE2Nzg3NDUzNTU3NzY5MjExMzIzNTI0MTk5MzE5MDc4MzgyMDUwMDExODQ=
由于长度大于500随波逐流没法一把梭,猜一下应该是base64(base全试完发现也只有64可以),解码得到一大串数字
14278193432728026049298574575557534321062349352543562656766469704092874688354679371212444382298821342093450398907096976002458807598535735172126657504131171684907173086659505143920300085808809647256790384378553780282894239751898620041143383317064727136903634770936398518547900512548419486364915399253941245911205262493591158497708219126453587456637302888701303382210748629800081821684283187368543601559778431735006794761542413006621219207322808449232050578852431361678745355776921132352419931907838205001184
这时候我以为是十六进制转文件发现并不是十六进制,回去看题目发现题目上有信息,Tupper,百度搜索发现这是塔珀自指公式涉及到一个函数 f ( x , y ) ,一个参数 k,和一个图片 a。f ( x , y )对 a 中的每一个点 ( x , y )进行判断,决定该点的颜色是0还是1,因此决定了 a 的图案。这时候就知道了这是k值,我们现在需要的就是利用塔珀自指公式得到图片
import numpy as np
import matplotlib.pyplot as plt
def Tupper_self_referential_formula(k):
aa = np.zeros((17,106))
def f(x, y):
y += k
a1 = 2**-(-17*x - y%17)
a2 = (y // 17) // a1
return 1 if a2 % 2 > 0.5 else 0
for y in range(17):
for x in range(106):
aa[y, x] = f(x, y)
return aa[:,::-1]
k = 14278193432728026049298574575557534321062349352543562656766469704092874688354679371212444382298821342093450398907096976002458807598535735172126657504131171684907173086659505143920300085808809647256790384378553780282894239751898620041143383317064727136903634770936398518547900512548419486364915399253941245911205262493591158497708219126453587456637302888701303382210748629800081821684283187368543601559778431735006794761542413006621219207322808449232050578852431361678745355776921132352419931907838205001184
aa = Tupper_self_referential_formula(k)
plt.figure(figsize=(15,10))
plt.imshow(aa,origin='lower')
这是网上找的脚本但是没跑出来,所以就找的一个在线网站。
(Tupper's Formula Tools (tuppers-formula.ovh)
得到flag
begin{T4UUPER!}
devil's word
题目描述:
leu lia leu ng leu cai leu jau leu e cai b cai jau sa leng cai ng ng f leu b leu e sa leng cai cai ng f cai cai sa sa leu e cai a leu bo leu f cai ng ng f leu sii leu jau sa sii leu c leu ng leu sa cai sii cai d
根据题目我们搜索恶魔的语言可以知道恶魔的语言指的是温州话,但是最开始并没有想到这是数字的发音就浪费了很多时间都没有找到对应的。后面看一个常用话的温州音的时候才反应过来。
lia = 2
sa = 3
sii = 4
ng = 5
leu = 6
cai = 7
bo = 8
jau = 9
对照温州话数字音译来转化,这里要注意的是单个字母不用转化得到字符串
626567696e7b7930755f6b6e30775f77336e7a686f755f6469346c6563747d
放到随波逐流里试下,一眼看没有什么特别的,但是仔细看发现其中一个解码
发现可能是故意少加了个b,得到flag,运气比较好拿了个二血
begin{y0u_kn0w_w3nzhou_di4lect}
你知道中国文化嘛1.0
最开始没有看出来是什么,猜的应该有八卦或者其他的中国文化解码在里面。后面拿4KML开头的一小串去解码发现base32能解出八卦。这里要注意的是每段字符的后面一点不能一起解码,不然会发生错误
首次解码得到(手动分了下组)
1.☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☴☵☲☱☷☲☱☳☳☴☵☲☲☶☲☰☴☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☴☵☲☰☵☲☵☴☳☴
2.4KMLNYUYWLRJRNPCTC26FGF$
3.☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☵☰
4.4KMLFYUYWDRJRN&CTCZOFGFV
5.☲☳☴☷☲☲☴☲☶☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☵☷☲☱☴☳☴
6.4KMLLYUYWLRJRN&CTC2OFGFS
7.☷☲☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☵☰☲☰☷☲☵☲☳☴☷☲☲☴☲☶☱☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☵☰☲☵☷☲☳☲☳☴☴☲☷☷☲☴☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☲☵☲☵☴☳☴☴☲☷☰☲☳☲☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☵☰☲☰☷☲☵☲☳☴☷☲☲☴☲☶☱☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☱☷☲☱☳☳☴☵☲☲☶☲☰☴☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☲☵☲☵☴☳☴☴☲☷☰☲☳☲☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☵☲☱☷☲☱☳☳☴☵☲☲☶☲☰☴☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☶☲☶☰☲☲☱☳☴☴☲☷☰☲☷☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☶☳☲☲☵☳☴☶☲☶☲☲☷☳☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☵☰☲☵☷☲☳☲☳☴☴☲☷☷☲☴☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☶☰☲☲☱☳☴☴☲☷☰☲☷☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☵☰☲☵☷☲☳☲☳☴☴☲☷☷☲☴☱☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☶☰☲☲☱☳☴☴☲☷☰☲☷☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☲☶☲☰☷☳☴☶☲☳☰☲☱☶☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☱☷☲☱☳☳☴☵☲☲☶☲☰☴☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☵☲☲
8.4KMLFYUYWLRJRMPCTC@OFGFT
9.☵☰☲☶☰☲☲☰☳☴☷☲☱☰☲☶☱☳☴☵☲☳☳☲☷☵☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☶☲☶☰☲☲☱☳☴☴☲☷☰☲☷☳☳☴☵☲☰☵☲☵☴☳☴☶☲☵☵☲☴☳☳☴☵☲☲☲☲☱☴☳☵☰☲☶☰☲☲☰☳☴☵☲☰☵☲
10.4KMLLYUYWTRJRM7CTC@OFGFW
11.☳☴☶☲☵☵☲☴☳☳☴☵☲☷☱☲☶☳☳☴☷☲☵☵☲☱☱
我们看到其中有几组里面存在其他符号,通过搜索我们能发现文本中存在同样的文本,替换再进行解码
2.4KMLNYUYWLRJRNPCTC26FGFS ☶☲☵☵☲
4.4KMLFYUYWDRJRNPCTCZOFGFV ☲☰☵☲☵
6.4KMLLYUYWLRJRNPCTC2OFGFS ☵☲☵☴☲
8.4KMLFYUYWLRJRMPCTC2OFGFT ☲☲☱☴☳
10.4KMLLYUYWTRJRM7CTC2OFGFW ☵☴☳☴☶
将得到的八卦解码得到社会主义核心价值观密文
公正文明公正和谐公正平等文明友善法治和谐法治公正文明公正平等公正平等和谐爱国公正平等和谐和谐公正
☰☲☰☵☲☵☲
由和谐爱国和谐富强
和谐爱国公正公正公正和谐公正法治公正平等公正自由文明诚信和谐和谐文明公正平等公正公正和谐敬业和谐自由公正公正法治友善法治公正敬业法治友善平等公正民主和谐法治文明诚信和谐和谐民主和谐爱国文明诚信和谐和谐民主和谐文明公正友善爱国和谐爱国和谐民主公正和谐公正平等
但是在解码的过程中发现中间有六个八卦不能解码,而我们发现任意一个字对应六个八卦,所以在这里猜一下这里应该是自来对应下面的由。社会主义核心价值观解码得到字符串
bce-7bee8e3d808fcged-2ef94f}i{a7-18-12n81ce
栅栏一把梭得到flag
begin{eec8da87-ee32-11ed-8f8c-907841e2ffbc}
where is crazyman v1.0
骗你的,其实我是二刺螈(寸不已!!!)三字二次元地名
begin{秋叶原}
where is crazyman v2.0
这道题心服口服,社工能力还是太差了,一开始百度搜图没有搜出来主要是因为谷歌不知道怎么进不去了。后面没办法去修谷歌修好了一搜就搜到了
找到个相关视频进去看一下
这俩只能说一模一样,得到flag
begin{Boulevard World}
以后搜图还得谷歌
where is crazyman v3.0
首先从图中我们可以大致知道这是在一个星巴克,最重要的信息是瓶子上面有Boudl Apart Hotel的字样。在谷歌地图上搜索,发现有两家,但是第二家没有步行五分钟以内的星巴克
其实这里浪费了很多时间在第二个酒店上,一方面是梯子的原因死活上不去,另一方面是以为那个瓶子只有一家有,亏贼曼老师!
搜索第一个酒店附近的星巴克,有一家步行时间四分钟,是唯一符合要求的
在这家星巴克的评论区里找最新评论有一条是亏贼曼师傅一分钟前发的
YmVnaW57R29vZ2xlX21hcF9pc191c2VmdWxfYW5kX25vdF9mb3JnZXRfY29tbWVudH0=
看起来像base64,随波逐流一把梭得到flag
begin{Google_map_is_useful_and_not_forget_comment}
运气比较好,拿了二血,以后得找一个好用点的梯子,edge插件的梯子质量不是很好,卡了很久
Forensics部分
beginner_Forensics!!!!
当时看没有几个做出来以为很难所以放了一下,但是后面自己看的时候发现网上其实有现成的脚本,只需要改一下就可以用了
我们将未识别文件用010打开发现
&cls::BatchEncryption Build 201610 By gwsbhqt@163.com
网上搜一下,想看看有没有,结果还真找到了,而且这个没猜错的话应该是2023年强国杯的那道题改编过来的。然后就是找代码了,这里放一下改了之后的代码
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Batch Decryption 202009 (BatchEncryption Build 201610)
#
import os
def decryption(data):
if not (data[0] == 0xFF and data[1] == 0xFE):
print('Batch decryption bom error!')
return
if str(data[2:9], encoding="utf-8") != ' &cls\r\n':
print('Batch decryption cls error!')
return
if str(data[9:60], encoding="utf-8") != '::BatchEncryption Build 201610 By gwsbhqt@163.com\r\n':
print('Batch decryption build error!')
return
vars = {}
# decryption line
i = 60
l = len(data)
while i < l:
i = run(vars, data, i)
def run(vars, data, i):
buf = ''
f = 0
t = 0
x = False
l = len(data)
while(True):
if data[i] == 0x0d and data[i+1] == 0x0a:
i += 2
break
# get %var:~x,y% %0
if data[i] == 0x25:
if not x:
x = True
f = i
else:
x = False
t = i
rst = var_percent(data[f:t+1], vars)
buf += rst
else:
if not x:
buf += str(data[i:i+1], encoding="utf-8")
else:
if (f + 1 == i) and ((data[i] >= 0x30 and data[i] <= 0x39) or data[i] == 0x2a):
x = False
t = i
rst = str(data[f:t+1], encoding="utf-8")
buf += rst
i += 1
if i >= l:
break
#
print(buf)
bufs = buf.split('&@')
for var in bufs:
if var[0:4] == 'set ':
var = var[4:]
b = var.find('=')
vars[var[0:b]] = var[b+1:].replace('^^^', '^')
return i
def var_percent(data, vars):
full = str(data, encoding="utf-8")
buf = full[1:len(full)-1]
buf = buf.split(':~')
var = buf[0]
if not var in vars:
vars[var] = os.getenv(var)
ent = vars[var]
if (len(buf) > 1):
l = len(ent)
buf = buf[1].split(',')
f = int(buf[0])
t = int(buf[1])
if f < 0:
f, t = l + f, t
rst = ent[f: f+t]
else:
rst = full
return rst
encrypt_file = 'C:\./Users/Xia/Desktop/2.txt'
if __name__ == '__main__':
try:
file = open(encrypt_file, "rb")
data = file.read()
except Exception as err:
print('Batch decryption read error:', err)
exit
else:
file.close()
decryption(data)
跑出来得到一段文字
@echo on&@endlocal&@cls
@echo off
echo catf1y:your flag is already deleted by me.
set find_me_pls = b@TcH_O8FU$c@T1on_15_e@SY_70_SO1vE
echo crazyman:no no no no no no !!!!! i need flag.
echo Attention:can you help crazyman to find the flag?
echo Attention:Submit the info you are looking for on begin{*}
分析得到flag,一开始没看完以为不用套壳子后面翻译了才发现需要和壳子一起提交
begin{b@TcH_O8FU$c@T1on_15_e@SY_70_SO1vE}
beginctf_逆向工程_入门指南
第一次做pdf类型的题,一开始以为是在010里面找结果发现在全选的时候左上角有文字被选中,全选粘贴到文本框里得到flag,因为一开始方向错了没抢到血,可惜
begin{0kay_1_thiNK_YoU_Ar3_a1Re@DY_rE4D_6uiDe8ooK_AnD_9OT_FL46}
学取证咯 - cmd
题目描述:
1.你在我的电脑上干了什么?快使用volatility看一看cmd吧
根据题目描述是查看命令行操作,显示cmd历史命令
先分析操作系统
Volatility -f 1.raw imageinfo
再使用volatility的查看命令行操作命令
volatility -f 1.raw --profile=Win7SP1x64 cmdscan
得到flag
flag{Cmd_1in3_109_i5_imp0rt@nt}
学取证咯 - 计算机的姓名?
题目描述:
3.想要知道WORKGROUP的名字捏(提交时外面包上begin{}
主机名需要通过查询注册表,先用hivelist
Volatility -f 1.raw --profile=Win7SP1x64 hivelist
剩下的操作比较繁琐,主要是一步步寻找键名
volatility -f 1.raw --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey
volatility -f 1.raw --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -k "ControlSet001"
volatility -f 1.raw --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001\Control"
volatility -f 1.raw --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001\Control\ComputerName"
volatility -f 1.raw --profile=Win7SP1x64 -o 0xfffff8a000024010 printkey -K "ControlSet001\Control\ComputerName\ComputerName"
得到flag
begin{VVHATI5Y0VRNAM3}
学取证咯 - 想登录我的计算机吗?
题目描述:
4.想登录我的计算机吗?我可不会告诉你登录口令
与密码相关直接PTF一把梭,得到flag
flag{Mimikatz_0r_j0hn}
按理来说应该是用mimikatz来获取密码 但是插件没安上就用了下轮子,
Crypto部分
我玩青水的
加密过程
from Crypto.Util.number import *
from secret import flag
m = bytes_to_long(flag)
e = 2
p = getPrime(512)
c = pow(m, e, p)
print(f"p = {p}")
print(f"c = {c}")
'''
p = 7709388356791362098686964537734555579863438117190798798028727762878684782880904322549856912344789781854618283939002621383390230228555920884200579836394161
c = 5573755468949553624452023926839820294500672937008992680281196534187840615851844091682946567434189657243627735469507175898662317628420037437385814152733456
'''
大概解释一下就是核心就是c=m**e%p,我们已知c,e,p需要去求m。因为e=2非常小是低加密指数分解攻击类型,这时候我们爆破一下
有两个脚本针对e=2和e=3的情况,在这里都列出来
import gmpy2
import libnum
c = 5573755468949553624452023926839820294500672937008992680281196534187840615851844091682946567434189657243627735469507175898662317628420037437385814152733456
m = gmpy2.isqrt(c)
m = int(m)
m_text = libnum.n2s(m) #将十六进制转为字符
print(m_text)
import libnum
from gmpy2 import iroot
e = 0x2
n = 7709388356791362098686964537734555579863438117190798798028727762878684782880904322549856912344789781854618283939002621383390230228555920884200579836394161
c = 5573755468949553624452023926839820294500672937008992680281196534187840615851844091682946567434189657243627735469507175898662317628420037437385814152733456
k = 0
while 1:
res = iroot(c+k*n,e) #c+k*n 开3次方根 能开3次方即可
#print(res)
#res = (mpz(13040004482819713819817340524563023159919305047824600478799740488797710355579494486728991357), True)
if(res[1] == True):
print(libnum.n2s(int(res[0]))) #转为字符串
break
k=k+1
我是用第二种设置的e=2爆破出来的,前前后后大概用了十多分钟(也有可能是电脑的问题)。这道题是自己第一次自己写脚本跑出来的,在等的时候还很怕是不是写错了。
得出flag
begin{quadruticresidue_i5_s0_3asy}
总结
这次比赛学到了很多,感谢各位师傅们的题,这次比赛对于我这种刚接触的新人来说是一个很好的机会和平台来检测自己的学习成果,虽然有不足但是还是比较满意的,希望下一次能变得更好。同时,非常感谢我的老伙计Dreammm✌🏻,虽然是个人赛,但是仍然大公无私的提供了很好用的工具(跪谢)!
tql g3rling✌(☆ω☆)
ch3nqu✌我是泥粉丝!!!٩(ˊᗜˋ*)و