跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

BaseCTF Week3 Web & Misc 解题复盘

BaseCTF Week3 杂项题目涉及图像隐写与自定义加密算法还原。第一题通过逆向像素混淆逻辑结合 Stegsolve 提取 Flag;第二题利用文件头特征与 Foremost 工具恢复压缩包;第三题尝试异或解密但受限于文件损坏未能完全复现。整体考察基础逆向与隐写分析能力。

HadoopMan发布于 2026/4/10更新于 2026/10/2289 浏览
BaseCTF Week3 Web & Misc 解题复盘

BaseCTF Week3 Web & Misc 解题复盘

杂项
[Week3] 白丝上的 flag

描述: 某出题人赠送大家 flag 时遭遇了信号干扰,幸好我们在不知名小网站找到了写入 flag 前的图片,尝试还原信息吧!

提示: flag 是单色。

附件: 在这里插入图片描述

分析思路:

这道题的核心在于逆向题目给出的混淆逻辑。confuse 函数对像素的 RGBA 值进行了基于全局变量 iv 的加法运算,且每处理一个像素都会更新 iv。由于图像是单色的,我们可以利用这一特性简化验证过程。

原始加密脚本如下:

from PIL import Image
from random import randint
import sys

def ez_add(a, b, c, d):
    global iv
    h = (a + b + c + d + iv) % 256
    e = b
    f = c
    g = d
    iv = (b + c + d + iv) % 256
    return e, f, g, h

def confuse(data):
    r, g, b, a = data
    for _ in range(8):
        r, g, b, a = ez_add(r, g, b, a)
    return r, g, b, a

def confuse_image(flag):
    global iv
    iv = flag.getpixel((1, 1))[0]
    img = Image.new('RGBA', (flag.width, flag.height))
    for w in range(img.width):
         h  (img.height):
            img.putpixel((w, h), confuse(flag.getpixel((w, h))))
     img

 __name__ == :
    iv = 
    flag = Image.()
    img = confuse_image(flag)
    img.save()
for
in
range
return
if
'__main__'
0
open
"./de_image.png"
"en_image.png"

要还原图片,我们需要反向执行上述逻辑。注意 ez_add 中的 iv 更新顺序,解密时需先恢复 iv 再计算当前像素。

解密脚本:

from PIL import Image

def ez_sub(h, e, f, g):
    global iv
    a = (h - e - f - g - iv) % 256
    iv = (e + f + g + iv) % 256
    return a

def unconfuse(data):
    r, g, b, a = data
    for _ in range(8):
        r = ez_sub(r, g, b, a)
    return r, g, b, a

def unconfuse_image(img):
    global iv
    iv = img.getpixel((1, 1))[0]
    flag = Image.new('RGBA', (img.width, img.height))
    for w in range(img.width):
        for h in range(img.height):
            flag.putpixel((w, h), unconfuse(img.getpixel((w, h))))
    return flag

if __name__ == '__main__':
    iv = 0
    img = Image.open("en_image.png")
    flag = unconfuse_image(img)
    flag.save("de_image_decrypted.png")

运行脚本得到 de_image_decrypted.png 后,使用 Stegsolve.jar 查看 red plane 0,即可发现隐藏的 flag。

在这里插入图片描述

BaseCTF{there_1s_the_flag@}
[Week3] 纯鹿人

附件: 在这里插入图片描述

线索:

cGFzc3dvcmTvvJppa3VuaWt1bg==

Base64 解码后得到 password???ikunikun。

解题过程:

一开始我尝试将文档中的表情包保存下来用 WinHex 打开,但没发现异常。搜索关键词后怀疑过 jphs 隐写,但验证无效。

后来参考了其他选手的思路,尝试将文件后缀改为 .zip。虽然直接打开报错,但在 WinHex 中检查文件头,发现确实存在 ZIP 文件的特征结构(PK 开头)。

在这里插入图片描述

使用 foremost 工具进行分离,成功提取出一个新的 zip 文件。解压密码即为线索中的 ikunikun,进入压缩包后即可获取 flag。

[Week3] 我要吃火腿!

附件: 在这里插入图片描述

内容: 一个包含大量'嗷呜'声符的文本文件,以及一张名为 Hamorl.jpg 的图片。

分析:

文本文件的内容看起来像是兽音翻译器生成的编码。通过在线工具解码后,并未直接得到有用信息,重点转向了图片文件。

观察文件名 Hamorl 和提示'火腿',推测可能与 XOR 加密有关。编写脚本对图片进行异或解密,密钥为 Ham 对应的 ASCII 码 [0x48, 0x61, 0x6D]。

解密脚本:

def xor_with_ham_decrypt(input_file, output_file):
    ham_bytes = [0x48, 0x61, 0x6D]
    with open(input_file, 'rb') as f:
        data = bytearray(f.read())
    for i in range(len(data)):
        data[i] ^= ham_bytes[i % 3]
    with open(output_file, 'wb') as f:
        f.write(data)

# 使用函数解密
xor_with_ham_decrypt('Ham.jpg', 'Hamorl.jpg')

解密后得到 Ham.jpg,但文件头损坏无法直接打开。修改文件头为 JPEG 标准头 ffd8ffe1 并保存后,图片可以正常显示。

在这里插入图片描述

在这里插入图片描述

至此,前两步已解决,最后一步因原素材损坏未能完全复现,后续需关注出题人是否补充完整数据。

目录

  1. BaseCTF Week3 Web & Misc 解题复盘
  2. 杂项
  3. [Week3] 白丝上的 flag
  4. [Week3] 纯鹿人
  5. [Week3] 我要吃火腿!
  6. 使用函数解密

更多推荐文章

查看全部
  • 基于 AutoGen 框架快速构建 AI Agent 实现自动化绘图任务
  • MySQL 约束详解:非空、主键、外键的核心作用与实战
  • IBM DB2 常用命令与基础操作指南
  • C++ 多线程同步之原子操作(atomic)实战
  • 算法优选:位运算实战技巧
  • ComfyUI Photoshop 插件安装及 AI 绘画工作流指南
  • 宇树 G1 机器人 FAST-LIO 建图与 RViz 配置教程
  • Java 语言入门:设计哲学与 JVM 基础
  • 大模型基座训练的挑战与难点
  • 命令行大模型上下文协议(MCP)工具 MCPHost 使用实践
  • 基于 SpringBoot2 与 Vue3 的桂林旅游景点导游平台系统设计
  • AI 大模型技术原理、发展历程与应用解析
  • Android MVVM 架构核心组件:Lifecycle 详解与应用
  • Python 中 as 关键字的作用与用法
  • Spring Cloud 负载均衡 LoadBalancer 原理与实战
  • AI 时代创作者的核心身份与生存法则
  • Stable Diffusion 整合包本地部署与使用指南
  • 本地部署 DeepSeek 模型完整教程
  • 自然语言处理在金融领域的应用与实战
  • C++ unordered_map 与 unordered_set 核心原理及模拟实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online