记录一下,跟着题解自己完成了一遍
题目出处和解题方法:
h4ckit-ctf-2016_Electronicon - PPC - 250 pts
题目描述:
Description:
Belarus – Electronicon – PPC – 250 pts
EN: This task is one of the methods for the psychological attacks. It is intended for people who don’t have heart diseases and reached 18 yearsh4ck1t{flag.upper()}
pain.txt用记事本打开,啥也看不出来,一坨大便,直接给干崩溃了:
用vscode打开,发现:
这么大的文件总共就十一行,可以看出一堆字符形状,读取不同字符的形状保存后用,当然不能人工读,python启动:
'''
Pod for Team Fourchette Bombe
'''
import codecs
f = codecs.open('pain.txt',encoding='utf-8')
flines = f.readlines()
length = 13
multiplier = 1
offset = multiplier*length
line = ''
for i in range(0,len(flines)):
for j in range(0,length):
line += flines[i][j+offset];
line += '\n'
out = codecs.open('painPatterns/out','w', encoding='utf-8')
out.write(line)
可以依次得到所含字符的图案,然后再用pain.txt的每个图案与已有图案比对,依次输出字符,可以得到solve
python代码如下(直解解析可得到十六进制串solve,hex解码存到slove中):
'''
Pod for Team Fourchette Bombe
'''
import codecs
f = codecs.open('pain.txt',encoding='utf-8')
flines = f.readlines()
chars = ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f')
solve = ''
for i in range(0,len(flines[0]),13):
for j in range(0,len(chars)):
fp = codecs.open('./painPatterns/'+chars[j], encoding='utf-8')
lines = fp.readlines()
Found = True
for l in range(0,11):
for c in range(0,13):
if (flines[l][i+c] != lines[l][c]):
Found = False;
break;
if not Found:
break;
if Found:
solve += chars[j];
break;
endf = open('solve','wb');
endf.write(bytes.fromhex(solve));
直接打开,一堆乱码:
用kali打开自动识别格式,JPG:
Flag: h4ck1t{1_L0V3_3P1C_F0NT$}