2023中山市香山杯网络安全大赛 pintu Writeup

发布时间 2023-10-22 19:05:56作者: 初心无尘

Misc

题目名称:pintu

题目描述:转换拼接好的图片时在最后加个f

题目内容分析:

给出4703张黑白图片,然后还有提示是8 -> 10

根据提示,很明显在说明进制数,也就是8进制转10进制。

因此,根据提示想哪些东西可以转数值

看到图片只有黑白,于是将其替换成二进制,并转成字符。根据验证这里是将白色转换成“1”,黑色图片转换成“0”。

提取黑白像素脚本如下:

点击查看代码
from Crypto.Util.number import *
from PIL import Image

bin_data = ""  # 获取黑白转二进制数据
for i in range(1, 4704):
    image = Image.open(f'{i}.png')
    pixel = image.getpixel((0, 0))
	# 将黑白图片转换成01(二进制)
    if pixel == (0,0,0): # 黑色像素
        bin_data += "0"
    else:
        bin_data += "1"
print(long_to_bytes(int(bin_data,2)).decode())
# flag看到666c是不是特别兴奋,很可惜flag并不在这。(狗头保命),既然走到了这里,那我也给一个通关的关键信息拿去吧,去找到真正的flag吧:sUvcu5rgSeAmJQCfdXtEMKIB91Lj3niOo4hyV0b/2azpx8HqZP6wk7GNlTFYDR+W                                 哎,对了。拿走之前看一看我精心挑选的笑话吧:猎人打猎,朝狐狸开枪,“砰”地一声枪响之后猎人死了。狐狸叉着腰,冷笑一声:
“没想到吧,我是反射弧。”好不好笑, 有没有感觉一哆嗦,大脑更清晰了。ฅ՞•ﻌ•՞ ต

发现并未给出flag,继续分析,仔细查看图片高宽,发现每张图片高是在变化,而宽并没有改变,再根据提示8进行转10进制。可以知道需要将每张图片的高度提取出来,然后8进制转10进制;10进制转字符。

提取图片高度脚本如下:

点击查看代码
from PIL import Image

high_data = ""  # 获取图片高度
for i in range(1, 4704):
    image = Image.open(f'{i}.png')
    pixel = image.getpixel((0, 0))
    width,height = image.size
    high_data += chr(int(str(height),8))
# 将十进制转成字符
data = high_data.split(" ")
z = ""
for i in range(len(data)):
    z += chr(int(data[i]))
print(z)
# JRFTC5SFG5SU4STVHBTTCR2SKVSE2NKVIUYFCS2MOVFUWMLLGVKWITKLJZSE2NKVMRFUWY3EJU3VKZCNGVKU2SKQMNXE2WCVMRGTKVKNMM2XMRKLGE2US5SEOFWTMRDRNZVTO5LNGZCGYWDVOVYUG5KYKVWTMRDRMRBG4ZDNGZJE4TLWIRYWITJVOVWTMUSOMRGXK4LONM2VK3JWIRWGITJVMRWTMUSVJV3FEVLEJU2XKZCCNZKWITJVJZSE2NKVNZVTOVLEJU2VCWDVGVKUKTLEOFWTMRDMMRGTKVKYOU3XIRJWKJKGITJVKVSGEODQNJ2UWWCLGB2WWTDCOU3EWQRQJRCXKWDFMRBDINLJGVXEUSRPMFEUW5TYOFFEEWCTORGVQSBRNNJHKS2HKRDXIVSSOVEXE5JWNJGWCWCLIJIXATBXNZVUYQRROVIVMMDNORFWKR2JOJFU2S2JGBLEKTKQOFGU4UKGJN2FEUCNKY2EQQKOKVFU2TJVLBXESS3NMQXVMNZZKY2UQTJPMVSU2S2RINUXKMLVKFCW64KLJMZXO2JVJNEGI6JQO5GDKVJWOQ3TAMSLJVFFU2SNGAYW4Y2YMFGWWUSINJ2WY53EGA4WYTJWHB4GSZ2LJI4WENDWJQ3TKTBTG5LE45DHJNSUULZVOBFFMMJSJN2U2NSRM4YTSOKWMEZEYN3BOQ4UKZLDNFGVQ4SNJNIUUOJXNZ3FC23OOJFXONLZKFETQMTOI43VGSKNKBKTCVSQINUWENCLGFDWCYTJJU2GISLHGR3TG4SRIMZUES2YNZDTAMDUJUYEKTJQGV4ES6JRNVFWGMCUJI3XKN2NKZ4E45CHGB2DGYTBKFMHS33XIVHGK6KFO4YTCQ2CGRZG4VSYIFIWE6DXINZEW4BTI5QUC2LSG5LESVTOIF2E4YKTGM3TIVCKMIYTE3KHJMXXIY3PI52EK3TVNFZEWYKNO5LGW2SCKZYEK5ZUNQZXKODXLBCW4MJRKZFVAZCLKM3DSYRYKBXE4NCIJJVTE4KFKZITA2KJMR3UWQRUMFUWENDWJJHFCNDNNNJFGMZXMEXXIYTBKBIU2ZJPJIXVCSKYOI2HU5DHKM3USRJZOFGS642OGFDVQU3JGAYUW2TXGRAUS5KEKBXE2222JRTTG4BRIU2TMOKNGJ3UCTRVIZVESWCNNZRUWVSLJU2EM5COJM3VC5ZRMRXDA3ZXNFCTKWCKJZIWMMLDGREWUQTPJZUXSMBXNFTVQSCLIIZVI2TCNRIEK22LGZEWEUTMJU2WCZJZJV4FU2SJMVDFQVRXGFFGWUBYJJZG46CYGUYHSWBPGU4EWYRQJFVGEMLLNVVTS4KNOQ4DKSSHLAYDGRJVNBFUSNKFNZHDI2CFOU3U2M2NMFWUGSKSMFMGWN2WGM3TAOBTF42EEZDCHFWFQTLMOAZUWVJUNFBDSTSLMNJXATBWKI3FQYZRGZXGWODCGNDTSNZRKZJDQZCNGVKWITJVGVVHKMKNJQ3VCN2NJE3WGZBWONXTC4RVNM4UKYLBNJETKLZRORJFU2TCGNMTSYRVO4YUKOLL

输出很明显是base32,解密后得到换表的base64,最后得到图片
image

这里需要用到npiet工具

命令:npiet.exe base64img.png

image

得到flag
flag{4b6c1737-27e5-41c4-95e3-f70ad196063e}