Cat_Jump
下载附件打开:
把他丢进010编辑器里
查找CATCTF
得到flag:CatCTF{EFI_1sv3ry_funn9}
4433
下载附件打开:是一张图片
将他丢进winhex搜索flag啥也没有
使用kali binwalk看看图片发现没啥
使用steglove打开改变颜色发现下面一个二维码
使用QR Research扫描
得到一串摩斯密码:...--.----...--..
注意题目4433
摩斯密码解密
得到:VYGUD
在摩斯电码中存在一些常用的缩写,VY 代表 VERY,GUD 代表 GOOD,所以正确的flag是 VERYGOOD
查了下
这在摩斯电码里是verygood
得到flag:flag{VERYGOOD}
侧信道初探
下载附件打开有两张图片
根据题意,每个循环中或者执行if内语句,或者不执行。不执行的情况下消耗能量较少,执行的情况下消耗能量较多,需要时间也更长。因此每两条密集带中间的稀疏带宽度如果较短,代表0,如果较长,代表1。也即:
flag:SCTF{0110111010}
pyHAHA
下载附件:是一个pyc文件
拿到一个pyc
反编译
结果显示反编译不成功
猜测是pyc隐写
报错
扔进winhex
发现有压缩文件
且倒序了
f = open('PyHaHa2.pyc','wb')
with open('PyHaHa.pyc','rb') as g:
f.write(g.read()[::-1])
f.close()
正序后
发现少文件头03F30D0A
补上
在末尾发现
flag1: ec8d57d820ad8c586e4be0122b442c871a3d71cd8036c45083d860caf1793ddc
flag2: c40a0be335babcfbd8c47aa771f6a2ceca2c8638caa5924da58286d2a942697e
foremost分离
得到一个压缩包
里面有一个mp3
解压要密码
看了下
是伪加密
图示部分改为0008
解压得到mp3
在备注里有key
163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/dx5jBNDPdsKv9gAgXYyj0/Z0Vl4ORaCLH5D0oN9v9nBBv6zxpBucgNeE2qqke4ugZs7dxriT5lfUpulX5PYMzSg2pqL6APTHQjtIHw16ZCRTMBBkInrUGSTklA2MwPLGkuDTmWfzjHqDWEK5LLRP6oiOXe0JeI9mLHzL2nm6T3/ianaPEzeH7lpE/ciWDyqFUXoTZWeyK0xTjYxBSj9RJFoaoIxmXk6P8MJq+EvcS7ratByRUvWLaUFhcXhJ1iRK58BKcVPS0hxkzA77WB1UnrUfpkS1U/F5uYmYWGZ3Cz2fTvJHcsE228LUnnybaoIoDyY6BvZVUitmA+VhhTHoIKsREyCzC3VXq/HuwwuHdCdftzXJpXPoJSNzWAZH0oGnF+WE7m5Fqd36dqp2srL5bgFjFnyZzIkxdaU+ZW+Rm7aIbrb7nK2Pp9iequOBV6rnKeHZyc3hzG4lVVapoXl/U2cvfVgIqVtnuJE4XM4NuUd
扔进audacity
无果
查了下
有个工具DeEgger Embedder
得到一堆base32
回头看看那个处理好的pyc
反编译得到
import base64
def get_base32_diff_value(stego_line, normal_line):
base32chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
for i in range(len(normal_line)):
if stego_line[i] != normal_line[i]:
return abs(base32chars.index(chr(stego_line[i]))-base32chars.index(chr(normal_line[i])))
return 0
# base32 隐写解密
def base32stego_decode(lines):
res = ''
for i in lines:
stego_line = i.strip()
normal_line = base64.b32encode(base64.b32decode(i.strip()))
diff = get_base32_diff_value(stego_line, normal_line)
if '=' not in str(stego_line):
continue
if diff:
res += bin(diff)[2:]
else:
res += '0'
return res
with open("Dream It Possible - extracted.txt", 'rb') as f:
file_lines = f.readlines()
en=open("encrypt.txt","w")
en.write(base32stego_decode(file_lines))
en.close()
得到encrypt
猜测是字符转图片
from PIL import Image
str=open("data.txt","r").read()
length=240
width=30
pic=Image.new("RGB",(length,width))
i=0
for x in range(length):
for y in range(width):
if str[i] == '0':
pic.putpixel([x,y],(0,0,0))
else:
pic.putpixel([x,y],(255,255,255))
i += 1
pic.show()
pic.save("Fl4g.png")
得到flag
传感器2
题目描述
推测温度传感器解码后报文第一个字节为起始位,并无数据,因此从第二个字节开始,得到传感器1中两个解码后的报文有效数据为为0x24d8893ca584100和0x24d8845abf34100
#!/usr/bin/python
def crc(x,y):
while(x>y):
l = len(bin(x)) - len(bin(y))
t = int(bin(y)[2:]+'0'*l,2)
x ^= t
return x
m = 0
for i in range(0x200):
if i < 100:
continue
if crc(0x24d8893ca584100,i) == 0x81 and crc(0x24d8845abf34100,i) == 0x19:
m = i
print i
break
print hex(crc(0x00024ddeadbeef4100,m))
print hex(crc(0x00024dbaada5554100,m))
根据crc校验算法,先由已知校验码算出y的值,再由除了第一个字节d的所有数据得到最后一个字节的crc校验码值,一个是0xb5,一个是0x15。
得到最终flag:{b515}
Russian-zips
下载附件:
得到一个压缩文件,解压需要密码
发现是伪加密
直接修复压缩文件即可解压
发现是Minecraft的地图文件
打开就得到了flag
ext3
下载附录,用winhex以十六进制打开,搜索flag,一直next找
题目描述光盘,将文件后缀改成iso解压缩找到该文件
打开为base64解码得到flag
flag为flag{sajbcibzskjjcnbhsbvcjbjszcszbkzj}
SimpleRAR
使用WinRAR打开附件,发现secret.png的文件头损坏了,并且还有一个flag.txt
打开flag.txt
将文件丢进winhex
我们要的是文件块而不是子块,于是更改7A为74,成功解压,发现是一张空白的图片,继续用winhex打开
发现是gif格式,将其重命名并用PhotoShop打开,发现有两个空白的图层
将两个图层分别提取出来,用StegSolve打开,不断点击箭头直到显示出图像
将两个图片合成补全二维码
使用QR-research扫描得到flag:flag{yanji4n_bu_we1shi}
base64stego
下载附件是个加密的文件
使用360压缩打开:
是一连串的base64编码解密得到
没啥信息,猜测base64隐写,使用python脚本
# 此方法用来将包含隐藏信息的字母转换为base64编码表对应的序列值(十进制数)并返回
def base64change(s):
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' # base64编码表,恰好索引值对应字母
for i in range(len(table)):
if table[i] == s:
return i
# 此方法用来获取隐藏信息二进制字符串
def base64solve():
f = open('C:\\Users\\admin\\Desktop\\stego.txt','r')
lines = f.readlines()
flag_bin = ''
for line in lines:
# print(line)
l = line.strip() # 去掉两边的空格
if l[-1] == '=':
if l[-2] == '=': # 含有两个=则包含4bit信息
# 将返回的十进制转换为二进制数,由于返回的二进制数为0b开头,所以从第三位开始取,然后用0填充头部为4位,再取后四位隐藏的信息
flag_bin += bin(base64change(l[-3]))[2:].zfill(4)[-4:]
else:# 只含一个=则包含二bit信息
flag_bin += bin(base64change(l[-2]))[2:].zfill(2)[-2:]
#print(flag_bin)
flag = ''
for i in range(len(flag_bin)//8):
flag += chr(int(flag_bin[i * 8:(i + 1) * 8], 2))
print(flag)
if __name__ == '__main__':
base64solve()
得到flag:flag{Base_sixty_four_point_five}
功夫再高也怕菜刀
下载附件