战绩
AK了,整体难度不是很高(比起XYCTF逆天的Python pwn确实低到不知道哪里去了),感谢队友感谢队友感谢队友(博主自己只做了一道)
行星防御理事会
听音频知SSTV,输入软件得到图像:
图像中有Passwd: 2024-YR4
用此passwd对音频进行解密(deepsound),得到secret.zip,再用此passwd对压缩包解压,得到QR_modified.png和script.py
后续:@Dicaeopolis
通过观察这个脚本可以发现rotate函数传入了两个参数m和arr,观察修改后的二维码,数格子数出来它是由原二维码进行5x5分块之后,每一分块进行旋转再拼合后的结果,于是只需要旋转回来即可。
(搞错方向导致旋转了3次才出正确结果……)
然后扫码即可得到flag:WHUCTF{much_ado_about_nothing}
[签到]益智游戏
By:rhzhrhzhr
part1:数独
直接上求解器,再上行列式计算器
25770150*81=2087382150,以此为密码解压缩包得到flag1:
WHUCTF{Little_games_reall
Part2:数织
同样上求解器
然后二进制转十进制得key:(忘记这里的key是多少了),再解包得flag2:
y_train_your_brain_&_play
part3:鬼脚图
由于学长算错了key,所以此部分忽略
(后编:参考鬼脚图笔记 | 独奏の小屋这篇文章就行)
三部分连起来即得flag:
WHUCTF{Little_games_really_train_your_brain_&_play_more_in_cn.puzzle_website}
青轴还是红轴
By:rhzhrhzhr
先用length筛选出带有usbhid.data的条目:
再将其导出为JSON文件。
然后过脚本,提取出usbhid.data数据:
import json
# 1. 读取JSON文件
input_file = "./2.json" # 替换为你的JSON文件路径
output_file = "./usbhid_data2.txt" # 保存提取结果的文件路径
with open(input_file, "r", encoding="utf-8") as f:
data = json.load(f) # 加载JSON数据
# 2. 提取所有usbhid.data值
usbhid_data_values = []
for item in data:
if "_source" in item and "layers" in item["_source"] and "usbhid.data" in item["_source"]["layers"]:
usbhid_data_values.append(item["_source"]["layers"]["usbhid.data"])
# 3. 保存到新文件
with open(output_file, "w", encoding="utf-8") as f:
for value in usbhid_data_values:
f.write(value + "\n") # 每个值写入一行
print(f"提取完成,结果已保存到 {output_file}")
再将usbhid.data数据用脚本转化为键值,进而转换为对应的按键:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\t","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":"\"","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
output = []
keys = open('atta.txt',encoding='utf-8')#提取出来的usbdata.txt文件
for line in keys:
try:
if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00":
continue
if line[6:8] in normalKeys.keys():
output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2']
else:
output += ['[unknown]']
except:
pass
keys.close()
flag=0
print("".join(output))
for i in range(len(output)):
try:
a=output.index('<DEL>')
del output[a]
del output[a-1]
except:
pass
for i in range(len(output)):
try:
if output[i]=="<CAP>":
flag+=1
output.pop(i)
if flag==2:
flag=0
if flag!=0:
output[i]=output[i].upper()
except:
pass
print ('output :' + "".join(output))
得到按键信息:IJNIOKJ TFCFG FGTRDCV IUHBGHJ JKIUHNM YGVGH_IJNJKMN UHBN TGBNJUJM GHYTFVB_FGHYGVB YGBNJU_ [DEL]ESZSD DFRESXC HGVBHUHB_UYHBV DCFVG HBU HJKIJNM UYGBN ESZSDX(处理时[DEL]与前面的空格抵消)
根据键盘上的按键位置(就是把键盘当画布)画出轨迹得到flag:whuctf{prefer_blue_to_red_switch}
哪里有文档
哪有什么大学生活,都是被樱花季的游客创死前的幻想罢了。 哪有什么CTF新生赛,都是被帽子叔叔带走前的幻想罢了。
By:Kuri
前四个Part都可以解压+全局搜索或者直接打开文档找出来:
(上图隐藏部分可以直接复制,内容是part2: yM6Jm95peg5qW86bii5LmL5b2w77yM5Lqm5oql5Lul55WF55yL54Ca5rC077yM5rGC5bCG5Li)
第五个Part主要是有个矛盾:启用宏会导致弹窗关不掉,无法进行后续操作;不启用宏会导致无法编辑
于是我们把word/vbaData.xml中的这段删除,禁用自动启动的宏(后编:可以用工具提取,而且WPS好像可以直接看):
然后进入宏编辑器,愉快地拿到第五段:
拼接,Base64解码:
然后页脚处有一行小字
提示我们去找Abracadabra encoder,搜索发现一个开源项目:
丢进去解密(解码)就行:
~(∠+,ω<)⌒☆
by Dicaeopolis
题目告诉我们只能用上面这些字符来构造数字,但其实真正有用的运算符只有(),+<这五个。由于a<a恒为假,考虑构造0=(()<()),1=(()<((),))。然后就是表示得到的数字的二进制咯。因为目前只有<<(左移)可用,所以考虑从高位往低位扫,每新读入一位就往后面移一位,然后视情况加一。
放进交互脚本里面跑得到一个key。
考虑到题目交互时问的数都是0~255以内的,并且给出了一个5字节的16进制key,考虑两者异或一下:
这题是个算法题(逃