目录
[WUSTCTF2020]girlfriend
手机键盘隐写:
[GUET-CTF2019]zips
setup.sh文件的运行方法:
[MRCTF2020]千层套路
重复解zip加密压缩包脚本:
根据RGB坐标构造二维码脚本:
[DDCTF2018](╯°□°)╯︵ ┻━┻
打开附加,里面有一段音频
以为是摩斯密码,但记录下来发现也不对,看来其他大佬的wp了解到是 DTMF拨号音识别,声音特征是打电话输入号码的声音,可以使用在线网站解密
Detect DTMF Tones (dialabc.com)
引用一位大佬博客中的图片帮助理解,原文在这里:(156条消息) BUUCTF:[WUSTCTF2020]girlfriend_末 初的博客-CSDN博客
999是9号键盘第3个数,以此类推,得到flag
999 ---> y
666 ---> o
88 ---> u
2 ---> a
777 ---> r
33 ---> e
6 ---> m
999 ---> y
4 ---> g
4444 ---> i
777 ---> r
555 ---> l
333 ---> f
777 ---> r
444 ---> i
33 ---> e
66 ---> n
3 ---> d
7777 ---> s
拿到flag
拿到一个加密的压缩包文件,爆破解密得到密码
解压出来一个加密压缩包
伪加密,将09修改为08,得到两个文件,一个是flag.zip文件,setup.sh文件,运行setup.sh文件
查看.sh文件
每次运行时结果都不同,此段代码根据时间变化,使用掩码爆破,掩码范围猜测在1500000000.00到1700000000.00之间。
得到密码
打开文件,加密压缩包,尝试爆破密码,得到密码,就是文件名,解压后还有一个加密压缩包......后面会有超多加密压缩包,这样手解也不是解决办法,用脚本解密
import zipfile
name = '0573'
while True:
fz = zipfile.ZipFile(name + '.zip', 'r')
fz.extractall(pwd=bytes(name, 'utf-8'))
name = fz.filelist[0].filename[0:4]
fz.close()
得到1000个zip压缩包
里面有一个qr.zip压缩包,解压发现是一系列RGB坐标,熟悉的255和0,构造二维码的嫌疑很大
上脚本,构造二维码
from PIL import Image
import os
file = open('qr.txt')
MAX = 200
picture = Image.new("RGB", (MAX, MAX))
for y in range(MAX):
for x in range(MAX):
string = file.readline()
picture.putpixel([x, y], eval(string)) # 直接使用eval()可以转为元组
picture.show()
运行得到二维码解密
扫码得到flag。
附件给的是一个txt文本,看题目以为是颜文字加密,但看了一下,感觉不像
txt文本中有一串16进制数据,两两分割转换成十进制数输出得到一串数据
def hex_to_decimal(hex_string):
decimal_list = []
hex_list = [hex_string[i:i + 2] for i in range(0, len(hex_string), 2)]
for hex_num in hex_list:
decimal_list.append(int(hex_num, 16))
return decimal_list
hex_string = input("请输入16进制数据:")
decimal_list = hex_to_decimal(hex_string)
print("转换为十进制数据:", decimal_list)
得到数据:
212, 232, 225, 244, 160, 247, 225, 243, 160, 230, 225, 243, 244, 161, 160, 212, 232, 229, 160, 230, 236, 225, 231, 160, 233, 243, 186, 160, 196, 196, 195, 212, 198, 251, 185, 178, 178, 225, 226, 185, 185, 183, 180, 225, 180, 183, 227, 228, 179, 178, 178, 227, 230, 180, 179, 226, 181, 176, 182, 177, 176, 230, 225, 229, 225, 181, 253
都是大于125的值,转为字符串肯定乱码,观察最后一个数值253与flag中最后一个字符'}'ascll码差值,‘}’的ascll码值为 125,相差128.将所有的数值都减去128,转换为字符串
#include
#include
int main(){
char a[]={212, 232, 225, 244, 160, 247, 225, 243, 160, 230, 225, 243, 244, 161, 160, 212, 232, 229, 160, 230, 236, 225, 231, 160, 233, 243, 186, 160, 196, 196, 195, 212, 198, 251, 185, 178, 178, 225, 226, 185, 185, 183, 180, 225, 180, 183, 227, 228, 179, 178, 178, 227, 230, 180, 179, 226, 181, 176, 182, 177, 176, 230, 225, 229, 225, 181, 253};
int i=0;
for(i=0;i
运行得到flag: