misc5
图片放大就可以看到flag......
flag{so_good_you_are}
misc31
打开file文件是一个base64的图片
得到解压密码:dlddddhm
解出pdf,里面是花朵
✿✼✿❂❀❀✿✽✿✿✿❄✿❀❀❄❀❊✿✻=
https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=huaduo
解码得到:qwertyuiop
用wbStego4解得ENTYNSTLWNRNTKYW13287484
反正我没解出来
关键字解密
CVEFVWETBVDVESFB13287484
解压得到xiaomotuo.wav
再steghide解密
steghide extract -sf xiaomotuo.wav -p xiaomotuo
flag{du_du_du_du}
misc49
改后缀名得到压缩包
解压得到hint
字母解密
音乐符号解密
花朵解密
得到压缩包密码
welcome_to_ctf
解压得到两张图片
听说水印很强大,我来康康!key{welcome_to_ctf}
提示盲水印
flag{y0u_are_we1l}
misc6
字母解密
YZYPYUYAXOYWXXYZXWYBYSXAZSYRYCYWYYUUXQ=
flag{ctfshow_nice!}
misc7
解压得到一个不知道什么的文件
微软office的文件头,ppt试成功了
需要密码,破解一下
9919
找到flag
Flag{okYOUWIN}
mics8
解压得一张图片和一个压缩包
直接爆破就很好了
misc
56tygh
flag{ctf_show_ok}
红包题第五弹
先分离得到一张图片,
之后是steghide隐写密码是123456
.\steghide.exe info .\00017508.jpg
试了下弱口令是123456
Get!!!隐藏文本找到
.\steghide.exe extract -sf .\00017508.jpg 解出flag.txt
打开
发现是base64格式的字符串,解密得
https://www.lanzous.com/i9dpjxe
又是附件下载链接
下载得到red5.zip
例行分析完没啥发现直接解压得到flag.txt
猜测应该是16进制放到HxD中发现
有坐标有3个,分隔得十进制数很明显是rgb的图片
复制下来后上代码格式化一下把坐标去掉
import re
str_=""
str_list=[]
with open('flag.txt') as f:
for i in f.readline():
str_+=i
if(str_[-1] is ")"):
str_ = "".join(re.findall("\(.*\)",str_))
str_list.append(str_.strip('(').strip(')'))
str_=""
with open('rgb.txt','w') as f:
for i in str_list:
f.write(i+'\n')
接着就是把rgb转化成图像了(网上直接找现成的,x和y就是上面的坐标,从0开始算所以是72和74)
from PIL import Image
x = 72 #x坐标 通过对txt里的行数进行整数分解
y = 74 #y坐标 x * y = 行数
im = Image.new("RGB", (x, y)) #创建图片
file = open('rgb.txt') #打开rbg值的文件
#通过每个rgb点生成图片
for i in range(0, x):
for j in range(0, y):
line = file.readline() #获取一行的rgb值
rgb = line.split(", ") #分离rgb,文本中逗号后面有空格
im.putpixel((i, j), (int(rgb[0]), int(rgb[1]), int(rgb[2]))) #将rgb转化为像素
im.save('flag.jpg') #也可用im.save('flag.jpg')保存下来
得到一张上下颠倒的二维码
ps走起!
ok最后QR_Research一下得到
flag{ctf_show_fight}
stega2
修复宽高
flag{na yi nian wo ye bian cheng le guang}
stega3
文件尾部提示NTFS
flag{ntfs_is_so_cool}
stega4_STEGA
双图盲水印
flag{ha_ha_ha}
杂项9
foremost分离得到9张图片,在拼接
用StegSolve查看
补全
扫描得flag
flag{4ab1507d-d195-4d30-87c0-a0d85a77d953}
文本隐写
打开文本
NNSXSORRGTSL3DPHTKCOPOVP42K3BZNNS4======
key:14位的纯数字
补全文件头
单独拿出来保存为docx
文件另存为html
右击源代码
Flag{show_ctf_tsw_cc}
misc22
一道游戏题
加载bin文件存档
shift+x删除所有城墙之后
得到flag
flag{Tower_Defense_Is_Funny}
stega12
flag{letmeseesee}
stega5
用工具打开
发现二维码
03F30D0A79CB05586300000000000000000100000040000000730D0000006400008400005A000064010053280200000063000000000300000016000000430000007378000000640100640200640300640400640500640600640700640300640800640900640A00640600640B00640A00640700640800640C00640C00640D00640E00640900640F006716007D00006410007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100715500577C010047486400005328110000004E6966000000696C00000069610000006967000000697B000000693300000069380000006935000000693700000069300000006932000000693400000069310000006965000000697D000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007304000000312E7079520300000001000000730A0000000001480106010D0114014E280100000052030000002800000000280000000028000000007304000000312E707974080000003C6D6F64756C653E010000007300000000
导入010存为pyc,之后反编译
但是之后我的不知道为什么运行不了
就重新写了一个脚本
str_list = [
102,
108,
97,
103,
123,
51,
56,
97,
53,
55,
48,
51,
50,
48,
56,
53,
52,
52,
49,
101,
55,
125]
flag = ''.join(chr(i) for i in str_list)
print(flag)
flag{38a57032085441e7}
交通繁忙
gif文件分离,
for /l %i in (2,2,1168) do del Traffic_Light_%i.png
先删除没有用得文件
红绿灯变换一眼二进制
from skimage import io,data
import os
img_lists = [i for i in os.listdir(".") if os.path.splitext(i)[1] == ".jpeg"]
bytes_=""
for i in range(1,len(img_lists)+1):
img = io.imread("./Traffic_Light_{}.jpeg".format(i*2-1))
R=int(img[38,113,0])
Y=int(img[92,113,0])
G=int(img[132,113,0])
if R != 172:
bytes_+= '1'
if Y != 172:
continue
if G != 172:
bytes_+= '0'
print(bytes_)
得到
接下来把它转成字符串
flag{Pl34s3_p4y_4tt3nt10n_t0_tr4ff1c_s4f3ty_wh3n_y0u_4r3_0uts1d3}
和36D有关系
脚本
import cv2 as cv
import numpy as np
import struct
import binascii
from PIL import Image
class FileF:
@staticmethod
def l2bf(fn='data.txt', dat=b''):
bst = b''
if isinstance(dat, str):
bst = bytes(dat, 'utf-8')
elif isinstance(dat, list):
bst = bytes(dat)
else:
bst = dat
with open(fn, 'wb') as f:
f.write(bst)
class PicBits: #像素操作
img = None
fn = ''
def __init__(self, fn=''):
try:
self.img = cv.imread(fn)
self.fn = fn
except:
pass
def show(self):
cv.imshow(self.fn, self.img)
cv.waitKey(0)
cv.destroyAllWindows()
def getxy(self, x=0,y=0):
ret = [0,0,0]
height = self.img.shape[0]
weight = self.img.shape[1]
channels = self.img.shape[2]
if x < 0 : x = -x
if y < 0 : y = -y
ret =[]
for c in range(channels):
ret.append(self.img[y%height,x%weight,c])
return ret
def setxy(self, x=0,y=0 ,col=[0,0,0]):
ret = [0,0,0]
height = self.img.shape[0]
weight = self.img.shape[1]
channels = self.img.shape[2]
if x < 0 : x = -x
if y < 0 : y = -y
self.img[y%height,x%weight] = col
def save(this,fn=''):
if fn=='':fn=this.fn
cv.imwrite(fn,this.img)
class CharF:
@staticmethod
def SplitByLen(t="", l=8, instr=" "):
if l < 1: return t
ret = ""
for i in range(len(t)):
ret += t[i]
if i % (l) == l - 1: ret += instr
while ret.startswith(instr):
ret = ret[len(instr):]
while ret.endswith(instr):
ret = ret[:-len(instr)]
return ret
@staticmethod
def str2num(txt="0", split=' ', bs=16, spl=0):
txt = txt.lower()
munl = []
if spl == 0:
numl = txt.split(split)
else:
numl = CharF.SplitByLen(txt, spl, ' ').split(' ')
retl = []
for i in numl:
try:
retl.append(int(i, bs))
except:
pass
return retl
#真正有用的就下面这几句,上面的全是我的破烂存货
def dec():
yt = PicBits('LSB.png')
bits=""
for i in range (128):
for j in range(128):
c = yt.getxy(127-i,127-j) #逆序
bits+=chr(ord('0')+((c[0]^c[1]^c[2])&1))
l = CharF.str2num(bits,bs=2,spl=8)
FileF.l2bf('LSB2.png',l)
dec()
flag{36d@ctf_show}
若有收获,三连加关注,学习不迷路