[BJDCTF2020]藏藏藏
打开题目后发现
直接打开下面的jpg文件 出现一个二维码 扫码得flag{you are the best!}
[BJDCTF2020]鸡你太美
可以发现打开压缩包里面有两张gif图片
但是第一个gif图片打不开我们把它拖到010Editor 去查看
我们可以发现 第二个gif图片没有文件头 我们把GIF的文件头补齐 就可以拿到flag
47 49 46 38
添加过文件头之后就可以查看图片
flag{zhi_yin_you_are_beautiful}
[BJDCTF2020]纳尼
同样的少了GIF的文件头 加上文件头后得到一串字符 可用ps或者stegsolve一帧一帧查看
拿到一串字符Q1RGe3dhbmdfYmFvX3FpYW5nX2lzX3NhZH0==
经过base64解密可得CTF{wang_bao_qiang_is_sad}
[BJDCTF2020]认真你就输了
打开后发现一个xls文件
翻译之后
在kali里面binwalk一下 发现端倪
在来一次foremost分离
flag{M9eVfi2Pcs#}
[BJDCTF2020]just_a_rar
打开是一个密码为四位数的压缩包
来一波暴力破解
查看图片属性拿到flag
[BJDCTF2020]一叶障目
打开得到一个png图片 在windows可以正常打开 但是linux里面不能打开
拖入010 Editor中
提示CRC报错
直接附上修复脚本
#coding=utf-8
import zlib
import struct
#读文件
file = '1.png' #注意,1.png图片要和脚本在同一个文件夹下哦~
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
#crc32key = 0xCBD6DF8A #补上0x,copy hex value
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack('>i', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack('>i', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#写文件
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+'.png','wb')#保存副本
fw.write(newpic)
fw.close
[BJDCTF2020]你猜我是个啥
用010打开
发现是png文件 修改文件后缀 得到一个二维码
扫描二维码得到
再次去010中搜索 得到flag
[BJDCTF2020]这是base??
dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}
chipertext:
FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw
这是标准的base64表
看起来像是字符替换
于是可以写脚本进行替换和decode得到flag,脚本如下
import base64
dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h',33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='}
base64_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P','Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f','g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v','w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']
cipher='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw'
res=''
for i in range(len(cipher)):
for j in range(64):
if(dict[j]==cipher[i]):
res+=base64_list[j]
print(res)
flag=base64.b64decode(res)
print(flag)
[BJDCTF2020]JustRE
拿到先查壳
得到信息: 1.无壳 2.32位
32位IDA 打开
main函数没有发现什么有用的信息 检索程序的字符串后 发现了一串有用的东西
跟进找到 关键函数
直接看14行代码sprintf补齐
14行输出了aBjdDD2069a4579,19999,0
aBjdDD2069a4579的值就是:BJD{%d%d2069a45792d233ac}
19999和0填入到里面的%d位置
拿到flagBJD{1999902069a45792d233ac}
[BJDCTF2020]signin
打开后
直接16进制转化拿到flag
BJD{We1c0me_t4_BJDCTF}