第三届陇剑杯部分题解
字数 2101 2025-09-23 19:27:46
第三届陇剑杯CTF竞赛部分题目题解与教学
概述
本文对第三届陇剑杯CTF竞赛中的多个题目进行详细解析,涵盖AI对抗样本、密码学、逆向工程等多个领域的技术要点和解题思路。
题目解析
1. 和我的保险说去吧!(AI对抗样本)
题目考点
- AI对抗样本生成
- ResNet-18模型攻击
- 图像分类器安全
解题思路
-
目标分析:需要创建64×64像素的PNG补丁,当随机贴在交通标志图像上时,能使ResNet-18模型将至少75%的图像错误分类为类别32("去除速度限制")
-
技术实现:
import torch
import torch.nn as nn
from torchvision import models, transforms, datasets
from torch.utils.data import DataLoader
from PIL import Image
def main():
device = 'cpu'
# 加载预训练的ResNet-18模型
model = models.resnet18(weights=None, num_classes=43)
model.load_state_dict(torch.load("./model.pth", map_location=device, weights_only=True))
model.to(device)
model.eval()
# 图像预处理
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
])
# 初始化随机补丁
patch = torch.rand(3, 64, 64, requires_grad=True, device=device)
optimizer = torch.optim.Adam([patch], lr=0.03)
criterion = nn.CrossEntropyLoss()
# 加载数据集
dataset = datasets.ImageFolder(root='./dataset', transform=transform)
loader = DataLoader(dataset, batch_size=8, shuffle=True)
num_epochs = 6
target_class = 32
normalize = transforms.Normalize(
mean=[0.3403, 0.3121, 0.3214],
std=[0.2724, 0.2608, 0.2669]
)
# 训练对抗补丁
for epoch in range(num_epochs):
total_loss = 0.0
success_count = 0
total_count = 0
for images, _ in loader:
images = images.to(device)
batch_size = images.size(0)
# 随机位置应用补丁
for i in range(batch_size):
h_start = torch.randint(0, images.shape[2] - patch.shape[1], (1,)).item()
w_start = torch.randint(0, images.shape[3] - patch.shape[2], (1,)).item()
h_end = h_start + patch.shape[1]
w_end = w_start + patch.shape[2]
images[i, :, h_start:h_end, w_start:w_end] = patch
images = normalize(images)
outputs = model(images)
targets = torch.full((batch_size,), target_class, dtype=torch.long, device=device)
loss = criterion(outputs, targets)
total_loss += loss.item()
preds = outputs.argmax(dim=1)
success_count += (preds == target_class).sum().item()
total_count += batch_size
optimizer.zero_grad()
loss.backward()
optimizer.step()
with torch.no_grad():
patch.clamp_(0, 1)
avg_loss = total_loss / len(loader)
success_rate = success_count / total_count
print(f"Epoch {epoch+1}/{num_epochs}, Loss: {avg_loss:.4f}, Success Rate: {success_rate:.2%}")
# 保存生成的对抗补丁
save_patch(patch, "adversarial_patch.png")
print("对抗补丁已保存为 adversarial_patch.png")
def save_patch(patch_tensor, filename):
patch_img = transforms.ToPILImage()(patch_tensor.cpu().detach())
patch_img.save(filename)
if __name__ == "__main__":
main()
- 关键参数:
- 目标类别:32(去除速度限制)
- 学习率:0.03
- 训练轮次:6
- 批大小:8
- 图像归一化参数:特定均值和标准差
FLAG
flag{KQK22WPibibb8iMXTevUN9ILDqaRR79t}
2. Dragon(XXTEA加密)
题目考点
- XXTEA加密算法
- 逆向工程分析
- 密钥生成机制
解题思路
- 逆向分析:使用IDA Pro分析二进制文件,发现XXTEA加密实现
- 密钥提取:从.rodata段提取密钥和密文数据
- 算法识别:通过汇编代码分析确认XXTEA算法特征
- 密钥生成:分析并复现密钥生成机制
FLAG
flag{cbee3251-9cff-4542-bf15-337bb8df7f3f}
3. HashBaseWorld(量子密码)
题目考点
- 量子密码算法
- Wagner算法应用
解题思路
- 原题参考:题目基于https://github.com/conduition/wagner
- 算法实现:使用Wagner算法解决量子密码问题
- 连接设置:通过SSL连接到远程服务器
remote("pwn-bbedf0f6d8.challenge.longjiancup.cn", 9999, ssl=True)
FLAG
flag{hgnm5fnPJ8ZVYnkvjMxtUqNvpCMWBMeX}
4. Prover(逆向与Z3约束求解)
题目考点
- 二进制逆向分析
- Z3约束求解器
- 优化算法
解题思路
-
静态分析:
- 定位关键函数:字节处理、dword打包、哈希计算
- 提取数据段常量:5字节和7字节的变换表
-
逻辑复原:
- 输入格式:22字节,格式为"flag{16个十六进制字符}"
- 处理流程:
- 每个字节经过线性变换、异或和循环移位
- 处理后的字节填充为24字节并打包成6个32位整数(小端序)
- 计算多种统计值:popcount求和、16位和、异或和等
- 进行32位混合运算(旋转、加减、异或)和64位哈希(类似SplitMix64)
-
约束建模:
- 使用Z3的BitVec精确模拟每一步操作
- 统一位宽处理
- 添加输入格式约束(十六进制字符范围)
-
求解验证:多个校验点(哈希值、统计值等)共同保证正确性
关键点
- 严格匹配位宽
- 区分逻辑与/按位与
- 识别哈希模式
FLAG
flag{7ac1d3e59f0b2468}
5. RSA.iso(RSA密码学)
题目考点
- Sage数学计算
- RSA算法漏洞利用
- Isogeny技巧
解题思路
使用自动化工具分析RSA实现中的漏洞,利用Isogeny技巧恢复flag。
FLAG
flag{S1mple_Is0geNy_7r1ck_t0_Recov3r_Fla9}
6. EzHNP(格密码)
题目考点
- 格密码理论
- 隐藏数问题(HNP)
解题思路
- 原题参考:基于DownUnderCTF 2022的RSA区间预言机题目
- 模板应用:直接套用已知解题模板
- 格构造:构建适当的格来解决问题
FLAG
Flag{67f56be77ad87032f8a91070057184bf}
7. ez_rsa(RSA与数论)
题目考点
- RSA算法深入
- 数论论文应用
解题思路
- 论文参考:eprint.iacr.org/2015/399.pdf
- 比赛复现:参考D3CTF题目的复现方法
- 算法利用:应用特定的数论技巧破解RSA
FLAG
Flag{fed177cf9f68e191a1dc4608788aa0e}
8. qrandom(量子随机数)
题目考点
- 量子随机数生成
- 密码学安全
解题思路
- 密钥提取:获得Secret值
- flag构造:基于量子随机数特性生成flag
Secret
d6ab2cee1952cfce74f3bf22b1e460b974f767dd1bb3a4b90fb219047f214e8f
FLAG
flag{cat_alive_cat_dead_cat_flag_e7ce8d437b5f}
9. Lesscommon(对称加密)
题目考点
- 对称加密算法
- 加密模式分析
解题思路
分析并破解特定的对称加密算法实现。
FLAG
flag{8c1fe64f-1085-48bb-947e-7635abc40f4c}
总结
本次竞赛涵盖了多个安全领域的重要知识点:
- AI安全:对抗样本生成和模型攻击
- 密码学:包括传统加密(XXTEA、RSA)和现代密码学(格密码、量子密码)
- 逆向工程:二进制分析、算法复原和约束求解
- 数学应用:数论、代数和格理论在密码分析中的应用
每个题目都体现了CTF竞赛中典型的技术挑战和解题思路,为安全研究人员提供了宝贵的学习资料和实践经验。