f=open("1.jpg",'rb') f1=f.read()#二进制形式 withopen('flag.jpg','wb') as f2: for i in f1: if i==0: f2.write(bytes([0x0])) #这里的b是int形式,要转换成bytes时,使用bytes(),且里面的内容需要加[] else: f2.write(bytes([0x100-i])) f.close() f2.close()
打开生成的图片,获得压缩包密码。
解压后获得两张图和一个txt文本。
3.jpg还是运用刚才的16进制取反脚本即可获得后半段flag。
查看txt文本,提示给出密码,但是需要爆破,猜测为大小写组合爆破。
推测图片2使用steghide隐写。
编写爆破脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
import os
defall_casings(input_string): ifnot input_string: yield"" else: first = input_string[:1] if first.lower() == first.upper(): for sub_casing in all_casings(input_string[1:]): yield first + sub_casing else: for sub_casing in all_casings(input_string[1:]): yield first.lower() + sub_casing yield first.upper() + sub_casing
if __name__ =='__main__': for x in all_casings("qsnctf"): os.system("steghide extract -sf 2.jpg -p "+x) print(x)