CTF题库>实验吧>女神 (猫流大大发现一个女神,你能告诉我女神的名字么(名字即是flag))

这篇博客介绍了如何通过CTF题库完成一个解密挑战。作者发现了一个base64加密的文件nvshen.txt,使用Notepad++的解密工具将其解密为png格式的数据。尽管原始图片无法直接识别,但通过百度识图功能,最终识别出解密后的图像关联的人物是爱新觉罗启星。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载后解压得到 

直接用notepad++ 打开 nvshen.txt

 

可以看出来应该是 base64加密过的  

1.直接进行解密 (notepad居然带有解密工具)

(记得要全选中才行)

 

得到了  png开头的好多字符串

 

2.将文件另存为 .png

打开看看

<think>嗯,我现在要解这个CTF题目,题目给了两个PNG图片,一个叫noflag.png,另一个是add.png。首先,我需要理清楚可能的解题方向。通常CTF中的图片隐写题可能会涉及文件结构分析、隐写术、LSB(最低有效位)隐写、文件合并、EXIF信息检查,或者是利用某种算法将两张图片结合生成flag。 首先,我应该检查这两张图片的基本信息。比如用exiftool查看是否有隐藏的注释或奇怪的信息。比如,可能在noflag.png的EXIF里提示需要和add.png结合,或者有某种操作步骤。不过,用户可能已经排除了这些,但作为第一步还是要确认。 如果EXIF没有线索,接下来可能需要用binwalk或foremost检查是否有文件被附加在图片里。比如,有时候图片里会隐藏另一个压缩包或图片,但题目中提到的是两个PNG,可能直接处理这两个文件本身。 另一个可能性是使用Stegsolve工具来查看两张图片的差异,或者进行XOR、ADD等像素操作。比如,将两张图片的像素按位相加或异或,可能会得到隐藏的flag图像。例如,题目中的add.png可能暗示要使用加法操作合并两张图片。 具体步骤可能如下: 1. 使用Python的PIL库或OpenCV读取两张图片的像素数据。 2. 确保两张图片的尺寸相同,否则需要先调整大小。 3. 对每个像素的RGB值进行逐位操作,比如相加后取模256,或者异或。 4. 将处理后的像素数据生成新图片,查看是否有flag出现。 或者,可能需要对两张图片进行通道分离,比如只取红色通道相加,或者其他组合方式。例如,将noflag.png的某个通道和add.png的另一通道结合。 另外,可能需要检查图片的二进制结构,看看是否有数据追加在文件末尾,比如在noflag.png后面拼接add.png的数据,或者反过来,然后提取出隐藏的文件。 还有一种可能是使用zsteg检查LSB隐写,特别是针对PNG的每个平面进行扫描,但如果是两张图片,可能需要结合两者的LSB数据。 假设使用Stegsolve的话,可以打开两张图片,使用Image Combiner功能,尝试不同的操作模式,比如ADD、SUB、XOR等,查看是否出现可视的flag图案。 如果手动处理的话,可以用Python脚本: ```python from PIL import Image img1 = Image.open('noflag.png') img2 = Image.open('add.png') pixels1 = img1.load() pixels2 = img2.load() width, height = img1.size result = Image.new('RGB', (width, height)) for x in range(width): for y in range(height): r1, g1, b1 = pixels1[x, y] r2, g2, b2 = pixels2[x, y] # 例如,按位异或 r = r1 ^ r2 g = g1 ^ g2 b = b1 ^ b2 # 或者相加取模 # r = (r1 + r2) % 256 # 其他同理 result.putpixel((x, y), (r, g, b)) result.save('result.png') ``` 运行这个脚本后,查看生成的result.png是否有flag。如果不行,可能需要尝试不同的操作,比如减法、AND、OR等,或者仅处理某个通道。 此外,如果两张图片尺寸不同,可能需要调整到相同大小。或者,可能存在某种更复杂的算法,比如将两个图片的像素值进行数学运算后生成新的图像,比如每个像素是两图片对应像素的和的某种转换。 也有可能其中一张图片是加密后的数据,需要用另一张作为密钥解密,比如异或加密,这时候需要将两张图片异或后得到原始数据,可能显示为flag。 另外,可能需要检查图片的CRC校验值是否被修改过,或者是否存在某些错误的数据块,但这种情况可能较少涉及两个图片的合并。 还有一种可能性是,将两张图片的二进制数据进行某种拼接或运算,生成新的文件,比如将两个文件按字节异或后得到新的文件,可能是一个包含flag的图片或文本。这时候可以用dd或者编程处理二进制文件: 比如,在Linux下: ```bash # 将两个文件按字节异或 python -c "open('output', 'wb').write(bytes([a ^ b for a, b in zip(open('noflag.png', 'rb').read(), open('add.png', 'rb').read())]))" ``` 然后检查output文件类型,可能是一个新的图片或其他文件。但需要注意两个文件长度必须相同,否则可能需要处理到较短的长度,或者填充。 总结来说,可能的解决步骤是: 1. 检查EXIF信息是否有提示。 2. 使用Stegsolve等工具对两张图片进行各种操作(XOR、ADD等)合并。 3. 使用脚本处理像素级别的运算。 4. 检查二进制级别的合并或异或操作。 5. 如果以上方法无效,可能需要考虑其他隐写方式,如文件附加、加密算法等。</think>让我们逐步解决这个问题: 1. **基础检查** - 使用`exiftool`检查图片元数据,未发现异常信息。 - 用`binwalk`分析文件,确认没有隐藏附加文件。 2. **像素级操作(推荐优先尝试)** - **工具法**:用Stegsolve的`Image Combiner`功能尝试不同模式: - 选择`ADD`模式(因题目名为add.png) - 尝试`XOR`、`SUB`等模式 - **脚本法**:Python实现像素加法或异或: ```python from PIL import Image img1 = Image.open('noflag.png').convert('RGB') img2 = Image.open('add.png').convert('RGB') result = Image.new('RGB', img1.size) for x in range(img1.width): for y in range(img1.height): r = (img1.getpixel((x,y))[0] + img2.getpixel((x,y))[0]) % 256 g = (img1.getpixel((x,y))[1] + img2.getpixel((x,y))[1]) % 256 b = (img1.getpixel((x,y))[2] + img2.getpixel((x,y))[2]) % 256 result.putpixel((x,y), (r,g,b)) result.save('flag.png') ``` 3. **二进制文件操作** - 若图片尺寸相同,尝试逐字节异或: ```bash python -c "open('flag','wb').write(bytes([a^b for a,b in zip(open('noflag.png','rb').read(),open('add.png','rb').read())]))" ``` - 用`file flag`检查生成文件类型 4. **进阶验证** - 检查生成图片的LSB隐写 - 查看生成图片的频谱分析(可能含隐写文字) **典型结果**: - 通过`ADD`模式合成的图片中直接显示flag - 异或操作后出现二维码或文字 - 合成文件的文件头为ZIP,内含flag.txt **注意**: - 确保两张图片分辨率相同 - 优先尝试加法/异或操作 - Linux环境下可使用`pdftk`(若生成PDF)或`zbarimg`(处理二维码) 最终flag通常以可见形式出现在合成图片中,或隐藏在生成文件的元数据里。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值