第三届陇剑杯部分题解
字数 2101 2025-09-23 19:27:46

第三届陇剑杯CTF竞赛部分题目题解与教学

概述

本文对第三届陇剑杯CTF竞赛中的多个题目进行详细解析,涵盖AI对抗样本、密码学、逆向工程等多个领域的技术要点和解题思路。

题目解析

1. 和我的保险说去吧!(AI对抗样本)

题目考点

  • AI对抗样本生成
  • ResNet-18模型攻击
  • 图像分类器安全

解题思路

  1. 目标分析:需要创建64×64像素的PNG补丁,当随机贴在交通标志图像上时,能使ResNet-18模型将至少75%的图像错误分类为类别32("去除速度限制")

  2. 技术实现

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()
  1. 关键参数
    • 目标类别:32(去除速度限制)
    • 学习率:0.03
    • 训练轮次:6
    • 批大小:8
    • 图像归一化参数:特定均值和标准差

FLAG

flag{KQK22WPibibb8iMXTevUN9ILDqaRR79t}


2. Dragon(XXTEA加密)

题目考点

  • XXTEA加密算法
  • 逆向工程分析
  • 密钥生成机制

解题思路

  1. 逆向分析:使用IDA Pro分析二进制文件,发现XXTEA加密实现
  2. 密钥提取:从.rodata段提取密钥和密文数据
  3. 算法识别:通过汇编代码分析确认XXTEA算法特征
  4. 密钥生成:分析并复现密钥生成机制

FLAG

flag{cbee3251-9cff-4542-bf15-337bb8df7f3f}


3. HashBaseWorld(量子密码)

题目考点

  • 量子密码算法
  • Wagner算法应用

解题思路

  1. 原题参考:题目基于https://github.com/conduition/wagner
  2. 算法实现:使用Wagner算法解决量子密码问题
  3. 连接设置:通过SSL连接到远程服务器
remote("pwn-bbedf0f6d8.challenge.longjiancup.cn", 9999, ssl=True)

FLAG

flag{hgnm5fnPJ8ZVYnkvjMxtUqNvpCMWBMeX}


4. Prover(逆向与Z3约束求解)

题目考点

  • 二进制逆向分析
  • Z3约束求解器
  • 优化算法

解题思路

  1. 静态分析

    • 定位关键函数:字节处理、dword打包、哈希计算
    • 提取数据段常量:5字节和7字节的变换表
  2. 逻辑复原

    • 输入格式:22字节,格式为"flag{16个十六进制字符}"
    • 处理流程:
      • 每个字节经过线性变换、异或和循环移位
      • 处理后的字节填充为24字节并打包成6个32位整数(小端序)
      • 计算多种统计值:popcount求和、16位和、异或和等
      • 进行32位混合运算(旋转、加减、异或)和64位哈希(类似SplitMix64)
  3. 约束建模

    • 使用Z3的BitVec精确模拟每一步操作
    • 统一位宽处理
    • 添加输入格式约束(十六进制字符范围)
  4. 求解验证:多个校验点(哈希值、统计值等)共同保证正确性

关键点

  • 严格匹配位宽
  • 区分逻辑与/按位与
  • 识别哈希模式

FLAG

flag{7ac1d3e59f0b2468}


5. RSA.iso(RSA密码学)

题目考点

  • Sage数学计算
  • RSA算法漏洞利用
  • Isogeny技巧

解题思路

使用自动化工具分析RSA实现中的漏洞,利用Isogeny技巧恢复flag。

FLAG

flag{S1mple_Is0geNy_7r1ck_t0_Recov3r_Fla9}


6. EzHNP(格密码)

题目考点

  • 格密码理论
  • 隐藏数问题(HNP)

解题思路

  1. 原题参考:基于DownUnderCTF 2022的RSA区间预言机题目
  2. 模板应用:直接套用已知解题模板
  3. 格构造:构建适当的格来解决问题

FLAG

Flag{67f56be77ad87032f8a91070057184bf}


7. ez_rsa(RSA与数论)

题目考点

  • RSA算法深入
  • 数论论文应用

解题思路

  1. 论文参考:eprint.iacr.org/2015/399.pdf
  2. 比赛复现:参考D3CTF题目的复现方法
  3. 算法利用:应用特定的数论技巧破解RSA

FLAG

Flag{fed177cf9f68e191a1dc4608788aa0e}


8. qrandom(量子随机数)

题目考点

  • 量子随机数生成
  • 密码学安全

解题思路

  1. 密钥提取:获得Secret值
  2. flag构造:基于量子随机数特性生成flag

Secret

d6ab2cee1952cfce74f3bf22b1e460b974f767dd1bb3a4b90fb219047f214e8f

FLAG

flag{cat_alive_cat_dead_cat_flag_e7ce8d437b5f}


9. Lesscommon(对称加密)

题目考点

  • 对称加密算法
  • 加密模式分析

解题思路

分析并破解特定的对称加密算法实现。

FLAG

flag{8c1fe64f-1085-48bb-947e-7635abc40f4c}

总结

本次竞赛涵盖了多个安全领域的重要知识点:

  1. AI安全:对抗样本生成和模型攻击
  2. 密码学:包括传统加密(XXTEA、RSA)和现代密码学(格密码、量子密码)
  3. 逆向工程:二进制分析、算法复原和约束求解
  4. 数学应用:数论、代数和格理论在密码分析中的应用

每个题目都体现了CTF竞赛中典型的技术挑战和解题思路,为安全研究人员提供了宝贵的学习资料和实践经验。

第三届陇剑杯CTF竞赛部分题目题解与教学 概述 本文对第三届陇剑杯CTF竞赛中的多个题目进行详细解析,涵盖AI对抗样本、密码学、逆向工程等多个领域的技术要点和解题思路。 题目解析 1. 和我的保险说去吧!(AI对抗样本) 题目考点 AI对抗样本生成 ResNet-18模型攻击 图像分类器安全 解题思路 目标分析 :需要创建64×64像素的PNG补丁,当随机贴在交通标志图像上时,能使ResNet-18模型将至少75%的图像错误分类为类别32("去除速度限制") 技术实现 : 关键参数 : 目标类别: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连接到远程服务器 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竞赛中典型的技术挑战和解题思路,为安全研究人员提供了宝贵的学习资料和实践经验。