New Year CTF 2026 Writeup
字数 1897
更新时间 2026-01-31 12:22:03

CTF 隐写术与逆向分析教学文档

1. 隐写术基础与实战

1.1 LSB隐写术

原理:最低有效位隐写通过修改像素值的最低有效位来隐藏信息,对人眼几乎不可见。

检测方法

  • 使用Stegsolve、zsteg等工具分析
  • 检查RGB通道的LSB平面
  • 常见工具命令:
zsteg image.png
steghide extract -sf image.jpg

实战案例(babyStegano):

  • 题目提供图片,使用LSB隐写分析
  • 直接提取得到flag:grodno{happy_new_year_ctfers}

1.2 文件格式隐写

Word文档隐写

  • Word本质是ZIP压缩包,可重命名为.zip解压
  • 关键隐藏位置:
    • word/media/ 中的图片文件
    • word/document.xml 中的隐藏文本
    • 修改时间异常的文件

实战案例(Santa_s_Report):

7z x document.docx
# 检查修改时间最早的文件
# 在背景图文件夹发现隐藏信息
  • Flag:grodno{my_lovley_06_12}

1.3 流量分析中的隐写

网络流量隐写特征

  • Base64编码的数据传输
  • 非常规端口通信
  • 可疑的文件传输模式

实战案例(exFill):

  • 分析pcap文件中的命令历史
  • 发现base64编码的图片传输
  • 使用Wireshark导出数据,010 Editor分析文件末尾
  • Flag:grodno{it5_was_t00_s1mple_=D}

2. 逆向工程与恶意代码分析

2.1 注入技术分析

TLS Callback注入

  • 执行早于main函数,用于绕过常规检测
  • 典型行为模式:
    1. 枚举系统进程(CreateToolhelp32Snapshot)
    2. 查找目标进程(Process32First/Process32Next)
    3. 打开进程句柄(OpenProcess)
    4. 分配内存并执行远程线程(VirtualAllocEx + CreateRemoteThread)

代码分析要点

// 典型注入代码结构
sub_1400010B0(".exe")          // 查找目标进程
OpenProcess(0x43A, 0, v0)      // 打开进程
VirtualAllocEx(v1, ...)        // 分配内存
WriteProcessMemory(v1, ...)    // 写入shellcode
CreateRemoteThread(v1, ...)    // 远程执行

2.2 Shellcode分析

特征识别

  • 起始指令:FC 48 83 E4 F0(CLD + 栈对齐)
  • PEB遍历模式:通过GS:[60h]获取PEB
  • 动态API解析:无导入表的自包含代码

网络连接分析

  • 查找硬编码IP和端口
  • 识别Winsock相关字符串(ws2_32)
  • 示例:49 BC 02 00 05 39 C0 A8 01 03
    • 02 00:AF_INET(IPv4)
    • 05 39:端口1337
    • C0 A8 01 03:IP 192.168.1.3

2.3 逆向工程技巧

字符串加密破解

  • 识别加密算法模式
  • 暴力破解哈希值
  • 示例(grinch_attack):通过哈希碰撞得到flag:Walm!

代码混淆对抗

  • 分块交换算法逆向
  • 多步骤组合操作的逆序执行
  • 示例(BabyReverse):
def swaper(s, k):
    a = list(s)
    n = len(a)
    i = 0
    while i < n - k:
        j = i + k - 1
        a[i], a[j] = a[j], a[i]
        i += k
    return "".join(a)

3. 密码学分析技术

3.1 HMAC盐恢复攻击

攻击场景

  • 已知明文前缀(如"grodno{")
  • 短盐长度(3字节)
  • 大量验证数据(MAC签名)

攻击步骤

  1. 通过已知明文恢复盐:salt[i] = cipher[i] XOR plain[i]
  2. 验证盐的正确性:使用HMAC验证所有数据对
  3. 解密完整信息:plain = cipher XOR (salt循环)

实战实现

def recover_salt(cipher, known_prefix):
    salt = bytes([cipher[i] ^ known_prefix[i] for i in range(len(known_prefix))])
    return salt

def verify_hmac(salt, messages, macs):
    for msg, mac in zip(messages, macs):
        computed = hmac_sha256(salt, msg)[:4]
        if computed != mac:
            return False
    return True

3.2 古典密码分析

ADFGX变种密码

  • 5×6 Polybius方阵(标准为5×5)
  • 字符映射到二元组(digrams)
  • 频率分析攻击要点:

破解步骤

  1. 统计二元组频率分布
  2. 映射到英语常见字符序列
  3. 使用爬山算法优化映射
  4. 基于n-gram频率评分函数

优化算法核心

def score_englishish(text):
    ngrams = ["_the_", "_and_", "_to_", "_of_", "_in_"]
    score = 0
    for gram in ngrams:
        score += text.count(gram) * 100
    return score

def hill_climb_decrypt(cipher, token_set):
    # 初始化字符映射
    # 迭代优化交换映射
    # 返回最佳解密结果

4. OSINT(开源情报收集)技术

4.1 图像地理位置识别

关键识别要素

  • 店铺名称和标识(如"SPICHKI bar")
  • 室内装饰风格特征
  • 特殊家具或展示架设计

搜索策略

  • 多语言关键词组合(俄语/英语)
  • 地图服务交叉验证
  • 社交媒体图片匹配

4.2 自然环境识别

森林识别要点

  • 植被类型和分布特征
  • 地形地貌特点
  • 知名保护区的独特特征
  • 使用谷歌识图等反向搜索工具

5. 综合解题方法论

5.1 系统化分析流程

  1. 信息收集:完整记录题目提供的所有材料
  2. 工具选择:根据文件类型选择合适分析工具
  3. 模式识别:寻找异常数据或隐藏模式
  4. 假设验证:提出解题假设并系统验证
  5. 结果确认:多角度验证flag的正确性

5.2 常见陷阱规避

  • 避免过度复杂化简单问题
  • 注意文件格式的底层表示
  • 考虑多种编码可能性(Base64、Hex等)
  • 验证中间结果的合理性

本教学文档基于New Year CTF 2026的实战writeup整理,提供了从基础到高级的CTF解题技术体系。

 全屏