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函数,用于绕过常规检测
- 典型行为模式:
- 枚举系统进程(CreateToolhelp32Snapshot)
- 查找目标进程(Process32First/Process32Next)
- 打开进程句柄(OpenProcess)
- 分配内存并执行远程线程(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签名)
攻击步骤:
- 通过已知明文恢复盐:
salt[i] = cipher[i] XOR plain[i] - 验证盐的正确性:使用HMAC验证所有数据对
- 解密完整信息:
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)
- 频率分析攻击要点:
破解步骤:
- 统计二元组频率分布
- 映射到英语常见字符序列
- 使用爬山算法优化映射
- 基于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 系统化分析流程
- 信息收集:完整记录题目提供的所有材料
- 工具选择:根据文件类型选择合适分析工具
- 模式识别:寻找异常数据或隐藏模式
- 假设验证:提出解题假设并系统验证
- 结果确认:多角度验证flag的正确性
5.2 常见陷阱规避
- 避免过度复杂化简单问题
- 注意文件格式的底层表示
- 考虑多种编码可能性(Base64、Hex等)
- 验证中间结果的合理性
本教学文档基于New Year CTF 2026的实战writeup整理,提供了从基础到高级的CTF解题技术体系。